본문으로 건너뛰기

AI 코딩 세션을 지키는 rcman

rcman은 AI coding-agent 세션을 재시작·부팅 복구하는 PM2형 supervisor입니다.

이 요약은 AI가 원문을 분석해 생성했습니다. 정확한 내용은 원문 기준으로 확인하세요.

TL;DR

rcman은 Claude Code와 Codex CLI의 remote-control 세션을 PM2처럼 관리하는 Node 기반 supervisor입니다. 세션별 프로세스와 PID, session ID, 로그, 원격 제어 URL을 추적하고 충돌 시 재시작하며 부팅 뒤에도 복구합니다. daemon이 종료되어도 세션을 살리기 위해 pipe 대신 일반 파일과 FIFO를 사용하고, systemd transient scope와 별도 cgroup으로 supervisor와 agent의 수명을 분리합니다. Claude Code는 정확한 local session ID에 연결할 수 있지만 Codex CLI는 구조상 머신당 한 세션만 지원하며, Node 18.17 이상과 provider CLI 설치가 필요합니다.

실용적 조언

  • Claude Code 세션을 특정 대화에 고정하려면 bridge session ID가 아니라 local transcript UUID를 사용하고 `claude --resume --remote-control` 경로를 선택해야 합니다.
  • daemon만 재시작하거나 업그레이드할 때는 `rcman daemon --stop` 또는 `systemctl --user restart rcman`을 사용하고, agent까지 종료하려는 경우에만 `rcman stop`을 실행해야 합니다.
  • Codex CLI는 provider 구조상 머신당 한 세션만 지원하므로 여러 Codex thread를 동시에 원격 관리하는 용도로는 현재 한계가 있습니다.
  • workspace 신뢰 권한은 시작 과정에서 자동 부여되지 않으므로 필요한 디렉터리를 먼저 `rcman trust .`로 등록해야 합니다.

섹션별 상세

01
rcman은 서버에서 실행하는 AI coding-agent remote-control 세션을 수동으로 유지할 때 생기는 재부팅, 시작 modal 정지, 중복 attach 문제를 해결하려는 도구입니다. `rcman start`는 먼저 자체 registry에서 이름을 찾고, 없으면 provider의 로컬 session metadata를 검색해 가장 최근 세션을 등록한 뒤 정확한 세션을 재개합니다. 검색 대상은 `~/.claude/projects`와 `~/.codex/sessions`뿐이며, 이름을 찾지 못하면 새 세션을 몰래 만들지 않고 중단하므로 기존 대화 이력과 잘못된 연결을 구분할 수 있습니다.
02
Claude Code 연동은 `claude --resume --remote-control`을 대화형 UI로 실행하고 `script(1)`로 PTY를 할당하는 방식입니다. 큰 세션을 재개할 때 나오는 `resume from summary / full` modal에는 `providerOptions.resumeMode` 설정으로 응답하고, 신뢰되지 않은 workspace는 `~/.claude.json`을 미리 확인해 자동으로 권한을 넘기지 않습니다. 반면 Codex CLI remote control은 세션별 프로세스가 아니라 머신 전체의 app-server daemon이므로 rcman은 한 머신에서 정확히 한 Codex 세션만 관리하며 특정 thread 고정은 지원하지 않습니다.
03
daemon과 agent의 수명을 분리하는 핵심은 pipe를 없애고 출력 파일과 FIFO를 사용하는 구조입니다. agent는 일반 파일에 출력하고 daemon은 마지막으로 읽은 byte 위치부터 tail하며, stdin은 O_RDWR로 연 FIFO를 물려 daemon이 잠시 사라져도 EOF를 받지 않게 하므로 새 daemon이 같은 프로세스에 다시 응답할 수 있습니다. systemd에서는 각 세션을 별도 transient scope와 cgroup에 넣고 생성된 unit에 `KillMode=process`를 적용해 daemon 재시작이 세션 종료로 이어지지 않도록 구성합니다.
04
프로세스 관리에는 crash-loop budget과 지연 재시작, SIGTERM 뒤 `stopTimeoutMs`만큼 기다리는 SIGKILL, 명령행 서명 검증이 포함됩니다. rcman은 자신이 시작한 프로세스만 종료하고, 실제 `/proc/<pid>/cmdline`이 기록된 명령과 일치할 때만 정리하며, `online`도 단순 생존이 아니라 provider가 원격 제어 URL을 게시했는지까지 확인한 뒤 판정합니다. 시작 modal은 provider가 허용 목록으로 선언한 항목만 자동 응답하고, 보안 권한 결정은 사용자에게 남겨 두어 무인 실행과 권한 변경을 분리합니다.
05
설정은 설치 패키지와 분리된 `$RCMAN_HOME` 아래의 `config.json`, `registry.json`, `state.json`, 로그 디렉터리와 실행 파일로 관리됩니다. 설정 파일을 직접 편집하면 변경 내용을 감시하고, 실행 방식을 바꾸는 수정은 현재 agent를 중단하지 않고 pending 상태로 남기며, `rcman reload`는 새 설정을 적용하되 실행 중인 세션은 유지합니다. `rcman service install`은 systemd user, launchd, systemd system, OpenRC, cron 순서로 사용 가능한 관리자를 찾고 Node 경로와 provider binary 경로를 절대 경로로 unit에 기록합니다.
06
npm 업데이트 뒤에는 CLI와 이미 실행 중인 daemon의 버전이 달라질 수 있으므로 post-install hook과 IPC handshake가 이 차이를 감지합니다. 전역 설치에서 실제 daemon이 실행 중이고 버전이 바뀐 경우 hook이 daemon을 재시작하며, `rcman upgrade`는 부팅 unit까지 갱신하고 8개 세션이 유지됐는지 확인하는 절차를 제공합니다. rcman은 runtime dependency가 없고 `node:test`로 테스트하며 Node 18.17 이상과 Claude Code 또는 Codex CLI 중 하나가 PATH에 있어야 합니다.

용어 해설

원격 제어(Remote Control)
서버에서 실행 중인 coding agent를 휴대전화나 브라우저로 조작하는 기능입니다. rcman은 이 연결을 세션 단위로 유지하고, 프로세스 재시작 뒤에도 같은 세션 ID와 로그를 이어 붙이는 관리 계층으로 활용합니다.
의사 터미널(PTY)
프로그램이 실제 터미널처럼 입출력을 주고받게 만드는 가상 터미널 장치입니다. Claude Code의 대화형 UI가 pipe에서 실행되지 않는 제약을 우회하기 위해 rcman이 script(1)로 PTY를 할당합니다.
세션 인계(Session Adoption)
감독 프로세스가 종료되거나 교체된 뒤 새 감독 프로세스가 기존 작업 프로세스를 찾아 관리권을 넘겨받는 방식입니다. rcman은 PID, 명령행 서명, 출력 캡처 위치를 state.json에 저장해 실행 중인 agent를 중단하지 않고 다시 연결합니다.
컨트롤 그룹(cgroup)
Linux에서 프로세스를 그룹으로 묶어 종료와 자원 관리를 적용하는 커널 기능입니다. rcman은 세션을 자체 transient scope에 넣고 KillMode=process를 사용해 daemon을 멈출 때 세션까지 함께 종료되는 문제를 피합니다.
프로세스 간 통신(IPC)
서로 다른 프로세스가 데이터를 주고받는 통신 방식입니다. rcman CLI는 Unix socket을 통해 daemon에 newline-delimited JSON 요청을 한 번 보내고, 설치된 CLI와 daemon 사이의 버전 차이도 handshake에서 확인합니다.

코드 예제

bash
npm install -g rcman
rcman service install

rcman을 전역 설치한 뒤 현재 시스템의 부팅 서비스 관리자에 daemon을 등록합니다.

bash
rcman config set defaultProvider claude
rcman start my-session ~/projects/foo
rcman start my-session
rcman ls
rcman logs my-session -f

기본 provider와 작업 디렉터리를 설정하고 세션을 생성하거나 재개한 뒤 상태와 로그를 확인합니다.

json
{ "sessions": [ { "name": "my-session", "provider": "claude", "sessionId": "d7b1e2a4-9c3f-4f56-b0aa-6e1c2f3d4a5b", "cwd": "~/projects/foo", "enabled": true, "providerOptions": {"resumeMode": "summary"} } ] }

패키지 외부의 ecosystem 파일에 세션 이름, provider, 고정 session ID, 작업 디렉터리, 자동 시작 여부와 재개 방식을 선언합니다.

bash
systemctl --user restart rcman
rcman daemon --stop
rcman stop all

daemon만 재시작하거나 중지해 세션을 유지하고, 실제 agent 세션까지 끝낼 때는 rcman stop을 사용합니다.

bash
$ rcman upgrade
rcman 1.0.2 · daemon running 1.0.1
✔ daemon restarted on 1.0.2 (pid 129203)
✔ 8 session(s) carried across untouched

npm 업데이트 뒤 daemon을 새 버전으로 교체하면서 8개 세션을 중단 없이 인계한 결과입니다.

언급된 도구

rcman추천

AI coding-agent remote-control 세션의 프로세스, 부팅 복구, 로그, registry와 provider adapter를 관리합니다.

Claude Code중립

정확한 local session ID를 `--resume --remote-control`로 재개하는 provider CLI입니다.

Codex CLI중립

머신 단위 app-server daemon을 통해 remote control을 제공하는 provider CLI입니다.

systemd중립

rcman daemon을 부팅 시 시작하고 세션을 별도 transient scope에서 실행하는 서비스 관리자입니다.

PM2중립

rcman의 세션 관리 방식과 비교되는 Node 프로세스 관리자입니다.

AI 분석 전체 내용 보기

AI 요약 · 북마크 · 개인 피드 설정 — 무료

출처 · 인용 안내

원문 발행 2026. 09. 03.수집 2026. 09. 03.출처 타입 REDDIT

인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.