record_decision
Record development decision points—forks, tradeoffs, constraints—to build a reasoning changelog that captures why choices were made.
Instructions
Silently record a decision point during development.
Call this tool when you:
Choose between multiple alternatives (type: fork)
Try an approach that fails or is rejected (type: abandoned)
Find unexpected behavior or limitations (type: discovery)
Identify a hard constraint that must be respected (type: constraint)
Make an explicit trade-off between competing concerns (type: tradeoff)
Select an external library or dependency (type: dependency)
Decisions can be intent-scoped (tied to a specific work unit) or repo-scoped (general knowledge like discoveries and constraints). Omit intentId for repo-scoped decisions.
Decisions are accumulated silently during the session and presented for review before commit. This creates a "reasoning changelog" that captures not just what was done, but why.
IMPORTANT: Include constraintViolations when alternatives are rejected due to architectural constraints.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | Type of decision: fork (chose between alternatives), abandoned (tried and rejected), discovery (found unexpected behavior), constraint (identified hard requirement), tradeoff (made explicit trade-off), dependency (selected library/tool) | |
| source | No | Provenance: user (human-recorded), agent (AI deliberately recorded via this tool — the default), extractor (from thought-chain extraction), infer_history (from commit-history extraction). Most callers leave this as the default. | |
| context | No | What we were trying to accomplish when this decision was made | |
| summary | Yes | Brief summary of the decision (< 100 chars recommended) | |
| symptom | No | Observable symptom that indicates this decision is relevant (e.g., error messages, runtime panics, unexpected behavior). Useful for discovery and constraint decisions. | |
| intentId | No | The intent ID this decision belongs to. Omit for repo-scoped decisions (discoveries, constraints) not tied to a specific work unit | |
| repoPath | Yes | Local path to the repository root (enables offline sync) | |
| rationale | Yes | Why this decision was made | |
| confidence | No | Self-rated confidence in the decision. Meaningful only for extractor and infer_history sources — leave null for deliberate recordings. | |
| forkAuthor | No | Fork attribution; usually resolved by Muninn automatically — pass only for override / testing. | |
| repoOrigin | No | Git remote origin URL. Auto-detected from repoPath via git if not provided. | |
| supersedes | No | Decision IDs that this one replaces. When a later decision supersedes an earlier one, pass the earlier decisionId(s) here so the evolve pipeline can track the lineage. | |
| appliesWhen | No | Trigger condition / "How to apply" — populate ONLY when the decision is plainly conditional (e.g. "language is Go", "when running in production", "when working in module X", "when the error is ECONNRESET"). Skip when the rule has no clean activation condition or when the rationale already implies universality. Treat applies_when as load-bearing context the LLM uses at recall time to decide whether the decision is relevant — not a soft hint. Strong-signal-only. | |
| workspaceId | No | Workspace identifier; usually resolved by Muninn automatically — pass only for override / testing. | |
| alternatives | No | Other options that were considered | |
| consequences | No | Downstream implications of this decision | |
| relatedFiles | No | File paths affected by this decision | |
| sourceThoughtIds | No | Thought-chain entry IDs this record was extracted from. Only set by the extractor path. | |
| resolvedCollision | No | Layer C audit — set ONLY when this decision records how you resolved a completion-time code collision (i.e. after complete_intent returned resolution_required). Links the decision to the live peer you yielded to or overrode. | |
| constraintsChecked | No | Which architectural constraints were verified before this decision | |
| constraintViolations | No | Alternatives that were rejected due to constraint violations |