Getting it into your agent
This one installs as part of its plugin. Adding the marketplace and installing the plugin brings it with everything else the plugin ships.
/plugin marketplace add ihudak/ihudak-claude-plugins/plugin install workflows-coreWrote 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/commands/ihudak/ihudak-claude-plugins/frames)<a href="https://agentmods.dev/commands/ihudak/ihudak-claude-plugins/frames"><img src="https://agentmods.dev/badge/commands/ihudak/ihudak-claude-plugins/frames/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/commands/ihudak/ihudak-claude-plugins/frames"><img src="https://agentmods.dev/badge/commands/ihudak/ihudak-claude-plugins/frames.svg" alt="Reviewed on agentmods" width="80" 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.00175 | $0.09632 |
| Opus 5.5 | $0.00070 | $0.03853 |
| Sonnet 5.5 | $0.00035 | $0.01926 |
| Haiku 4.5 | $0.00017 | $0.00963 |
Grade A, and why
frames 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 23d 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 — 458 lines — stays where its author put it; the contents beside it link to each section on GitHub.
(Re)build the frame-set indexes of: $ARGUMENTS
design/ is a reserved subdirectory of any folder under specifications/ — a BRD folder, a PRD
folder, or an Epic folder alike — and each of its immediate subdirectories is one exported frame set
(${CLAUDE_PLUGIN_ROOT}/references/grounding-format.md §6.1). That section makes each set's index
mandatory, and a set without one a refusal: design-grounder returns NO_INDEX rather than reading a
set without one, because a filename is not a reliable statement of what a frame shows.
This command is the recovery path for that. The obvious workflow — a human exports frames and
drops the folder in — produces a set nothing can read, and until this command the only way out was
hand-authoring an index. /frames looks at the frames and writes the index for every set of one
resolved folder.
/frames is not design grounding, and must not be mistaken for it. Indexing makes frames
readable; grounding makes them [DG#n] findings. This command dispatches no design-grounder,
produces no finding, cites no requirement id or [CG#n], and never reaches grounding-verifier,
on either route. The one command that grounds a frame set is /prd-ground, now on both routes — the
BRD route's [BR#n] inventory and the idea route's PRD-level [AC#n]/[FR#n]/[US#n] inventory.
The name. design/ and frame set are §6.1's own vocabulary, so /frames names what it acts on.
It is deliberately not /design-index: /design is the engineering-design workflow, and a name
adjacent to it would invite an operator who wanted an index into the wrong command.
Phase 0 — Resolve the address + model routing
-
The environment.
$SPECS_PATHmust resolve: every path this command reads or writes is under it. Unset or not a directory → apply the Required path environment variable unset rule in${CLAUDE_PLUGIN_ROOT}/references/escalation-rules.mdand stop there. Without this, an address that resolves by key reaches the key-resolution stop below and is told "no folder under/specifications/" — a message naming a failure that is not the failure — and an@<path>address reaches no stop at all, since the path branch resolves without consulting$SPECS_PATH(workflows-core:addressing) and the run then fails at its first write. Neither is the diagnosis the operator needs, which is why this gate is taken first. (The argument-shape stops in this same step fire either way; they never needed$SPECS_PATH, so the only reachable stop, which this sentence used to say, was wrong in both directions.)/framesdefines no flags, and takes exactly one address. A second non-flag token, or a token beginning with--, is a stop rather than a silent discard:FRAMES_EXTRA_ARGUMENT: /frames takes one address and no flags; '<token>' is neither. It indexes the frame sets of one folder per run — re-run once per folder.A discarded second address is a folder the operator believes was indexed and was not. -
The address (mandatory). Parse the first non-flag token and resolve it with
resolve-address(${CLAUDE_PLUGIN_ROOT}/references/addressing.md§3) — a key, or@<path>to a folder or a file inside one. Pass no<KIND>:design/is reserved at every level, so a BRD folder, a PRD folder and an Epic folder are all valid targets and narrowing the resolution would refuse two of the three. Absent or malformed → stop:FRAMES_NEEDS_ADDRESS: /frames needs the folder whose frame sets it should index — a key (^[A-Z][A-Z0-9_]*(-\d+)+$, e.g. ACME-77) or '@<path>' to the folder. Re-run '/workflows-core:frames <KEY>|@<path>'.Handle the resolution record exactly as it comes back:
status: invalid→ the same stop above, naming the token that failed the grammar.status: absent→ stop:FRAMES_NO_FOLDER: no folder under $SPECS_PATH/specifications/ asserts key <KEY>. This command indexes an existing folder's frame sets and creates no folder. Re-run with '@<path>' to the folder, or with the key of one that exists.This command creates no folder, soabsentis a stop rather than a create.status: ambiguous→ §3 rule 5's hard stop, naming every match and@<path>as the way through it. Never choose between them.status: found→ carrypath,kindandkey. Reportlegacy: trueonce as deprecated when §5's fallback resolved it.
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.
- 23d ago Changed · +18 lines 9bed99644946
- 24d ago Changed · +17 lines 3f038dfc3335
- 28d ago Changed · +2 lines 171ac09b8445
- 1mo ago Changed · +27 lines fd6853b8411e
- 1mo ago Changed · +13 lines 909ec1c42ec3
- 1mo ago First seen · 381 lines · 175 tokens per session scan A e8facf208617
frames is a command published in the GitHub repository ihudak/ihudak-claude-plugins (2 stars, last pushed 24d ago), licensed MIT. It adds 175 tokens to every session and 9,632 once invoked, about $0.0007 per session on Opus 5.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-09-05.
Other commands, from other repositories
design-intent
Guided UI/visual development with structured exploration, architecture design, and quality review.
slides
Magazine-quality slide deck as a self-contained HTML page.
prompt
Generate Google Stitch-ready prompts from briefs or spec files using the authoring skill.
web-diagram
Standalone HTML diagram for any topic.
stitch-generate
Full Stitch pipeline — author prompts, generate screens via MCP, fetch images and code.
frankx-infogenius
Premium-First Image Generation - Research → Brand-Aligned Style → High-Quality Output.