CLI bootstrap rework so npx @agentmemory/agentmemory stops failing on Rancher Desktop and other Docker-shim daemons. The native iii-engine binary is now the first-class start path; Docker becomes opt-in. Also ships agentmemory stop so engines started in the background can be torn down without lsof | xargs kill. README agents grid reorders OpenHuman next to the other native-integration agents.
Added
-
agentmemory stopcommand (#396). Reads~/.agentmemory/iii.pidfirst, falls back tolsof -i :PORT -sTCP:LISTEN -t, sendsSIGTERM, waits 3s, escalates toSIGKILL. State file (~/.agentmemory/engine-state.json) records whether the engine was started natively or viadocker compose up -d, sostoprunsdocker compose -f <file> downfor Docker engines instead of signaling the host's Docker socket proxy by accident. -
AGENTMEMORY_USE_DOCKER=1env var. Opt-in path for users who want the bundleddocker-compose.ymlto keep handling iii-engine lifecycle. Without it, the CLI prefers the native binary in~/.local/bin/iii.
Changed
-
startEngine()fallback order rewritten (#396). New tier order: (1)iiion PATH, (2)~/.local/bin/iiior fallback paths, (3) interactive clackp.selectwith three choices — auto-install the pinned v0.11.2 binary, use Docker compose, or print manual install instructions and exit, (4) Docker compose only via explicit opt-in or the post-install failure fallback, (5) fail-loud with install instructions. CI / non-TTY environments auto-pick install. The Docker fallback was tier 2 and silently fired on every cold start; on Rancher Desktopdocker compose up -dreturns 0 even when the daemon's pull silently fails, which produced "engine started but REST never responded" misdiagnoses. -
Installer logic extracted from
runUpgradeintorunIiiInstaller(). Both first-run andagentmemory upgradenow share the same pinned-v0.11.2 curl-and-tar path. -
README agents grid reordered (#397). Row 1 is now Claude Code → Codex CLI → OpenClaw → Hermes → pi → OpenHuman → Cursor → Gemini CLI.
Fixed
-
CLI no longer kills its own parent process.
lsof -i :PORT -treturns every PID with an active TCP connection to the port, including the CLI's own keep-alivefetch()fromisEngineRunning(). Without a LISTEN filter,agentmemory stopwould SIGKILL itself — exit code 137, state files never cleaned up. Now filters to-sTCP:LISTENand dropsprocess.pidfrom the candidate set. -
agentmemory stopno longer clears the pidfile when a stale process holds the port. Pre-fix behaviour cleared the pidfile and printed "Nothing to stop" — the next run would silently start a second engine on a port that the first engine still owns. Now preserves the pidfile and surfaces the live PIDs. -
Docker-started engines stop safely. Pre-fix code called
findEnginePidsByPortand signaled whatever held :3111. When the engine was started viadocker compose up -d, that's the host's Docker socket proxy, not the engine — killing it took down Docker Desktop networking for every other container. The new state file letsrunStopdetect Docker-managed engines and rundocker compose downinstead.
Install
npx @agentmemory/agentmemory@0.9.14Or pin in package.json:
"@agentmemory/agentmemory": "0.9.14"Full changelog: https://github.com/rohitg00/agentmemory/blob/main/CHANGELOG.md#0914--2026-05-15