|
1 | 1 | # Changelog |
2 | 2 |
|
3 | | -## Unreleased |
| 3 | +## v0.5.2 |
4 | 4 |
|
5 | 5 | ### New features |
6 | 6 |
|
| 7 | +- **`coop model` — route a VM at a host-side local model** (#352) — |
| 8 | + Points Claude Code and Codex at a local model server (Ollama, LM |
| 9 | + Studio, vLLM, llama.cpp) running on the host instead of the cloud, |
| 10 | + configured per tool under `[claude.local_model]` / |
| 11 | + `[codex.local_model]` in `config.toml`. `coop model <vm>` reports the |
| 12 | + per-tool mode and resolved endpoint; `coop model <vm> local` routes |
| 13 | + the VM at the local model(s) and `coop model <vm> remote` restores |
| 14 | + the cloud defaults. The selection is a persisted per-VM setting (not |
| 15 | + a per-launch flag), so it applies to `coop shell`, `coop claude`, |
| 16 | + `coop codex`, and VS Code alike; switching writes guest config over |
| 17 | + SSH with no rebuild and is re-applied on the next boot. A |
| 18 | + `localhost`/loopback `host_url` is rewritten to the backend's |
| 19 | + guest-visible host automatically. |
| 20 | + |
7 | 21 | - **`coop codex` bypasses Codex's sandbox by default** (#353) — `coop codex` |
8 | 22 | now launches Codex with `--dangerously-bypass-approvals-and-sandbox`, so it |
9 | 23 | runs unrestricted like `coop claude`. The VM is the isolation boundary, and |
|
21 | 35 | instance's name, index, IP, and workspace association. Both require a |
22 | 36 | stopped instance; `commit --force` overwrites an existing image name. |
23 | 37 |
|
| 38 | +### Fixes |
| 39 | + |
| 40 | +- **OAuth-token users no longer land in Claude Code's onboarding wizard** |
| 41 | + (#87) — Running `coop claude` with subscription auth |
| 42 | + (`CLAUDE_CODE_OAUTH_TOKEN` forwarded into the guest) dropped the user |
| 43 | + into the first-run theme/login wizard, whose login step ignores the |
| 44 | + token. Claude Code gates the wizard on `hasCompletedOnboarding` in |
| 45 | + `~/.claude.json`, which coop never staged. coop now seeds that flag on |
| 46 | + boot when an OAuth token is forwarded and the flag is not already set. |
| 47 | + Idempotent and a no-op for API-key and no-credential users. Reverts |
| 48 | + when anthropics/claude-code#8938 is fixed upstream. |
| 49 | + |
| 50 | +- **Installed Claude plugins survive a stop/start cycle** (#350) — |
| 51 | + `write_managed_claude_settings` rewrote `~/.claude/settings.json` from |
| 52 | + scratch on every boot with only a `permissions` block, deleting the |
| 53 | + `enabledPlugins` and `extraKnownMarketplaces` keys Claude Code uses to |
| 54 | + track installed plugins and marketplaces. Plugins installed on first |
| 55 | + boot then showed as uninstalled in `/plugins` after a restart. coop now |
| 56 | + merges its managed `permissions` into the existing file, preserving |
| 57 | + those keys. |
| 58 | + |
| 59 | +- **`~` is expanded in every `config.toml` path field** (#349, #351) — A |
| 60 | + leading `~` was only expanded for `claude.config_dir`, |
| 61 | + `codex.config_dir`, and `claude.marketplaces`; other host-path fields |
| 62 | + (`data_dir`, `firecracker_bin`, `vm.kernel_path`, per-profile |
| 63 | + `marketplaces`) kept a literal `~`, so e.g. `data_dir = "~/coop-data"` |
| 64 | + resolved to a literal `./~/coop-data` directory. Expansion now happens |
| 65 | + at deserialization via a `ConfigPath` newtype, so every path field — |
| 66 | + including ones added later — is expanded on every load path. |
| 67 | + |
24 | 68 | ## v0.5.1 |
25 | 69 |
|
26 | 70 | ### New features |
|
0 commit comments