Repository navigation
Releases: anywh-sh/anywh
Release list
anywh v0.2.3
A two-click start
The desktop app's first run has been rebuilt. Click Set up on this machine, then Start: the app installs and starts the relay on this machine and drops you into your first chat.
- Setup as three clear steps. Check this machine, install, start. Each step shows how long it took, a plain sentence about what it does, a Details view with the installer's raw output, and Cancel.
- Failures stay on screen. The app explains what went wrong, gives you a command to copy or a page to read, and offers the right next step: try again, check again, continue in the terminal, or go back.
- Interrupted installs pick up where they left off. If the app closes or crashes partway through, setup resumes when you reopen it.
- Existing installs are adopted. If a relay is already running on this machine, the app connects to it and doesn't reinstall.
- Connecting another machine and the advanced options (address, port, terminal setup) are still one click away. They're just no longer the first thing you see.
Your agents
A new Your agents screen lists the coding agents on this machine, with the state of each: ready, not signed in, or not found. An agent that isn't signed in comes with the command to run, and you can start now and sign in later. An agent that's missing links to its install guide. Install one and click Check again, no restart needed.
A default agent per profile
Each profile can now open new chats with a fixed agent, or with the one you used last (the default). You pick it during setup, and you can change it later under Default agent in Settings. The choice is stored on the relay, per profile, so every device connected to that profile gets the same default.
Platform guidance
- macOS: setup uses Homebrew. If Homebrew is missing, the app says so and tells you how to install it.
- Windows: the app explains that anywh and its agents run inside WSL2. It shows what you need and guides you to the terminal setup.
- Flatpak / Snap: in-app install is turned off inside a sandbox. The app tells you why and shows the terminal path.
Compatibility
- The connection protocol is unchanged from 0.2.x, so this app works with a 0.2.2 relay, and the other way round. Update both to get every feature.
- With a relay older than this release, the Your agents screen shows only which agents are installed, not whether they're signed in. The default-agent setting in Settings is unavailable, and the choice you make during setup is kept on this device only.
profiles.jsongains an optionalagentPreferencefield per profile. Older relays read the file without error and ignore the field. However, a profile edit made by a relay older than this release drops the field. That only matters when relays of different versions share the sameprofiles.json. From this release on, profile edits keep fields the relay doesn't recognize.
Relay API (for integrators)
- New
GET /control/agentslists the agents on the host, with their install and sign-in state. PATCH /control/profiles/:idacceptsagentPreference({ mode: "fixed" | "lastUsed", fixedAgentId? }). An invalid body now returns400 {"error":"invalid profile patch"}.GET /control/profilesalso returnslastUsedAgentId.- Every HTTP response, including the 426 for an unknown route and a new 500 for a handler error, now carries
Access-Control-Allow-Origin: *.
Changes since v0.2.2
Features
- feat: rebuild the desktop onboarding around two clicks and the agents found (#195) (v0.2.3)
anywh v0.2.2
anywh v0.2.0
Upgrade notes
0.2
Update the relay and the app together. The connection protocol between
them changed (version 1 → 3), and each side now refuses the other instead of
misreading it: a 0.2 app connected to a 0.1 relay says the relay needs an
update, and the other way round. The in-app updater only updates the app, so
update the relay too:
- Linux:
curl -fsSL https://anywh.sh/install | sh -s -- --relay-only - macOS:
brew upgrade anywh-relay
A new service per profile: the agent host. Rooms run their agents in
anywh-agent-host@<profile>, a systemd user service next to
anywh-relay@<profile>, so they keep running across a relay restart. The
installer above sets it up. If you manage the units yourself, re-run
infra/systemd/install.sh and then infra/systemd/add-profile.sh for each
profile, or enable it directly with
systemctl --user enable --now anywh-agent-host@<profile>. Without it the
relay and ordinary chats keep working; rooms don't.
On macOS, rooms are not available yet. The Homebrew relay doesn't ship an
agent host, so it doesn't connect to one. Ordinary chats work as before.
Session files are migrated on first start, with no way back. The 0.2
relay rewrites sessions.json into its new per-agent shape the first time
it loads it; every session keeps its title, folder, model and permission
mode. A 0.1 relay misreads the migrated file (it lists the titles but can't
resume the conversations), so to downgrade, restore a copy taken before
upgrading.
Development builds use their own identifier. A build from source now
installs as dev.anywh.local, with its own data directory, so it no longer
shares profiles with the installed app. Official releases are unchanged
(sh.anywh.client).
Changes since v0.1.8
Breaking changes
- feat!: version every merge automatically, publish releases by hand (#180) (v0.2.0)
Features
- feat(client): make the terminal panel behave like a terminal emulator (#81) (v0.2.0)
- feat: agent detection and per-agent session identity (Phase 9) (#82) (v0.2.0)
- feat(relay): JSON-RPC stdio transport for daemon-backed agent runtimes (#84) (v0.2.0)
- feat(relay): Codex daemon lifecycle — spawn, handshake, idle reaper, kill sweep (#85) (v0.2.0)
- feat(relay): map Codex app-server notifications to AgentEvent (#86) (v0.2.0)
- feat(relay): promote the Codex def out of shape-proving draft status (#87) (v0.2.0)
- feat(relay): AgentSessionDriver contract + ClaudeSessionDriver extraction (Stage B, part 1) (#89) (v0.2.0)
- feat(relay): CodexSessionDriver — Codex's AgentSessionDriver (#92) (v0.2.0)
- feat(relay): wire SharedSession.dispose() into deleteSession and shutdown (#94) (v0.2.0)
- feat(relay): let a native driver ask real approval/user-input questions (#96) (v0.2.0)
- feat(client): render a native driver's approval/user-input questions (#98) (v0.2.0)
- feat(relay): parse Codex's real approval/user-input request params (#97) (v0.2.0)
- feat: let a session pick Codex, with its own real permission modes (#100) (v0.2.0)
- feat(relay): normalize per-response prefix/output tokens across agents (#99) (v0.2.0)
- feat(relay): calibrated context breakdown for the Rules line (Phase 4) (#104) (v0.2.0)
- feat: Skills/Subagents/empty-folder categories and the full breakdown panel (Phase 5) (#106) (v0.2.0)
- feat(client): move files/terminal toggles to the tab group strip (#107) (v0.2.0)
- feat(relay): make every runtime def declare how its setup travels (#112) (v0.2.0)
- feat(relay): read and write a runtime's config home (#113) (v0.2.0)
- feat(client): pick the agent when adding a profile, and offer to bring its configuration (#114) (v0.2.0)
- feat: sign in to the MCP servers a carried setup brought along (#115) (v0.2.0)
- feat: agent-agnostic model picker with each CLI's own model names (#117) (v0.2.0)
- feat: background agents and processes in the status bar (#116) (v0.2.0)
- feat: interleaved agent activity stream with agent-agnostic tool display (#119) (v0.2.0)
- feat(client): redesign the composer toolbar without boxes (#121) (v0.2.0)
- feat(client): native iOS drawer and top bar (#122) (v0.2.0)
- feat(client): native iOS composer, bottom strip and scroll-to-end arrow (#123) (v0.2.0)
- feat(ios): model menu in the native top bar (#124) (v0.2.0)
- feat(ios): permission mode menu in the native top bar (#126) (v0.2.0)
- feat(native-chrome): expose the APNs device token to the web side (#129) (v0.2.0)
- feat: remote push notifications for the iOS app (#131) (v0.2.0)
- feat(client): let an embedding crate extend the app before it starts (#134) (v0.2.0)
- feat(client): take the Tauri context from the embedding crate (#135) (v0.2.0)
- feat(client): let the embedding app install providers at startup (#136) (v0.2.0)
- feat: reasoning effort selection in the composer (#128) (v0.2.0)
- feat(client): clearer tool-call activity — counted group line, per-call state, copyable arguments (#141) (v0.2.0)
- feat(relay): let the model stay silent on obvious background-job results (#142) (v0.2.0)
- feat(relay): persist the deferred present_choice question across restarts (#146) (v0.2.0)
- feat(relay): add askedAt to choice_prompt (#148) (v0.2.0)
- feat(relay): agent-worker spawn mode that inherits the user's MCP servers (#149) (v0.2.0)
- feat(relay): disable background traffic and auto-update in agent-worker claude spawns (#151) (v0.2.0)
- feat(relay): agent host that keeps agents alive across relay restarts (#153) (v0.2.0)
- feat(relay): defer tool approvals for agent-worker sessions (#155) (v0.2.0)
- feat(relay): rooms — data model and the room tools (#154) (v0.2.0)
- feat(client): redesign — palette, shell, sidebar and composer (#143) (v0.2.0)
- feat(relay): a room's shared context folder, its index and prompt-cache sharing (#158) (v0.2.0)
- feat(relay): agent worktrees on demand, cleaned up when their work is integrated (#156) (v0.2.0)
- feat(relay): rooms — report digest, aggregated state and deferred worker approvals (#157) (v0.2.0)
- feat(client): the room canvas — new session in room mode, agent cards, areas and layout (#159) (v0.2.0)
- feat(sala): show each agent's context-window usage in the room (#161) (v0.2.0)
- feat(sala): principal reuses named agents, groups them in areas and splits independent work (#162) (v0.2.0)
- feat(sala): principal delegates in stages and gives a multi-stage request one area (#164) (v0.2.0)
- feat(sala): room areas group agents by kind of work, not by subject (#165) (v0.2.0)
- feat(sala): let the principal stop an agent with stop_agent, the same stop as the person's (#172) (v0.2.0)
- feat(sala): the room's motion from the design — shadowed cards, links in their agent's state, arrivals (#183) (v0.2.0)
- feat(client): make the room side panel resizable (#181) (v0.2.0)
- feat(sala): confirm removals, a named orchestrator and multi-select (#182) (v0.2.0)
- feat(sala): a delegated agent's side panel is its whole conversation (#184) (v0.2.0)
- feat(client): render user messages as markdown, keep pasted spacing, clip long ones (#187) (v0.2.0)
- feat(relay): clean up agent worktrees that were squash, rebase or PR-merged from another branch (#186) (v0.2.0)
- feat: room cards for agent reports and instructions (#188) (v0.2.0)
Fixes
- fix(relay): block native AskUserQuestion in plan mode (#78) (v0.2.0)
- fix(client): hide dotfiles and node_modules by default in the folder picker (#83) (v0.2.0)
- fix(client): cross-compile the sidecar to iOS instead of the host mac (#101) (v0.2.0)
- fix(relay): generate session titles/suggestions with the session's own agent (#103) (v0.2.0)
- fix(relay): recover from a stale Codex threadId instead of failing forever (#105) (v0.2.0)
- fix(client): put the + before the files/terminal toggles, not after (#108) (v0.2.0)
- fix(relay): stop a stale title-generation result from overwriting the current one (#109) (v0.2.0)
- fix(client): block starting voice recording with no microphone selected (#110) (v0.2.0)
- fix(client): keep the model picker against a relay without model catalogs (#118) (v0.2.0)
- fix(client): seed a profile in the perf harness so it mounts the shell (#120) (v0.2.0)
- fix(native-chrome): make the iOS composer behave like a normal text box (#125) (v0.2.0)
- fix(client): stop halving the drop position on macOS and Linux (#132) (v0.2.0)
- fix(client): hold message send while an attachment is still uploading (#133) (v0.2.0)
- fix(relay): stop session titles from being the model's answer to the prompt (#137) (v0.2.0)
- fix(client): draw a subagent once, and keep a task call when no subagent card tells its story (#127) (v0.2.0)
- fix(native-chrome): stop conversation scrolling while the drawer pan is active (#139) (v0.2.0)
- fix: keep the sidebar session list in sync without reopening the app (#138) (v0.2.0)
- fix(relay): don't reap the codex daemon mid-turn or on a pending approval (#145) (v0.2.0)
- fix(relay): make git dirs writable in the Codex workspace-write sandbox (#144) (v0.2.0)
- fix(relay): anywh-bg start/stop race, and deflake its tests (#150) (v0.2.0)
- fix(sala): remind a worker once to report before telling its principal it is blocked (#166) (v0.2.0)
- fix(sala): wrap area cards into rows of three (#163) (v0.2.0)
- fix(sala): stopping a room agent ends its turn, as Stop does in a session, instead of locking it (#171) (v0.2.0)
- fix(sala): agent cards show real actions, timed from the run's start (#169) (v0.2.0)
- fix(sala): animate the spinner without a transform so the canvas stays sharp on macOS (#170) (v0.2.0)
- fix(relay): write the sessions file atomically (#173) (v0.2.0)
- fix(sala): keep the room canvas sharp on WebKit by laying the plane out at the zoom (#176) (v0.2.0)
- fix(sala): principal splits a single ticket's independent work instead of handing it to one agent (#175) (v0.2.0)
- fix(sala): tell room workers to use their own subagents and not sit idle on slow waits (#177) (v0.2.0)
- fix(sala): tell room workers that conversation length is the cost (#178) (v0.2.0)
- ...
anywh v0.1.8
anywh v0.1.7
anywh v0.1.5
Three compute-waking fixes, all of which cost cloud quota from an app that was merely left open: the 30s profile poll resuming a suspended sandbox (#43), both reconnect loops re-dialling the broker unconditionally so a socket that died because the machine slept woke it back up (#45), and a broker 429 being retried from 500ms forever (#44).
anywh v0.1.4
macOS onboarding fixes (#36): - both installers wait for the relay to answer before reporting success - the relay finds the agent CLI when the service manager's PATH doesn't - neither installer refuses to run without an agent CLI installed
anywh v0.1.3
chore: bump version to 0.1.3 Release for add-profile.sh's macOS fix (dcc041b) — v0.1.2's tarball still had the crash that broke the tap's own real brew services test right after publishing.
anywh v0.1.2
fix(release): match the Linux client's apt-get step to its own runner b1038ad repinned this leg's matrix from ubuntu-latest to ubuntu-22.04 (a glibc floor fix) but left this step's own `if` checking the old value — it silently never ran since, and the Tauri build broke on the first real release cut after that commit: gdk-sys' build script fails outright without libgtk-3-dev (gdk-3.0.pc) on the job.
anywh v0.1.1
chore: bump version to 0.1.1 Test release for the newly added relay build matrix, install.sh, and the Homebrew tap automation (none of which existed when v0.1.0 shipped).