Six months ago you worked it out and wrote it down. The note is still in your repository. Samong makes it findable again — by you, and by every AI tool you work with.
No account. No cloud. One binary. Your notes never leave the machine — there is nothing for anyone to read, including us.
The part that cannot be copied
Not rows in someone's database with a Markdown export button. Actual
.md files, beside the code they explain — so they move with
the branch, show up in review, and open in the editor you already use.
Point Samong at a project root and it works out what is a note and what
is a dependency's README.
Delete the index whenever you like. samong reindex rebuilds
it from the files, because the files were always the truth.
a repository, as Samong sees it
my-api/ ├── src/ # code ├── ARCHITECTURE.md # a note ├── decisions/ │ ├── rate-limiting.md # a note │ └── why-not-redis.md # a note ├── node_modules/ # 1,214 .md — skipped └── .gitignore # decides what counts $ samong doctor 4 project note(s) in scope skipped 1,214 .md file(s) not tracked as notes no ambiguous titles among project notes
One memory, every assistant
Samong speaks the Model Context Protocol, so any tool that supports it reads and writes the same notes. An agent searches before it starts, and writes down what it worked out when it finishes. Next session — or next tool — it is already there.
one line, per client
# Claude Code $ claude mcp add --scope user samong -- samong-mcp # Codex CLI / ChatGPT desktop $ codex mcp add samong -- samong-mcp # Gemini CLI $ gemini mcp add samong samong-mcp # Qwen Code $ qwen mcp add samong samong-mcp # Kimi Code CLI $ kimi mcp add samong -- samong-mcp # Grok Build $ grok mcp add samong -- samong-mcp
MCP is a feature of the client, not the model. GLM and DeepSeek
ship no MCP client of their own — run them inside one that does and they
see the same tools. Because samong-mcp runs on your machine,
a browser-only assistant cannot reach it, which is the point.
An agent can list, read, search, save and follow links — but it cannot erase knowledge. Deletion stays a human act.
Having no delete tool was only half a guarantee: saving replaces the whole file, so an agent that never opened a note could drop three years of it and be told the save succeeded. read_note now hands back a hash of what it gave, and overwriting an existing note requires passing that hash in. A stale hash, or none at all, is an error — and the file on disk is left exactly as it was.
Search returns a small number of hits by default, counted across all vaults. Every extra hit is context the agent pays for on every later turn.
What you actually get
| Where notes live | Plain .md in your repositories. The index is disposable and rebuildable. |
|---|---|
| What it runs on | One binary on your machine. No account, no vendor, works offline. |
| Editing | Obsidian-compatible [[wikilinks]]. Use Obsidian, your editor, or the built-in web UI — same files. |
| Finding | Full-text search with dictionary word segmentation, a link graph, backlinks across projects. |
| Knowing it works | samong eval scores search against questions somebody actually asked, each paired with the notes that answer it — hit@k, MRR, and how often a question the vault cannot answer gets answered anyway. |
| Seeing | The web UI opens on a map of the vault; typing dims everything that does not answer you. |
| Licence | Apache-2.0. Fork it, ship it commercially, embed it. The name and logo are not covered — rename what you ship. |
One more thing, if it applies to you
If your notes are in English this changes nothing for you. If they are in Thai, Japanese or Chinese, words run together with no spaces: most engines see one long token and find nothing, or match a fragment that means something else. Samong cuts with a dictionary, so a word buried mid-sentence is still a word. Thai ships today, via the newmm dictionary.
The bar marks what matched; the hairlines mark where the dictionary cut a word. Nothing here is a space — the sentence is one unbroken string.
why substring matching is not enough
Searching ตลาด ("market") by substring also hits
ตลาดหลักทรัพย์ ("stock exchange") — a different thing. And
searching for the exchange finds nothing unless you happen to type the
exact prefix the text starts with.
Segmentation gives you the words, so ranking and highlighting work the way they do in English.
Install
No terminal, no configuration, no account. Nothing to install alongside it — the web UI is inside the binary.
start here — a package manager
# macOS and Linux $ brew tap waanvar/samong && brew install samong # Windows > scoop bucket add samong https://github.com/waanvar/scoop-samong > scoop install samong # Arch Linux $ makepkg -si (packaging/aur, until the AUR submission lands) # or, with Rust already installed $ cargo install samong
This is the recommended route, not a shortcut for experts. Each of these fetches the archive itself and checks it against the published SHA-256; cargo compiles locally. Nothing arrives through a browser, so the warning described below never appears — macOS never attaches the quarantine flag it would otherwise refuse to open, and Windows has no download reputation to weigh. Each tap's CI installs on a real runner and asserts this rather than assuming it.
then open it
| Windows | Open Samong.exe |
|---|---|
| macOS | Samong.app |
| Linux | samong-app |
On the first run it makes a vault at Documents/Samong, writes
two notes in it, and opens your browser. The
button in the corner stops it — the server outlives the browser tab, so
closing the tab is not the same as quitting.
or from a terminal, pointed at code you already have
$ samong vault add my-api /path/to/my-api $ samong-server start # opens http://127.0.0.1:3117
xattr -dr com.apple.quarantine Samong.app samong samong-server samong-mcpOr right-click
Samong.app and choose Open, which asks once.
On Windows, choose More info → Run anyway.
Every file above ships a .sha256 beside it on the
releases page
— check it.