TreeMap
A free, open-source disk-space visualizer. Squarified treemap, duplicate hunting, disk-full forecasting, and cleanup that only ever moves files to the Trash.
翻譯準備中
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證CMM — Context Memory Manager: a self-hosted, offline file manager for the memory folders and prompts of AI tools like Claude Code, Gemini CLI and Codex. Encrypted, versioned, backed up to your own drives.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗AI agents and chat tools keep their memory in plain folders: personas, project knowledge, scratchpads, notes, datasets. CMM gives those folders a proper home. Browse and edit them in one app, mark folders as memories, run any agent CLI (Claude Code, Gemini CLI, Codex…) right inside them and keep it working as a background job, lock or encrypt the sensitive ones, keep a history of every change, and back everything up to a USB stick or external drive, ready to clone onto another computer. Nothing leaves your machine: there is no account, no cloud and no telemetry.
CMM runs two ways:
A file tree and a file pane, side by side. Markdown opens formatted and edits in a rich editor or as source; code opens with syntax colours in a code editor; images, PDFs and CSV/TSV tables have their own viewers. Excel and Word files open in the browser, and PowerPoint, older Office, OpenDocument and RTF files are shown as PDFs when LibreOffice is installed; videos show a still frame with their length. Drag and drop, copy and paste across drives, upload files or whole folders, replace a file and see what changed, download as zip, and a trash you can restore from. Light, dark or system theme, per user. Hide the tree (⌘/Ctrl+\) to give the editor the whole window.
| Markdown editor | Code editor |
|---|---|
| CSV and TSV tables | Images |
Press ⌘/Ctrl+K to switch drives, jump to a page, or find any file or folder by name.
Turn any folder into a memory with a name, a colour and a description, or start one from a template (LLM persona, project knowledge, agent scratchpad). Each memory gets an overview with its size, recent files and quick actions, a card of its own on the Drives page (memories on plugged-in drives too, so a drive from another computer shows what it holds), and its own view whose file tree starts at the memory. Folders can be made view-only or locked, so an agent or a slip of the mouse can't change them.
| Memory overview | Protection |
|---|---|
Encrypt a folder with AES-256-GCM. Its key lives in a key file that you keep, for example on a USB stick. Files stay encrypted on disk and in every backup; unlock the folder with its key file to read and edit them inside CMM, and it locks again on its own.
| Encryption wizard | Unlocking a folder |
|---|---|
Turn on versioning for a folder and CMM keeps a Git history of it: every save is a version you can compare and restore, with undo and redo, named snapshots, and nothing to learn about Git.
Back up any folder to another drive: copy, mirror, or dated snapshots. Select folders and memories in the tree (or open a folder's settings) to back them up into a new memory on a drive, with their names, icons, encryption and history; plug that drive into another computer with CMM and copy them onto it the same way. Profiles can run as soon as a drive is plugged in, interrupted backups resume where they stopped, and a live picture shows your computer, its drives and every running transfer.
| Backup topology | A running transfer |
|---|---|
Run any agent CLI you like, right inside a memory: Claude Code, Gemini CLI, Codex, opencode, Aider, or your own scripts and Git. Open a terminal on a folder or memory and it starts there, with your own shell, PATH and tools, so the agent reads and writes that memory directly. Terminals dock along the bottom of the window like chat windows: keep several open at once (one per agent or memory), minimize them (a dot shows new output), resize them, and pick up where you left off after a reload. Admins only; on a server they stay off until an admin turns them on.
Leave an agent working while you're away. Run as a job on a terminal's title bar turns it into a job: it keeps
running in the background, like a tmux session, after CMM is closed, restarted, updated or even crashes. The Jobs
page shows a card for each one, with when it started, how long it has run and in which folder, and the dashboard and
navigation show them too. Open a job to see its terminal across the whole window, then open it in the editor, turn it
back into an ordinary terminal, or discard it, which ends it and leaves no trace.
Open a CMM server from your phone's browser. Phones get a bottom bar and a menu drawer, and the explorer shows the files, the open file or the terminal one at a time. Terminals work with the on-screen keyboard (autocorrect and all), scroll with a swipe, and have a key bar with Esc, Tab, Ctrl, ^C, arrows and Enter, enough to drive Claude Code from a phone.
Admin, editor and viewer accounts with per-storage access, sign-in lockout, auto-lock, a password check before sensitive actions, and HTTPS on the server. Drives (internal folders, external disks and USB sticks) appear and disappear live, and can be ejected from CMM. A drive the computer can only read (such as an NTFS drive on a Mac) is shown as read-only, with the reason, instead of failing when you write to it. The version shows on the sign-in page and the Drives page.
| Users | Security |
|---|---|
Two illustrated guides cover installing and using CMM, written for non-technical users:
npm run docs:pdf builds both as PDFs (dist/docs/); the desktop app and the server package include them.
Requires Node.js 22 (see .nvmrc).
npm install
npx playwright install chromium # once: used to build the PDF guides and the app icons
npm run dev # http://127.0.0.1:7420, data in .cmm-dev-data/
The first visit opens the setup wizard. In this (server) mode it asks for a one-time setup code, which the terminal
prints ([cmm] first-run setup code: …) and .cmm-dev-data/setup-code holds. To browse a folder, list it in
.cmm-dev-data/config.json and restart:
{ "storageRoots": [{ "path": "/absolute/path/to/a/folder", "label": "My files" }] }
Plugged-in USB drives show up on their own.
Optional settings go in a .env file, which is never committed: copy .env.example and uncomment what you need
(CMM_MODE, CMM_DATA_DIR, CMM_CONFIG, HOSTNAME, PORT, NEXT_TELEMETRY_DISABLED). The npm scripts above set
the mode and data folder themselves.
npm run build # the server in dist/app, the desktop main process in dist/electron, the PDF guides in dist/docs
npm start # runs dist/app/entry.js
npm run install:desktop # build, sign, quit CMM, install in /Applications, open it
npm run install:desktop -- --rollback # go back to the version installed before
It refuses while CMM is running a backup or another job (--force to quit anyway), keeps the previous version for
--rollback, and leaves CMM's data alone (each version migrates it on start). --skip-build installs the last build.
Put a code signing identity from your keychain (security find-identity -v -p codesigning) in .cmm-local.json, which
is not committed:
{ "signingIdentity": "Apple Development: Your Name (TEAMID)" }
With it, macOS keeps CMM's access to Documents, Desktop and Downloads across updates. Without it the app is ad-hoc signed, a new identity for macOS each build, and it asks for those permissions again after every update.
npm run build:desktop # dmg on macOS, nsis on Windows, AppImage + deb on Linux, in dist/desktop/
Build each installer on its own operating system and architecture: the native modules (better-sqlite3,
@node-rs/argon2) are installed for the machine that runs npm install. Options after --: --dir (unpacked app
only), --skip-build, --arch x64, --targets AppImage. Without a signing certificate the apps are unsigned (ad-hoc
on macOS).
The Desktop installers workflow (.github/workflows/desktop-installers.yml) builds the Windows and Linux (x64)
installers on GitHub's runners of each platform, so they can be made from a Mac:
gh workflow run desktop-installers.yml -f tag=v1.1.0 -f platform=all -f attach=true builds a tag and attaches them to
its release.
npm run package:server -- --arch x64 # or arm64
Build it on Linux with C++ build tools installed (sudo apt install build-essential python3): npm install compiles
the terminal module there. This makes an offline tarball with its own Node.js runtime and install.sh, which sets CMM
up as a hardened systemd service with the cmm admin command. The Server Guide walks
through the install.
Each release has the x64 package ready to download, with cmm-server-setup.sh
(deploy/linux/cmm-server-setup.sh): one script that installs it behind nginx on a
Tailscale network, with a real HTTPS certificate (sudo ./cmm-server-setup.sh --package ./cmm-server-<version>-linux-x64.tar.gz).
scripts/update-installer.sh copies the package for the version in package.json and that script into an installer
folder (~/cmm-installer, or --dir) and removes older packages; --build builds the package first.
| Command | What it does |
|---|---|
npm run lint / npm run typecheck / npm test | ESLint, TypeScript and the Vitest suite (tests/) |
npm run build:web then npm run test:e2e | Builds only the web server, then runs the Playwright end-to-end suite (e2e/) against it on throwaway servers and data in .cmm-test-data/; the desktop app is not started or installed |
npm run check:offline | Builds and fails if the output contains a fetchable external URL |
npm run docs:pdf | Builds the PDF guides from docs/guides/ |
npm run icons:app | Regenerates the desktop app icons from public/icons/cmm/logo.svg |
npm run db:generate | Creates a database migration after a schema change |
Next.js 16 and React 19, TanStack Query, Tailwind CSS 4, SQLite with Drizzle, Tiptap and CodeMirror, pdf.js, xterm.js and node-pty, simple-git, Electron 45 and electron-builder. Fonts: Oxanium, Martian Mono and Inter (SIL Open Font License). Every dependency's license is listed in the app under Settings › About.
Contributions are welcome: bug reports, fixes, features and better docs. Read CONTRIBUTING.md for setting up, how the code is organised and what a pull request needs, then pick an open issue or open one to discuss your idea. Please report security problems privately through Report a vulnerability.
MIT © 2026 Joshua Miasco