v0.3.0 · Linux and macOS · Apache-2.0
Talk to one agent. It runs the rest.
In twr you have one conversation, with an orchestrator. Ask for work and it starts named threads on Claude Code, Codex, Grok Build or any ACP agent, each in its own git worktree. Send a thread a follow-up by name. Questions, permissions and results come back here.
curl -fsSL https://twr.tools/install.sh | sh
ORCHESTRATOR your conversation illustration · the messages of a recorded session
- You: On api, rate limit logins per IP. On billing, round tax once on the invoice total.
- Orchestrator: Called 2 tools
spawn_thread× 2: a named thread each, with its own worktree and branch. - Orchestrator: Started ratelimit on api and invoice-rounding on billing. I'll tell you when they need you.
- ✓ ratelimit allowed · Allow execute: cargo test -p apiratelimit · permission
PERMISSION Allow execute: cargo test -p api
task: Rate limit POST /login per client IP: 5 attempts a minute, then 429.
1 allow 2 denyThe hub puts it here and on the thread's card. No orchestrator turn. - You: allow ratelimit
- Hub: Applied: ratelimit: allow.The hub applies a short command as typed. Any other answer goes on a card only you can confirm.
- ratelimit finished · success
Added a per-IP limiter to POST /login: 5 attempts a minute, then 429 with Retry-After. All 31 api tests pass, including the new one. - invoice-rounding finished · success
Tax is now rounded once on the invoice total instead of per line. The 12 invoice tests pass. - You: Tell ratelimit to cover POST /signup the same way.
- Orchestrator: Called 1 tool
sendto ratelimit: “Also limit POST /signup the same way: 5 attempts a minute per client IP, then 429.” Queued if the thread is busy. - Orchestrator: Sent to ratelimit. I'll tell you when it's done.
- ratelimit finished · success
POST /signup now shares the login limiter: 5 attempts a minute per IP, then 429. All 33 api tests pass.
THREADS
No threads yet.
An illustration of the session recorded below, with its real messages; in twr it's a terminal UI. The TUI folds the orchestrator's tool calls into “Called 2 tools”; the orange notes say what they did.
how it works
Four things you just saw.
The orchestrator writes no code and runs no commands. It starts and messages threads with twr's tools, and the hub brings back what they need from you.
-
You ask
On api, rate limit logins per IP. On billing, …
It starts one named thread per task, on the runtime you choose, each in a git worktree on its own branch.
spawn_thread × 2
-
A thread needs you
allow ratelimit
Permissions and questions land in the conversation and on the thread's card. You answer there, or open the card with Enter and press a digit.
applied by the hub, never decided by an agent
-
Results come back
ratelimit finished · success
Each report arrives in the same conversation, and the card keeps the branch and how far ahead it is.
no orchestrator turn spent
-
You follow up by name
Tell ratelimit to cover POST /signup …
The orchestrator sends it to that thread, which picks up with its own context. Or open its card and type to it directly.
send · queued if busy
the real thing
The same session, in the terminal.
Threads on the left, your conversation on the right. Press Enter twice on a card to open a thread and type to it directly; Esc brings you back. On a phone, under 60 columns, the TUI turns into one screen at a time, so you can answer from anywhere over SSH or mosh.
around the conversation
What makes the threads worth delegating to.
Any agent you use
Claude Code, Codex, Grok Build or any ACP agent, under your own login. Switch the orchestrator or a thread to another runtime mid-task. Runtimes
A worktree per thread
Parallel threads on one repo never touch each other's files. Park one to free its worktree and resume it later. Worktrees
Your permissions stay yours
Thread agents can't answer a permission, change a mode or prompt another thread, and the orchestrator passes on only an answer you gave. twr is not a sandbox: the security model says what it covers.
Threads on other machines
Run a thread on a box over SSH, in a container, or on a machine that dials in. It keeps going across disconnects and laptop sleep. Boxes
Answer from your phone
A compact layout for any phone terminal, with tabs for Chat, Needs you and Threads. No app and no server in between. Phone layout
Built for long work
The orchestrator keeps notes on your setup across sessions; threads compact their context; jobs queue on the machine's slots. Memory
twr itself has no account, no cloud service and no telemetry. Your agents call their providers under your logins, so their terms and quotas apply; the hub also asks a small model for suggestions and summaries until you turn them off.
install
Your first conversation in three steps.
- Install twr. The release build for your machine goes in
~/.local/bin, without sudo, checked against the release's checksums.curl -fsSL https://twr.tools/install.sh | sh - Sign in to an agent. twr runs
claude,codexorgrokas you; log in with each one's own CLI first. - Open it and say what you want. The first run asks which agent runs your orchestrator.
twr # the TUI; starts the hub twr update # later: the latest release
Linux x86_64 and aarch64, macOS on Apple silicon and Intel; Windows is unsupported. Or download an archive from the releases page, or build it with Rust 1.89 or newer: cargo install --locked --git https://github.com/ignaval/twr twr-cli. twr is before 1.0 and has one maintainer. install.md · changelog