이 글대로 따라 하면 터미널 pane 하나에서는 Claude Code가, 다른 pane에서는 Codex가 돌고, 옆에서는 채팅이랑 에이전트 몇 개가 같이 돌아가는 상태가 된다. osFoundry 보드 하나에 이게 전부 올라온다. Claude Code가 "Do you want to make this edit?"에서 멈추면 1초 안에 카드가 Needs you 열로 옮겨 간다. 클릭 한 번이면 그 프롬프트가 떠 있는 pane이 열린다. 대답하면 카드는 다시 Running으로 돌아간다.
누가 뭘 맡나
| Claude Code | osFoundry 데스크톱 앱 | |
|---|---|---|
| 로그인 | 자기 Claude 로그인을 자기 프로세스 안에서 쓴다 | 아무것도 들고 있지 않다. 자기가 띄운 에이전트에서는 상속된 ANTHROPIC_API_KEY를 지워서, 구독으로 돌린 작업이 API 요금으로 청구되지 않게 한다 |
| 어디서 도나 | Terminal 화면의 진짜 PTY, 프로젝트 폴더 안 | PTY를 소유하고, 화면을 에뮬레이트한 사본을 들고 있다 |
| 승인은 누가 | 사용자. Claude Code 자체 권한 프롬프트에서 답한다 | 절대 대신 답하지 않는다. 카드를 옮기고 pane을 열어 줄 뿐이다 |
| 상태는 어떻게 아나 | Claude Code는 평소처럼 UI를 그린다 | 700 ms마다 화면을 공개된 규칙과 대조한다. 자기가 띄운 에이전트라면 훅 보고도 받는다 |
| 데이터는 어디에 | 내 파일, 내 터미널 | 화면 텍스트는 Mac 위 앱 메모리에만 있다. 에이전트 세션을 끝내면 요약이 지식 파일(knowledge files)에 기록된다 |
세팅
- Terminal 화면(사이드바 Main → Terminal,
/terminal)을 열고 평소처럼 에이전트를 띄운다. pane마다 독립된 PTY다.
~/code/shop-api (fix/checkout-retry) $ claude
~/code/shop-web $ codex
osFoundry는 터미널을 잡고 있는 프로그램을 보고 Claude Code를 알아본다. 래퍼 스크립트로 띄웠다면 화면 내용으로 알아본다. 따로 설정할 건 없다.
- Sessions(사이드바 Main → Sessions,
/sessions)를 연다. 채팅, 단일 에이전트, 팀, 루프, 터미널 세션이 전부 카드 한 장씩이다. 열은 Running(실행 중), Needs you(확인 필요), Paused(일시정지), Idle(대기), Done(완료), Failed(실패)다. 카드를 열에 끌어다 놓는 걸로 상태를 정할 수는 없다. 어느 열에 들어갈지는 런타임이 보고하는 상태가 정한다.
- Filter를 누르고(필터가 걸리면 Filtered로 바뀐다) Needs me only(내 확인이 필요한 것만)에 체크한다. 종류(Chat, Agent, Team, Loop, Terminal)와 기간 설정은 그대로다.
카드는 두 장 남는다. 질문을 던진 채팅 하나, 그리고 shop-api의 Claude Code 터미널.
채팅은 마지막 메시지가 아직 답을 기다리는 질문으로 끝나 있으면 여기로 온다. 터미널은 상태가 blocked일 때 여기로 오는데, 다음 단계가 바로 그 장면이다.
-
shop-api카드를 클릭한다. Terminal 화면이 그 pane으로 열리고, 프롬프트는 아직 떠 있다. 왼쪽 레일에는 Claude Code가 "Needs you · shop-api", Codex가 "Working · shop-web"으로 표시된다.
pane이 여러 개라면 Mod+.(Mac에서는 ⌘.)로 확인이 필요한 다음 에이전트로 바로 넘어간다. 상태 표시줄에도 "⌘. to jump to what needs you"라고 떠 있다.
- 답은 평소 터미널에서 하듯 pane에서 하면 된다.
1. Yes에서 Enter. Claude Code가 작업을 이어 가고, 다음 스윕에서 레일과 보드가 다시 Working / Running으로 바뀐다.
- 끝난 에이전트 세션이 Idle에 있으면 카드를 Done으로 끌어다 놓는다. 앱이 먼저 확인을 받는다.
확인을 누르면 요약을 쓴 다음 세션을 끝낸다. 요약이 실패하면 세션은 원래 자리에 그대로 남는다. 실행 중인 세션은 아예 Done에 놓을 수 없다. "This session is still running. Pause it first, then end it."(아직 실행 중이니 먼저 일시정지한 뒤 끝내라)라는 메시지가 뜬다.
실제로 돌려 보면
예시다. 스크린샷에 나온 pane과, 화면마다 osFoundry가 내린 판정이다. 판정은 Claude Code용 규칙 파일 claude.toml에서 나온다. 앱에 같이 들어 있고, osfoundry.io/agent-detection/claude.toml에서도 받을 수 있다.
~/code/shop-api (fix/checkout-retry) $ claude
● Retry now reuses the first charge. Updating the payment code.
Edit file src/payments/charge.ts
41 - const intent = await stripe.paymentIntents.create(params)
41 + const intent = await stripe.paymentIntents.create(params, {
42 + idempotencyKey: `charge-${order.id}`,
43 + })
Do you want to make this edit to charge.ts?
❯ 1. Yes
2. Yes, allow all edits during this session
3. No, and tell Claude what to do differently
화면 state 걸린 규칙 카드
스피너, "esc to interrupt" working esc to interrupt Running
위의 프롬프트 blocked Do you want to (proceed|continue|make this edit|create) Needs you
... "1. Yes"에서 Enter
다시 스피너 working esc to interrupt Running
● Update(src/payments/charge.ts)
⎿ Updated src/payments/charge.ts with 3 additions and 1 removal
● Bash(npm test -- payments)
⎿ Tests: 42 passed, 42 total
● Fixed. A second press of Pay now reuses the first charge.
blocked 규칙이 working 규칙보다 위에 있는 건 일부러다. 프롬프트가 떠 있는 동안에도 Claude Code 푸터에는 "esc to interrupt"가 남아 있을 수 있고, 먼저 매칭된 규칙이 이긴다.
어디까지 해 주나
osFoundry는 프롬프트에 절대 대신 답하지 않는다. 다른 에이전트가 앱의 runtime_send 도구로 pane에 입력할 수는 있지만, 결정을 기다리는 pane이면 거부당한다. 답하는 건 이름부터 다른 별도 도구 runtime_answer를 거치고, 답할 때마다 사용자가 직접 확인한다. 이 검사는 마지막 스윕 결과가 아니라 입력하는 그 순간 화면을 새로 읽어서 한다. 그래서 방금 뜬 프롬프트가 평범한 텍스트로 치려던 키 입력을 먹어 버리는 일은 없다.
osFoundry가 못 읽는 화면은 Idle로 보고하고, 절대 Needs you로 보내지 않는다. 이유는 detect.rs 주석에 적혀 있다. 오탐이 한 번만 나도 사람들은 배지를 안 믿게 되고, 그다음부터는 진짜 알림까지 헛수고가 된다. 그래서 규칙이 애매할 때 앱은 더 많이가 아니라 더 적게 보고한다.
규칙은 코드가 아니라 데이터다. 내려받은 규칙 파일이 바꿀 수 있는 건 어떤 패턴이 매칭되느냐뿐이다. 어떤 프로그램을 실행할지는 못 건드린다. 직접 덮어쓰고 싶으면 ~/.osfoundry/agent-detection/claude.toml에 두면 된다.
터미널 텍스트는 데스크톱 앱 메모리 안에 머문다. pane 밖에 흔적이 남는 건 사용자가 끝낸 세션뿐이다. 그 요약이 지식 파일에 기록되고, 그다음에야 보관 처리된다.
다음에 해 볼 것
다른 폴더에서 Claude Code를 하나 더 띄우고, 둘 다 수정이 필요한 작업을 맡겨 보자. 그리고 Sessions 보드를 Needs me only로 걸어 둔 채 다른 일을 하면 된다. 데스크톱 앱이 아직 없다면 다운로드 페이지에서 받을 수 있다.






Top comments (0)