Growing Outside In Systems
lexler/skill-factory
Drive feature development using Outside-In TDD with Hexagonal Architecture.
Creates a Java SDK end-to-end test for the Copilot SDK that runs against a recorded YAML snapshot through a replay proxy, so CI needs no real authentication.
$ npx skills add github/copilot-sdk --skill sdk-java-e2e-test -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install github/copilot-sdk sdk-java-e2e-test --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/github/copilot-sdk.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.github/skills/sdk-java-e2e-test .claude/skills/sdk-java-e2e-test && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "sdk-java-e2e-test" agent skill from https://github.com/github/copilot-sdk/tree/main/.github/skills/sdk-java-e2e-test into .claude/skills/sdk-java-e2e-test/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sdk-java-e2e-test", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/github/copilot-sdk/tree/main/.github/skills/sdk-java-e2e-testType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add github/copilot-sdk --skill sdk-java-e2e-test -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install github/copilot-sdk sdk-java-e2e-test --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/github/copilot-sdk.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.github/skills/sdk-java-e2e-test .agents/skills/sdk-java-e2e-test && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "sdk-java-e2e-test" agent skill from https://github.com/github/copilot-sdk/tree/main/.github/skills/sdk-java-e2e-test into .agents/skills/sdk-java-e2e-test/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sdk-java-e2e-test", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add github/copilot-sdk --skill sdk-java-e2e-test -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install github/copilot-sdk sdk-java-e2e-test --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/github/copilot-sdk.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.github/skills/sdk-java-e2e-test .cursor/skills/sdk-java-e2e-test && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "sdk-java-e2e-test" agent skill from https://github.com/github/copilot-sdk/tree/main/.github/skills/sdk-java-e2e-test into .cursor/skills/sdk-java-e2e-test/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sdk-java-e2e-test", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/github/copilot-sdk.git --path .github/skills/sdk-java-e2e-test--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add github/copilot-sdk --skill sdk-java-e2e-test -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install github/copilot-sdk sdk-java-e2e-test --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/github/copilot-sdk.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.github/skills/sdk-java-e2e-test .gemini/skills/sdk-java-e2e-test && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "sdk-java-e2e-test" agent skill from https://github.com/github/copilot-sdk/tree/main/.github/skills/sdk-java-e2e-test into .gemini/skills/sdk-java-e2e-test/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sdk-java-e2e-test", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install github/copilot-sdk sdk-java-e2e-testInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add github/copilot-sdk --skill sdk-java-e2e-test -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/github/copilot-sdk.git skills-src && mkdir -p .github/skills && cp -r skills-src/.github/skills/sdk-java-e2e-test .github/skills/sdk-java-e2e-test && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "sdk-java-e2e-test" agent skill from https://github.com/github/copilot-sdk/tree/main/.github/skills/sdk-java-e2e-test into .github/skills/sdk-java-e2e-test/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sdk-java-e2e-test", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add github/copilot-sdk --skill sdk-java-e2e-test -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install github/copilot-sdk sdk-java-e2e-test --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/github/copilot-sdk.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.github/skills/sdk-java-e2e-test .opencode/skills/sdk-java-e2e-test && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "sdk-java-e2e-test" agent skill from https://github.com/github/copilot-sdk/tree/main/.github/skills/sdk-java-e2e-test into .opencode/skills/sdk-java-e2e-test/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "sdk-java-e2e-test", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
sdk-java-e2e-testCreates a Java SDK end-to-end test for the Copilot SDK that runs against a recorded YAML snapshot through a replay proxy, so CI needs no real authentication.
Java SDK surface-area tests for the Copilot SDK run against a replay proxy that intercepts HTTP calls to the Copilot API and returns pre-recorded responses from YAML snapshot files. Because the Java proxy start always sets GITHUB_ACTIONS, the proxy runs read-only, so a Java test cannot record a snapshot and every request must match an existing one. Shared runtime behavior that is reachable through the SDK belongs in the TypeScript suite instead.
The workflow begins by choosing a snapshot category, a folder under test/snapshots, and a base name in lowercase snake_case that is passed verbatim to configureForTest, which does not split camelCase. Snapshots must be recorded, not hand-written, so the agent reuses a capture from another SDK suite or records one through the TypeScript suite with the same name and prompt.
Replay rules shape the test: system messages are replaced before matching, so assertions on replies cannot prove a system-message setting reached the model, user content must match the snapshot exactly after normalization, and the test's temp working directory is represented by a token in tool arguments and results. Paths are relative to the SDK root, src/sdk when it exists.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 2023ed2. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
pnpmFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use pnpm, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Java SDK E2E Test with Replay Snapshot loads about 1.8k tokens when it runs. Until then it costs about 33 tokens; SKILL.md has 603 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from github/copilot-sdk at commit 2023ed2, republished under its MIT licence (© github). 603 words, ~1,807 tokens.
.claude/skills/sdk-java-e2e-test/SKILL.md (or your agent's skills folder).These instructions work in both the runtime monorepo and the standalone public
SDK repository. From the repository root, use src/sdk as the SDK root when
that directory exists; otherwise use the repository root itself. All paths below
are relative to that SDK root.
Use this skill only when the new E2E tests Java SDK surface area; shared
runtime functionality available entirely through the SDK belongs in the
TypeScript SDK suite (nodejs/test/e2e/).
The Java E2E tests use a replay proxy (test/harness/replayingCapiProxy.ts)
that intercepts HTTP calls to the Copilot API and returns pre-recorded responses
from YAML snapshot files. This avoids needing real authentication in CI.
Key constraint: Java's CapiProxy.start() always sets GITHUB_ACTIONS=true,
which forces the replay proxy into read-only mode: a Java test cannot record a
snapshot, and every request must match an existing one.
test/snapshots/ (e.g., system_message_sections)should_use_replaced_identity_section_in_response. Pass it verbatim to
configureForTest: it lowercases and replaces non-alphanumerics with _ but
does not split camelCase, so myTestMethod would look for mytestmethod.yaml.test/snapshots/<category>/<snapshot_base_name>.yamlThe SDK guide forbids hand-authored model responses (CONTRIBUTING.md,
"Recording and replaying SDK tests"). Reuse a capture that another SDK suite
recorded for the same conversation, as most Java ITs do; if none exists, record
one through the TypeScript SDK suite with the same snapshot name and prompt,
following that guide.
Replay rules:
${system} before matching,
so system content is never compared, and an assertion on the reply cannot
prove that a system-message setting reached the model.${workdir} stands for the test's temp workDir in tool arguments and results.[CapiProxy stderr], reports "No cached response found" with the first
mismatching message per conversation, and configureForTest logs the prompts
the snapshot expects.Place it in java/sdk/src/test/java/com/github/copilot/ with an IT suffix
(e.g., MyFeatureIT.java). The failsafe plugin picks up *IT.java files.
Template:
package com.github.copilot;
import static org.junit.jupiter.api.Assertions.*;
import java.util.concurrent.TimeUnit;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import com.github.copilot.generated.AssistantMessageEvent;
import com.github.copilot.rpc.MessageOptions;
import com.github.copilot.rpc.PermissionHandler;
import com.github.copilot.rpc.SessionConfig;
// ... other imports as needed
class MyFeatureIT {
private static E2ETestContext ctx;
@BeforeAll
static void setUp() throws Exception {
ctx = E2ETestContext.create();
}
@AfterAll
static void tearDown() throws Exception {
if (ctx != null) {
ctx.close();
}
}
@Test
void myTestMethod() throws Exception {
// 1. Configure the proxy to use your snapshot
ctx.configureForTest("my_category", "my_test_method");
// 2. Create a client (uses fake token + proxy automatically)
try (CopilotClient client = ctx.createClient()) {
// 3. Create a session with desired config
CopilotSession session = client.createSession(new SessionConfig()
.setOnPermissionRequest(PermissionHandler.APPROVE_ALL))
.get(30, TimeUnit.SECONDS);
try {
// 4. Send the prompt (must match YAML exactly)
AssistantMessageEvent response = session
.sendAndWait(new MessageOptions().setPrompt("Your prompt here"), 60_000)
.get(90, TimeUnit.SECONDS);
// 5. Assert on the response
assertNotNull(response);
String content = response.getData().content();
assertTrue(content.contains("expected text"));
} finally {
session.close();
}
}
}
}In the runtime repository, prepare the checked-out Java projection and CLI from the runtime root:
pnpm run generate:sdk:java
pnpm run build:clipnpm run test:sdk:java runs the whole suite and takes no test filter. For a
focused Maven run, pass the same-checkout wrapper explicitly (without
copilot.cli.path the tests use the release pinned by nodejs/package.json),
then use the verify lifecycle so test-resource setup and failsafe:verify
both run:
cd src/sdk/java
./mvnw -pl sdk spotless:apply
COPILOT_CLI_PATH=<runtime-root>/dist-cli/prebuilds/<target>/copilot-runtime
./mvnw -pl sdk verify -Dit.test="MyFeatureIT#myTestMethod" -Dcopilot.cli.path="$COPILOT_CLI_PATH"<target> is Node's <process.platform>-<process.arch> (for example
linux-x64, darwin-arm64, win32-x64); use copilot-runtime.exe for the
wrapper name on Windows.
In the standalone SDK repository, start at java/ and use the pinned runtime:
./mvnw -pl sdk spotless:apply
./mvnw -pl sdk verify -Dit.test="MyFeatureIT#myTestMethod"| What | Where |
|---|---|
| Test context (manages proxy, workDir, CLI) | java/sdk/src/test/java/com/github/copilot/E2ETestContext.java |
| Java proxy wrapper | java/sdk/src/test/java/com/github/copilot/CapiProxy.java |
| Replay proxy (TypeScript) | test/harness/replayingCapiProxy.ts |
| Proxy server entry point | test/harness/server.ts |
| Snapshot files | test/snapshots/<category>/<name>.yaml |
| Existing IT tests for reference | java/sdk/src/test/java/com/github/copilot/**/*IT.java; SystemMessageSectionsIT reuses Node.js suite captures, including a view tool call |
When the snapshot has the model call a built-in tool such as view, the CLI
really executes it in the test's workDir, and the next request carries its
result, which must match the snapshot's. Create any file the tool reads before
sending the prompt, with exactly the content the snapshot's tool result shows:
Files.writeString(ctx.getWorkDir().resolve("test.txt"), "Hello transform!");© github, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .github/skills/sdk-java-e2e-test of github/copilot-sdk.
Open the folder on GitHubat commit 2023ed2
Java SDK E2E Test with Replay Snapshot next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Java SDK E2E Test with Replay Snapshot this skillgithub/copilot-sdk | 11k | — | ~1.8k | Automated safety check: Pass | MIT | |
| Growing Outside In Systemslexler/skill-factory | 239 | 1 repos | ~1.9k | Automated safety check: Pass | Apache-2.0 | |
| Testing Strategiesancoleman/ai-design-components | 526 | — | ~3.8k | Automated safety check: Pass | MIT | |
| Airbyte Postgres Source E2E Testsairbytehq/airbyte | 22k | — | ~2.5k | Automated safety check: Pass | Custom licence | |
| Interactive CLI Testing With tui-testslopus/happy | 24k | — | ~603 | Automated safety check: Pass | MIT | |
| ClickUp CLI Testingkrodak/clickup-cli | 120 | — | ~1.4k | Automated safety check: Notes | MIT |
lexler/skill-factory
Drive feature development using Outside-In TDD with Hexagonal Architecture.
ancoleman/ai-design-components
Strategic guidance for choosing and implementing testing approaches across the test pyramid.
airbytehq/airbyte
Starts a local PostgreSQL 16 container, loads SQL fixtures and runs the Airbyte spec, check, discover and read commands against a chosen source-postgres image.
slopus/happy
Tests interactive CLI and TUI programs with Microsoft's tui-test, driving prompts, arrow keys and screen output in a real pseudo-terminal.
krodak/clickup-cli
Explains how to run and extend the clickup-cli tests: unit tests with a mocked client, e2e tests against a real ClickUp workspace, and the fixture data they rely on.
irahardianto/awesome-agv
Mobile E2E testing patterns — Flutter integrationtest, Patrol, Maestro, golden testing, device matrix, and test data management.
Works with
Categories
Creates a Java SDK end-to-end test for the Copilot SDK that runs against a recorded YAML snapshot through a replay proxy, so CI needs no real authentication. Java SDK surface-area tests for the Copilot SDK run against a replay proxy that intercepts HTTP calls to the Copilot API and returns pre-recorded responses from YAML snapshot files. Because the Java proxy start always sets GITHUB_ACTIONS, the proxy runs read-only, so a Java test cannot record a snapshot and every request must match an existing one.
Java SDK E2E Test with Replay Snapshot fits situations like: adding an end-to-end test for the Java SDK's public surface; choosing a snapshot category and name for a new replay test; reusing a recorded snapshot from another SDK suite.
Run `npx skills add github/copilot-sdk --skill sdk-java-e2e-test -a claude-code`. Or copy the skill folder (.github/skills/sdk-java-e2e-test in github/copilot-sdk) into .claude/skills/sdk-java-e2e-test in your project. Claude Code loads it when a task matches its description.
Run `npx skills add github/copilot-sdk --skill sdk-java-e2e-test -a codex`. Or copy the skill folder (.github/skills/sdk-java-e2e-test in github/copilot-sdk) into .agents/skills/sdk-java-e2e-test in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add github/copilot-sdk --skill sdk-java-e2e-test -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/sdk-java-e2e-test, .gemini/skills/sdk-java-e2e-test, .github/skills/sdk-java-e2e-test and .opencode/skills/sdk-java-e2e-test in your project.
Going by SKILL.md and its folder, Java SDK E2E Test with Replay Snapshot needs the command-line tools its instructions call (pnpm). Our summary lists: A checkout of the Copilot SDK repository; A recorded YAML snapshot, or the TypeScript SDK suite to record one.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Java SDK E2E Test with Replay Snapshot is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.8k tokens (SKILL.md is roughly 7.2k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Java SDK E2E Test with Replay Snapshot: Growing Outside In Systems (lexler/skill-factory, 239 stars), Testing Strategies (ancoleman/ai-design-components, 526 stars), Airbyte Postgres Source E2E Tests (airbytehq/airbyte, 22k stars) and Interactive CLI Testing With tui-test (slopus/happy, 24k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
github (a GitHub organization, an official publisher) maintains it in github/copilot-sdk, which has 10,545 GitHub stars. The repository was last updated on October 7, 2026.
Source: github/copilot-sdk on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.