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_MSdefault raised to300000(5 min). The old 60 s default killed long-thinking runs. Set the var explicitly to restore the old value. (#342)[security] env_audit = trueby default. Any leaked env var logsclaude.env_audit.leaked_varWARNING and subprocesses spawn underenv -i. Set tofalseinuntether.tomlto restore legacy behaviour. (#361)run_oncecrons persist fired state torun_once_fired.json(sibling tountether.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 setport = <N>in[triggers]. (#320) - Engine subprocess cleanup walks the process tree. Orphaned
workerdprocesses (seen at 37 GB RSS in pre-0.35.2 incidents) are now signalled alongside the parent. (#275)
Checking for updates
Was this helpful?
Thanks for your feedback!
Related Articles
ReferenceConfigurationUntether reads configuration from ~/.untether/untether.toml.ReferencePlugin APIUntether’s public plugin API is exported from:ReferenceDev InstanceUntether runs two isolated instances on lba-1: staging (PyPI/TestPyPI release) and dev (local editable source). They use separate Telegram bots, separate con...