Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add skills/ericrisco/rsc-harness/analyzenpx skills add ericrisco/rsc-harness --skill analyzegit clone --depth 1 https://github.com/ericrisco/rsc-harnessWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/ericrisco/rsc-harness/analyze)<a href="https://agentmods.dev/skills/ericrisco/rsc-harness/analyze"><img src="https://agentmods.dev/badge/skills/ericrisco/rsc-harness/analyze.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00099 | $0.02670 |
| Opus 5 | $0.00049 | $0.01335 |
| Sonnet 5 | $0.00020 | $0.00534 |
| Haiku 4.5 | $0.00010 | $0.00267 |
Grade A, and why
analyze scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 6d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 129 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Analyze — the pre-implementation consistency gate
You have a constitution, a spec, a plan and a task list. Four artifacts written at four different moments, by a mind that drifted a little each time. analyze reads all four against each other and surfaces where they disagree. It is the cheapest place in the whole chain to catch a problem — a contradiction found here costs a sentence; the same contradiction found mid-implement costs a rewrite.
Sixth phase of the rsc-sdd chain (constitution → specify → clarify → plan → tasks → analyze → implement); the method itself lives in ../sdd/SKILL.md. It is a gate, not a worker: it produces a report and stops. The user reads the findings and decides what to fix, and which phase to send each fix back to.
Report only. Resolve nothing. Never edit the constitution, spec, plan or tasks; never open a code file to "just fix it"; never silently reconcile a contradiction by picking a side. This one is absolute because a gate that quietly fixes things stops being a gate: the user never learns the spec was wrong, the plan built on the old assumption stays stale, and the "consistency check" has manufactured a new inconsistency. Name the conflict, show both sides with locations, propose where it should be resolved, hand the decision back.
Model tier: heavy (adversarial cross-reading). Resolve and apply it per ../sdd/references/model-routing.md; routing is off unless models.enabled: true in 02-DOCS/wiki/sdd/config.yaml.
Accompaniment dial. Read 02-DOCS/wiki/harness/user-profile.md before reporting — default to L2 and say the harness has not gauged the user yet if there is no profile. The dial flexes how the report reads, never what gets checked; the six analyses always run in full.
| Dial | The report renders as |
|---|---|
| L0 | Finding table only: severity, the two artifacts, the conflict in one line. No prose. |
| L1 | + a one-line why it matters per CRITICAL/HIGH finding. |
| L2 | + per finding, the recommended resolution phase and the trade-off of leaving it. |
| L3 | + full walk-through: quote both sides, explain the consequence at implement time in plain language, lay out the options so a non-technical user can choose. |
What ships with it
2 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 6d ago First seen · 129 lines · 99 tokens per session scan A f1384a621ee6
analyze is a skill published in the GitHub repository ericrisco/rsc-harness (65 stars, last pushed today), licensed MIT. It adds 99 tokens to every session and 2,670 once invoked, about $0.0005 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
ospec
Document-driven OSpec workflow for initialization, change/goal routing, validation, archiving, and durable project knowledge.
ospec-change
Create or advance a lightweight OSpec change using the classic fast workflow.
build-subgraph
Traverses a full graph and returns a bounded subgraph around one target node -- its depth-bounded dependencies plus any disputed claims attached to it -- while proving everything else was left out.
merge-aliases
Folds two surface names for the same backend system into one canonical entity, keeping every original mention individually retrievable, and refuses to merge pairs that only share spelling.
anchor-and-lock
Consults a check that sits outside the loop system before finalizing any decision the frozen facts bear on, and refuses every attempt by a loop to rewrite a node marked frozen, regardless of how convergent the loop's own reasoning looks.
arbitrate-collision
Detects when two loops have proposed conflicting writes to the same node and field at close to the same time, applies a stated priority rule to accept exactly one, and records the rejected write with the reason it lost.