Memory is the workspace's shared knowledge: what one session learns, every future session and every other agent starts from. Read it at session start, capture cheaply while you work, curate what proves durable. It lives locally with the repository, shared across all its git worktrees, never pushed to the remote. Always call a subcommand; bare nitro agent opens an interactive TUI and blocks the session. If commands report no workspace, run nitro agent init once from the repository root (see the sibling nitro-task skill). If nitro itself is not found, the CLI is not installed — stop and tell the user to install it: https://chillicream.com/docs/nitro/cli/installation. Do not attempt to install it yourself.
Core principles
- Memory holds what you would otherwise repeat in every prompt. Standing preferences, durable domain facts, references. Work and decisions in flight live in
nitro agent tasks; messages to agents go overnitro agent mail; follow-ups and TODOs go to the tracker. - Every agent reads everything. Reads are not filtered by actor. Writes record who saved it: pass
--actor <name>onsaveandlog, the only two memory commands that take an actor. The name is handed to you, never invented. With Nitro's hooks installed, the session-start hook states it in your context:Your Nitro actor name is "maya".Otherwisenitro agent loginallocates one and prints it. - Capture is cheap, curation is deliberate.
logwithout ceremony;saveorpromoteonly what proved durable. - One self-contained fact per memory. A future session has no chat context: "Prefer X over Y because Z", not "as discussed, X".
- Save only what every agent may read and what stays true. Credentials, tokens, and personal data stay out (deletion is not an erasure guarantee); volatile state -- current branch, counts, progress -- belongs in the journal or the tracker.
Recall
nitro agent memory context --tag billing --max-chars 4000 # prompt-ready block for session start
nitro agent memory search "deploy checklist" --output json
nitro agent memory recent --limit 5 --output json
nitro agent memory show "01hqzxk8..." --output json # full curated entry with text
nitro agent memory tags --output json # reuse existing tags; an unfindable memory is lost
contextadmits whole curated entries, newest first, until--limitor--max-chars; it never truncates an entry. Zero entries on a small budget means the newest entry alone exceeded it -- raise the budget, the store is not empty. Its plain output is the prompt block; with--output jsonit returns{"entries": [...]}, the one exception to the{"items": [...]}wrapper every other listing uses.searchis whole-word AND over the entry text: every query word must appear as a whole word, any order -- no operators, no partial words. A failed search proves the words are absent, not the knowledge; retry with words the text would actually contain. Curated only by default:--collection journalorallincludes the journal, and any--tag/--typefilter silently drops every journal hit.
Capture
nitro agent memory log "Investigated the flaky order test; suspect clock skew, unresolved." --actor maya
The journal takes text (or --file), no type, no tags, immutable -- and write-only through the CLI: no command prints a journal entry's text, and show/update/forget reject journal ids with "Memory '' does not exist."
Curate
nitro agent memory save "API JSON is camelCase; never snake_case." --type decision --tag conventions --actor maya
nitro agent memory promote # list unpromoted journal candidates
nitro agent memory promote "01hqzxk8..." --type fact --tag testing
saverequires--type:fact,decision,preference,reference, or a custom type. Types and tags are trimmed and lowercased, then must be only lowercase letters, digits, and hyphens, up to 40 characters.- When a closed task's decision yields a standing rule, save the outcome as a
--type decisionmemory; the deliberation stays in the task. promotecopies a journal entry verbatim into curated (--typerequired, recordspromotedFrom). Re-promoting returns the existing copy and ignores new flags; change them withupdate.- Because journal text is unreadable, promote what you logged while it is still in your context. For a cold candidate: promote with a provisional
--type,showthe copy to read it,forgetit if it does not earn curation (re-promoting later works).
Housekeeping
nitro agent memory update "01hqzxk8..." --type decision --add-tag api --remove-tag draft
nitro agent memory forget "01hqzxk8..." --force # hard delete: no tombstone, no undo