Nanobot memory

Two-layer memory system with Dream-managed knowledge files.

install
source · Clone the upstream repo
git clone https://github.com/HKUDS/nanobot
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/HKUDS/nanobot "$T" && mkdir -p ~/.claude/skills && cp -r "$T/nanobot/skills/memory" ~/.claude/skills/hkuds-nanobot-memory && rm -rf "$T"
manifest: nanobot/skills/memory/SKILL.md
source content

Memory

Structure

  • SOUL.md
    — Bot personality and communication style. Managed by Dream. Do NOT edit.
  • USER.md
    — User profile and preferences. Managed by Dream. Do NOT edit.
  • memory/MEMORY.md
    — Long-term facts (project context, important events). Managed by Dream. Do NOT edit.
  • memory/history.jsonl
    — append-only JSONL, not loaded into context. Prefer the built-in
    grep
    tool to search it.

Search Past Events

memory/history.jsonl
is JSONL format — each line is a JSON object with
cursor
,
timestamp
,
content
.

  • For broad searches, start with
    grep(..., path="memory", glob="*.jsonl", output_mode="count")
    or the default
    files_with_matches
    mode before expanding to full content
  • Use
    output_mode="content"
    plus
    context_before
    /
    context_after
    when you need the exact matching lines
  • Use
    fixed_strings=true
    for literal timestamps or JSON fragments
  • Use
    head_limit
    /
    offset
    to page through long histories
  • Use
    exec
    only as a last-resort fallback when the built-in search cannot express what you need

Examples (replace

keyword
):

  • grep(pattern="keyword", path="memory/history.jsonl", case_insensitive=true)
  • grep(pattern="2026-04-02 10:00", path="memory/history.jsonl", fixed_strings=true)
  • grep(pattern="keyword", path="memory", glob="*.jsonl", output_mode="count", case_insensitive=true)
  • grep(pattern="oauth|token", path="memory", glob="*.jsonl", output_mode="content", case_insensitive=true)

Important

  • Do NOT edit SOUL.md, USER.md, or MEMORY.md. They are automatically managed by Dream.
  • If you notice outdated information, it will be corrected when Dream runs next.
  • Users can view Dream's activity with the
    /dream-log
    command.