Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
144 commits
Select commit Hold shift + click to select a range
c557f1a
The boot session is read from a clock that counts from boot when the …
MaxFreedomPollard Oct 20, 2026
1f3855b
The command written into a client's config is the console script pip …
MaxFreedomPollard Oct 20, 2026
35e48dc
A store the disk refuses part way takes its bytes back off the journa…
MaxFreedomPollard Oct 20, 2026
8099b6f
A client config, Claude Desktop's config or Claude Code's settings sa…
MaxFreedomPollard Oct 20, 2026
549f85b
Every download is built from the tag on GitHub's machines, Intel Macs…
MaxFreedomPollard Oct 20, 2026
893afab
On macOS an acknowledged store survives a power cut, and a power cut …
MaxFreedomPollard Oct 20, 2026
24dc490
Looking up a stored credential no longer writes to the session direct…
MaxFreedomPollard Oct 20, 2026
278a7c2
The macOS app is built with the wheels for the macOS it declares, and…
MaxFreedomPollard Oct 20, 2026
04d222e
`integrate codex` writes a table Codex can always read, and leaves a …
MaxFreedomPollard Oct 20, 2026
312d94a
Bug reports ask for the CPU architecture, WSL, containers and sandbox…
MaxFreedomPollard Oct 20, 2026
6f9f775
A compaction's rename is synced through the vault's folder, so the st…
MaxFreedomPollard Oct 20, 2026
f6905aa
The compartment command inside the macOS app runs wherever the app is…
MaxFreedomPollard Oct 20, 2026
e395bac
Running `integrate codex` again refreshes an entry whose command or v…
MaxFreedomPollard Oct 20, 2026
5280086
A vault on a filesystem that cannot lock says so at once instead of w…
MaxFreedomPollard Oct 20, 2026
fba2513
A process that may not use Unix domain sockets embeds with its own mo…
MaxFreedomPollard Oct 20, 2026
0ac9743
The macOS installer runs only on the Macs its app can start on, and a…
MaxFreedomPollard Oct 20, 2026
0df2e8e
On OpenBSD the embedding daemon reads the connecting user's uid from …
MaxFreedomPollard Oct 20, 2026
2eeb176
`compartment init` on a Python whose SQLite lacks FTS5 says which int…
MaxFreedomPollard Oct 20, 2026
1575b01
Unlock refuses OpenBSD's on-disk shared memory, and every "no place f…
MaxFreedomPollard Oct 20, 2026
e4958a6
A red CI job says why on its summary page: pytest's failures and last…
MaxFreedomPollard Oct 20, 2026
8e7f67d
A Windows process started without USERNAME is still recognised as its…
MaxFreedomPollard Oct 20, 2026
2ab5bb0
The embedding daemon's lock and spawn files are never opened through …
MaxFreedomPollard Oct 20, 2026
2b5348a
`integrate zed` and `integrate vscode` write into a settings file tha…
MaxFreedomPollard Oct 20, 2026
ea23a44
A memory or a search holding half an emoji is stored and answered, wi…
MaxFreedomPollard Oct 20, 2026
20b179f
The embedding daemon starts even when the home directory holds a scri…
MaxFreedomPollard Oct 20, 2026
74139ee
On Windows, start at sign-in runs the tray app with pythonw.exe, so n…
MaxFreedomPollard Oct 20, 2026
b54b4a5
The macOS app build runs unattended in CI with only uv's standalone P…
MaxFreedomPollard Oct 20, 2026
c40f5c1
The boot instant is read on macOS and the BSDs without starting a pro…
MaxFreedomPollard Oct 20, 2026
18ae36b
OpenBSD's kern.boottime is read from the sysctl binary instead of bei…
MaxFreedomPollard Oct 20, 2026
389dfc8
On Windows, the panel's buttons start the CLI without a console windo…
MaxFreedomPollard Oct 20, 2026
e427c92
Every memory tool tells the client it works on this machine alone, an…
MaxFreedomPollard Oct 20, 2026
9603864
The offline guard refuses every socket family that can reach another …
MaxFreedomPollard Oct 20, 2026
3377012
The macOS app declares macOS 13.4, the minimum its bundled onnxruntim…
MaxFreedomPollard Oct 20, 2026
a882be7
A memory imported with its date as text, milliseconds, NaN or infinit…
MaxFreedomPollard Oct 20, 2026
1fa447a
Claude Code settings whose hooks are not the shape Claude Code reads …
MaxFreedomPollard Oct 20, 2026
a4b9c5a
The capture hook's command reaches Git Bash on Windows intact, and a …
MaxFreedomPollard Oct 20, 2026
f08b595
`compartment dash` serves while the browser opens, opens the Windows …
MaxFreedomPollard Oct 20, 2026
f660fc9
A discovery date sent in milliseconds is read as the day it names, an…
MaxFreedomPollard Oct 20, 2026
9a63980
A CLI command that meets a missing file, a closed pipe or Ctrl-C ends…
MaxFreedomPollard Oct 20, 2026
d4afe5c
`integrate claude` writes Claude Desktop's config where the Windows M…
MaxFreedomPollard Oct 20, 2026
1994186
`compartment update` and `uninstall` recognise a uv tool install on W…
MaxFreedomPollard Oct 20, 2026
6c6183e
A panel that cannot start names the command that fixes it on this mac…
MaxFreedomPollard Oct 20, 2026
593fb3d
The capture hook, the memory import and the /compartmentalize skill f…
MaxFreedomPollard Oct 20, 2026
9285cdf
A vault config, an export or a curation plan saved by a Windows edito…
MaxFreedomPollard Oct 20, 2026
6b75e1f
An import whose memories contain a Unicode line or paragraph separato…
MaxFreedomPollard Oct 20, 2026
3cdae1c
`compartment serve --vault PATH` works: --vault, --caller, --keyfile …
MaxFreedomPollard Oct 20, 2026
15919ce
On Xfce, MATE, Cinnamon and other desktops that never start graphical…
MaxFreedomPollard Oct 20, 2026
1382aa4
A clock set back no longer stops the hourly expiry sweep of a vault t…
MaxFreedomPollard Oct 20, 2026
5f8b45a
The embedder names the Visual C++ installer for the Python's own arch…
MaxFreedomPollard Oct 20, 2026
9cd15c9
Start at login refuses, and says where to run it instead, inside a Fl…
MaxFreedomPollard Oct 20, 2026
63608c5
Cline and Kilo Code are wired where their current versions read MCP s…
MaxFreedomPollard Oct 20, 2026
bf36b72
Codex, Gemini CLI, Qwen Code, Copilot CLI, OpenCode, Zed and LM Studi…
MaxFreedomPollard Oct 20, 2026
6bdfe2e
In a container with a CPU quota, or under a narrowed CPU set, the emb…
MaxFreedomPollard Oct 20, 2026
73f588f
`pip install compartment` works on Windows on ARM and Intel Macs agai…
MaxFreedomPollard Oct 20, 2026
4363ee5
`integrate continue` connects Continue instead of printing a block, t…
MaxFreedomPollard Oct 20, 2026
531f438
A server whose terminal closes saves the reads it audited before it e…
MaxFreedomPollard Oct 20, 2026
f7b8394
On Windows, the check for a running tray app counts only this user's …
MaxFreedomPollard Oct 20, 2026
4b8c5f6
`integrate goose` prints an extension block Goose reads, for the conf…
MaxFreedomPollard Oct 20, 2026
0c7b51f
`integrate` knows Kiro, Amazon Q Developer CLI, Junie, Factory Droid …
MaxFreedomPollard Oct 20, 2026
6a42253
The Claude Code plugin declares its version, and every manifest in th…
MaxFreedomPollard Oct 20, 2026
48b87f9
An interrupted LongMemEval download leaves no truncated dataset behin…
MaxFreedomPollard Oct 20, 2026
e148a18
The MCP Registry entry names the project's website and icon, and the …
MaxFreedomPollard Oct 20, 2026
db52e31
A mistyped index_precision setting no longer stops a large vault from…
MaxFreedomPollard Oct 20, 2026
f7d394c
The Linux and macOS installers work with externally managed Pythons, …
MaxFreedomPollard Oct 20, 2026
58c5a21
The /compartmentalize skill for OpenClaw goes into the skills directo…
MaxFreedomPollard Oct 20, 2026
924a2f3
`compartment import` reads a file saved by PowerShell or Notepad, and…
MaxFreedomPollard Oct 20, 2026
e56f946
A plaintext export is written readable by its owner alone
MaxFreedomPollard Oct 20, 2026
0c1f72b
Codex lists the plugin as Compartment, under Productivity, with start…
MaxFreedomPollard Oct 20, 2026
67ba611
`atomize --out` writes its decrypted listing readable by its owner al…
MaxFreedomPollard Oct 20, 2026
f8e1c86
The Add to LM Studio button registers the server under the same calle…
MaxFreedomPollard Oct 20, 2026
412e16f
Memory Claude Code keeps in the directory its autoMemoryDirectory set…
MaxFreedomPollard Oct 20, 2026
2134d60
A Claude Code memory note saved with a byte order mark is imported wi…
MaxFreedomPollard Oct 20, 2026
50b25d8
On Windows the Claude Code capture hook stores notes kept under a hom…
MaxFreedomPollard Oct 20, 2026
5b5c83e
The Windows installer picks a 64-bit Python its dependencies have whe…
MaxFreedomPollard Oct 20, 2026
3c20640
Docs: INTEGRATIONS.md says where `integrate` writes for every client …
MaxFreedomPollard Oct 20, 2026
021b352
A new signing identity is written readable by its owner alone
MaxFreedomPollard Oct 20, 2026
22f0cb4
Merge the desktop apps and macOS build work
MaxFreedomPollard Oct 20, 2026
5420bf7
The macOS app is built on every push as well as at release, for Apple…
MaxFreedomPollard Oct 20, 2026
468a0f8
The Docker image reads a host user's vault, keeps itself offline, and…
MaxFreedomPollard Oct 20, 2026
b0fbe77
A vault past 20,000 vectors opens in milliseconds where usearch has n…
MaxFreedomPollard Oct 20, 2026
94ec5a2
Claude Desktop gets a one-click extension: an MCP Bundle that runs th…
MaxFreedomPollard Oct 20, 2026
4ac6f9a
A Windows machine up for more than 24.9 days no longer relocks the va…
MaxFreedomPollard Oct 20, 2026
dfb2ca2
A save by another process is noticed even where the filesystem report…
MaxFreedomPollard Oct 20, 2026
a8d931c
An import or a memory pack whose text holds half an emoji is installe…
MaxFreedomPollard Oct 20, 2026
8cc3da8
Docker's MCP Catalog and Continue's hub get entries prepared in the r…
MaxFreedomPollard Oct 20, 2026
a5c7796
The Gemini CLI extension identifies itself with the caller `integrate…
MaxFreedomPollard Oct 20, 2026
ca280a1
Claude Code settings with `"hooks": null` get the capture hook instea…
MaxFreedomPollard Oct 20, 2026
54e2d87
The Oh My Pi extension's memory tools declare their approval tier and…
MaxFreedomPollard Oct 20, 2026
f24c4e8
`integrate vscode` finds and writes the Flathub VS Code on Linux
MaxFreedomPollard Oct 20, 2026
77fb2a9
A text holding half of a cut emoji is embedded, as U+FFFD, instead of…
MaxFreedomPollard Oct 20, 2026
b58fe25
Merge improve/4.13 into ws/server for the apps worker's systray helpers
MaxFreedomPollard Oct 20, 2026
9ee627c
The Claude Code skill follows CLAUDE_CONFIG_DIR by the same rule as t…
MaxFreedomPollard Oct 20, 2026
fea9c1e
The AI install guide for Cline gets an agent past PEP 668, Windows an…
MaxFreedomPollard Oct 20, 2026
63eec0c
A store that could not be journalled is never answered as a duplicate…
MaxFreedomPollard Oct 20, 2026
801945b
On Linux, init registers start at login only for a Python that can dr…
MaxFreedomPollard Oct 20, 2026
3d80e59
On Windows, init starts the tray app with pythonw.exe, so no console …
MaxFreedomPollard Oct 20, 2026
82278a4
The website stops rendering the shared skill and plugin manifests as …
MaxFreedomPollard Oct 20, 2026
9b80f38
On native Windows, `integrate hermes` puts the provider plugin where …
MaxFreedomPollard Oct 20, 2026
6a02ea5
Merge the platform, lock-model and installer work
MaxFreedomPollard Oct 20, 2026
358b484
docs/PLUGINS.md says, store by store, what the listing is, how a user…
MaxFreedomPollard Oct 20, 2026
d4ef546
Shell scripts, the Dockerfile and the workflows keep LF endings in a …
MaxFreedomPollard Oct 20, 2026
afae50c
RELEASING.md lists the new versioned manifests, and the Claude plugin…
MaxFreedomPollard Oct 20, 2026
c9cb130
Under mcp 1.x the server no longer logs a line to stderr for every re…
MaxFreedomPollard Oct 20, 2026
964ced5
`compartment serve` under mcp 1.x exits cleanly when the client hangs…
MaxFreedomPollard Oct 20, 2026
097a5a0
A damaged vault config is reported as a damaged config, not as a lock…
MaxFreedomPollard Oct 20, 2026
270a77c
Tests: a session over real stdio pipes checks the frames, the exit st…
MaxFreedomPollard Oct 20, 2026
660c52a
Building the Claude Desktop bundle before the release reaches PyPI st…
MaxFreedomPollard Oct 20, 2026
70e7dfb
COMPARTMENT_PASSPHRASE opens the vault where the boot-session store c…
MaxFreedomPollard Oct 20, 2026
634c210
Merge improve/4.13 into ws/server for the platform worker's session a…
MaxFreedomPollard Oct 20, 2026
2c601c5
`compartment init` finishes on a machine that cannot keep an unlock c…
MaxFreedomPollard Oct 20, 2026
740e26c
claude_hooks, claude_memory and agent_skill import where there is no …
MaxFreedomPollard Oct 20, 2026
932c8df
A vault path starting with ~ is the home one wherever it comes from, …
MaxFreedomPollard Oct 20, 2026
9229819
Merge the storage engine work
MaxFreedomPollard Oct 20, 2026
fd130cc
Tests: the stdio session test reads its replies before it hangs up, a…
MaxFreedomPollard Oct 20, 2026
c941cf8
Merge the agent integration work
MaxFreedomPollard Oct 20, 2026
6e8a6f3
Windows always locks byte zero of the lock file, a save outlasts OneD…
MaxFreedomPollard Oct 20, 2026
8a93a76
A server pointed at a vault that does not exist starts and says so, a…
MaxFreedomPollard Oct 20, 2026
e7d168f
Merge the plugin and store listing work
MaxFreedomPollard Oct 20, 2026
06d1e4a
Merge improve/4.13 into ws/server for the storage, integration and pl…
MaxFreedomPollard Oct 20, 2026
06ac458
Publishing a release also builds the Claude Desktop extension against…
MaxFreedomPollard Oct 20, 2026
6a980a5
Tests: the dashboard-reuse test waits for the browser thread and no l…
MaxFreedomPollard Oct 20, 2026
f090ca5
README: where Compartment runs, an install that works on externally m…
MaxFreedomPollard Oct 20, 2026
644a351
`integrate openclaw` registers the server under mcp.servers, where cu…
MaxFreedomPollard Oct 20, 2026
aa0b99b
The CLAUDE.md block is written where Claude Code reads it when CLAUDE…
MaxFreedomPollard Oct 20, 2026
f5e1495
After connecting Claude Desktop, integrate says to quit it completely…
MaxFreedomPollard Oct 20, 2026
b55265e
Tests: the failed-replace test checks the retry budget rather than a …
MaxFreedomPollard Oct 20, 2026
b6fe852
`compartment hook status` and `hook uninstall` name a Claude Code set…
MaxFreedomPollard Oct 20, 2026
de50a6d
A vault config file that cannot be used ends a CLI command with its o…
MaxFreedomPollard Oct 20, 2026
fa7ece6
`compartment import` also reads UTF-32 and UTF-16 written without a b…
MaxFreedomPollard Oct 20, 2026
2198849
Where there is no session directory for the embedding daemon's socket…
MaxFreedomPollard Oct 20, 2026
eaf015a
A client config keeps its own line endings on every system, and the W…
MaxFreedomPollard Oct 20, 2026
8f8ceb6
COMPARTMENT_MODEL_DIR finds downloaded models where there is no home …
MaxFreedomPollard Oct 20, 2026
33e2d47
Merge the MCP server, CLI and embedder work
MaxFreedomPollard Oct 20, 2026
7cc2f66
COMPARTMENT_SESSION_DIR works without a home folder: the session dire…
MaxFreedomPollard Oct 20, 2026
0654db9
Creating a vault records the model from its pinned description instea…
MaxFreedomPollard Oct 20, 2026
183dae8
A new 2FA keyfile is created private and exclusive, a model download …
MaxFreedomPollard Oct 20, 2026
bdb46c3
Release 4.13.0
MaxFreedomPollard Oct 20, 2026
7314e3d
Tests: the mistyped-precision index test accepts HNSW's approximate t…
MaxFreedomPollard Oct 20, 2026
356c398
CI keeps one run per branch: the newest push or pull-request run canc…
MaxFreedomPollard Oct 20, 2026
4555dd3
Tests and the Windows tray job match what Windows really does
MaxFreedomPollard Oct 20, 2026
502a189
CI pins setup-uv to an exact release, and the mistyped-precision test…
MaxFreedomPollard Oct 20, 2026
f37718d
CI fails a hung test with its stack after five minutes, and no test j…
MaxFreedomPollard Oct 20, 2026
a06ee3a
A stalled test reports itself while the job is still alive, and the d…
MaxFreedomPollard Oct 20, 2026
9815d55
The installer tests can no longer reach the real Mac's Python: the ma…
MaxFreedomPollard Oct 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"plugins": [
{
"name": "compartment",
"description": "Encrypted, fully offline memory for Claude Code. One vault on your machine, shared with Claude Desktop, Cursor, Hermes and any other MCP client; 14 memory tools plus the /compartmentalize skill. Requires `pip install compartment && compartment init` first.",
"description": "Encrypted, fully offline memory for Claude Code. One vault on your machine, shared with Claude Desktop, Cursor, Hermes and any other MCP client; 14 memory tools plus the compartmentalize skill. Requires `pip install compartment && compartment init` first.",
"author": { "name": "Max Freedom Pollard" },
"category": "productivity",
"source": "./",
Expand Down
4 changes: 3 additions & 1 deletion .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
{
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
"name": "compartment",
"displayName": "Compartment",
"description": "Encrypted, fully offline memory for Claude Code: one vault on your machine, shared with Claude Desktop, Cursor, Hermes and any other MCP client. Adds 14 memory tools and the /compartmentalize skill. Requires `pip install compartment && compartment init` first (the vault passphrase is yours to choose).",
"version": "4.13.0",
"description": "Encrypted, fully offline memory for Claude Code: one vault on your machine, shared with Claude Desktop, Cursor, Hermes and any other MCP client. Adds 14 memory tools and the compartmentalize skill (/compartment:compartmentalize). Requires `pip install compartment && compartment init` first (the vault passphrase is yours to choose).",
"author": {
"name": "Max Freedom Pollard",
"url": "https://github.com/MaxFreedomPollard"
Expand Down
8 changes: 8 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,11 @@ src/compartment/models/** -text
*.onnx -text
*.mpack -text
*.jsonl -text

# Scripts a POSIX shell or a container reads. A Windows checkout with
# core.autocrlf rewrites them to CRLF, and bash then fails on `$'\r'` - the
# usual way to meet it is running install-linux.sh from that checkout inside
# WSL, or `docker build` from Windows copying CRLF files into the image.
*.sh text eol=lf
Dockerfile text eol=lf
.github/workflows/*.yml text eol=lf
12 changes: 10 additions & 2 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,17 @@ body:
- pip / pipx / uv (PyPI)
- Compartment.pkg (macOS one-click)
- Compartment.dmg
- A plugin or extension store (Claude Code, Gemini CLI, Hermes, Claude Desktop bundle...)
- Docker
- From source
validations:
required: true
- type: input
id: platform
attributes:
label: OS and Python
placeholder: "macOS 26.2 / Python 3.12.4"
label: OS, CPU and Python
description: Include the architecture (Apple silicon / Intel / ARM64 / x86_64), and say so if it runs under WSL, in a container, or from an agent's sandboxed shell.
placeholder: "macOS 26.2, Apple silicon / Python 3.12.4"
validations:
required: true
- type: dropdown
Expand All @@ -47,6 +49,12 @@ body:
- Cline / Roo Code
- Codex CLI
- Gemini CLI
- VS Code / GitHub Copilot
- Windsurf
- Zed
- OpenCode
- Goose
- LM Studio
- Other MCP client
- CLI only
- The menu bar / tray app
Expand Down
111 changes: 111 additions & 0 deletions .github/release-notes/v4.13.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
Compartment 4.13.0 is a compatibility release: it is about Compartment installing, starting and staying connected on every system and in every agent, including the places it used to fail quietly - agents' sandboxed shells, Windows on ARM, Intel Macs, containers, and GUI apps that cannot see your PATH. 4.12.0 was merged but never published, so its 79 stability fixes ship here too.

## Downloads

| File | For |
|---|---|
| `Compartment-4.13.0.pkg` | macOS on Apple silicon, one click, with the menu bar app |
| `Compartment-4.13.0.dmg` | macOS on Apple silicon, drag to Applications |
| `Compartment-4.13.0-intel.pkg` | **new:** macOS on Intel, one click |
| `Compartment-4.13.0-intel.dmg` | **new:** macOS on Intel, drag to Applications |
| `compartment-4.13.0.mcpb` | **new:** Claude Desktop extension (attached a few minutes after publishing) |
| `compartment-4.13.0-py3-none-any.whl` | pip and offline installs, any OS |
| `compartment-4.13.0.tar.gz` | source |
| `SHA256SUMS.txt` | checksums of all of the above |

Everything here was built from this tag on GitHub's machines, and PyPI carries the very same wheel and sdist.

```bash
pipx install compartment && compartment init # or: uv tool install compartment
```

The Mac app needs macOS 13.4 or newer. The README's new **Where it runs** table gives every system, CPU and Python version CI tests.

## Highlights

- **Works from an agent's own shell.** Claude Code and Codex run commands in a sandbox that blocks the macOS boot clock, Unix sockets and some file modes. Every `compartment` command an agent ran there used to fail with "Cannot identify this boot session". It now uses the vault you unlocked, embeds in-process, and never hangs.
- **Clients can always start the server.** `compartment integrate` writes the full path of the installed command. GUI apps started from the Dock or Start menu do not inherit your PATH, and a bare `compartment` failed there with "spawn compartment ENOENT".
- **`pip install compartment` works on Windows on ARM and Intel Macs again.** Two indirect dependencies (cryptography, argon2-cffi-bindings) stopped shipping wheels there, and pip tried to compile them. A new CI check fails if any supported platform would need a compiler again.
- **Intel Mac installer.** The Mac app is built for Apple silicon and Intel, and no longer bundles libraries that need a newer macOS than it says it supports.
- **A plugin in every store.**
- New: a Claude Desktop extension (`.mcpb`).
- Updated: the Claude Code plugin now carries a version, plus better Codex and MCP Registry listings, and corrected Gemini CLI and LM Studio listings.
- Ready to submit: Docker MCP Catalog and Continue entries.
- The full list is in the new `docs/PLUGINS.md`.

## Agents and clients

- 33 clients, adding Kiro, Amazon Q Developer CLI, Junie, Factory and Crush. Continue gets its own block file, and Goose gets a real YAML extension entry.
- **New config locations:** Claude Desktop's Microsoft Store build, Cline 4, Kilo Code 7, Cline/Roo/Kilo inside Cursor, Windsurf, VSCodium and Flathub VS Code, and Zed on macOS.
- **Moved config homes followed:** `CODEX_HOME`, `GEMINI_CLI_HOME`, `QWEN_HOME`, `COPILOT_HOME`, `OPENCODE_CONFIG_DIR`, `GOOSE_PATH_ROOT`, `CLAUDE_CONFIG_DIR`, and OpenClaw's state and config variables.
- **OpenClaw:** the server is written under `mcp.servers`, where current OpenClaw reads it. An old entry is moved there.
- **Config edits keep what is already there:**
- Comments in Zed and VS Code files, and the user's own keys in a Codex entry.
- Each file's own line endings.
- Files saved by Notepad or PowerShell (byte order mark, UTF-16) are read correctly.
- `integrate codex` can no longer corrupt config.toml.
- **Claude Code capture hook:** quoted correctly for Git Bash on Windows and non-ASCII user names. It also follows `CLAUDE_CONFIG_DIR` and `autoMemoryDirectory`.
- **MCP:**
- Every tool says it never reaches the internet.
- Tool errors reach the model with their reason.
- A missing vault says "run `compartment init`" instead of "locked".
- `compartment serve --vault PATH` works.
- Closing a client's terminal keeps the session's audit rows.
- mcp 1.x no longer logs a stderr line per request.
- The real floor is mcp 1.21.2: nothing older runs beside today's pydantic.

## Operating systems

- **Windows:**
- A machine up for more than 24.9 days no longer relocks the vault and deletes the unlock credential.
- A process started without USERNAME no longer deletes everyone's credential.
- No console windows behind the tray or the panel's buttons, and start at sign-in uses pythonw.
- With fast user switching, another user's tray is not taken for yours.
- Saves outlast OneDrive and antivirus holding the vault.
- The lock always takes byte zero.
- The Visual C++ message names the ARM64 installer on ARM.
- **macOS:**
- An acknowledged store survives a power cut (F_FULLFSYNC).
- The boot time is read in-process instead of forking `sysctl` on every vault open.
- **Linux:**
- Start at login keeps working on Xfce, MATE, Cinnamon and LXQt.
- It is refused, with a reason, inside Flatpak or a strict Snap.
- A missing Tk names the exact package for your distribution.
- `compartment dash` works on WSL (it opens the Windows browser) and on headless machines (it prints how to reach it).
- **Containers:**
- A container run as an arbitrary user with no home folder works, with `COMPARTMENT_PASSPHRASE` or `COMPARTMENT_SESSION_DIR`.
- Inference threads respect CPU quotas.
- The Docker image reads a host user's vault, runs with `--network none` and keeps the offline guard on.
- **BSD, Alpine, Termux:**
- FreeBSD, NetBSD, DragonFly and OpenBSD get the boot clock.
- OpenBSD's on-disk shared memory is refused for the unlock secret.
- The installers point Alpine, FreeBSD and Termux at their own onnxruntime package.
- **Installers:**
- They handle "externally-managed-environment" Pythons (Debian 12+, Ubuntu 23.04+, Fedora, Arch, Homebrew).
- They pick a Python that works on the machine.
- They survive being re-run or piped into a shell.
- **Offline guard:** it now refuses every socket family that can reach another machine, not just IP: Bluetooth, VSOCK/Hyper-V (WSL 2's host) and packet sockets.

## Storage

- A disk that fills up or a sync that fails part way through a store no longer leaves a vault that will not open.
- Text containing half an emoji (a lone surrogate) is stored and searched instead of failing.
- Imports with odd dates, NaN, or Unicode line separators no longer break search.
- A save by another process is noticed even on filesystems with coarse timestamps.
- A store whose journal write failed is never treated as written.
- A vault on a filesystem that cannot lock says so at once.
- Above 20,000 records the exact index stays when usearch has no SIMD (as inside a sandbox). Rebuilding HNSW there took 50 s at 25,000 records on every open.
- A Python whose SQLite lacks FTS5 gets a clear message.
- `COMPARTMENT_PASSPHRASE` is still tried when the boot-session lookup fails.

## For maintainers

- **Release workflow:** a tag now builds every download, Intel included, and drafts the release. Publishing it uploads those same files to PyPI, then builds and attaches the Claude Desktop extension.
- **CI coverage:**
- Every declared Python (3.11-3.14) on Windows, macOS and Linux, plus ARM64 Linux, Windows on ARM and an Intel Mac.
- The macOS app on both architectures.
- The built wheel installed with pipx and driven over MCP on each system.
- The suite at the lowest dependency versions the bounds allow.
- A weekly wheel-coverage check.
- **Failure reports:** a red job states its failing tests on the run page.
- **One-time store submissions** that need an account: listed in `docs/PLUGINS.md`.
Loading
Loading