v0.5.2
New features
-
coop model— route a VM at a host-side local model (#352) —
Points Claude Code and Codex at a local model server (Ollama, LM
Studio, vLLM, llama.cpp) running on the host instead of the cloud,
configured per tool under[claude.local_model]/
[codex.local_model]inconfig.toml.coop model <vm>reports the
per-tool mode and resolved endpoint;coop model <vm> localroutes
the VM at the local model(s) andcoop model <vm> remoterestores
the cloud defaults. The selection is a persisted per-VM setting (not
a per-launch flag), so it applies tocoop shell,coop claude,
coop codex, and VS Code alike; switching writes guest config over
SSH with no rebuild and is re-applied on the next boot. A
localhost/loopbackhost_urlis rewritten to the backend's
guest-visible host automatically. -
coop codexbypasses Codex's sandbox by default (#353) —coop codex
now launches Codex with--dangerously-bypass-approvals-and-sandbox, so it
runs unrestricted likecoop claude. The VM is the isolation boundary, and
Codex's Linux sandbox does not work in the guest (no functioning bubblewrap),
which previously made every shell command Codex ran fail on sandbox setup.
Passcoop codex --askto keep Codex's sandbox and approval prompts. -
coop commit+coop restore— checkpoint and roll back an instance (#289) —
coop commit <name> --image <image>saves a stopped instance's
filesystem as a reusable image, adocker container commit-style
backup (files, not live memory). The committed image is an ordinary
coop image:coop imageslists it andcoop up --imagelaunches new
instances from it.coop restore <name> --image <image>rolls a
stopped instance back to an image's filesystem in place, keeping the
instance's name, index, IP, and workspace association. Both require a
stopped instance;commit --forceoverwrites an existing image name.
Fixes
-
OAuth-token users no longer land in Claude Code's onboarding wizard
(#87) — Runningcoop claudewith subscription auth
(CLAUDE_CODE_OAUTH_TOKENforwarded into the guest) dropped the user
into the first-run theme/login wizard, whose login step ignores the
token. Claude Code gates the wizard onhasCompletedOnboardingin
~/.claude.json, which coop never staged. coop now seeds that flag on
boot when an OAuth token is forwarded and the flag is not already set.
Idempotent and a no-op for API-key and no-credential users. Reverts
when anthropics/claude-code#8938 is fixed upstream. -
Installed Claude plugins survive a stop/start cycle (#350) —
write_managed_claude_settingsrewrote~/.claude/settings.jsonfrom
scratch on every boot with only apermissionsblock, deleting the
enabledPluginsandextraKnownMarketplaceskeys Claude Code uses to
track installed plugins and marketplaces. Plugins installed on first
boot then showed as uninstalled in/pluginsafter a restart. coop now
merges its managedpermissionsinto the existing file, preserving
those keys. -
~is expanded in everyconfig.tomlpath field (#349, #351) — A
leading~was only expanded forclaude.config_dir,
codex.config_dir, andclaude.marketplaces; other host-path fields
(data_dir,firecracker_bin,vm.kernel_path, per-profile
marketplaces) kept a literal~, so e.g.data_dir = "~/coop-data"
resolved to a literal./~/coop-datadirectory. Expansion now happens
at deserialization via aConfigPathnewtype, so every path field —
including ones added later — is expanded on every load path.