지난주에 돌렸던 Claude Code 세션을 다시 화면에 띄우는 게 목표다. osFoundry에서 프로젝트에 들어간 단어로 검색해서 그 세션이 뭘 했는지 확인하고, 버튼 한 번이면 세션이 작업하던 폴더에서 claude --resume <id>가 실행된다. 같은 목록에 Codex 세션도, 이 머신에 깔린 다른 AI 앱 10개의 세션도 같이 뜬다. osFoundry는 Claude Code와 통신하지 않는다. Claude Code가 이미 써 둔 파일을 읽을 뿐이다.
누가 뭘 하나
| Claude Code / Codex | osFoundry 데스크톱 앱 |
|---|---|
| 로그인을 갖고 있다. osFoundry는 로그인 파일이나 토큰을 읽지 않는다. | 각 앱이 직접 남긴 세션 파일을 이 기기 안에서 읽는다. 네트워크로는 아무것도 안 나간다. |
대화 기록을 쓴다 (~/.claude/projects/…/<id>.jsonl, ~/.codex/sessions/…) | 세션 목록을 보여 주고, 기록된 폴더·브랜치·모델·승인 모드를 표시한다 |
| 재개한 뒤의 도구 호출은 전부 CLI가 실행하고, 승인 프롬프트도 CLI가 띄운다 | 세션 폴더에서 Terminal 패널을 열고 CLI를 실행한다 |
| 세션 ID를 갖고 있다 | 그 ID로 재개 명령을 만든다: claude --resume <id>, codex resume <id> |
설정
- 데스크톱 앱 사이드바에서 Main → External agents(외부 에이전트)로 들어간다(라우트는
/external-agents). 로컬 파일을 읽는 화면이라 데스크톱 앱에서만 열린다. 부제에도 그대로 적혀 있다. 다른 AI 앱의 세션을 각 앱의 파일에서 읽어 오고, 업로드는 하지 않는다.
위쪽 칩은 세션이 있는 앱마다 하나씩, 개수와 함께 붙는다. osFoundry가 아는 앱은 12개다. Claude Code, Claude app, Codex CLI, Codex app, Gemini CLI, Qwen Code, OpenCode, Copilot CLI, Cursor, Devin, Antigravity, Kiro. Claude Code를 누르면 그 세션만 남는다. 오른쪽 Apps 메뉴에서 앱을 끄면 이 기기에서는 그 앱의 폴더를 아예 읽지 않는다.
"Search titles, folders, branches"(제목, 폴더, 브랜치 검색)에 프로젝트에 들어간 단어를 넣는다. 검색 대상은 제목, 폴더 경로, git 브랜치, 앱 이름, 세션 ID다. 메시지 본문은 검색하지 않으니까, Claude가 했던 말 말고 프로젝트 이름이나 브랜치 이름으로 찾는 게 맞다.
세션을 클릭한다. 오른쪽에 Claude Code가 기록한 정보와 대화 전체가 뜨고, 도구 호출은 하나하나 별도 행으로 나온다.
"From the app"(앱에서) 패널에는 다시 실행할 때 기록된 값을 각각 어떻게 다룰지가 나온다. 폴더는 그대로 가져가고, 브랜치는 지금 폴더의 브랜치와 대조하고, 모델과 승인 모드는 보여 준다. 기록된 승인 모드가 CLI 기본값보다 덜 묻는 모드라면(Claude Code 기준으로 default나 plan이 아닌 것), 그 실행에서 직접 체크하지 않는 한 넘기지 않는다.
- Open in Terminal(터미널에서 열기)을 누른다. 세션이 돌던 때와 폴더 브랜치가 달라졌으면 먼저 다이얼로그가 뜬다.
원래 브랜치에서 이어가야 하는 작업이면 Cancel을 누르고 직접 git switch 하면 된다. Open anyway를 누르면 폴더의 지금 상태 그대로 재개한다. osFoundry는 git -C <folder> rev-parse --abbrev-ref HEAD로 브랜치를 확인만 하고, checkout은 절대 실행하지 않는다.
- 세션 폴더에서 Terminal 패널이 열리고, Claude Code가 같은 세션을 이어받는다.
실제로 돌려 보면
예시다. 아래 세션은 앱이 읽는 형식에 맞춘 데모 데이터(개발자 한 명이 여러 앱에서 보낸 2주)고, 화면과 명령은 실제 앱 그대로다.
External agents › search: checkout Claude Code Fix double charge on checkout retry shop-api fix/checkout-retry 6d ago Cursor Fix flaky checkout e2e test shop-web test/checkout-e2e 8d ago Conversation (read from ~/.claude/projects/-Users-alex-code-shop-api/c5e1a7b2-….jsonl) you Customers get charged twice when they press Pay again after a timeout. Find out why. ↳ Read src/payments/charge.ts ↳ Grep createPaymentIntent claude Found it. Every retry creates a new payment, so a second press charges again. … ↳ Edit src/payments/charge.ts ↳ Bash npm test -- payments claude Fixed. A retry now reuses the first charge. All 42 payment tests pass, … Open in Terminal confirm This session was on fix/checkout-retry; the folder is on main now. ~/code/shop-api (main) $ claude --resume c5e1a7b2-9d40-4f3e-8b16-2a7c0e9d4f58 이 명령은 사람이 치는 것도, 추측한 것도 아니다. 데스크톱 앱이 기록된 세션으로 만든다. 기본은 claude --resume <id>이고, 대화 기록에 남아 있으면 --model과 --effort가 붙고, --permission-mode는 모드가 엄격하거나 직접 체크했을 때만 붙는다. Codex 세션이면 같은 버튼이 codex resume <id>를 실행하고, -m, -a, -s도 같은 규칙으로 붙는다.
Open in Terminal 옆의 Continue here(여기서 계속)를 쓰면 Claude Code나 Codex 세션을 CLI 대신 osFoundry 채팅 안에서 이어갈 수 있다.
어디까지 하나
osFoundry는 읽기만 하고, 가로채지 않는다. 앱별 어댑터는 그 앱의 세션 파일과 SQLite 인덱스만 읽기 전용으로 열고, 로그인 파일은 건드리지 않는다. 그래서 연결할 계정도 없다. Claude Code의 로그인은 Claude Code에 그대로 있고, 재개한 세션은 내 권한으로, CLI 자체의 승인 프롬프트 아래에서 돈다.
검색을 메타데이터로 한정한 것도 일부러다. Claude Code 대화 기록은 꽤 커진다(이 글을 쓴 Mac에서는 중앙값이 168 MB였다). 그래서 목록은 각 파일의 앞 몇 줄과 끝부분만으로 만들고, 전체 내용은 지금 연 세션 하나만 읽는다.
승인 설정이 저절로 느슨해지는 일은 없다. 허용 범위가 넓은 모드로 돌던 세션도, 그 한 번의 실행에서 체크하지 않으면 CLI 기본값으로 다시 열린다. 브랜치는 확인하고 알려 줄 뿐 건드리지 않는다. 세션 폴더가 없어졌으면 다른 곳에서 열지도 않는다.
앱 자체 창에만 있는 건 거기 그대로 남는다. Codex app의 브라우저 패널과 리뷰 화면, Claude app의 커넥터와 아티팩트, Cursor의 에디터는 세션에 이름만 표시되고 터미널로 넘어오지 않는다.
다음 단계
아직 돌고 있는 세션을 열어 보고, osFoundry의 Sessions 보드도 확인해 보자. osFoundry 자체 에이전트 중 어떤 게 작업 중인지, 내 응답을 기다리는지, 끝났는지 보여 준다. 데스크톱 앱이 아직 없다면 Mac, Windows, Linux용 osFoundry를 다운로드하면 된다.





