| name | execution-context-builder |
| description | Synthesizes the chosen (or only) candidate flow into the canonical execution-context Markdown + JSON artifacts under .claude/clarifications/. Activates after flow-detector returns a single candidate, or after flow-selector confirms the user's choice. Never asks follow-up questions. |
Execution Context Builder
Take a full_context record and write the two canonical artifacts.
Activation Triggers
This skill activates when:
flow-detector returned exactly one candidate (skip selector, come straight here).
flow-selector has resolved the user's pick (or synthesized one from "Other").
This skill never asks the user a question. If the input full_context has missing fields, fill them with conservative defaults (see "Field Defaults" below) and move on.
Inputs
The skill receives:
task โ the original task description (string), and optionally a source ref (e.g., ENG-123).
full_context โ the chosen candidate's context record. Schema is defined in references/execution-context.json.
Process
1. Resolve the slug
Generate a slug from the task title:
- Lowercase, replace non-alphanumeric runs with
-, strip leading/trailing -.
- Truncate to 60 characters max, on a word boundary.
- If the result is empty (no usable characters), fall back to
clarification-YYYYMMDD-HHMMSS using the current local time.
Examples:
"Send message on sign-in" โ send-message-on-sign-in
"Migrate auth to Better Auth (Phase 2)" โ migrate-auth-to-better-auth-phase-2
"!!!" โ clarification-20260427-143022
2. Fill defaults
If any required field in full_context is missing, fill with these defaults:
| Field | Default |
|---|
trigger.timing | "after" |
trigger.preconditions | [] |
action.channel | "in-app" |
flow.mode | "async" |
flow.transport | null |
failure_handling.strategy | "retry" |
failure_handling.details | "3 attempts with exponential backoff, then log" |
out_of_scope | [] |
Defaults are not user-visible questions โ silently apply them.
3. Build the JSON artifact
Read references/execution-context.json, populate it from full_context, add metadata:
{
"task": { "title": "<original task>", "source": "<ticket ref or null>", "slug": "<slug>" },
"entity": "...",
"trigger": { "event": "...", "timing": "...", "preconditions": [...] },
"action": { "verb": "...", "channel": "...", "recipient": "..." },
"flow": { "services": [...], "mode": "...", "transport": "..." },
"failure_handling": { "strategy": "...", "details": "..." },
"out_of_scope": [...],
"metadata": {
"created_at": "<ISO-8601>",
"created_by": "clarify@0.1.0"
}
}
Validate the result parses with a JSON parser before writing. If parsing fails, fix and retry; never write malformed JSON.
4. Build the Markdown artifact
Read references/execution-context.md, fill the template from the same full_context. Keep it human-readable โ the developer is the primary reader.
5. Write both files
Path: .claude/clarifications/<slug>.local.md and .local.json.
- Create the
.claude/clarifications/ directory if it doesn't exist.
- If a file with the same slug already exists, refuse to overwrite. Print:
A clarification already exists at .claude/clarifications/<slug>.local.md.
Delete it first, or re-run /clarify with a different task title.
- Write atomically: write to a temp file, then rename. Prevents partial files on crash.
6. Optional cross-pack hooks (silent if absent)
After writing, if .claude/failure-log.local.md exists in the project, append a one-liner under "Pattern Mistakes":
- [<ISO-8601>] <slug> clarified โ see .claude/clarifications/<slug>.local.md (kind: assumption-resolved)
If the failure-log file doesn't exist, skip silently. Do not create it.
7. Print the summary
โ Execution context written:
.claude/clarifications/<slug>.local.md
.claude/clarifications/<slug>.local.json
Do not print the full content of either file. The developer opens the file to review.
Field Reference
See references/execution-context.md and references/execution-context.json for the canonical templates.
Anti-Patterns
| Don't | Do Instead |
|---|
| Ask the user to fill in missing fields | Apply the defaults table silently |
| Overwrite an existing artifact | Refuse and tell the user to delete it |
| Write the JSON without parsing it first | Validate, then write |
| Print the full Markdown to chat | Print only the file path; the developer opens it |
Create .claude/failure-log.local.md if it's missing | Skip the cross-pack hook silently |
Success Criteria