Internal context synthesis engine. Triggered by UserPromptSubmit hook when complexity or risk is above threshold. Runs agentic exploration — facilitator + fan-out subagents — to produce a complete turn directive grounded in project knowledge. NOT user-invokeable. Called automatically by the hook via skill directive injection.
You received this skill because the hook determined this prompt needs deep context assembly.
Args are passed as a JSON string. Parse with json.loads(args):
prompt: the user's original promptcomplexity: float 0–1 (hook scoring)risk: bool — high-risk keywords detectedturns: recent session turns summary (condensed, may be absent on first turn)context_briefing: pre-assembled adapter context from the orchestrator (present on SLOW-path only, absent on FAST-path or when orchestrator failed). When present, skip cold exploration in Step 1 and use this as the starting context.| complexity | risk | rounds | parallel agents |
|---|
| < 0.5 | no | 1 | 2 |
| 0.5–0.7 | no | 1 | 3 |
| > 0.7 | any | 2 | 4 |
| any | yes | 2 | 3 |
Before running the full synthesis loop, validate that this prompt actually warrants agentic synthesis. Parse complexity, risk, and (if present) context_briefing from the skill args (all provided as JSON fields).
If context_briefing is present in args, its content can be used to inform all 3 checks below — treat it as verified adapter evidence (native task state, brain index hits, domain events) rather than re-deriving from scratch.
Run these 3 quick checks against the user's prompt:
risk true (destructive/production-affecting keywords detected by the hook)?Decision:
0 of 3 pass → Exit early. Output exactly:
[Scope Check: LOW — routing to fast path]
Then stop. Do NOT produce a context briefing or proceed to Step 1.
1 or more pass → Proceed to Step 1 below.
If context_briefing is present in args: Skip the cold exploration phase. Use the provided briefing as your starting context — it already contains adapter output (brain index hits, native task state, domain events). Proceed directly to Step 3 to assess whether the briefing is sufficient or if targeted follow-up is needed.
If context_briefing is absent: Read the user's prompt and recent turns. Identify 3–5 specific questions:
Do NOT search yet. Just list the questions.
Spawn parallel Agent calls (one per search question). Each agent should:
Brain wiki search (synthesized knowledge — try this first):
find ~/.wicked-brain/wiki -name "*.md" 2>/dev/null | head -20
# Read any wiki article whose name matches the topic
Brain FTS search (raw chunks — for specifics):
curl -s -X POST http://localhost:4242/api \
-H "Content-Type: application/json" \
-d '{"action":"search","params":{"query":"QUERY_TERMS","limit":5}}'
If curl fails (brain server not running), fall back to Grep/Glob on the project files directly.
Recent events (what changed recently):
curl -s -X POST http://localhost:4242/api \
-H "Content-Type: application/json" \
-d '{"action":"search","params":{"query":"QUERY_TERMS event created","limit":3}}'
Each agent returns: what it found (or "nothing relevant — brain unavailable, searched files directly").
Review all agent outputs. Ask:
If missing AND rounds remaining: identify the gap, spawn 1–2 targeted follow-up agents. If sufficient OR no rounds left: proceed to synthesis.
Output ONLY the following block (200–300 words). This replaces Claude's own context assembly.
CONTEXT BRIEFING [smaht-synthesized | complexity={X} | risk={Y}]
**The user is asking**: {one sentence — actual intent, not a restatement}
**What is true** (verified from project knowledge):
- {specific fact 1 with source reference}
- {specific fact 2 with source reference}
- {specific fact 3 with source reference}
[add up to 2 more only if directly relevant]
**Active constraints**: {from session turns — user-stated rules that apply}
**Recommended approach**: {1–2 sentences — what to do and how, based on what was found}
**What was NOT found**: {if any critical info was missing — be explicit}
After outputting the briefing, tell Claude: "Proceed with this context. Answer the original prompt: {prompt}"