| name | intent-contract |
| description | Explicitly invoked skill for producing an implementation/evaluation/message contract. Hard rule: never output a final Intent Contract before the user's 3rd message in the skill interaction. |
| triggers | ["$intent-contract","/intent-contract","intent-contract"] |
Intent Contract
This skill turns a user request into a compact final contract/prompt with goal, scope, decisions, acceptance criteria, verification, and handoff.
Non-negotiable rule: hard 3-user-message minimum
After this skill is invoked, do not output a final # Intent Contract: until the user has sent at least 3 messages in this intent-contract interaction.
Only user messages count.
Do not count:
- assistant messages,
- tool calls,
- file reads,
- searches,
- shell commands,
- repository inspection,
- assistant summaries,
- assistant guesses,
- assistant-proposed criteria.
The minimum sequence is:
- User message 1: initial
$intent-contract ... request.
- User message 2: user's clarification, answer, narrowing, correction, or added context.
- User message 3: user's confirmation, revision, or final direction.
The final # Intent Contract: may be produced only after user message 3.
There are no implicit exceptions for:
- “enough information,”
- “simple request,”
- “obvious answer,”
- “tool inspection completed,”
- “the assistant can infer it,”
- “the user already gave good details in message 2.”
The only exception is when the user explicitly says:
skip clarification and write the contract now
or an equivalent direct instruction.
What to do before user message 3
Before user message 3, do not use the final contract template.
Use one of these lightweight formats instead:
After user message 1
- Restate the request in one sentence.
- Ask 1-3 material questions.
- Say
Turn status: 1/3.
After user message 2
- Summarize the narrowed understanding.
- Optionally inspect relevant files/data.
- Propose candidate direction or draft text if useful.
- Ask for confirmation, correction, or final preference.
- Say
Turn status: 2/3.
- Do not output
# Intent Contract:.
After user message 3+
- Produce the final
# Intent Contract: if no blocker remains.
- If blocked, produce a short blocked contract with
Status: blocked.
- Say
Turn status: 3/3 complete.
Scope
Use this skill only when the user explicitly invokes it.
If the user invokes it for a non-code task such as a message, email, explanation, or planning note, still obey the hard 3-user-message minimum. The final contract may be lightweight and may include a final draft/message.
If the user did not invoke this skill, do not force this workflow onto ordinary chat, writing, translation, debugging, QA, review, browser testing, shipping, documentation, or memory-maintenance tasks.
Workflow after user message 3
-
Collect decision-relevant context
- Greenfield: goal, audience/user, scope, constraints, success criteria, risks.
- Brownfield: README, package/config files, existing specs, user-named files, and obvious relevant files only.
- Separate facts by source:
[from-user], [from-code], [from-research], [assumption].
-
Ask material questions only
- Prefer questions whose answers change architecture, API/protocol, ownership/SSOT, data model, migration, permissions, UX, rollout, evaluation threshold, tone, audience, or verification.
- Mark premature/unknowable items as
Decide later.
-
Score readiness when relevant
- Greenfield ambiguity:
1 - (goal*0.40 + constraints*0.30 + success*0.30).
- Brownfield ambiguity:
1 - (goal*0.35 + constraints*0.25 + success*0.25 + context*0.15).
- Use 0.0-1.0 clarity scores. Target ambiguity
<= 0.20.
- Do not proceed if an unresolved decision would materially change the contract.
-
Produce final Intent Contract
Include:
- Goal
- Scope and non-goals
- User-message history
- Context facts and assumptions
- Decisions made
- Open decisions blocking finalization
- Decide-later items
- Entities / domain model / ontology when useful
- Constraints
- Acceptance criteria
- Verification plan
- Final output/draft when relevant
- Handoff
- Clarity score / status
-
Exit cleanly
- After producing
Status: ready, Status: ready-with-deferrals, or Status: blocked, exit intent-contract mode unless the user explicitly asks to revise the contract.
Output format
Use references/intent-contract-template.md only after the hard 3-user-message minimum is satisfied or explicitly skipped.
Before user message 3, never print # Intent Contract:.
Validation checklist
Before final output, verify:
- User-message count is at least 3, or the user explicitly skipped clarification.
- The final output includes
User-message status: 3-message-complete or explicitly-skipped.
- Every acceptance criterion is observable by test, inspection, metric, manual check, review, or user approval.
- Scope and non-goals prevent at least one plausible wrong output.
- Facts are distinguished from user decisions and assumptions.
- No open decision remains that would materially change the result unless
Status: blocked.