Decision memo · personal agent infrastructure

폰에서 Claude·Codex를 지휘하는
JARVIS 구현 조사

“솔리테어 시킨 거 어떻게 돼가?”라고 말하면 관련 세션을 찾아 마지막 답변을 요약하고, 이어지는 수정 지시를 같은 세션에 안전하게 전달하는 단일 음성 관제면을 어떻게 만들 것인가.

조사 기준일 2026-08-15Windows PC + Claude/Codex 다중 세션광범위 스캔로컬 코드 감사 포함

BLUF — 가능하다. 새 모바일 앱보다 “감독 세션”이 핵심이다

구현 가능Claude는 공식 Remote Control, Codex는 공식 Remote와 app-server가 이미 핵심 연결면을 제공한다.
권장 입구 1개폰의 Claude 앱에서 JARVIS라는 단일 Claude Code Remote Control 세션만 대화한다.
기존 코드 재사용mobileprompter의 Claude 세션 탐색·전사 읽기와 codex-relay의 Codex app-server 어댑터를 합친다.
현재 차단요인Telegram 봇 허용목록이 비어 있다. 이 상태에서 재가동·확장은 금지하고 먼저 잠가야 한다.
권고안검증 사실 Claude Code Remote Control은 로컬 환경을 그대로 유지한 채 Claude iOS·Android 앱에서 세션을 조작할 수 있다. 해석/추론 이를 “감독 세션”으로 두면 폰 앱 자체를 자동 클릭하지 않고도 다른 Claude·Codex 세션을 찾고 읽고 지시하는 JARVIS 경험을 만들 수 있다. Anthropic Remote Control 문서

정확한 제품 형태는 “휴대폰 안에서 모든 일을 하는 AI”가 아니라, 휴대폰은 음성 리모컨·PC는 실행 엔진·JARVIS는 세션 라우터인 구조다. 사용자가 직접 세션을 고르는 작업을 없애되, 모호하거나 위험한 행동만 확인을 받는다.

질문·범위·판정 기준

검증 사실 조사 대상은 ① Claude 모바일/Claude Code의 공식 원격 기능, ② Codex 모바일/로컬 app-server, ③ 현재 PC의 mobilepromptercodex-relay, ④ Telegram 보안 특성이다. 기준일은 2026-08-15이며 Windows PC와 개인 소유 폰을 전제로 했다.

성공 정의: 자연어로 프로젝트를 지칭하면 여러 세션에서 후보를 검색하고, 최근 관련 답변을 출처 세션과 함께 보여주며, 후속 지시의 대상을 유지하고, 실행 결과·승인요청을 폰으로 돌려보내는 것.

포함: 로컬 Claude Code 세션, 로컬 Codex 스레드, 텍스트·음성 명령, 읽기·요약·후속 지시, 승인·감사 로그. 제외: 은행·결제·신분증 제출 같은 고위험 생활 자동화, 타인 계정, 약관을 우회한 소비자 앱 스크래핑.

커버리지: 광범위 스캔 공식 문서와 로컬 구현을 중심으로 주요 경로를 비교했지만, 모든 모바일 자동화 프레임워크의 전수조사는 아니다. Android/iOS 기종과 Claude 요금제·워크스페이스 정책은 사용자별로 달라 미확인이다.

Exhibit 1. 구현 경로 비교 — 감독 세션이 요구사항과 가장 잘 맞는다

경로자동 세션 탐색Claude+Codex 통합폰 음성안정성/보안판정
1 Claude Remote Control의 JARVIS 감독 세션 + 로컬 라우터가능가능Claude 앱공식 원격면, 실행은 로컬. 별도 공개 포트 불필요권장
Claude와 ChatGPT의 공식 Remote를 각각 사용각 앱 안에서 가능단일 대화 아님가능가장 단순하고 공식 지원즉시 사용용
기존 Telegram mobileprompter 확장현재 수동 선택Codex 어댑터 추가 필요폰 음성 입력 의존Bot 채팅은 E2EE가 아니며 토큰·허용목록 관리 필요백업 채널
Android Accessibility/iOS UI 자동 클릭화면 기반앱별 별도가능UI 변경·포커스·OS 제한에 취약비권장
Claude 모바일용 공개 Remote MCP 서버가능가능가능OAuth·호스팅·PC 터널 운영 부담2단계 이후

출처/판정 메모: Anthropic은 Remote Control이 모바일 앱에서 로컬 세션을 조작하며 로컬 파일·MCP·도구를 유지한다고 명시한다. OpenAI는 ChatGPT 모바일 Remote에서 연결 PC의 작업 시작·지시·승인·검토를 지원한다. Claude 모바일에서도 계정에 설정한 원격 MCP 연결을 사용할 수 있다. Anthropic · OpenAI · Claude 원격 MCP

Exhibit 2. 권장 아키텍처 — 한 대화가 두 에이전트 원장을 중개한다

최소 도구 계약

도구입력출력/행동기본 권한
search_sessions“솔리테어”, 기간, 공급자후보 3개, 근거, 점수, 최근시각자동
get_latestsession_id마지막 사용자 지시·마지막 완결 답변·진행 상태자동
send_instructionsession_id, 정리된 지시, 실행 등급대상 세션에 새 턴 또는 active turn steering등급별
watch_tasksession_id/turn_id완료·오류·승인 요청을 폰으로 통지자동
cancel_taskturn_id진행 중 작업 중단자동

검증 사실 Codex app-server는 제품 내 깊은 통합을 위한 공식 인터페이스로 대화 이력·승인·스트리밍 이벤트를 제공한다. thread/list는 최근성·작업폴더·검색어 필터, thread/read는 재개 없이 이력 읽기, turn/startturn/steer는 새 지시와 진행 중 보정을 지원한다. 다만 WebSocket transport는 아직 experimental이며 비로컬 접속은 TLS와 인증이 필요하다. OpenAI App Server 문서

Exhibit 3. “그중에 이걸 수정해”가 정확히 이어지는 라우팅 규칙

의도 분류질문인지, 상태 조회인지, 지시인지, 취소인지 판별한다. “어떻게 돼가?”는 읽기 전용이다.
후보 생성최근 30일 Claude/Codex 세션의 제목·작업폴더·최근 사용자 메시지·최근 답변에서 “솔리테어/wwssolitaire/카드게임” 같은 동의어를 찾는다.
동일 축 점수화0.35 제목/폴더 + 0.30 최근 메시지 + 0.20 최근성 + 0.15 활성상태. 점수는 판단 가중치이며 사실 점수가 아니다.
모호성 처리1위 점수가 0.78 이상이고 2위와 0.15 이상 차이나면 자동 선택. 아니면 상위 2~3개를 “어느 것?”으로 한 번만 묻는다.
대화 지시어 유지선택한 session_id를 대화별로 저장해 “그중에”, “거기에”, “아까 것”이 같은 대상에 이어지게 한다. 다른 프로젝트명이 나오면 즉시 재검색한다.
전달 전 프리뷰“대상: wwssolitaire / 최근 답변: … / 보낼 지시: …”를 짧게 보여준다. 저위험 수정은 바로 실행, 위험 작업은 확인한다.

예상 대화

사용자: 우리 솔리테어 시킨 거 어떻게 돼가?

JARVIS: 솔리테어 관련 최근 세션 3개 중 wwssolitaire · 게임 레이아웃 수정이 가장 최근입니다. 마지막 답변은 “모바일 카드 겹침을 수정했고 테스트 통과, 배포는 아직”입니다. 같은 세션에 이어서 지시할까요?

사용자: 그래. 그중에 하단 광고랑 카드 사이 간격을 조금 더 벌리고 모바일만 테스트해.

JARVIS: wwssolitaire · 게임 레이아웃 수정 세션에 “데스크톱은 유지하고 모바일 하단 광고-카드 간격 확대, 모바일 회귀 테스트, 배포 금지”로 전달했습니다. 완료되면 결과와 테스트를 알려드릴게요.

해석/추론 사용자의 말을 길게 “좋은 프롬프트”로 다시 쓰는 것보다, 대상 세션이 이미 가진 맥락은 유지하고 범위·비범위·검증·금지사항만 구조화하는 편이 오염이 적다.

Exhibit 4. 로컬 자산 감사 — 이미 절반 이상 만들어져 있다

현재 자산확인된 기능빈틈재사용 판정
mobileprompter/src/sessions.jsClaude JSONL 최근 256KB에서 제목·cwd·mtime 추출, 터미널 탭·프로세스와 매칭살아있는 세션 중심, 의미 검색·마지막 완결 답변 API 없음핵심 재사용
transcript.js새 assistant 텍스트·tool use·tool result를 400ms 간격 전달중복 블록·부분 메시지·민감정보 필터 필요재사용
terminal.js + PowerShellPID console input을 우선 사용하고 포커스/클립보드는 폴백, 주입 직렬화탭 재정렬·프로세스 매칭 휴리스틱, UI 변화에 취약Claude 활성 세션 폴백
codex-relay/relay.mjslocalhost app-server 초기화, thread resume, turn start, 이벤트 스트리밍, 승인 처리고정 단일 스레드 중심, 전체 thread 검색·read 없음Codex adapter 기반
Claude Code --remote-control현재 설치 버전 2.1.233에서 지원 확인감독 세션 전용 명령·도구가 아직 없음폰 입구
Codex app-server현재 프로젝트 localhost ready endpoint 응답 확인프로젝트별 서버 발견·재연결·스키마 버전 관리 필요공식 어댑터

로컬 감사일: 2026-08-15. 비밀값·봇 토큰·세션 ID·대화 본문은 보고서에 기록하지 않았다. 현재 열린 Claude 터미널 세션은 감사 시점에 0개여서 실제 다중 세션 의미 라우팅 정확도는 미측정이다.

Exhibit 5. 안전 모델 — “알아서 다 함”은 권한 등급으로 구현한다

즉시 중단 조건치명 로컬 설정 확인 결과 Telegram 봇의 allowedChatIds 배열이 비어 있다. 현재 코드에서 빈 배열은 “모두 허용”을 뜻한다. 봇 프로세스는 감사 시 실행 중이 아니었지만, 허용목록을 1개 소유자 ID로 잠그고 토큰을 회전하기 전에는 재가동하지 않는 것이 맞다.
등급예시정책필요 증거
A · 읽기세션 검색, 마지막 답변 요약, 상태 조회자동세션명·시각·원문 링크/식별자
B · 가역 수정코드 수정, 테스트, 새 파일 생성자동 가능diff·테스트·변경 파일
C · 외부 상태 변경배포, 게시, 이메일/메시지 전송, PR merge요약 확인 1회대상·내용·되돌리기 방법
D · 파괴/금전/권한삭제, force push, 결제, 계정·보안 설정, 비밀 조회항상 명시 승인정확한 대상·영향·복구 가능성
  • 네트워크: Codex app-server는 127.0.0.1에만 바인딩한다. 공식 문서도 평문 ws://는 localhost 또는 SSH 포워드에만 쓰고, 원격은 TLS와 인증을 요구한다. 근거
  • Telegram: Bot API는 HTTP 기반 long polling을 지원하지만, 봇 대화는 Secret Chat이 아니므로 E2EE가 아니다. Telegram은 Cloud Chat을 서버에 저장한다고 밝힌다. 따라서 소스코드·토큰·고객정보를 보내는 주 채널로 쓰지 않는다. Bot FAQ · Privacy Policy
  • 로그: 현재 주입 로그는 명령 본문 대신 길이를 기록하는 점이 좋다. 향후에도 세션 ID 해시, 동작 등급, 결과만 기록하고 대화·토큰·파일 내용을 기본 로그에서 제외한다.
  • 프롬프트 인젝션: 세션 전사·도구 출력은 “데이터”로 취급하고 그 안의 지시는 실행하지 않는다. 실제 행동은 현재 사용자의 최신 발화와 권한 정책만 결정한다.
  • 실패 안전: 1위 라우팅 근거가 약하거나 세션이 active/waiting approval이면 새 턴을 중복 생성하지 말고 질문 또는 turn/steer를 사용한다.

Exhibit 6. 구현 순서 — 3단계, 먼저 읽기 정확도를 증명한다

0단계 · 오늘: 안전 복구와 공식 원격면 사용Telegram 봇 allowlist 잠금·토큰 회전. Claude 세션은 명시적 이름으로 --remote-control, Codex는 ChatGPT Remote를 병행한다. 완료 기준: 폰에서 각 공식 세션을 읽고 지시 가능.
1단계 · 1~2일: 읽기 전용 JARVIS MVPsession-router 패키지에 Claude/Codex list/search/get_latest 구현, SQLite FTS5 색인, 감독 세션용 로컬 MCP 또는 CLI 도구 제공. 완료 기준: 실제 질문 30개에서 top-1 ≥ 90%, 오선택 0건(불확실하면 질문).
2단계 · 2~4일: 안전한 전달과 감시Claude 활성 세션 PID 주입·비활성 resume 어댑터, Codex resume/start/steer, 작업 상태와 승인 요청, A~D 등급 게이트. 완료 기준: 20회 전달에서 오발송 0건, 완료/실패/승인 상태 누락 0건.
3단계 · 선택: 상시성·다중 채널Windows 로그인 시 supervisor 자동 시작, 절전 복구, 푸시 알림, Telegram은 비민감 백업 채널로만 유지. 필요할 때만 OAuth 기반 Remote MCP를 추가한다.

Go / No-go 게이트

Go: 읽기 전용 라우팅 top-1 90% 이상, 모호한 10%는 모두 질문으로 전환, 잘못된 세션에 지시 0건, A~D 정책 자동 테스트 통과. No-go: 탭 재정렬 후 대상 매칭 오류, active 세션 중복 턴, 허용목록 없이 외부 채널 가동, 위험 등급 우회가 한 번이라도 발생.

권장 다음 결정: 새 모바일 앱 개발이나 공개 MCP 호스팅에 착수하지 말고, 기존 두 코드베이스를 재사용한 읽기 전용 JARVIS 감독 세션부터 만든다. 이 단계가 정확하면 쓰기 권한을 붙이고, 정확하지 않으면 UI를 더 만들어도 JARVIS가 되지 않는다.

출처와 한계

  1. Anthropic — Continue local sessions from any device with Remote Control: Claude 앱 연결, 로컬 실행, 다중 세션 이름, 요구 버전·인증.
  2. Anthropic — Claude Code CLI reference: --resume, --print, Remote Control 플래그.
  3. Anthropic — Using dictation on Claude Mobile: 한국어 받아쓰기 지원. 음성 대화 모드는 별도 베타·언어 제한이 있을 수 있다.
  4. Anthropic — Get started with custom connectors using remote MCP: 모바일 앱을 포함한 모든 Claude 클라이언트의 원격 MCP 연결과 공개 네트워크 요구사항.
  5. Official OpenAI documentation — Codex Remote: ChatGPT 모바일에서 연결 PC의 작업 시작·지시·승인·검토.
  6. Official OpenAI documentation — Codex App Server: thread/turn API, WebSocket 보안, experimental 상태.
  7. Telegram Bot APITelegram Privacy Policy: long polling과 Cloud Chat 저장·암호화 범위.
  8. 로컬 코드 감사: mobileprompter, reports/codex-relay, 설치된 Claude Code 2.1.233·Codex CLI 0.147.0. 비밀값은 수집·기록하지 않음.