Skip to main content
How-To Guides Last updated: 20 April 2026

Update Untether

Untether publishes releases to PyPI. To upgrade to the latest version:

Untether publishes releases to PyPI. To upgrade to the latest version:

=== “uv (recommended)”

```sh
uv tool upgrade untether
```

=== “pipx”

```sh
pipx upgrade untether
```

Check your current version:

untether --version

After upgrading, restart the service if running as a systemd unit:

systemctl --user restart untether

Agent CLIs are separate Untether wraps agent CLIs (Claude Code, Codex, OpenCode, Pi, Gemini CLI, Amp) as subprocesses. Updating Untether does not update the agent CLIs. Update them separately:

```sh
npm update -g @anthropic-ai/claude-code
npm update -g @openai/codex
npm update -g opencode-ai
npm update -g @mariozechner/pi-coding-agent
npm update -g @google/gemini-cli
npm update -g @sourcegraph/amp
```

Upgrading to v0.35.2

See the v0.35.2 changelog entry for the full change list. Behaviour changes that may affect operators upgrading from v0.35.1 or earlier:

  • Claude/Pi subprocess env is now allowlisted. Arbitrary process env no longer leaks to agent CLIs. If a plugin or MCP server depends on a specific variable, confirm it’s on the allowlist — see Env allowlist (Claude/Pi). (#198, #361)
  • CLAUDE_STREAM_IDLE_TIMEOUT_MS default raised to 300000 (5 min). The old 60 s default killed long-thinking runs. Set the var explicitly to restore the old value. (#342)
  • [security] env_audit = true by default. Any leaked env var logs claude.env_audit.leaked_var WARNING and subprocesses spawn under env -i. Set to false in untether.toml to restore legacy behaviour. (#361)
  • run_once crons persist fired state to run_once_fired.json (sibling to untether.toml). They no longer re-fire on reload or restart. Delete the file to re-arm. (#317)
  • Webhook port bind failure no longer crashes the bot. Check logs for triggers.server.bind_failed. Remediation: ss -tlnp | grep <port> to find the conflicting process, then set port = <N> in [triggers]. (#320)
  • Engine subprocess cleanup walks the process tree. Orphaned workerd processes (seen at 37 GB RSS in pre-0.35.2 incidents) are now signalled alongside the parent. (#275)

Checking for updates

Visit the PyPI page or the changelog to see what’s new.

Was this helpful?

Related Articles