name: decision-journal
description: Logs decisions with rationale and review dates. Surfaces decisions due for review. Prevents re-litigating settled topics. Use when user says "/decision", "log this decision", "what did we decide about...", or when a decision is being made in conversation.
argument-hint: [log|list|review|find ]
Always start by reading:
decisions.md(root — the centralized journal)
This is the single source of truth for all logged decisions.
2. Route by Subcommand
/decision log — Log a New Decision
Capture a decision from the current conversation. Extract:
- Decision ID: Next sequential ID using domain prefix (F=Finances, B=Baby, C=Career, H=Home, P=Projects, K=Cooking, HB=Hobbies, I=Interests) + number
- Title: Short, scannable summary
- Date: Today's date
- Domain(s): Which domain(s) this touches
- Review date: When to revisit (optional — set if the decision depends on changing circumstances)
- Decision: One-sentence statement of what was decided
- Rationale: 2-4 sentences explaining why — enough to avoid re-debating later
- Detail link: If a detailed analysis exists in an archive file, link it
Format (append to the appropriate domain section in decisions.md):
#### {ID}: {Title}
| | |
|--|--|
| **Decided** | {Month Year} |
| **Domain** | {Domain(s)} |
| **Review** | {Review date or trigger, or N/A} |
**Decision**: {One sentence}
**Rationale**: {2-4 sentences}
**Detail**: `{path/to/analysis.md}` *(only if exists)*
---
After logging:
- Confirm what was logged: "Logged as {ID}: {title}. Review set for {date/trigger}."
- If the decision was also captured in a domain context.md, add a cross-reference: "Full rationale: see
decisions.md({ID})"
/decision list — List Active Decisions
Read decisions.md and output a summary table:
# Active Decisions
| ID | Decision | Domain | Decided | Review |
|----|----------|--------|---------|--------|
| F1 | Private school — not pursuing | Finances, Baby | Feb 2026 | ~2030 |
| F2 | Overpay Mortgage 2 only | Finances | Jan 2026 | Sep 2027 |
| ... | ... | ... | ... | ... |
Filters (optional):
/decision list --domain=finances— Filter to one domain/decision list --review— Only show decisions with review dates
/decision review — Surface Decisions Due for Review
Read decisions.md and find decisions where:
- Review date has passed — The stated review date/trigger is in the past
- Review date is within 30 days — Coming up soon
- Key assumption may have changed — Cross-reference with domain context files to detect changed circumstances
Output format:
# Decisions Due for Review
## Overdue
- **{ID}: {Title}** — Review was {date/trigger}. {Why it's relevant now}
## Coming Up (next 30 days)
- **{ID}: {Title}** — Review: {date/trigger}. {Context}
## Assumptions May Have Changed
- **{ID}: {Title}** — {What changed and why it matters}
If nothing is due:
"All decisions are current. Next review: {ID} — {title} ({review date})."
/decision find <topic> — Look Up Past Decisions
Search decisions.md for decisions matching the topic. Match against:
- Decision titles
- Domain names
- Rationale text
- Keywords in the decision statement
Output: Show the full decision entry (ID, decision, rationale, review date).
If no match found: Say so, and offer to check domain context files for related information.
If topic matches a superseded decision: Show both the superseded one and its replacement, with context on why it changed.
3. Passive Capture (During Normal Conversation)
The decision journal isn't only used via the /decision command. During any conversation where a decision is made:
- Recognize the decision moment — When the user says "let's go with...", "I've decided...", "the plan is...", or a clear choice is made after analysis
- Offer to log it — "Want me to log this in the decision journal?" (brief, not pushy)
- If yes, log it — Follow the
/decision logformat - If no, move on — Respect the user's preference; not every decision needs logging
Which decisions to offer logging for:
- Significant choices with clear alternatives considered
- Decisions likely to come up again ("should we..." recurring topics)
- Choices that depend on assumptions that may change (worth a review date)
Which decisions NOT to offer logging for:
- Trivial choices (what to have for dinner)
- One-time actions (buy this specific item)
- Already logged decisions being reconfirmed
4. Cross-Reference with Domain Context
When logging a decision, also update the relevant domain context file:
- If the decision is already mentioned in
{domain}/context.md, add a cross-reference: "Full rationale: seedecisions.md({ID})" - If the decision replaces information in context.md, update context.md to reference the journal rather than duplicating rationale
Don't duplicate — The journal is the single source of truth for rationale. Domain context files should reference it, not repeat it.
5. Superseding & Archiving Decisions
The active journal (decisions.md) is working memory — keep it lean so "check decisions first" stays fast. Retired decisions move to the archive tier (archive/decisions/{year}.md), keyed by the year they were retired. See archive/decisions/README.md.
When a decision is superseded (replaced by a newer one):
- Move the old decision's full block out of "Active Decisions" into
archive/decisions/{year}.md, where{year}is the year the decision is being retired (today's year), NOT the year it was originally decided (create the file with a# Decision Archive — {year}header if it doesn't exist) - On the archived block, add:
**Retired**: {date} — superseded by {new ID}. {reason for change} - In
decisions.mdunder "Superseded / Archived Decisions", leave a one-line pointer:- **{old ID}: {Title}** — superseded by {new ID} ({date}). See \archive/decisions/{year}.md`.` (same retirement year as step 1) - Log the new decision as active, with a note:
**Replaces**: {old ID}
If the replacement reuses the old ID (a decision revised in place rather than given a new ID — e.g. B3 revised Feb→Mar 2026), disambiguate in the pointer and archived block: refer to the retired one as {ID} (original) and the active one as {ID}. The archived block keeps its original Supersedes/revision history.
When a decision is archived (no longer relevant — the circumstance it governed has passed), do the same but mark **Retired**: {date} — archived ({reason}) with no replacement.
Leave in place: one-time decisions still in force (birth plan, door swing, etc.) stay in the active journal — they're settled, not retired. Only move decisions that are genuinely superseded or no longer relevant.
This creates a clear audit trail — you can always trace why a decision changed, without bloating the working journal.
If the user is discussing a topic that already has a logged decision:
- Surface it: "This was decided in {ID}: {summary}. The rationale was: {brief}. Has something changed?"
- If circumstances have changed → offer to supersede
- If not → reference the existing decision, don't re-debate
Ambiguous Domain
Some decisions span multiple domains (e.g., "childcare" = baby + finances + career). Log under the primary domain but tag all relevant domains.
No Review Date Needed
Not every decision needs a review date. One-time decisions (birth plan, purchase decisions) can use "N/A". Only set review dates for decisions that depend on changing circumstances.
Review Trigger vs Date
Review triggers can be dates ("Sep 2027") or events ("if either salary drops below £60k", "post-paternity leave", "when child is school age"). Both are valid.
Decision Made Outside This System
If the user mentions a past decision that was never logged:
- Offer to backdate it: "Want me to log that decision? I'll note when it was made and the rationale."
- Capture what's known — better to have an incomplete entry than nothing
Conflict Between Journal and Context
If a domain context file contradicts the decision journal:
- The journal is authoritative for rationale and status
- Context files may have more current status information
- Flag the conflict and ask which is current
User is in a conversation about nursery choices and decides on a specific nursery:
Logged as B4: Nursery choice — Little Acorns St Albans.
Review set for: 6 months after start (assess if child is happy).
Want me to update baby/context.md with the nursery details too?
Example: /decision review
# Decisions Due for Review
## Coming Up (next 30 days)
- **F2: Mortgage strategy — Overpay Mortgage 2 only** — Review: Sep 2027. Mortgage 1 fix ends next month. Time to check rates and decide: continue overpaying, remortgage, or shift to investing.
## Assumptions May Have Changed
- **C1: Stability over risk-taking** — Review trigger was "post-paternity leave (August 2026)". You're back at work now — worth revisiting career risk appetite?
All other decisions are current. Next review: F4 (ISA strategy) — annually in April.
Example: /decision find mortgage
## F2: Mortgage strategy — Overpay Mortgage 2 only
| | |
|--|--|
| **Decided** | January 2026 |
| **Domain** | Finances |
| **Review** | Sep 2027 (Mortgage 1 fix ends) |
**Decision**: Overpay up to 10% (£23,788/year) on Mortgage 2 (5.71%) only. Don't overpay Mortgage 1 (3.09%).
**Rationale**: 5.71% is a guaranteed, risk-free return — beats most liquid alternatives. 3.09% is below expected equity returns, so investing beats overpaying on that one. Reassess at remortgage when rates change.
Example: Passive capture during conversation
User: "Yeah, let's go with the Vanguard platform for the Junior ISA. The fees are lowest and we already use them for our ISAs."