scaffold-cost-check — Claude Code skill: token estimate
This skill estimates how many tokens Mycelium’s stable scaffold uses and breaks the result down by file surface. Run it to audit the context before changing the project scaffold.
npx skills add haabe/mycelium --skill scaffold-cost-check -a claude-codeWhat scaffold-cost-check does
The skill totals bytes across CLAUDE.md, engine/, harness/, AGENTS.md, .claude/canvas/ and .claude/memory/, then divides by 4 to estimate tokens. Its report separates the surfaces and includes a ±15% uncertainty band for English Markdown. Treat the figure as an estimate, not an exact tokenizer count.
By default, the skill prints the report without changing project files. With --write, it saves the estimate to .claude/canvas/dora-metrics.yml and reads the file back to verify the result; it also reads a canvas file before editing it. The skill assumes a Mycelium setup: standalone use skips the canvas state, theory gates and harness behavior it relies on. You can compare results with /mycelium:framework-health, which the skill does not invoke automatically.
What it helps with
- estimate the token cost of Mycelium’s stable context
- identify which scaffold surfaces account for the most tokens
- compare a measured total with a previous size claim
- check how a new canvas file affects context size
Example prompts for the agent
- Audit Mycelium’s scaffold cost and show the breakdown by file surface.
- Recalculate the estimate after adding a file under
.claude/canvas/. - Audit the scaffold and save the result to
.claude/canvas/dora-metrics.ymlwith--write; read the file before editing.
How to install scaffold-cost-check
1Skills CLI (Vercel)
npx skills add haabe/mycelium --skill scaffold-cost-check -a claude-code2Manually: put the files in place
~/.claude/skills/scaffold-cost-check/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/scaffold-cost-check/
1Skills CLI (Vercel)
npx skills add haabe/mycelium --skill scaffold-cost-check -a codex2Manually: put the files in place
.agents/skills/scaffold-cost-check/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add haabe/mycelium --skill scaffold-cost-check -a cursor2Manually: put the files in place
.cursor/skills/scaffold-cost-check/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install haabe/mycelium scaffold-cost-check2Manually: put the files in place
.github/skills/scaffold-cost-check/SKILL.md1Skills CLI (Vercel)
npx skills add haabe/mycelium --skill scaffold-cost-check -a gemini-cli2Platform CLI
gemini skills install https://github.com/haabe/mycelium --path plugins/mycelium/skills/scaffold-cost-checkManually: put the files in place
.devin/skills/scaffold-cost-check/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add haabe/mycelium --skill scaffold-cost-check -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about scaffold-cost-check
How do I install scaffold-cost-check in Claude Code?
Run npx skills add haabe/mycelium --skill scaffold-cost-check -a claude-code. The skill file is at ~/.claude/skills/scaffold-cost-check/SKILL.md.
What does scaffold-cost-check do?
It totals the bytes in Mycelium’s stable scaffold files, estimates tokens using bytes divided by 4, and reports a breakdown with a ±15% uncertainty band. It prints the result by default rather than saving it.
Does scaffold-cost-check require Mycelium?
Yes. The skill assumes Mycelium; when run separately, it skips the canvas state, theory gates and harness behavior it relies on.
Source text
SKILL.md · MIT
---
name: scaffold-cost-check
description: "Measure Mycelium's own scaffold token cost (CLAUDE.md + engine + harness + canvas + memory) and surface a structured estimate. One-shot audit; pair with /framework-health for trend tracking."
metadata:
instruction_budget: "42"
framework_dependency: "mycelium"
framework_dependency_note: "This skill is designed to run within the Mycelium framework (https://github.com/haabe/mycelium). Standalone use will skip the canvas state, theory gates, and harness behavior the skill assumes. Install: /plugin install mycelium@haabe-mycelium."
---
# Scaffold Cost Check
Measure the token cost of Mycelium's stable scaffolding — the context surface loaded at SessionStart and on routine canvas/memory reads — so claims about "negligible overhead" are auditable. Datadog's *State of AI Engineering* (2026) reports ~69% of input tokens across production agents are system prompts; this skill makes Mycelium's analogous number visible.
## When to Use
- First-time audit on a project to compare actual scaffold cost against any "~6K negligible" claim in landscape/positioning.
- Periodic refresh via `/mycelium:framework-health` (see Wiring below).
- Before adding a new canvas file or harness doc that joins the stable load surface, to surface the marginal cost.
## Preflight: Read target canvas file(s) before any Write/Edit
Hard rule. Before issuing `Write` or `Edit` against any `.claude/canvas/*.yml`, use the **Read tool** on that file in this session. This skill only WRITES if explicitly asked to persist its output to `dora-metrics.yml#apex.scaffold_token_estimate`; default behavior is print-only.
## Workflow
1. **Inventory the stable scaffold surfaces** in the current project's plugin cache (or fall back to `.claude/` for legacy installs):
- `CLAUDE.md` (project-local; the dispatcher)
- `${CLAUDE_PLUGIN_ROOT}/engine/` (all `.md` and `.yml`)
- `${CLAUDE_PLUGIN_ROOT}/harness/` (all `.md`)
- `AGENTS.md` (project-local, if present — the router for non-Claude-Code runtimes; **not** a plugin file. It lives at a repo root and is never packaged, so resolving it through the plugin cache always missed and the row silently vanished from the table via the "if present" clause. Report `0 / absent` explicitly when the project has none, rather than omitting the row — an omitted row reads as "not part of the surface" instead of "not there")
- `.claude/canvas/` (project state — not framework, but it ALSO joins the load surface; report separately)
- `.claude/memory/` (corrections.md, patterns.md, MEMORY.md)
2. **Sum bytes** per surface via `wc -c`.
3. **Convert bytes → tokens** via the 4-bytes-per-token heuristic (±15% for English markdown across OpenAI/Anthropic tokenizers). Document the heuristic + the uncertainty band in the output.
4. **Render the output block** (see Output below).
5. **Optional: persist to canvas** if the user passes `--write`. Path: `.claude/canvas/dora-metrics.yml#apex.scaffold_token_estimate`. Follow the Postflight discipline below.
## Postflight: Verify-After-Write (write-narration-verification discipline)
If `--write` was passed, before claiming "✅ persisted to dora-metrics.yml", use the **Read tool** on `dora-metrics.yml` after the edit to confirm `apex.scaffold_token_estimate.total_tokens` actually carries the new number. AP#7 instance #18 (2026-06-05) is the worked failure mode this discipline prevents.
## Output
```
## Mycelium Scaffold Cost Audit
**Method**: byte-count ÷ 4 (heuristic; ±15% for English markdown).
**Measured**: <date>
| Surface | Bytes | Est. tokens |
|---|---|---|
| CLAUDE.md (project) | <b> | <t> |
| Plugin engine/ | <b> | <t> |
| Plugin harness/ | <b> | <t> |
| AGENTS.md | <b> | <t> |
| Canvas (.claude/canvas/) | <b> | <t> |
| Memory (.claude/memory/) | <b> | <t> |
| **Total stable surface** | <B> | **<T>** |
**Honest framing**: compare against any documented "~6K negligible" or similar claim in landscape/positioning. If actual is materially above (>2×), surface as a positioning correction.
**Goodhart pair**: scaffold_token_estimate ↔ first-pass-success-rate. Cutting scaffold to lower the number is only a win if first-pass quality doesn't drop. Track the pair.
**Sources**:
- [S5] Datadog, *State of AI Engineering* (2026): ~69% input tokens are system prompts across production agents.
- [S2] Faros, *Harness Engineering* (2026): staged measurement plan — start with metrics whose raw data exists.
```
## Canvas Output (only if `--write`)
Target: `.claude/canvas/dora-metrics.yml#apex.scaffold_token_estimate`
```yaml
apex:
scaffold_token_estimate:
claude_md_tokens: <n>
engine_docs_tokens: <n>
harness_docs_tokens: <n>
agents_md_tokens: <n>
canvas_tokens: <n>
memory_tokens: <n>
total_tokens: <n>
method: "byte-count ÷ 4 (heuristic; ±15%)"
last_measured: <date>
compared_against_claim: "<found / not found>; <within / above / below>"
```
## Decision Log (MANDATORY if `--write`)
If persisting to canvas, append a decision-log entry referencing this skill's run, the measured total, and the comparison-against-prior-claim outcome. Source-tag with [S5] Datadog.
## Wiring
- Standalone: invoke as `/mycelium:scaffold-cost-check` (print-only) or `/mycelium:scaffold-cost-check --write` (persist).
- Trend tracking via `/mycelium:framework-health`: that skill's "Goodhart pair" check may reference this surface once a baseline exists. Not auto-invoked in v0.39.19 (sequenced for next minor); operator invokes manually until then.
## Rules
- Print-only by default; `--write` is opt-in.
- Heuristic-tokens carry ±15% explicitly in the output — do not narrate as exact.
- If the actual number is materially above a prior documented "negligible" claim, surface as a positioning correction back to landscape.yml or wherever the prior claim lived. Source-tag [S5].
## Theory Citations
- **Datadog 2026** ([S5]): production runtime telemetry — system prompts dominate input tokens; scaffolding cost is real and frequently unmeasured.
- **Faros 2026** ([S2]): staged measurement plan — compute from existing raw data before adding new instrumentation.
- **Goodhart's Law**: a token-count metric becomes a target once named; the counter-metric (first-pass-success) is required to prevent quality degradation in pursuit of token reduction.
© haabe · MIT · haabe/mycelium