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 commands/robconery/cassini-workshop/specgit clone --depth 1 https://github.com/robconery/cassini-workshopWhat 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 | $0.00027 | $0.00970 |
| Opus 5 | $0.00014 | $0.00485 |
| Sonnet 5 | $0.00005 | $0.00194 |
| Haiku 4.5 | $0.00003 | $0.00097 |
Grade C, and why
spec scanned grade C with 1 finding 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 yesterday.
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.
Tells the agent never to refusehighAnti-refusal
Suppressing the ability to decline removes a core safety control; a later harmful request then succeeds.
3. **Stories check.** If `docs/STORIES.md` is missing or empty, do NOT refuse — How it starts
The opening of the file, as written. The whole thing — 80 lines — stays where its author put it; the contents beside it link to each section on GitHub.
spec
Turn docs/STORIES.md into executable spec files using the bdd-specs
skill. This command is the bridge between agreed stories and red specs that
/build-loop will turn green.
Scope
- IN: generating spec files from finalized stories; helping author stories when none exist yet; reporting on existing specs.
- OUT: writing implementation code (
/build-loop); changing requirements (/explore,/design); ordering tasks (/plan).
Preflight (refuse early)
- Require project info. If
docs/PROJECT.mdis missing or still a stub (mostlyTODOs), refuse and tell the user:No PROJECT.md — run /explore first to define what we're building. - Require a spec. If
docs/SPEC.mdis missing or a stub, refuse:No SPEC.md — run /design first so there's something to spec against. - Stories check. If
docs/STORIES.mdis missing or empty, do NOT refuse — instead, help create them: invoke theuser-storiesskill to authordocs/STORIES.mdfrom SPEC.md before continuing.
Behavior
- Read
docs/PROJECT.md,docs/SPEC.md,docs/STORIES.md,docs/ARCHITECTURE.md(for context), and any existing spec files (e.g.tests/**/*.spec.ts,specs/**/*.ts,**/__tests__/**). - If specs already exist for a story, LEAVE THEM ALONE. Do not overwrite, edit, rename, or reorganize. Report what was found and tell the user you can overwrite on explicit request.
- For stories with no corresponding spec file, delegate to the
bdd-specsskill to generate them. Pass the story id(s) so output aligns 1:1 withdocs/STORIES.md(Story → Feature, AC → Scenario, each Then → one Specification). - Every newly generated spec is pending by default — use the runner's
skip / todo / pending marker (
it.todo,it.skip,test.todo, etc., depending on whether the project usesbun:testor Jest). They must not accidentally pass; they must be visibly pending until/build-loopimplements them. - Specs must align to stories, but names should read naturally:
- File name: a readable kebab-case slug from the story title — no
story-NNNprefix. e.g.atomic-create-user-order-entitlements.spec.ts. - Outer
describe: the human-readable feature, no id. e.g.describe("Feature: atomic create of user, order, entitlements", …). - Traceability: put a single comment at the top of the file with the
story id, e.g.
// STORY-007 — Atomic create of user, order, entitlements. That comment is the only place the id appears.
- File name: a readable kebab-case slug from the story title — no
- Never invent acceptance criteria. If a story is underspecified, stop and
send the user back to refine it via the
user-storiesskill.
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.
- yesterday First seen · 80 lines · 27 tokens per session scan C 6a79bf47e589
spec is a command published in the GitHub repository robconery/cassini-workshop (1 stars, last pushed 2mo ago), licensed MIT. It adds 27 tokens to every session and 970 once invoked, about $0.0001 per session on Opus 5. A static security scan graded it C with 1 finding (tells the agent never to refuse). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other commands, from other repositories
git-remote
Create the GitHub remote for this project and make it look sharp — name, license, real README, contributing, security, issue templates.
git-merge
Merge the current branch into main safely — commit-check, remote sync, confirm, merge.
git-commit
Stage and commit current changes using Conventional Commits, branch-or-trunk by size. Uses the github skill.
init
Scaffold the project files I like — CLAUDE.md and the /docs skeleton.
git-pr
Open a pull request with a clear summary, verification plan, and risk note via gh pr create. Uses the github skill.
git-issue
Open a GitHub issue with a clear, detailed body via gh issue create. Uses the github skill.