Test Scope
GlitterKill/sdl-mcp
Determine which test suites are affected by recent code changes and run only the relevant ones.
Write tests for Syncpack using the TestBuilder pattern. An agent skill from JamieMason/syncpack.
$ npx skills add JamieMason/syncpack --skill write-tests -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install JamieMason/syncpack write-tests --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/JamieMason/syncpack.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/write-tests .claude/skills/write-tests && 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 "write-tests" agent skill from https://github.com/JamieMason/syncpack/tree/main/.claude/skills/write-tests into .claude/skills/write-tests/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "write-tests", 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/JamieMason/syncpack/tree/main/.claude/skills/write-testsType 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 JamieMason/syncpack --skill write-tests -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install JamieMason/syncpack write-tests --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/JamieMason/syncpack.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/write-tests .agents/skills/write-tests && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "write-tests" agent skill from https://github.com/JamieMason/syncpack/tree/main/.claude/skills/write-tests into .agents/skills/write-tests/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "write-tests", 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 JamieMason/syncpack --skill write-tests -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install JamieMason/syncpack write-tests --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/JamieMason/syncpack.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/write-tests .cursor/skills/write-tests && 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 "write-tests" agent skill from https://github.com/JamieMason/syncpack/tree/main/.claude/skills/write-tests into .cursor/skills/write-tests/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "write-tests", 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/JamieMason/syncpack.git --path .claude/skills/write-tests--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 JamieMason/syncpack --skill write-tests -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install JamieMason/syncpack write-tests --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/JamieMason/syncpack.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/write-tests .gemini/skills/write-tests && 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 "write-tests" agent skill from https://github.com/JamieMason/syncpack/tree/main/.claude/skills/write-tests into .gemini/skills/write-tests/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "write-tests", 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 JamieMason/syncpack write-testsInstalls 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 JamieMason/syncpack --skill write-tests -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/JamieMason/syncpack.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/write-tests .github/skills/write-tests && 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 "write-tests" agent skill from https://github.com/JamieMason/syncpack/tree/main/.claude/skills/write-tests into .github/skills/write-tests/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "write-tests", 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 JamieMason/syncpack --skill write-tests -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install JamieMason/syncpack write-tests --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/JamieMason/syncpack.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/write-tests .opencode/skills/write-tests && 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 "write-tests" agent skill from https://github.com/JamieMason/syncpack/tree/main/.claude/skills/write-tests into .opencode/skills/write-tests/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "write-tests", 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.
write-testsWrite tests for Syncpack using the TestBuilder pattern. An agent skill from JamieMason/syncpack.
Write Tests is an agent skill from JamieMason/syncpack. Write tests for Syncpack using the TestBuilder pattern. Use when adding tests for commands, validation logic, or any new functionality. Covers TestBuilder API, assertion patterns, and common test scenarios.
Its SKILL.md is about 2.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file (for example `patterns.md`).
It sits in Testing & QA, covering Test generation. It works with npm. The repository describes itself as: Consistent dependency versions in large JavaScript Monorepos. The licence is MIT.
4 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 958d306. 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:
justcargoFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
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.
Write Tests loads about 2.3k tokens when it runs. Until then it costs about 55 tokens; SKILL.md has 358 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 JamieMason/syncpack at commit 958d306, republished under its MIT licence (© JamieMason). 358 words, ~2,287 tokens.
.claude/skills/write-tests/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.TestBuilder — never construct Context manually.expect(&ctx).to_have_instances(vec![...]) — never index ctx.instances.#[tokio::test] + .run().await is the canonical entry.*_test.rs and copy the patternjust test → confirm REDjust formatuse {
crate::{
instance::{FixableInstance::*, InstanceState, SuspectInstance::*, UnfixableInstance::*, ValidInstance::*},
test::{
builder::TestBuilder,
expect::{expect, ExpectedInstance},
},
},
serde_json::json,
};
#[tokio::test]
async fn pinned_version_replaces_anything_different() {
let ctx = TestBuilder::new()
.with_package(json!({
"name": "package-a",
"version": "1.0.0",
"devDependencies": {"foo": "workspace:*"}
}))
.with_version_group(json!({
"dependencies": ["foo"],
"pinVersion": "1.2.0"
}))
.run()
.await;
expect(&ctx).to_have_instances(vec![
ExpectedInstance {
state: InstanceState::valid(IsLocalAndValid),
dependency_name: "package-a",
id: "package-a in /version of package-a",
actual: "1.0.0",
expected: Some("1.0.0"),
overridden: None,
},
ExpectedInstance {
state: InstanceState::fixable(DiffersToPin),
dependency_name: "foo",
id: "foo in /devDependencies of package-a",
actual: "workspace:*",
expected: Some("1.2.0"),
overridden: None,
},
]);
}Group related scenarios under nested modules — see pinned_test.rs, catalog_defs_test.rs:
mod local {
use super::*;
#[tokio::test] async fn refuses_to_pin_local_version() { ... }
}
mod normal {
use super::*;
#[tokio::test] async fn an_already_pinned_version_is_valid() { ... }
}
mod registry_updates {
use super::*;
#[tokio::test] async fn def_marked_outdated_when_registry_has_newer_version() { ... }
}| Test type | Location |
|---|---|
| Version-group behaviour (pin, ban, ranges …) | src/version_group/<group>_test.rs |
| Catalog discovery wiring | src/version_group/{catalog,bun_catalog}_test.rs |
| Fix mutations | src/commands/fix_test.rs |
| Format pass | src/visit_formatting/format_test.rs |
| Other unit tests | Co-located: src/foo.rs ↔ src/foo_test.rs |
Source of truth: src/test/builder.rs.
| Method | Purpose |
|---|---|
.with_package(json!({...})) | Add one package.json |
.with_packages(vec![...]) | Add many |
.with_version_group(json!({...})) | Add one version group |
.with_version_groups(vec![...]) | Add many |
.with_semver_group(json!({...})) | Add a semver group |
.with_config(json!({...})) | Base config (e.g. customTypes, dependencyGroups) |
.with_strict(bool) | Strict mode (Suspect → error) |
.with_subcommand("update") | Override subcommand (default: lint, or update if registry set) |
.with_pnpm_catalogs(yaml) | Inject pnpm-workspace.yaml; implies pnpm PM |
.with_bun_catalogs(json!({...})) | Synthetic Bun root with /catalog, /catalogs/{n}; implies Bun PM |
.with_bun_workspaces_catalogs(json!({...})) | Same, nested under /workspaces/ |
.with_{pnpm,bun,npm,yarn,unknown}_package_manager() | Force PM detection |
.with_registry_updates(json!({"react":[...]})) | Mock npm registry; implies subcommand=update |
.with_update_target(UpdateTarget::Minor) | Bound update target |
.run().await → Context | Primary end-to-end (full pipeline through disk + discovery) |
.build() | Sync, no visit — context-wiring tests |
.build_and_visit_packages() | Sync + visit_packages — fix tests, older suites |
.build_and_visit_formatting() | Sync + visit_formatting |
.build_with_registry_and_visit().await | Sync wiring + async registry mock + visit |
ExpectedInstance {
state: InstanceState::fixable(DiffersToPin), // valid / fixable / unfixable / suspect
dependency_name: "react", // = `internal_name` (alias-aware)
id: "react in /dependencies of package-a", // {dep} in {/path} of {package_or_yaml}
actual: "17.0.0", // raw specifier on disk
expected: Some("18.0.0"), // None = ignore; Some("") = remove
overridden: None, // semver-group override target, if any
}id location examples:
/dependencies, /devDependencies, /peerDependencies/version of package-a (local version)/packageManager, /engines/node/catalog of pnpm-workspace.yaml, /catalogs/<name> of pnpm-workspace.yaml/customVersion, /custom/config/version (via customTypes)→ patterns.md: banned, pinned, sameRange, pnpm catalogs, bun catalogs, semver ranges, registry updates.
src/commands/fix_test.rs builds with .build_and_visit_packages() then runs fix::run(ctx, &SilentReporter, &disk). dry_run = true is the default (set by mock::config_from_mock), so is_dirty() and post-fix contents stay observable. Set ctx.config.cli.dry_run = false only when asserting writes through a recording MockDiskIo (see pnpm_fix_writes_yaml_to_disk).
| Wrong | Right |
|---|---|
#[test] fn foo() + .run().await | #[tokio::test] async fn foo() |
use crate::instance_state::* | use crate::instance::* |
"pinned": "1.0.0" | "pinVersion": "1.0.0" |
Context { ... } | TestBuilder::new()... |
ctx.instances[0] | expect(&ctx).to_have_instances(vec![...]) |
.build() then check states | .run().await (or .build_and_visit_packages() for sync) |
Missing SuspectInstance::* import | Import all 4: FixableInstance::*, ValidInstance::*, SuspectInstance::*, UnfixableInstance::* |
just test # all
cargo test pinned_test # pattern match
cargo test test_name -- --nocapture # with stdoutsrc/version_group/banned_test.rs — banned + custom typessrc/version_group/pinned_test.rs — sub-modules, semver-group interactionsrc/version_group/same_range_test.rs — range satisfactionsrc/version_group/catalog_test.rs — pnpm catalogssrc/version_group/bun_catalog_test.rs — bun catalogs (sync .build())src/version_group/preferred_semver_test.rs — registry updates, update targets© JamieMason, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file in .claude/skills/write-tests of JamieMason/syncpack.
Open the folder on GitHubat commit 958d306
Write Tests 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 |
|---|---|---|---|---|---|---|
| Write Tests this skillJamieMason/syncpack | 2.1k | — | ~2.3k | Automated safety check: Pass | MIT | |
| Test ScopeGlitterKill/sdl-mcp | 490 | — | ~586 | Automated safety check: Pass | Custom licence | |
| Pre Commitwellwelwel/poku | 1.2k | — | ~728 | Automated safety check: Pass | MIT | |
| Make Git Escrowinternet-court/internet-court-skill | 6.4k | 1 repos | ~922 | Automated safety check: Notes | MIT | |
| Write Testsryokun6/ryos | 1.3k | — | ~1.7k | Automated safety check: Pass | AGPL-3.0 | |
| Backend Test Writeraiskillstore/marketplace | 430 | 1 repos | ~1.1k | Automated safety check: Pass | None |
GlitterKill/sdl-mcp
Determine which test suites are affected by recent code changes and run only the relevant ones.
wellwelwel/poku
Run the mandatory pre-commit checks for the poku repository before staging a commit.
internet-court/internet-court-skill
Create a new git escrow bounty for a test suite. An agent skill from internet-court/internet-court-skill.
ryokun6/ryos
Write and run ryOS tests with Bun's native test runner (bun:test).
aiskillstore/marketplace
A skill your agent uses when generating tests for backend code (Express routes, MongoDB models, Node services) - analyzes file type, detects test framework from package.json, generates comprehensive…
coco-research/coco
A skill your agent uses when asked to generate tests for a file, module or component, to raise coverage, or to bootstrap a suite for untested code.
JamieMason/syncpack
Add and update the documentation website for Syncpack. An agent skill from JamieMason/syncpack.
JamieMason/syncpack
Debug and fix bugs in Syncpack using scientific debugging methodology.
JamieMason/syncpack
Put the answer first, then context and details follow. An agent skill from JamieMason/syncpack.
JamieMason/syncpack
Search for code patterns in Syncpack. An agent skill from JamieMason/syncpack.
JamieMason/syncpack
Maximize useful information per word by removing filler, obvious explanations, and hedging language.
JamieMason/syncpack
Run coverage, inspect results, and identify missing test scenarios for a given source file.
Works with
Categories
Write tests for Syncpack using the TestBuilder pattern. An agent skill from JamieMason/syncpack. Write Tests is an agent skill from JamieMason/syncpack. Write tests for Syncpack using the TestBuilder pattern.
Write Tests fits situations like: adding tests for commands; validation logic; any new functionality.
Run `npx skills add JamieMason/syncpack --skill write-tests -a claude-code`. Or copy the skill folder (.claude/skills/write-tests in JamieMason/syncpack) into .claude/skills/write-tests in your project. Claude Code loads it when a task matches its description.
Run `npx skills add JamieMason/syncpack --skill write-tests -a codex`. Or copy the skill folder (.claude/skills/write-tests in JamieMason/syncpack) into .agents/skills/write-tests 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 JamieMason/syncpack --skill write-tests -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/write-tests, .gemini/skills/write-tests, .github/skills/write-tests and .opencode/skills/write-tests in your project.
Going by SKILL.md and its folder, Write Tests needs the command-line tools its instructions call (just and cargo).
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.
Write Tests is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.3k tokens (SKILL.md is roughly 9.1k 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 Write Tests: Test Scope (GlitterKill/sdl-mcp, 490 stars), Pre Commit (wellwelwel/poku, 1.2k stars), Make Git Escrow (internet-court/internet-court-skill, 6.4k stars) and Write Tests (ryokun6/ryos, 1.3k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
JamieMason (a GitHub user) maintains it in JamieMason/syncpack, which has 2,099 GitHub stars. The repository holds 11 skills in this directory. The repository was last updated on September 26, 2026.
Source: JamieMason/syncpack on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.