Skip to content

Memory and persona

Three separate mechanisms decide what Yachiyo carries between conversations. They are easy to confuse, so:

What it holdsWho writes it
MemoryRevisable notes linked to past conversationsThe agent, via remember or automatic review
SOUL.mdThe assistant’s persona and evolving traitsYou and the agent
USER.mdWho you are, as structured tablesThe agent, via updateProfile

Conversations remain the original record. Memory contains notes that help Yachiyo find those conversations again: what mattered, why it is worth revisiting, and any conditions or uncertainty. Notes can be revised or deleted without changing the original dialogue. Existing structured memories remain readable.

Automatic recall brings a small amount of related context and source references into a run. Exact quotes, historical decisions, and claims about completed actions still need the original evidence; a note is not proof.

Two settings in Settings → Sources → Memory:

  • Enable memory — pulls recalled context into runs and allows explicit saves. On by default.
  • Auto-distill after runs — eligible conversations are reviewed in the background for a few useful, source-linked notes. Turning this off stops background review; remember and manual conversation saves remain available.

The same pane lists every stored term grouped by topic, with a Forget action per row. Forgetting removes the stored note, not its source conversation.

remember accepts a prose note. The runtime links the current message and tool invocation automatically; notes about earlier discussions can cite references returned by querySource. An existing note ID allows revision or deletion. Yachiyo may also write a note when a meaningful decision or correction is worth carrying forward, rather than recording routine progress every turn.

querySource accepts text to search original conversations and notes together, or ref to open a source with surrounding dialogue. Search keeps notes separate from original excerpts and combines overlapping source hits. Conversations do not need a note to be discoverable. A note whose source is unavailable is shown without a fabricated excerpt. Advanced table, time, and folder queries remain available; default discovery uses a bounded result window.

~/.yachiyo/SOUL.md is the assistant’s own document — how it behaves, how it talks, what it tends toward. Part of it is a trait log: dated observations that accumulate over time, so the persona drifts with use rather than staying frozen at whatever you wrote on day one.

The direct way to change it is to say so:

From now on, state the tradeoff before the recommendation.

It can edit its own soul document, and a trait phrased as a durable preference lands better than one you write about yourself in the third person.

Editing by hand works too — in the app, or from the CLI:

Terminal window
yachiyo soul traits list
yachiyo soul traits add "States the tradeoff before the recommendation"
yachiyo soul traits remove <key>

Added traits are filed under today’s date heading. remove takes the hash key from list, not a position. See the soul CLI reference.

~/.yachiyo/USER.md is your profile, and it is not free text — each section is a Markdown table with a fixed schema, which is what lets the agent update one row without rewriting the document.

The sections depend on who is talking:

Owner (you):

SectionColumns
ProfileKey, Value
PreferencesKey, Value
Collaboration NotesTopic, Note

Guest (someone reaching you through a channel):

SectionColumns
ProfileKey, Value
PreferencesKey, Value
NotesTopic, Note

Group (a group chat):

SectionColumnsNotes
PeopleNickname, Identity, Notes
Group VibeAspect, Descriptionmax 8 rows, expires after 7 days
Topic HintsTopic, Hintmax 6 rows, expires after 3 days

Every row also carries a Since timestamp, managed automatically. The row caps and TTLs on group sections are deliberate — a group’s vibe is a rolling impression, not an archive.

The agent maintains all of this through the updateProfile tool. You can edit the file directly too; it is just Markdown.

  • Threads marked private are excluded from search and CLI listings unless you pass --include-private.
  • Guest conversations get filtered memory: keywords listed in memoryFilterKeywords are redacted from memory results, so a Telegram stranger cannot pull your notes out of the assistant.
  • Guests get their own USER.md mode, so what the agent learns about a visitor never lands in your profile.

See Channels for the rest of the guest model.