nav-brief
Render a one-screen intent brief before implementing an ambiguous task-shaped prompt — so scope disputes happen in one confirmation exchange, not after forty edits.
Triggers
Not a phrase you say. The prompt_brief op scores every prompt at submit time; when a prompt is task-shaped and ambiguous (score ≥ brief_hook.ambiguity_threshold, default 0.5) it injects a NAV-BRIEF block and this skill renders the brief. With the opt-in typed judge (v7.7.0) task-shapedness, the ambiguity score and the undefined rows come from Jev’s typed answers when decisive, and from the keyword heuristic otherwise.
Passthroughs that skip it: just do it, quick fix, skip the brief, or a prompt that is plainly an answer to a pending brief’s open questions.
What it does
- Renders a fixed seven-row brief and waits for confirmation before any file changes:
┌─ BRIEF: <short title> ──────────────────────────────┐
│ Goal <outcome, one line> │
│ Scope <files/dirs/endpoints — concrete> │
│ NOT <adjacent things left untouched> │
│ Approach <how — cite memory if pre-filled> │
│ Limits <numbers, constraints — mark ASSUMED> │
│ Verify <how completion will be proven> │
│ Won't do <explicit non-goals> │
│ Contradict <improving X worsens Y — or "none"> │
└─────────────────────────────────────────────────────┘
Confirm / edit? (open questions: <0-2>)- Pre-fills defaults from the knowledge-graph memories the op injected alongside the block, so the brief already reflects prior decisions.
- Asks at most two open questions; everything else is a default you can veto.
- Contradict (v7.1.0) is the TRIZ row: the task is inventive only when improving one thing worsens another. Most tasks are routine and the honest answer is
none. When a contradiction is declared, the skill queries prior resolutions from the graph (graph_manager.py --action contradictions --filter "...") before fillingApproach, and on a substantial task hands off to nav-triz for three competing candidates. - Detects brief drift mid-task: if work is about to exceed the confirmed Scope or Limits, it stops and offers extend brief / skip this change.
- After confirmation, changed defaults become candidate memories (“Remember we decided…”) so future briefs pre-fill better.
Example
Clean up the auth flow, it's gotten messyTask-shaped, no files named, no acceptance criterion — ambiguous. Navigator renders the brief with Scope pre-filled from the graph’s auth memories, Contradict none, and one open question (“keep the legacy session endpoint?”). You answer, it proceeds.
Config
| Key | Default | Description |
|---|---|---|
brief_hook.enabled | true | Run the prompt_brief op. |
brief_hook.ambiguity_threshold | 0.5 | Score at or above which the brief fires. |
brief_hook.memory_budget_chars | 1200 | Cap on injected memory text. |
brief_hook.contradiction_field | true | Show the Contradict row (off restores the v7.0 six-field brief). |
Related
- nav-triz — divergent solving when a contradiction is declared
- Workflows §4
- Hooks as Runtime
- .nav-config.json schema