Record a project decision
Write a project decision into durable, repo-scoped Vestige memory. Decisions are commitments with a why — the kind of thing future-you would regret losing.
When to fire
- The conversation has just produced a commitment to a specific approach, library, pattern, or architectural shape.
- The user said "we'll go with X" / "decision: X" / "let's use X" / "settled".
- You wrote
## DecisionorDecision:in your own response. - You explicitly chose A over B and gave a reason.
Tie-breakers vs siblings:
- Decision vs note — does it carry a commitment and a why? If both yes, decision. If just useful info, use
vestige-record-note. - Decision vs preference — preferences come from the user's voice ("I prefer …", "always …"). Decisions can come from either side and have an explicit rationale.
- Decision vs question — if there's still ambiguity, the answer isn't a decision yet. Use
vestige-record-question.
How to invoke
vestige decision add "<one-line decision>" \
--rationale "<the why; cite tradeoffs, alternatives, constraints>" \
--importance 0.7 \
--json
- body (positional, required): one-line statement of what was decided. Imperative or declarative ("Use SQLite for local persistence", "Adopt FTS5 for lexical search").
--rationale(recommended): the why. Without rationale a decision degrades to a note.--importance(optional, 0.0–1.0, default 0.7): bump to 0.85+ for decisions that shape major surface area; leave at default for routine choices.--source(optional): file path or external ref (crates/vestige-store/src/lib.rs:42,https://...) when the decision was prompted by something inspectable.--source-content(optional): inline snippet, capped at 2 KiB by the CLI.
After invocation
The JSON envelope returns { "id": "mem_<ULID>", ... }. Read id and surface a one-line confirmation: "Recorded decision mem_…." Don't read the body back — the user just said it.
The decision is immediately searchable via vestige-recall and will appear in the next vestige context pack.
Idempotence & dedup
Every vestige decision add is a fresh write — there is no upsert. Before capturing, run a quick dedup probe if you suspect overlap:
vestige recall "<key phrase from the decision>" --json --limit 3
If the top hit's score is high and type is decision and the one_liner is essentially the same commitment, skip the write and cite the existing handle instead. Otherwise capture; soft-delete (vestige-forget) the prior one if it's been superseded.