ShellRS
ShellRS는 Rust로 작성된 무료 오픈소스 SSH 클라이언트
같은 세션을 두 번 겪지 않기
Stop living the same session twice. Self-hosted memory for any AI agent, across sessions, projects, and machines: one app for your Mac, PC or Linux desktop, or one binary on a server. Tracks what work
개발 도구Rust · PythonGitHub @richarvey온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Self-hosted semantic memory for AI agents, served over MCP. Persistent sessions, experience scoring, a graveyard for dead ends and skills compiled from what worked, plus knowledge from the RSS feeds you read. One Rust binary on SQLite: a tray app for macOS, Windows and Linux, or a server.
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Stop living the same session twice.
Every coding agent session starts from zero. It doesn't know your project. It doesn't remember what failed last week. It has no idea you lost an evening working out why WebKitGTK quietly ignores a redirect from a custom URL scheme.
So you explain everything again, and the agent confidently suggests the exact thing that didn't work. Same alarm, same song. You're Bill Murray and your agent is Punxsutawney.
OmniMem fixes that. It gives your AI agent a memory that lasts across sessions, projects and machines, over MCP, so it works with whichever agent you like. It runs on your own kit and it's free.
claude> answer the settings form with a 303 redirect
⚠ WARNING: previously abandoned approach
303 from omnimem://: WebKitGTK never follows it (effort: 4/5)
→ answer with a page that replaces itself instead
That warning came from memory, not luck. A mistake you've already paid for doesn't get to charge you twice.
[!NOTE] 7.0.3 is the first release of OmniMem 7: one app in place of the four containers 6.x ran. The installers for every platform are on the releases page. Running 6.x? See Coming from 6.x: the 6.x Docker stack stays on the
v6.7.xbranch, and its one-line installer still works.
OmniMem 7 is a single binary. The MCP server, the memory engine, the embedding model, RSS ingestion and the database all live in one process, with your memories in one SQLite file. No containers to wrangle, no database server to babysit.
omnimem serve: a systemd service from the .deb or .rpm, or a container, configured with environment variables (one .env file for the service), with nothing graphical anywhere near it.The embedding model (all-MiniLM-L6-v2 on ONNX Runtime) runs locally. Nothing leaves the machine unless you add an Anthropic API key for the optional Claude Haiku features: fact extraction, query expansion, deeper contradiction checks and RSS summaries.
Everything is on the releases page, each file with a .sha256 beside it.
| Where | Download | What you get |
|---|---|---|
| Windows 10 and 11 (x64) | OmniMem-<version>-x64.msi | The tray app, installed for you alone with no administrator needed. Not signed yet, so SmartScreen asks first: More info, then Run anyway |
| macOS 13.4 or later (Apple silicon) | OmniMem-<version>-arm64.dmg | The menu bar app: drag it to Applications. There's no Intel build. omnimem-<version>-macos-arm64.tar.gz is the bare binary |
| Linux desktop (amd64, arm64) | omnimem-desktop-<version>-linux-<arch>.flatpak | The tray app with everything it needs: flatpak install --user the file. omnimem-desktop-<version>-linux-<arch>.tar.gz is the same app for systems without Flatpak, needing GTK 3, WebKitGTK 4.1 and libayatana-appindicator3 |
| Linux server (amd64, arm64) | omnimem_<version>_<arch>.deb, omnimem-<version>-1.<x86_64|aarch64>.rpm | The headless server as the omnimem systemd service, configured in /etc/omnimem/omnimem.env, with its data in /var/lib/omnimem. omnimem-<version>-linux-<arch>.tar.gz has an install.sh for other distributions |
| Docker (amd64, arm64) | richarvey/omnimem:<version> | The same server as a container, with one /data volume. See the Docker guide |
Linux builds need glibc 2.38 or newer: Debian 13, Ubuntu 24.04, Fedora 39 and later.
Then point your agent at http://127.0.0.1:8765/mcp. In the desktop app the tray menu does it for you: Add to Claude Code and Add to Claude Desktop check first so OmniMem is never added twice, and Copy MCP URL covers everything else. By hand, for Claude Code, that's:
claude mcp add --transport http --scope user omnimem http://127.0.0.1:8765/mcp
The server hands its own usage guide to every agent that connects, so there's no instructions file to copy around. The quick start covers the rest.
Five kinds of memory, all searched together when your agent recalls something:
The top result might be a decision from six months ago on another project, yesterday's fix, or an article that landed on Tuesday night. It doesn't matter where it came from, as long as it's useful.
It isn't a key-value store with an MCP wrapper. OmniMem tries to behave the way memory actually does: things fade, they sometimes contradict each other, and the hard-won stuff earns its place.
omnimem hook puts the project's briefing in the opening context of every session, stops a tool call that repeats a known dead end before it runs (handing back what failed and what worked instead), and records what a session changed when it ends. omnimem install-hooks sets them up. Over ten paired runs on one task, every attempt at the abandoned approach was stopped, no treated run hit a failing test suite against 8 of 10 without, and it cost 27% less.ACTIVE → DEPRIORITISED → ARCHIVED → DELETED. "Forget about X" usually means stop bringing it up, not wipe it from existence.find_duplicates().briefing() hands over project context, experience stats, stale memories, new articles, contradictions and skill suggestions in one go.The ranking behind every recall:
score = similarity x surface_score x recency x experience_weight x date_boost x trust
Similarity on its own isn't enough, so lifecycle state, age, how hard a lesson was to learn, whether it happened on the date you asked about and whether it's believed all get a say. What gets dropped as irrelevant is decided on similarity alone.
One memory for all of them: claude.ai, Claude Code, Claude Desktop, Cursor, GitHub Copilot, GitLab Duo, AWS Kiro, OpenCode, OpenAI Codex CLI and Open Design. 49 tools, served over streamable HTTP.
Run it on one machine and put it behind a reverse proxy, and every laptop and agent you use shares the same memory. A shared token covers your own clients; OAuth 2.1 with a login page covers claude.ai and anything else that signs in. See multiple machines.
flowchart LR
agent["AI agent<br/>Claude Code · claude.ai · Cursor · ..."]
user["You, in the settings window"]
subgraph omnimem["omnimem (one process)"]
mcp["MCP server<br/>streamable HTTP · token · OAuth 2.1"]
panel["Settings panel<br/>desktop app only, never on the network"]
rss["RSS scheduler"]
enrich["Enrichment worker"]
engine["Memory engine<br/>recall · lifecycle · skills"]
embed["Embedder<br/>ONNX Runtime"]
store[("SQLite file<br/>vectors searched in memory")]
end
agent -- ":8765/mcp" --> mcp
user --> panel
mcp --> engine
panel --> engine
rss --> engine
enrich --> engine
engine --> embed
engine --> store
Over the network it answers /mcp, the OAuth routes and /healthz, and that's the whole list. The settings window talks to the process directly, so there's no dashboard port for anyone else to find. More in the architecture doc.
No SaaS. No vendor lock-in. No context shipped off to someone else's servers.
dump_to_file() for a portable JSON export.There's no schema change in 7.0.9, so you can go back to 7.0.8 without a backup. One default moves: RECALL_WEAK_SCORE is now 0.40, up from 0.35, so a few more hits come back marked weak_match. Nothing is dropped or reordered by it. Set RECALL_WEAK_SCORE=0.35 if you want the old band back.
7.0.8 adds trust. The first start moves the database to schema version 5, and 7.0.7 can't open it afterwards, so take a backup first if you might go back.
After the upgrade, every fact and preference OmniMem has extracted from your notes is a candidate: still recalled, ranked at 0.9 until you confirm it, and left out of the briefing and skill compiles. Your own notes, agents' memories and RSS articles are all accepted and don't move. On a real store with thousands of candidates, 58 of 60 top-five results stayed exactly where they were.
You can leave them as they are, confirm them on the settings window's Unconfirmed page (one at a time, or everything extracted from one note), or confirm them all from a terminal:
omnimem trust list --limit 100000 --json | python3 -c 'import sys,json; print("\n".join(sorted({json.loads(l)["enriched_from"] for l in sys.stdin if json.loads(l).get("enriched_from")})))' > sources.txt
while read -r s <&3; do omnimem trust confirm-source "$s" --reason "confirmed in bulk"; done 3< sources.txt
Since 7.0.12 each confirm-source asks you to type the last six characters of the source's key, so this is for a handful of sources; for hundreds, the Unconfirmed page's Confirm all is quicker.
On a server install, run each omnimem as the service's user with its database: sudo -u omnimem omnimem --db /var/lib/omnimem/omnimem.db trust .... To have new extractions believed from the start instead, set TRUST_ENRICHMENT=accepted on the Configuration page or in omnimem.env. It only affects what's extracted from then on.
OmniMem 6 was a Docker Compose stack: Valkey, a Python MCP server, a web UI and an RSS worker. Version 7 does the same job as one program, and your memories come with you:
dump_to_file().omnimem import <file>, or restore it from the settings window's Backups page. Every memory gets re-embedded from its text (roughly 8 ms each), which also brings back any memory 6.x had stopped finding.The tools, the vectors and your compiled skills behave as they did, so nothing needs retuning. Recall scoring has three deliberate changes since 6.x: recency declines from day one rather than staying flat for 90 days (older memories rank a little lower; nothing extra is dropped), an abandoned outcome no longer scores 0.1, and recording an abandonment no longer suppresses anything. Your agents just need their URL changing from /sse to /mcp. 3.x backups import the same way. If your 6.x install is a clone of this repository, run git checkout v6.7.x in it before you next git pull: main is 7 now and has no Compose file. The quick start has the details, and 6.x itself carries on in the v6.7.x branch.
| Quick start | Installing, building from source, moving from 6.x, connecting your agent |
| Hooks for Claude Code | Briefing at session start, dead ends stopped before they run, sessions recorded |
| Configuration | Every setting, for the desktop app and headless installs |
| Features in depth | Lifecycle, graveyard, experience scoring, dedup, contradictions, briefing |
| The skill compiler | Compiling experience into loadable skills |
| MCP tool reference | All 49 tools |
| RSS and knowledge | Passive knowledge ingestion and promotion |
| Multiple machines | Reverse proxies, OAuth 2.1 for claude.ai, troubleshooting |
| Settings panel | The desktop app's window, page by page |
| Architecture | The process, the recall pipeline, design decisions |
| Atlas evidence |
Per-namespace specs, if you want to know exactly what gets stored and by whom: overview · episodic · project · knowledge · preference · skill
Found a bug or want something? Open an issue on GitHub. The code is developed on Squarecows, where pull requests are welcome, and mirrored to GitHub.
It's a Cargo workspace (Rust 1.91 or newer): cargo test runs the suite without needing GTK, and scripts/desktop-check.sh builds and smoke-tests the desktop app in a container. The scripts/*-package.sh scripts build each installer locally the way CI does. New MCP tools, extra scoring multipliers and other embedding models are all fair game.
MIT. Free to use, fork and modify. No enterprise tier, no hosted version, no strings.
Built by Ric Harvey @ SquareCows Ltd, an AI and automation consultancy for people who'd rather own their tools.
| Each Agent Memory Atlas mark, the code that earns it and the test that fails without it |
| Memory type specs | The storage model, field by field |
| Connection guides | Per-agent setup |
| Deployment guides | Docker · macOS · Raspberry Pi · AWS · GCP · Linux + Tailscale Funnel |