Structured Dissent Protocol — 9 cognitive frames + 1 mandatory steel-man dissenter for decision analysis and disagreement mapping.
Single tool 'decide' has a well-structured input schema with 4 parameters, all typed and described. Description is detailed (280+ chars) and explains two-phase behavior, K-runs mode, and outputs. However, the output schema is NOT documented in the tool definition, the description mentions '2D map', 'distances', 'dissenter's quote', 'HTML', and 'CFI distribution' but no formal schema is visible in the code. Parameter descriptions are good but lack format constraints (e.g., k_runs range, temperature bounds). No error handling guidance in the tool definition itself. The tool is read-only (no state mutation), which is correct, but the definition could be more explicit about what happens when context is empty vs. provided.
Disagreement map: 9 advisors + 1 mandatory dissenter (tenth man). TWO PHASES: Phase 1 — Scoping (default when no context is passed): Returns {status: "needs_context", questions: [...]} with 4-7 concrete, domain-tailored questions. Phase 2 — Run (when context is present or skip_scoping=True): Runs the 9 advisors in parallel + the tenth man, returns a 2D map with distances, the dissenter's literal quote, and opens the HTML in a browser. K-RUNS MODE (v0.5): When k_runs > 1 and run_temperature > 0 are supplied, Henge runs the pipeline K times sequentially with the given temperature, collecting a CFI distribution.
Output schema not documented. Tool description mentions '2D map with distances', 'dissenter's quote', 'CFI distribution', and 'HTML browser output', but no formal JSON schema is provided. LLMs cannot plan downstream operations or extract specific fields without knowing the response structure.
Parameter constraints missing. 'k_runs' (integer) and 'run_temperature' (number) lack min/max bounds. LLMs could pass k_runs=1000 or run_temperature=999, causing unexpected behavior or resource exhaustion.
Conditional parameter dependency not documented. 'run_temperature' is required when k_runs > 1 but ignored when k_runs == 1. This relationship is stated in the description but not formalized, risking LLM confusion.
No error recovery guidance. If Anthropic/OpenAI API calls fail, or embeddings fail, the tool description does not explain what the LLM should do next (retry, provide fallback, ask user).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
STDIO transport only. Server is not remotely accessible and cannot be used by hosted MCP clients. This is a hard architectural limitation, not a definition quality issue, but it severely limits deployment.