손 안 대고 코드 풀기.
weft는 Claude Code·Codex·opencode를 위한 데스크톱 환경입니다. 격리된 worktree에서 나란히 돌리고, 어느 에이전트가 내 답을 기다리는지 한눈에 보고, GitHub·Linear 이슈를 끌어다 바로 컨텍스트로 넣으세요.
v0.0.1 · macOS 12+ · Windows·Linux는 프리뷰

복원 레이스 수정2
세션 스토어 이전
복원 레이스 수정✻ 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.

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-6나란히, 충돌 없이. 한 워크스페이스에 에이전트 세션을 최대 16개까지 타일로 배치하세요. 에이전트마다 자기 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…
클릭 한 번으로 답하기. 에이전트가 질문이나 권한 요청에서 멈추면 바로 떠오릅니다. 선택지를 고르면 곧장 작업으로 돌아갑니다.
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.
Resolve합치기 전에 리뷰. 에이전트의 diff를 파일별로 읽고, 중요한 줄에 노트를 남겨 피드백으로 돌려보내세요. 내 브랜치에 닿기 전에.
- 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.
자리를 비워도 돌아가는 일. 데일리 다이제스트, TODO 정리, 문서 점검 같은 프롬프트를 예약해 두고, 돌아와서 결과만 읽으세요.
- 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 ago멈춘 곳에서 다시. 재시작해도 세션은 살아 있습니다. CLI별 히스토리를 훑어보고, 어떤 대화든 pane에서 이어가세요.

LiveClaude Code
Max
91%leftSession · 5h
Resets in 4h 3m
28%leftWeekly · 7d
Resets in 2d 5h
Accounts
System accountWork
28%
100%한도는 닿기 전에 보입니다. Claude와 Codex의 세션·주간 한도가 연료 게이지처럼 창 하단에 항상 떠 있습니다.
IDE가 아닙니다.
에디터는 그대로 쓰세요. weft는 그 주변의 책상입니다 — 코드를 쓰는 쪽이 에이전트가 된 뒤에 시작되는 일들을 위한.
코드 작성 · 코드 읽기 · 디버깅

Fix the resume race
Add the regression test
Move the store to the new schema1 awaiting reply누가 나를 기다리는지.
워크트리마다 에이전트와 상태가 보입니다. 빨간색은 내 답을 기다리는 중입니다.
✓ src/session/resume.test.ts (14)
✓ src/session/store.test.ts (28)
Test Files 2 passed (2)
Tests 42 passed (42)믿기 전에 돌려보기.
내 명령으로 워크트리를 준비·실행·테스트하고, 배정된 포트에서 프리뷰를 엽니다.
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 brief일을 넘겨주기.
대화, 변경된 파일, 열린 피드백을 브리프로 묶어 다른 에이전트가 이어가게 합니다.
모든 에이전트를 한 책상에. 누가 나를 기다리는지 항상 보입니다.
Claude Code·Codex·opencode 세션을 한 워크스페이스에 타일로 배치하세요. 에이전트마다 git worktree가 따로라 병렬 작업이 충돌하지 않고, 질문과 권한 요청은 한곳으로 모입니다.
- 워크스페이스당 최대 16개 pane, 에이전트마다 worktree 하나
- 에이전트가 막히는 순간 질문·권한 요청이 바로 떠오릅니다
- 에이전트 브랜치와 내 브랜치 사이의 리뷰 게이트
- 재시작해도 세션이 살아 있고, 멈춘 지점부터 이어갑니다
복붙 없이 컨텍스트를 넣습니다.
weft 안에서 GitHub·Linear를 탐색하고, 이슈를 프롬프트로 끌어다 놓으세요. 제목·본문·댓글 스레드가 그대로 에이전트에게 전달됩니다. 창을 떠날 필요가 없습니다.
- 기존 gh 로그인 그대로 — 새 토큰이 필요 없습니다
- Linear 이슈를 에이전트 바로 옆에서
- Automations: 자리를 비운 사이 실행되는 예약 프롬프트
- Jira·Confluence도 지원 — Slack·Notion은 준비 중
Fix this. Follow the repro in the issue and add a regression test.
에이전트가 꼭 내 노트북에서 돌 필요는 없습니다.
원격 호스트에 pane을 열고 거기서 CLI를 실행하세요. 파일 트리, 에디터, git이 같은 SSH 연결을 따라갑니다.

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
그냥 내 ssh 그대로.
weft는 시스템의 ssh 바이너리로 접속합니다. 터미널에서 되던 접속이면 여기서도 됩니다. 서버에 설치할 것은 없습니다.
- ~/.ssh/config의 호스트가 알아서 목록에 나타납니다
- 키, agent, ProxyJump, 스마트카드 — 전부 ssh에 맡깁니다
- weft는 비밀번호도 키도 저장하지 않습니다
- 파일, 에디터, git도 같은 연결 위에서
Saved in weft
Add hostFrom your SSH config
Read from ~/.ssh/config. Edit them in the file.
다른 내 컴퓨터를 이어받기.
링크 하나로 두 weft를 페어링하세요. 두 번째 weft가 첫 번째의 워크스페이스 — pane, 터미널, git, 파일 — 를 그대로 열고, 거기서 바꾼 것은 원본으로 동기화됩니다.
- 내 기기끼리 직접 연결 — 릴레이도, 계정도 없습니다
- Tailscale처럼 내가 고른 주소에서만 수신합니다 — 모든 인터페이스를 여는 일은 없습니다
- 링크는 한 번만 표시되고, 언제든 폐기할 수 있습니다
- 끊기면 알아서 재연결 — 그 사이의 편집은 복구되면 동기화됩니다
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
이미 쓰는 에이전트를 그대로.
weft는 내 컴퓨터에 설치된 공식 CLI를, 이미 로그인된 계정으로 구동합니다. 중간 프록시도, 추가 API 키도 없습니다.
- 새 pane이 묻는 건 하나 — 어떤 에이전트인지. 1–4를 누르세요.
- 기본 로그인(~/.claude, ~/.codex)으로 시작하거나, 추가한 계정으로
- 쓰는 에이전트만 보이게

Claude1
Codex2
Gemini3
OpenCode4Launch
claudeAccounts
Add account
SystemDefaultDefault login · ~/.claude
work@weft.devMaxweft 받기.
설치하고, 레포지토리를 연결하고, 1분 안에 첫 fleet을 띄워보세요.
v0.0.1
- macOS 빌드는 아직 공증(notarization) 전입니다 — 첫 실행 시 앱을 우클릭해 ‘열기’를 선택하세요.
- Windows·Linux 빌드는 프리뷰이며 실사용 검증이 상대적으로 적습니다.