Skip to main content
Three commands write things you want remembered, and they are not interchangeable. The line that matters: learn and decision log record what happened. rule add changes what happens next. If you want future sessions to actually follow something, it is a rule; if you are writing down what you found out, it is a note or a decision.

Recording a decision

Why it works. --rationale is required, not optional, and that is the whole point of using decision log rather than learn. A decision without its reasoning can only be obeyed or ignored later. With the reasoning attached it can be revisited, which is what you actually want six months on when the constraint that produced it has changed. The gotcha. The decision gets a stable slug of the form {domain}.{decision}. Note it, or find it later with decision search, because that slug is how you edit it. Next rung. --recall adds extra text to help the decision surface later. Use it for the words you will actually search with, which are rarely the words in the decision itself.

Fixing a decision you got wrong

Why it works. decision update edits in place, addressed by the slug or by the exact decision text. The node keeps its address and every edge pointing at it survives. The gotcha. Prefer this over base decision delete. Delete is keyword-matched with no preview, and it removes the decision’s history rather than correcting it. Search first, update second. base decision show basemode.docs-deploy-on-a-push-to-main prints one decision with every field, --json for a script.

Decisions that apply everywhere

A decision filed under an always-on domain, such as GLOBAL, used to arrive on every prompt, whatever the prompt was about. Since 0.16.0 it arrives only on a prompt that contains one of its keywords, once per session, and one with no keywords is listed at session start only.
Keywords match as whole words, case ignored. --keywords replaces the list, and --keywords "" clears it. Pick the words you would actually type when the decision matters.

Recording anything else

--type takes insight, correction, decision, commitment or shift, and defaults to insight. --project and --entity add extra edges. Why it works. A note is a graph node with edges to its domain and to anything else you attach it to, so it can be reached from more than one direction later. That is the difference between this and a text file. The gotcha. --domain is required unless you are using --mention. It is the anchor that keeps notes findable rather than accumulating unattached. Corrections come first. Session start shows your active notes in a memory block, corrections first, then the rest, newest first, whole notes only, up to [budget] memory_chars (4,000 characters). A correction that names exactly one record gets linked to it by the 0.16.0 update or base doctor --fix --yes; one that names nothing stays a correction. To have base notice corrections as you make them, see Corrections and tuning.

Editing and removing notes

--list gives you the slugs. Both --update and --remove take one.

Recording that something came up again

Why it works. This increments the note’s mention count and stamps when it last happened, which is how you find the things you keep bumping into. The gotcha. A mention does not protect a note from base graph purge --stale. That measures lastRead, and mentions write a different timestamp. Verified from source at 0ace1ba, the commit the shipped 0.15.2 binary was built from.

Getting it back

Which one to reach for:
  • base recall searches notes, literally and quickly. Use it when you roughly know what you are looking for and want the raw hits.
  • base decision search is the same idea, scoped to decisions and their reasoning.
  • base graph query retrieves a subgraph and synthesizes an answer across it. Use it for open questions where the answer is assembled from several facts rather than found in one.
base recall writes, despite being a search. It stamps lastRead on every note it returns, and that is the timestamp base graph purge --stale measures. Recalling a note therefore protects it from the next purge.Injection during a turn deliberately does not do this, so the hot path never pays for a graph write. Only the explicit command stamps.

People and organizations

The gotcha. --domain is required, deliberately, so an entity always has something to be relevant to. An entity with no anchor would never surface.

Goals and reminders

Give a reminder exactly one of --in, --at or --due. A due reminder surfaces under DUE NOW at every session start, numbered, most overdue first, and DUE NOW always sits on the first screen. Since 0.16.0 you can act on one without deleting it:
snooze moves its due time forward from now (30s, 3m, 2h, 1d). archive stops it surfacing and keeps it; unarchive brings it back. Each takes a slug or the number on its DUE NOW line. base reminder add with the name of an archived reminder brings that one back. An overdue reminder warns before it archives itself. From 8 days overdue, its DUE NOW line says when it will archive and how to snooze it. It archives itself only when it is 10 or more days overdue and that warning was first shown at least 2 days earlier, and the next session start says so once with the unarchive command. It is kept, never deleted. The gotcha. base reminder remove is still a hard delete with no preview. Archive is almost always what you want.

Flat-file memories

base memory list shows the loose-file memories on this machine with their paths. base memory purge removes the ones whose content the graph already holds. The gotcha. There is no preview on purge. Run list first and read it, because that is the only look you get.

Next

Rules and domains

Writing something that fires on its own, rather than something you look up.

Graph and memory reference

Every flag on every command here.