Commands at a glance
What the agent remembers
OpenSRE keeps durable knowledge across sessions so you never repeat yourself:- Who you are — your name, role, and how you like to work
- Your infrastructure — cluster names, naming conventions, known-flaky services
- Your repositories — owner/name, purpose, default branch, CI behavior, and repo-specific conventions
- Your preferences — report formats, notification choices, defaults
- Operational learnings — failures, their causes, and the fix that worked
- An index of every memory — one line each (name and summary), with your profile and preferences first.
- The full text of the memories that match your request — up to five, picked by matching the words of your message, plus the active repository and your connected integrations.
acme/payments shows up in full when you ask about the
checkout deploy, even if you saved ten other notes since. Any other memory is
one memory_recall away; ask “what do you remember about the payments repo?”
and the agent searches every memory for the words you used.
Multiple repositories
OpenSRE keeps one active repository per GitHub or GitLab context while retaining facts for many repositories. Naming a different repository makes it active for unqualified follow-up requests in that session; it does not delete or overwrite the repositories used earlier. Durable details are stored as separaterepository memories, one per repository, and remain available in later
sessions. A new session defaults the active target to the current workspace
checkout, while the other repository memories stay available for recall.
Saving memories
Talk normally — no special phrasing:/demo and the
first-run picker), and memories about demo, sample, or synthetic repositories
and runs are hidden from the agent and archived.
Viewing and deleting memories
/memory forget prod-cluster-conventions, or ask the agent:
“forget what you know about the prod cluster”. Forgetting a memory also
removes the consolidated summary, which is rewritten without it in the
background as you keep chatting. Summaries of conversations that had started
before you forgot it are not used to write the new one.
Upkeep
When you send a message, at most once every six hours, OpenSRE tidies the store in the background:- Archives demo, sample, and synthetic memories, and memories neither updated nor used for 120 days. Your profile and preferences never expire.
- Merges duplicates — two repository memories about the same
owner/repobecome one: the most recently updated is kept, the other’s notes are added to it under a “Merged from” heading (lines it already has are not repeated), and the other’s file is archived. When the notes would not fit in one memory, both memories stay as they are. - Writes
memory_summary.md— a short summary of who you are, your preferences, your repositories, and recurring failures and fixes, shown to the agent above the index. It is skipped when no LLM is configured.
.archive/ into the memory folder.
Where memories live
On a laptop, memories are plain markdown files under~/.opensre/memory/:
OpenSRE creates the folder (and an empty index) the first time memory is used
in a chat or via
/memory. Files are stored locally and unencrypted.
Override the directory with OPENSRE_MEMORY_DIR when you need a custom path.
On a Slack or Discord silo, each member gets a private memory folder inside the
organization’s mounted context volume
(<org root>/users/<user_id>/memory/), not a shared host folder. Telegram
turns are unbound and stay host-global under the flat ~/.opensre/memory/
layout.
The index, the matching memories, and the summary are sent to your configured
LLM provider with each turn. You can open, edit, or delete the files directly
at any time; the index rebuilds on the next write.
Turning memory off
The background review makes one lightweight LLM call every six turns and one
on exit; the upkeep makes at most one call every six hours. On shell exit the
review runs to completion so durable facts are not dropped. Never share
secrets or credentials expecting them to be remembered — the memory ingestion
path blocks obvious tokens, passwords, private keys, and credential-shaped
values, and redacts matching spans before anything is sent to the LLM.
Gateway (Slack / Telegram / Discord / Buzz)
On Slack, Discord, and Buzz, when org scope is bound, memory is per-user scoped — each member’s facts live under their ownusers/<id>/memory/ folder
inside the org volume, so one user’s memories cannot appear in another’s
prompts or channel replies. Telegram turns are unbound and stay host-global.
Because Telegram is host-global (and to keep memory off by default on shared
hosts), the Slack and Telegram gateway path is off by default; opt in
with OPENSRE_MEMORY_GATEWAY_ENABLED=1. Discord and Buzz use the same
actor-scoped storage layout when scoped; they are not gated by that opt-in flag
today — use OPENSRE_MEMORY_DISABLED=1 if you need memory off there.