Skip to content

Command memory

Rafael Fragoso edited this page Jun 8, 2026 · 2 revisions

Command: memory

One surface over every durable-knowledge kind. All of it is embedded at index time and surfaces in semantic search. For concepts and workflow see Project Memory and Tracking Work: Epics, Stories & Tasks.

Synopsis

columbus memory <add|update|remove|list> <kind> [args] [flags]

<kind> is one of:

Kind What it is
epic Top-level body of work
story A unit under an epic (--parent epic_NNN)
task A unit under a story (--parent story_NNN)
context Free-form memory: decision, pattern, failure, command, glossary (--type)
tag Read-only view of the tags across all knowledge (list only)

The work hierarchy is epic → story → task. Columbus stores and retrieves — it never drives or gates transitions. status is a recorded field from a fixed vocabulary: todo, in_progress, blocked, done, cancelled (any → any).

memory add <kind>

Flag Applies Description
--title all Short title
--body all Description / body
--parent story, task Parent id (epic for a story, story for a task)
--type context Sub-kind: decision|pattern|failure|command|glossary
--tag all Tag (repeatable)
--ref context Link file:<path> / symbol:<name> (repeatable)
--evidence context Evidence anchor path:start-end (repeatable)

memory update <kind> <id>

Partial update. Beyond --title/--body/--parent (re-parent), --tag via --add-tag/--remove-tag:

Flag Applies Description
--status work Record a status change (appends an event)
--comment work Append a note (with --status, annotates the change)
--add-ref / --remove-ref all References (work) / links (context)
--add-evidence / --remove-evidence context Evidence anchors
--type context Re-type a context entry

memory remove <kind> <id> --force

Hard delete; the id is retired. --force is required (destructive). Removing an epic cascades its stories and tasks; removing a story cascades its tasks.

memory list <kind>

Filters: --parent, --status, --tag, and --type (context). list tag shows distinct tags with counts.

Examples

$ columbus memory add context --type decision \
    --title "Default port is 8080" \
    --body "parseConfig falls back to 8080 when PORT is unset" \
    --evidence src/config.ts:4-6 --ref symbol:parseConfig --tag config
mem_001 [decision] Default port is 8080

$ columbus memory add epic  --title "Ship search" --tag infra
$ columbus memory add story --parent epic_001 --title "Indexing"
$ columbus memory add task  --parent story_001 --title "Index FTS"
$ columbus memory update task task_001 --status in_progress --comment "started"
$ columbus memory update epic epic_001 --add-ref file:internal/search/search.go

$ columbus memory list task --parent story_001
1 tasks
  task_001 [in_progress] Index FTS (story_001)

$ columbus memory list tag
2 tags
  config (1)
  infra (1)

$ columbus memory remove epic epic_001 --force   # cascades stories + tasks

References are drift-checked against indexed file/dir/memory/symbol targets; an unresolved ref surfaces as a warning on the item (never fatal). Inspect any entity with show (show epic/show task), and move whole projects with import & export.

Exit codes

0 success (incl. "usable with warnings") · 2 usage (e.g. remove without --force, unknown kind/status) · 3 not initialized. See Exit Codes.

See also

Project Memory · Tracking Work: Epics, Stories & Tasks · import & export

Clone this wiki locally