Storing

Put facts in. Four item types cover everything the agent learns: architectural decisions, recurring patterns, task progress, and arbitrary custom data. Everything stored here is what the advisor later reasons over.

Decisions — engrams decision log

A decision is an ADR: what was chosen, why, and how it's implemented. Log it the moment the choice is made. By default the CLI checks for similar existing decisions first; pass --force to skip the similarity check and insert unconditionally.

engrams decision log \
  --summary "Use SQLite for context database" \
  --rationale "Embedded, zero-config, FTS5 built in" \
  --details "rusqlite with the bundled feature" \
  --tags database,sqlite,storage \
  --anchor src/db.rs \
  --pr 42
FlagPurpose
--summaryRequired. Short statement of the decision.
--rationaleThe reasoning — the part future sessions actually need.
--detailsImplementation specifics.
--tagsComma-separated tags for filtering.
--statusInitial status; defaults to active.
--anchorFile path anchor; repeatable.
--prPR number or URL; repeatable.
--forceSkip the similar-decision check.

Patterns — engrams pattern log

A pattern is a recurring convention the codebase must keep following. Patterns can carry a machine-checkable expression — that turns engrams into a policy engine: the pattern becomes an exportable harness rule and a local engrams check gate.

engrams pattern log \
  --name "No throwaway collections" \
  --description "Never materialize a collection only to consume it immediately" \
  --tags rust,perf \
  --anchor src/ops \
  --check-kind regex \
  --check '\.collect::<Vec<_>>\(\)\.join\(' \
  --severity error
FlagPurpose
--nameRequired. Unique pattern name.
--descriptionWhat the convention is and why it exists.
--tags / --anchor / --prSame as decision log.
--check-kindregex or ast (ast-grep). Omit for a prose-only pattern.
--checkThe check expression source; pairs with --check-kind.
--severityinfo, warn, or error (default warn).

Regexes are compiled at write time — an invalid regex is rejected before any row is inserted. Prose-only patterns (no --check-kind) never produce violations.

Progress — engrams progress log

Progress entries track task state so any future session can reconstruct where the work stands. Entries form hierarchies via --parent-id.

engrams progress log --status InProgress \
  --description "Implementing link constraint validation" \
  --parent-id 12 --check-similar
FlagPurpose
--statusRequired. One of the progress status values below.
--descriptionRequired. What was done or is happening now.
--parent-idID of the parent progress entry, for subtasks.
--check-similarCheck for recent similar entries before inserting.
--forceBypass status-vocabulary validation.

Custom data — engrams custom set

Arbitrary key-value pairs grouped by category — configuration, environment facts, anything that doesn't fit the three typed stores.

engrams custom set --category api --key endpoint \
  --value '<string-or-json>' --json

--category, --key, and --value are required; --json marks the value as JSON.

Status vocabularies

ItemValid status
Decisionactive, superseded, rejected, revisited
ProgressTodo, InProgress, InReview, Blocked, Done, Dropped

Legacy or misspelled values are normalized case-insensitively during engrams migrate; unrecognized values are preserved as-is and flagged by engrams doctor. See Maintaining.

Next Stored facts are isolated until you wire them together. Continue to Connecting — links are what turn a list into a reasoning web.