Agents, weft to their own devices.
weft is a desktop environment for Claude Code, Codex and opencode. Run them side by side in isolated worktrees, see at a glance which one is waiting on you, and hand them context straight from GitHub and Linear.
v0.0.1 · macOS 12+ · Windows and Linux in preview

Fix resume race2
Migrate store
Fix resume race✻ Claude Code
~/weft/api · resume-race
> Fix the resume race in session restore
⏺ Read(src/session/resume.ts)
⏺ Search("lastToolCall")
⎿ 6 matches in 3 files
⏺ Update(src/session/resume.ts)

91%
100%weft at a glance.

Fix resume race> Fix the resume race in session restore
⏺ Update(src/session/resume.ts)
⎿ +12 −3
⏺ Bash(pnpm test session)
⎿ ✓ 42 passed
1m 24s+12-3
Paginate Linear› Add pagination to the Linear connector
• Edited client.ts (+24 −6)
• Edited client.test.ts (+18)
• Ran pnpm typecheck
└ ✓ 0 errors
3m 02s+42-6Side by side, never colliding. Tile up to 16 agent sessions in one workspace. Each one works in its own git worktree.


Migrate store
Open terminalMove the session store to the new schemaWrite migrations/0042_sessions.sql
The migration is written. Where should I apply it first?Or type your own answer…
Answer in one click. When an agent blocks on a question or a permission, it surfaces right away. Pick an option and it goes back to work.
Snapshot 3f9a1c2b
Hide reviewed
2/3 Reviewed
Send open feedback (1)
3 file(s) changed · +38 −9
src/session
resume.ts+12 −3
resume.test.ts+24 −0
store.ts+2 −6
Not reviewedMark reviewedSince last reviewsrc/session/resume.ts+12 −3@@ -41,3 +41,5 @@
4141 const last = await store.lastToolCall(id);42−if (last) replay(last);42+if (last && !last.settled) {+43+ await replay(last);44+}4345 return session;Feedback · 1 open feedback
new:43 · Cover the timeout path too — add a regression test.
ResolveReview before it lands. Read the agent’s diff file by file, leave notes on the lines that matter, and send them back as feedback — before anything reaches your branch.
- Start from a templateDaily · 09:00Daily repo digestA short morning summary of where the codebase stands.Fri · 17:00TODO sweepWeekly roundup of TODO / FIXME comments worth acting on.Daily · 18:00Code quality reviewAn evening pass over the gnarliest module for readability and bugs.Wed · 14:00Docs drift checkCatches README and docs falling behind the code.
Work that runs while you’re away. Schedule prompts — a daily digest, a TODO sweep, a docs check — and read the results when you’re back.
- History4/12

Fix the resume race in session restoreresume.ts replays the last tool call even when it already settled…Claude2h ago
Add pagination to the Linear connectorThe issue list stops at 50.Codex5h ago
Move the session store to the new schemaWrite the migration first.Claude1d agoPick up where you stopped. Sessions survive restarts. Browse the history of every CLI and resume any conversation in a pane.

LiveClaude Code
Max
91%leftSession · 5h
Resets in 4h 3m
28%leftWeekly · 7d
Resets in 2d 5h
Accounts
System accountWork
28%
100%See your limits before you hit them. Session and weekly limits for Claude and Codex sit at the bottom of the window, like a fuel gauge.
Not an IDE.
Keep your editor. weft is the desk around it — the part of the job that begins once agents are the ones writing the code.
Writing code · Reading code · Debugging

Fix the resume race
Add the regression test
Move the store to the new schema1 awaiting replyKnow who needs you.
Every worktree lists its agents and their state. Red is someone waiting on your answer.
✓ src/session/resume.test.ts (14)
✓ src/session/store.test.ts (28)
Test Files 2 passed (2)
Tests 42 passed (42)Run it before you trust it.
Prepare, run and test a worktree with your own commands, then open the preview on its assigned port.
Editable handoff brief
# Work handoff Worktree: ~/weft/api-resume-race ## Goal / next instruction Cover the timeout path and re-run the suite. ## Changed files M src/session/resume.ts A src/session/resume.test.ts ## Open review feedback resume.ts (new:43) Cover the timeout path too. ## Latest local command test: succeeded

CodexOpen a new agent with this briefHand the work on.
Turn the conversation, the changed files and the open feedback into a brief, and continue with another agent.
Every agent on one desk. You always know who needs you.
Tile Claude Code, Codex and opencode sessions in one workspace. Each gets its own git worktree, so parallel work never collides — and every question or permission prompt is routed to one place.
- Up to 16 panes per workspace, one worktree per agent
- Questions and permissions surface the moment an agent blocks
- A review gate between the agent’s branch and yours
- Sessions survive restarts and resume where they stopped
Context goes in without the copy-paste.
Browse GitHub and Linear inside weft, then drag an issue onto a prompt. The agent gets the title, the body and the thread. You never leave the window.
- GitHub through your existing gh login — no new tokens
- Linear issues inline, next to the agent that needs them
- Automations: scheduled prompts that run while you’re away
- Jira and Confluence too — Slack and Notion are on the way
Fix this. Follow the repro in the issue and add a regression test.
The agents don’t have to run on your laptop.
Open a pane on a remote host and start your CLI there. The file tree, the editor and git follow over the same SSH connection.

Claude1
Codex2
Gemini3
OpenCode4Last login: Mon Sep 21 09:12:04 2026 from 100.84.12.7
dev@dev-box:~/weft/api$ claude
✻ Claude Code
~/weft/api · main
> Run the integration suite against staging
⏺ Bash(pnpm test:integration)
⎿ ✓ 118 passed
⏺ Update(src/jobs/reindex.ts)
⎿ +31 −9
It’s just your ssh.
weft connects with the system ssh binary, so whatever already works in your terminal works here. Nothing to install on the server.
- Hosts in ~/.ssh/config show up on their own
- Keys, agent, ProxyJump, smartcards — all left to ssh
- weft stores no passwords and no keys
- Files, editor and git over the same connection
Saved in weft
Add hostFrom your SSH config
Read from ~/.ssh/config. Edit them in the file.
Pick up your other machine.
Pair two wefts with a link. The second one opens the first one’s workspace — its panes, terminals, git and files — and what you change there syncs back.
- A direct connection between your machines — no relay, no account
- Listens on the address you pick, such as Tailscale — never on every interface
- A link is shown once, and you can revoke it any time
- Reconnects on its own; edits made offline sync when it’s back
Let other devices connect here
weft://pair/eyJob3N0IjoiMTAwLjg0LjEyLjci…CopyCopy it now — for safety the full link is shown only this once.
Connect to another device
Bring the agents you already use.
weft drives the official CLIs installed on your machine, with the logins you already have. No proxy in between, no extra API keys.
- A new pane asks one thing: which agent. Press 1–4.
- Starts on your default login — ~/.claude, ~/.codex — or an account you add
- Show only the agents you use

Claude1
Codex2
Gemini3
OpenCode4Launch
claudeAccounts
Add account
SystemDefaultDefault login · ~/.claude
work@weft.devMaxGet weft.
Install it, point it at a repository, and start your first fleet in about a minute.
v0.0.1
- macOS builds aren’t notarized yet — on first launch, right-click the app and choose Open.
- Windows and Linux builds are previews and have seen less real-world testing.