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/scolladon/craft/runnpx skills add scolladon/craft --skill rungit clone --depth 1 https://github.com/scolladon/craftWrote 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/scolladon/craft/run)<a href="https://agentmods.dev/skills/scolladon/craft/run"><img src="https://agentmods.dev/badge/skills/scolladon/craft/run.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 | $0.00046 | $0.09914 |
| Opus 5 | $0.00023 | $0.04957 |
| Sonnet 5 | $0.00009 | $0.01983 |
| Haiku 4.5 | $0.00005 | $0.00991 |
Grade A, and why
run 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 3d 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 — 552 lines — stays where its author put it; the contents beside it link to each section on GitHub.
craft — orchestrator
You are running the craft workflow. The SESSION is the orchestrator: it resolves the input, talks to the user (ADRs, escalations, merge confirmation), verifies every delegated artifact, applies review fixes, runs phase-boundary gates, and owns all synthesis (run record, backlog follow-ups, PR body). Heavy work runs in the craft role agents per each phase skill's instructions.
Input: $ARGUMENTS
0 — Resolve
0a. Parse craft flags from the input first: strip any --profile <name>,
--skip <id,…>, repeatable --harness <phase>.<knob>=<value>, and repeatable
--policy <action>=<verdict> tokens (they may appear anywhere — lead or trail;
comma-split the skip ids; --harness and --policy may each be repeated for multiple
knobs/actions). Also strip --config <name> when present (at most one occurrence);
hold the name for manifest-path resolution below.
--config is distinct from --profile: --config selects which manifest file
is read; --profile sets the execution map inside that manifest. The two compose —
both may be present in the same invocation. Hold --profile/--skip/--harness/--policy
for step 1b. The
non-flag remainder is the input brief consumed at step 2 — a flags-only
input (e.g. --profile lean) leaves an empty brief, and step 2 STOPs as
ambiguous exactly as a zero-argument invocation does. These are per-invocation
overrides: they win over the manifest's pipeline.profile/pipeline.skip/phases.<id>.harness/policy:
(the bin merges them at highest precedence).
0b. Resolve the manifest path. When --config <name> was parsed in step 0a:
run node "${CRAFT_ROOT:-${CLAUDE_PLUGIN_ROOT}}/engine/bin/config-resolve.js" <name> via Bash. This
resolves <name> across BOTH scopes — local ./.claude/craft-<name>.md (always wins)
then user ~/.claude/craft-<name>.md — so there is no separate existence check.
- On exit 0: stdout is the ABSOLUTE winning path — hold it as
<manifest-path>. Surface any stderr scope/shadow note into the run record (advisory; the config still resolved). Steps 1 (manifest-lint.sh <manifest-path>) and 1b (pipeline-resolve … [manifest-path]) pass it through UNCHANGED — both already accept an absolute path. - On non-zero exit: STOP; surface stderr verbatim — either the two-scope
neither-found diagnostic (names both
./.claude/craft-<name>.mdand~/.claude/craft-<name>.md) or a bad-name/traversal diagnostic. Never silently fall back to.claude/workflow.md. When--configis absent: use.claude/workflow.mdas<manifest-path>(today's behaviour, unchanged).
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.
- 3d ago First seen · 552 lines · 46 tokens per session scan A 9a66fdf5d975
run is a skill published in the GitHub repository scolladon/craft (2 stars, last pushed 15d ago), licensed MIT. It adds 46 tokens to every session and 9,914 once invoked, about $0.0002 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-31.
Other skills, from other repositories
run-ticket
Run one exact Ticket through recovery, autonomous work, and its required landing, then write DONE or ESCALATED evidence back to that same Ticket. Use when a hosted trigger, agent runner, or person supplies a specific issue, tracker item, or file Ticket to work end to end. This skill does not select backlog work or…
ticket-up
Author self-sufficient Tickets in the project's store from a finished Manifest, a direct work request, an open question, or follow-up findings from another Ticket. A Manifest becomes one coherent Shaped Ticket by default; split it by Deliverable only when the caller explicitly wants delegation or parallel pickup. Use…
next-ticket
Read the project's Ticket store, choose the single best Ticket for the human-plus-AI session to work on now, claim it, and present it with the reason it leads. Use when asking what's next, what should I work on, or pulling the next Ticket from the backlog. Selection stops after presentation; execution belongs to…
sweep-tickets
Recover or start one unattended Ticket from a configured shared Ticket Store, then stop. Use from a scheduled agent trigger to resume one interrupted automation-owned Auto Ticket or select one ready Auto Ticket and invoke run-ticket. This is the low-frequency correctness path beside issue-event triggers, not a backlog…
figure-out-team
Drive a multi-party deliberation in a Slack channel or thread. The agent is an involved orchestrator — presses rigorously, brings evidence, names trade-offs, surfaces disagreements, advances when answers cohere; owner-by-Slack-handle overrules. Use when the people involved cannot all sit in one chat, when deliberation…
workflow
Drive a headsign phase-gate workflow. Use when the repository has a .headsign/ directory holding one or more workflow files — workflow.yaml, or named ones like fitness.yaml run with headsign start fitness — and the user asks to start, continue, or resume a run, or when .headsign/state.json shows a run in progress…