Skip to content

Extras

  • links, curator and meta report take --scope (default scopes.query_default) and show only notes the read gate releases for that scope. With query_default = "both", the default, they cover every scope unless you pass --scope.

  • links: writes LINKS.md (never inside a note folder, so it never turns into a searchable note) with topics that share a month or an entity, and months where topics on both sides of a scope barrier are busy. Entities come from entities.txt: one per line, Name|alias|alias, prefix i: for case-insensitive matching.

  • curator: rcllr curator lists open loops, quiet topics, conflicting "as of" dates and stale active notes. A date conflicts when the text names a newer "as of" day than the note's own date. rcllr curator --prompt prints a weekly LLM prompt that turns the scan into a proposal report under curator.report_dir. The prompt proposes; it never changes notes. To keep a note out of the scan after a "keep" verdict, give it curator_keep: <date> in its frontmatter (curator.keep_key renames the field); it returns after that day. On a topic README it also hides the quiet topic.

  • codex_sync: installs the Codex hook.

  • claude_memory: rcllr import-memory mirrors Claude Code's auto memory into the brain, so it follows you to every machine and context finds it next to your notes. Claude Code keeps that memory per project and on one machine only. The import goes one way: Claude's memory stays the source, and each run rewrites the mirror under topics/claude-memory/<project>/. A memory Claude deleted turns archived. Set it up like this:

    [extras]
    claude_memory = true
    
    [claude_memory]
    projects = ["*"]                                # every project, or a list like ["~/Sites/shop"]
    exclude = []                                    # projects to leave out
    scope = "work"                                  # the scope of most projects
    scope_by_project = ["~/Sites/blog=private"]     # projects with another scope

    Agents write that memory themselves. So every mirrored note says it is not an instruction, links in it become plain text, and it counts 60 percent of an own note in the ranking (imported_percent). To import after every Claude Code session, add a SessionEnd hook to ~/.claude/settings.json that runs rcllr --root ~/brain import-memory --from-hook. It imports only the project the session ran in and never blocks the session.

  • codex_memory: the same for Codex. Codex keeps one memory for all projects and writes a summary per session under ~/.codex/memories/rollout_summaries/, each naming the folder the session ran in. rcllr imports only the summaries whose folder lies in a listed project, into topics/codex-memory/ with the scope memory-codex. Codex memories are off by default; turn them on in ~/.codex/config.toml with memories = true under [features]. --codex-home (default $CODEX_HOME or ~/.codex) points elsewhere. To import after every Codex session, add a SessionEnd hook to ~/.codex/config.toml. Codex gives such a hook 3 seconds and waits for it, so start the import detached:

    [[hooks.SessionEnd]]
    [[hooks.SessionEnd.hooks]]
    type = "command"
    command = 'nohup rcllr --root "$HOME/brain" import-memory --serious >/dev/null 2>&1 &'

    Codex asks you once to trust a new hook. Its summaries appear some time after a session, so each run imports every listed project, not only the one that just ended.

  • routes: a routes.json entry like {"routes":[{"aliases":["meal plan"],"sources":"topics/meals/plan-*.md","scope":"private","kind":"dated-plan"}]} lets context "meal plan next week" open exactly the plan files named plan-2026-10-05-to-11.md that overlap next week, and only their matching table rows. A route never opens the rest of the folder. An alias must contain a real word (three letters or more, not a filler word). A route opens sensitive plan files only with "allow_sensitive": true in its entry; without it the normal sensitivity rules apply.