skills/intake/SKILL.md
Gather charter, team, or decomposition-kickoff answers through a self-contained HTML intake form instead of a conversational interview, then drive the same writer the conversation would. Triggers on "intake form", "fill out a form", "charter form", "team form", "decompose form", "HTML form", "render an intake form", "form instead of questions". You are the driver: render the form with `claude-prove intake render`, hand the operator the file to fill and copy, read the pasted-back payload, validate it with `claude-prove intake validate`, and map the validated answers onto the existing writer (bootstrap for charter, `scrum team` for team, the decompose ladder for decompose). The form and the interview are two front-ends to ONE writer — never a second writer.
npx skillsauth add mjmorales/claude-prove intakeInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You turn a conversational interview into a fillable HTML form and back. The form gathers exactly the answers the interview would; once validated, you drive the same writer the conversation drives. There is one writer per artifact — the form is a second front-end to it, never a parallel path.
Core invariant. The form never writes anything. It only collects answers. The
authoritative gate is claude-prove intake validate, and the only thing that
mutates state is the existing writer you call in Phase 4. A payload that fails
validation never reaches a writer.
Security floor. Intake forms refuse secret and file field types — a token
or a local path would travel in plaintext through the copy-to-clipboard step. The
CLI rejects such a spec at render time; never work around it by collecting
secrets as free text. Collect a credential through the operator's normal
out-of-band path instead.
Pick the built-in form from the request:
| Form | Gathers | Writer (Phase 4) |
|------|---------|------------------|
| charter | vision, mission, outcome bet | bootstrap scaffold + author the charter body |
| team | slug, type, charter line, lifetime, scope globs, roster | scrum team create + scope-set + rotate |
| decompose | parent, target layer, milestone, planning context | the decompose ladder |
If the request is ambiguous between forms, ask with AskUserQuestion (header
Form, one option per built-in). List the built-ins any time with
claude-prove intake list. For a one-off shape no built-in covers, author a
custom intake/v1 spec file and pass it with --file instead of --form — the
same validation and security floor apply.
Render the form to a self-contained HTML file (inline CSS + JS, no network):
claude-prove intake render --form <name> --out <path>.html --open
--open launches the written form in the operator's configured surface —
.claude/.prove.json::artifacts.html_open (an editor's embedded preview, a
specific browser); the platform opener when unset. Give the operator the path
as well, and tell them to: fill the fields, click Copy payload, and paste
the copied JSON back into the chat. The page builds the payload as they go and
copies it to the clipboard (with a select-and-copy fallback when the clipboard
API is blocked, which is common for a local file).
This is an AskUserQuestion-free, open-ended step. Never guess answers or
pre-fill on the operator's behalf; instead, wait for the operator to paste the
payload they copied from the form.
Write the pasted JSON to a file and validate it against the same form:
claude-prove intake validate --form <name> --payload <path>.json
answers.<field> error verbatim, ask the
operator to fix those fields in the form and re-copy, then re-validate. Do not
hand-edit the payload to force a pass; the operator owns the answers.Validation confirms the envelope (schema_version, matching form), every
required field, each value's type, and choice membership. Treat its verdict as
the gate: drive a writer only from a payload that passed (exit 0), and on FAIL
loop back to the operator per the rule above rather than proceeding.
Map the validated answers onto the existing writer. Field ids match the
writer's argument names where practical, so the mapping is mechanical.
The charter body is authored, not flag-passed. Scaffold the skeleton first (dry-run to surface pre-flight failures, then for real), then write the answers into the created skeleton:
claude-prove install bootstrap-identity --cwd <root> --with-charter --dry-run --json
claude-prove install bootstrap-identity --cwd <root> --with-charter --json
Replace the skeleton's body prompts with answers.vision, answers.mission,
and answers.outcome_bet. Leave the frontmatter the CLI stamped untouched, and
never overwrite a charter the CLI reports as already existing (skipped).
Create the row, set scope, then rotate each filled role. Drop terminates_on
unless lifetime is terminates_on_milestone (a persistent team forbids it):
claude-prove scrum team create --slug <slug> --team-type <team_type> \
[--charter "<charter>"] [--lifetime <lifetime>] [--terminates-on <terminates_on>]
claude-prove scrum team scope-set <slug> [--read "<scope_read>"] [--write "<scope_write>"]
For each of tech_lead / engineer / implementer the operator filled, rotate
the role to that contributor id:
claude-prove scrum team rotate <slug> --role <role> --contributor <id>
Skip an empty role rather than rotating it to a blank holder. Never retry a write-scope overlap rejection blindly; instead, surface it to the operator and let them resolve the overlap before re-running scope-set.
The form gathers only the kickoff; the children come from the planner, not the
form. Hand the validated inputs to the decompose ladder: decompose answers.parent
into answers.layer children under answers.milestone, folding
answers.context into the planner prompt. Run the ladder's normal accept gate —
the form does not bypass it.
State what was written (charter body, team slug + roster, or the decomposition that ran) and where. If Phase 3 never passed, report that nothing was written and which fields still need fixing.
testing
Anchor session context into prove primitives before compaction and rehydrate from them after. Built-in compaction summarizes by recency and drops the claude-prove state an agent needs to reorient; this skill externalizes volatile context into durable anchors (scrum tasks, decisions, run-state, a compact-anchors pointer file) pre-compact, then runs a deterministic reorientation sequence post-compact. Use before a manual /compact, when context is about to auto-compact, or immediately after a compaction. Triggers on "smart compact", "prepare for compaction", "anchor before compact", "context is getting long", "rehydrate", "reorient after compact".
tools
Apply model-driven CONTENT reshaping to stored run artifacts that sit behind the current schema, on explicit operator invocation only. Triggers on "migrate runs", "migrate run artifacts", "run content migration", "reshape run artifacts", "bring runs to current schema". You are the driver: the `run-state migrate-runs` CLI mechanically detects which artifacts are behind and emits a plan naming each one plus its migration-instruction file; you read the instructions and reshape the prose/findings, gated by the operator. The deterministic `schema migrate` handles structural column moves; this skill covers only the content reshaping beyond them. Never run as a background or resident loop — only when the operator asks.
tools
Synthesize the 7-section risk-forward Review Brief from a run's reasoning log. Triggers on "reasoning brief", "review brief", "synthesize the brief", "generate the brief", "brief the run", "brief for review", "story brief". You are the driver: the `acb brief` CLI renders a mechanical preservation-safe backbone and proves preservation; you synthesize the narrative prose (summary + changes), single-pass or multipass over episode chunks, then gate it through Stage-1 (mechanical, blocking) and Stage-2 (prose judge, advisory).
tools
Prune stale cached versions of the prove plugin from Claude Code's plugin cache. Use when superseded versions pile up under plugins/cache and agents read stale skills/references from them, or when reclaiming plugin-cache disk space. Triggers on "clean up cached plugin versions", "prune the plugin cache", "remove old prove versions", "stale plugin cache".