Skill · Approval gate
The skill every MEDIUM and HEAVY command loads to render its gate. It handles tier lookup, gate rendering, budget overlays, ledger writes, and the --yesbypass — so commands don't reinvent approval UX.
When it activates
Every time a command with tier: MEDIUM or tier: HEAVY in its frontmatter dispatches an agent. The skill reads the tier, constructs the frame, and asks the user.
What it teaches
- Gate shape per tier — LIGHT: none. MEDIUM: one line + y/n/tweak. HEAVY: full block (agents, skills, ~tokens, MoSCoW, alternatives).
- MoSCoW scoping for HEAVY — always emit MUST/SHOULD/COULD/WON'T, with WON'T explicit so users see what's left out.
- Budget overlay — if
.hub/budget.jsonexists, the gate adds a line comparing the estimate to the budget. - Ledger write — every gate, approved or declined, appends to
.hub/usage.json. Declined runs log zero spend but are still visible in/hub:ledger. - Bypass handling —
--yesor-yas the first argument skips the prompt. Everything else still logs.
The HEAVY frame
HEAVY — /hub:<command> "<summary>"
Planned agents:
- hub:<agent-1> (<role>)
- hub:<agent-2> (<role>)
...
Skills loaded:
<skill-1>, <skill-2>, ...
Token estimate: ~<P50> (P50: ~<P50>, P95: ~<P95>)
Session budget: <OK | WARN | OVER> (<used> / <cap>) [only if .hub/budget.json set]
MoSCoW scope:
MUST — ...
SHOULD — ...
COULD — ...
WON'T — ...
Lighter alternatives:
A) /hub:<other> — <why>
B) /hub:plan only — ship a plan first, build later
Proceed? [y/n/tweak]Every HEAVY gate matches this template. If a command's frontmatter or dispatch information doesn't supply a section, the skill refuses to dispatch — better to ask than to silently skip.
Tweak mode
Replying tweak at the prompt lets you adjust scope without retyping the whole command. Common tweaks:
drop backend-specialist— remove an agent from the chain.reduce scope: keep MUST only— cut SHOULD/COULD to shrink the estimate.tighter: no email, no billing— free-form constraints.
Ledger mechanics
.hub/usage.json is append-only, project-local, and gitignored. Each entry stores: timestamp, command, tier, planned agents/skills, estimate, actual tokens, disposition (approved / declined / bypassed), and optional ROI tag. /hub:ledger is the read-only view.
Pro tips
- Don't blanket-bypass.
--yesis for cases you've run before. New or HEAVY commands deserve a look at the frame. - Set a budget early.
/hub:budget lowoverlays a useful reminder without changing behaviour. - Tag after runs.
/hub:ledger tag last useful|partial|wastedfeeds the ROI view.