Requirements
rizsotto/Bear
Write, modify, or review a requirement file under docs/requirements -- pick the single owning file, keep the text contract-only, name IDs so they need no explanation, and verify cross-references and…
A skill your agent uses to decide which refinement and hardening tools are worth running on a set of changes — refine, crap-analyzer, arch-check, introversion scan, mutation testing, TLA+ model…
$ npx skills add swingerman/engineer --skill refinement-advisor -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install swingerman/engineer refinement-advisor --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/swingerman/engineer.git skills-src && mkdir -p .claude/skills && cp -r skills-src/engineer/skills/refinement-advisor .claude/skills/refinement-advisor && 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 "refinement-advisor" agent skill from https://github.com/swingerman/engineer/tree/master/engineer/skills/refinement-advisor into .claude/skills/refinement-advisor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "refinement-advisor", 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/swingerman/engineer/tree/master/engineer/skills/refinement-advisorType 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 swingerman/engineer --skill refinement-advisor -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install swingerman/engineer refinement-advisor --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/swingerman/engineer.git skills-src && mkdir -p .agents/skills && cp -r skills-src/engineer/skills/refinement-advisor .agents/skills/refinement-advisor && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "refinement-advisor" agent skill from https://github.com/swingerman/engineer/tree/master/engineer/skills/refinement-advisor into .agents/skills/refinement-advisor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "refinement-advisor", 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 swingerman/engineer --skill refinement-advisor -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install swingerman/engineer refinement-advisor --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/swingerman/engineer.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/engineer/skills/refinement-advisor .cursor/skills/refinement-advisor && 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 "refinement-advisor" agent skill from https://github.com/swingerman/engineer/tree/master/engineer/skills/refinement-advisor into .cursor/skills/refinement-advisor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "refinement-advisor", 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/swingerman/engineer.git --path engineer/skills/refinement-advisor--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 swingerman/engineer --skill refinement-advisor -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install swingerman/engineer refinement-advisor --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/swingerman/engineer.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/engineer/skills/refinement-advisor .gemini/skills/refinement-advisor && 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 "refinement-advisor" agent skill from https://github.com/swingerman/engineer/tree/master/engineer/skills/refinement-advisor into .gemini/skills/refinement-advisor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "refinement-advisor", 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 swingerman/engineer refinement-advisorInstalls 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 swingerman/engineer --skill refinement-advisor -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/swingerman/engineer.git skills-src && mkdir -p .github/skills && cp -r skills-src/engineer/skills/refinement-advisor .github/skills/refinement-advisor && 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 "refinement-advisor" agent skill from https://github.com/swingerman/engineer/tree/master/engineer/skills/refinement-advisor into .github/skills/refinement-advisor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "refinement-advisor", 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 swingerman/engineer --skill refinement-advisor -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install swingerman/engineer refinement-advisor --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/swingerman/engineer.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/engineer/skills/refinement-advisor .opencode/skills/refinement-advisor && 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 "refinement-advisor" agent skill from https://github.com/swingerman/engineer/tree/master/engineer/skills/refinement-advisor into .opencode/skills/refinement-advisor/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "refinement-advisor", 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.
refinement-advisorA skill your agent uses to decide which refinement and hardening tools are worth running on a set of changes — refine, crap-analyzer, arch-check, introversion scan, mutation testing, TLA+ model…
Refinement Advisor is an agent skill from swingerman/engineer. Use to decide which refinement and hardening tools are worth running on a set of changes — refine, crap-analyzer, arch-check, introversion scan, mutation testing, TLA+ model checking, Lean proofs — and on which files, with the invariant to check. Triggers — "/engineer.refinement-advisor", "what should we harden", "which checks fit this diff", "is this worth TLA+ / Lean", "should we model-check this", "how do I harden this change". Called by /engineer.harden at CP8; also usable ad hoc on any diff, in or out of the…
Its SKILL.md is about 2.7k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Testing & QA, covering Test coverage. The repository describes itself as: Disciplined Agentic Engineering — a methodology kit for Claude Code: acceptance-test-first specs, explicit checkpoints, and autonomy you can actually leave running. The engineer… The licence is MIT.
Read from SKILL.md and the folder at commit 32947eb. 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.
No scripts in the folder and no shell commands in SKILL.md.
From 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.
Refinement Advisor loads about 2.7k tokens when it runs. Until then it costs about 137 tokens; SKILL.md has 1,351 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 swingerman/engineer at commit 32947eb, republished under its MIT licence (© swingerman). 1,351 words, ~2,683 tokens.
.claude/skills/refinement-advisor/SKILL.md (or your agent's skills folder).Reads a diff and recommends which of the DAE refinement/hardening tools to run, where, and why. It advises; it does not run the tools. The expensive ones (TLA+, Lean) cost real minutes each, and running every tool on every diff buries the one finding that matters under noise from checks that never fit the code.
The advice is only as good as its reading of the code: read the changed functions, not just filenames or the diff stat.
/engineer.harden (CP8) to pick that checkpoint's tools.Not for: running the tools (harden, or the tools' own skills), or reviewing
code quality itself (refine).
refine, verify, harden, or any (default). Limits
the recommendations to that stage's tools.crap_results block (arch-check records crap-analyzer's output there). CRAP
scores tell you where complex, poorly tested code is. Use them; don't redo
that analysis.| Tool | Stage | Answers | Cost |
|---|---|---|---|
/engineer.refine | CP6 | Is the changed code clean: reuse, clarity, efficiency? | medium |
crap-analyzer | CP7 | Where does high complexity meet low test coverage? | low |
/engineer.arch-check | CP7 | Does it respect the charter's layering and naming? | low |
introversion scan (dae_introvert.py) | CP8 | Can a test pass without asserting anything? | low |
atdd:atdd-mutate | CP8 | Do the tests fail when the code is wrong? | medium |
/engineer.tlaplus | CP8 | Can some interleaving or sequence of events break an invariant? | high |
/engineer.lean | CP8 | Does an invariant hold for every input, including unbounded ones? | high |
Every tool in scope gets a verdict, recommend or skip, with a reason.
Nothing runs by default. A cheap tool that can't find anything in this diff is
still noise, and an expensive one that fits is worth its cost. Judge each one
against the signals below.
/engineer.refine: recommend when CP6 hasn't run on the current diff, or
code changed since it did. Skip when refine's handoff already covers these
commits.
crap-analyzer / arch-check: recommend when CP7 hasn't run on the
current diff. Skip when a CP7 handoff covers these commits, and reuse its
numbers instead.
Introversion scan: recommend when test files were added or changed. Skip when no tests changed (there is nothing new to scan).
Mutation (atdd:atdd-mutate): recommend when the change adds or alters
branching logic (conditions, loops, error paths, boundaries) and tests
exercise it. That's where a weak assertion hides. Skip when:
tlaplus: recommend when the changed code has temporal or concurrent shape:
Races don't raise complexity metrics, so a low CRAP score says nothing here. Recommend TLA+ based on the shape of the code, not on the risk score.
lean: recommend when there is a claim of the form "for all inputs X, P
holds", about pure logic:
Choose between TLA+ and Lean by the question: if you are asking "what if these happen in a different order", use TLA+. If you are asking "what if the input is weird", use Lean. If both apply, recommend both, each scoped to its own function. Skip both for CRUD, glue, configuration, rendering, or straight-line code with no invariant worth stating, or when a small table-driven test already covers the whole input space.
For every TLA+/Lean recommendation, draft the invariant in one plain sentence ("attempt count never exceeds MAX_RETRIES and every path exits"). Both formal skills say the invariant is the one thing that can't be inferred from the code: it states what must never happen. The advisor's draft is a starting point for the human to correct. If you can't state an invariant, don't recommend the tool.
refinement-advisor — <scope> (<N> files changed, stage: <stage>)
| Tool | Verdict | Target | Why | Invariant / focus |
|---|---|---|---|---|
| tlaplus | recommend | ResidentialProxyHttpClient::get() | bounded retry loop, 4 exit paths | attempt ≤ 3; every path returns or throws |
| atdd:atdd-mutate | recommend | ResidentialProxyHttpClient.php | new retry/error branches, covered by 4 tests | — |
| lean | recommend | ResidentialProxyHttpClient::getMaskedProxyUrl() | regex masker, unbounded input shapes | output never contains the password substring |
| introversion scan | recommend | tests/Unit/Http/* | 2 new test files | — |
| crap-analyzer | skip | — | CP7 already ran on these commits (max CRAP 6) | — |
| refine | skip | — | CP6 handoff covers these commits | — |Sort the recommend rows by value (the findings you expect relative to their
cost), highest first. Every skip row gives its reason. End with a one-line
bottom line, e.g. "TLA+ on the retry loop is the highest-value check; mutation
is next."
Autonomy controls who makes the call, never which checks are sound. Use
the effective autonomy from ${CLAUDE_PLUGIN_ROOT}/references/handoff-dispatch.md:
the feature's autonomy_level, capped by any manifest.autonomy.path_overrides
that match the changed files. For a fix record, which has no autonomy_level,
start from manifest.autonomy.default_level and apply the same path caps. A
critical or blocks_user: true fix always counts as low.
| Effective autonomy | Advisor behaviour |
|---|---|
high | Decides alone. Every recommend row is selected and every drafted invariant is final. Show the table, then one line naming what will run and why ("Running TLA+ on get() and mutation on 1 file; skipped 4, reasons above"). Don't ask anything. |
medium, low | Asks. Offers the recommendations as choices (below). Nothing runs that the human didn't pick. |
manifest.harden.required: true removes deselection, not the human. The
recommended rows are mandatory, so Q1 isn't asked; list them as settled. Below
high the human still confirms each invariant (Q2) and may add skipped checks
(Q3).
high)A table the human then has to answer in prose is a dead end. Offer the recommendations as selectable choices, so acting on the advice takes one click. If nothing is recommended and nothing was skipped, say so and don't ask anything.
Use AskUserQuestion:
Q1 "Which checks should I run?" (multiSelect: true). Skip Q1 when
harden.required: true. Make one option per recommend row, in value order,
and mark the first (Recommended).
<tool> → <target> (e.g. TLA+ → get() retry loop,
Mutation → ResidentialProxyHttpClient.php).Introversion + arch-check) so every expensive check keeps
its own row.Q2 (per recommended TLA+/Lean row) "Is this the right invariant for
<target>?" Offer:
Use as drafted (Recommended)Narrower: <a weaker variant>Stronger: <a stricter variant>The built-in "Other" lets the human type their own.
Q3 (only when harden.required: true and something was skipped) "Add any
of the skipped checks?" (multiSelect: true). Make one option per skip
row, labelled with its skip reason.
Keep to the tool's 4-question limit. If more questions are needed, prioritise Q2 for the most expensive formal rows.
The output is the selected tools, each with its target and, for TLA+/Lean, the final invariant.
No interactive human (subagent, headless): at high, decide as above.
Below high, print the same choices as a numbered list with a copy-pasteable
reply line (reply: "1,3" or "all") and stop.
When called by harden, also return the table as YAML (advisor_picks:) so
harden can record it in harden_results.advisor.
Off-pipeline: checkpoint: null. When run standalone on a feature, emit a
short handoff per ${CLAUDE_PLUGIN_ROOT}/references/handoff-summary.md with
recommended_next set to the highest-value pick. When called from harden,
return the picks inline and write no handoff.
/engineer.harden: the CP8 consumer${CLAUDE_PLUGIN_ROOT}/references/gauntlet.md: the other quality bar (visual/qualitative); not in this toolbox/engineer.tlaplus, /engineer.lean: the formal-verification skills; each has a "Verifying real code" workflow© swingerman, 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 engineer/skills/refinement-advisor of swingerman/engineer.
Open the folder on GitHubat commit 32947eb
Refinement Advisor 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 |
|---|---|---|---|---|---|---|
| Refinement Advisor this skillswingerman/engineer | 154 | — | ~2.7k | Automated safety check: Pass | MIT | |
| Requirementsrizsotto/Bear | 6.5k | — | ~2k | Automated safety check: Pass | GPL-3.0 | |
| Crap Analysisardalis/RiverBooks | 134 | 2 repos | ~3.4k | Automated safety check: Pass | None | |
| Code Coverages3s-project/s3s | 311 | — | ~789 | Automated safety check: Pass | Apache-2.0 | |
| Project Statusbactopia/bactopia | 522 | — | ~787 | Automated safety check: Pass | MIT | |
| Check Coverageldayton/Dippy | 243 | — | ~403 | Automated safety check: Pass | MIT |
rizsotto/Bear
Write, modify, or review a requirement file under docs/requirements -- pick the single owning file, keep the text contract-only, name IDs so they need no explanation, and verify cross-references and…
ardalis/RiverBooks
Analyze code coverage and CRAP (Change Risk Anti-Patterns) scores to identify high-risk code.
s3s-project/s3s
Measure and grow the line coverage of the s3s crate. An agent skill from s3s-project/s3s.
bactopia/bactopia
Show a live snapshot of the Bactopia project state — component counts, GroovyDoc coverage, nf-test coverage, and structural issues.
ldayton/Dippy
Ensure comprehensive test coverage for a CLI handler. An agent skill from ldayton/Dippy.
kajisho5/ffmpeg-skill
Add and review preconditions on operations that delete, overwrite, rewrite history, or resolve a caller-supplied name to a filesystem path — refusing instead of warning, placing the guard ahead of…
swingerman/engineer
A skill your agent uses to produce a risk-based refactor + test plan for recently-changed code on a diff/branch/PR by computing CRAP (complexity × untested) on changed methods.
swingerman/engineer
A skill your agent uses to add a third validation layer to the ATDD workflow — after acceptance tests verify WHAT and unit tests verify HOW, mutation testing verifies the tests actually catch bugs.
swingerman/engineer
A skill your agent uses to drive a bug fix from first report through close, with a "why didn't we catch it?" loop at the end.
swingerman/engineer
A skill your agent uses to drive feature work through the Acceptance Test Driven Development workflow — Given/When/Then specs before code, a project-specific test pipeline, and two parallel test…
swingerman/engineer
Use after a feature passes Light Verify (CP7), to prove the tests actually catch bugs and, where the code warrants it, to formally check its invariants — Checkpoint 8.
swingerman/engineer
Use at the start of a work session, or any time the question is "what should I pick up now" across the whole project.
Categories
A skill your agent uses to decide which refinement and hardening tools are worth running on a set of changes — refine, crap-analyzer, arch-check, introversion scan, mutation testing, TLA+ model…. Refinement Advisor is an agent skill from swingerman/engineer. Use to decide which refinement and hardening tools are worth running on a set of changes — refine, crap-analyzer, arch-check, introversion scan, mutation testing, TLA+ model checking, Lean proofs — and on which files, with the invariant to check.
Refinement Advisor fits situations like: decide which refinement and hardening tools are worth running on a set of changes — refine; introversion scan; mutation testing; TLA+ model checking.
Run `npx skills add swingerman/engineer --skill refinement-advisor -a claude-code`. Or copy the skill folder (engineer/skills/refinement-advisor in swingerman/engineer) into .claude/skills/refinement-advisor in your project. Claude Code loads it when a task matches its description.
Run `npx skills add swingerman/engineer --skill refinement-advisor -a codex`. Or copy the skill folder (engineer/skills/refinement-advisor in swingerman/engineer) into .agents/skills/refinement-advisor 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 swingerman/engineer --skill refinement-advisor -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/refinement-advisor, .gemini/skills/refinement-advisor, .github/skills/refinement-advisor and .opencode/skills/refinement-advisor in your project.
SKILL.md names no scripts, command-line tools or credentials: Refinement Advisor is instructions for the agent only.
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.
Refinement Advisor 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.7k tokens (SKILL.md is roughly 11k 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 Refinement Advisor: Requirements (rizsotto/Bear, 6.5k stars), Crap Analysis (ardalis/RiverBooks, 134 stars), Code Coverage (s3s-project/s3s, 311 stars) and Project Status (bactopia/bactopia, 522 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
swingerman (a GitHub user) maintains it in swingerman/engineer, which has 154 GitHub stars. The repository holds 27 skills in this directory. The repository was last updated on September 23, 2026.
Source: swingerman/engineer on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.