← 목록
기타 2026-05-22 3KB 읽기 3분

크라우니터미널 명령 주입 메커니즘 완성

개요

크라우니터미널 = 외부 작업지시를 받아 이 컴퓨터의 Claude Code 세션에 명령으로 주입하는 로컬 오케스트레이터. 핵심 갭(명령 → 실제 세션 주입)을 메워 외부 작업지시가 실제로 작동하게 함.

기존 상태 (점검 결과)

크라우니터미널은 이미 80% 구축돼 있었음:

  • src/daemon.js — 포트 9840 HTTP+WS 데몬, node-pty 세션 오케스트레이터
  • WS {type:command} — PTY 세션 직접 명령주입
  • /api/live/send — 외부 명령 진입점 (단, cmd 파일만 쓰고 소비자 없음)
  • services/*.yml — 서비스별 세션 정의, auto_claude 자동 클로드 기동
핵심 갭: sendCommand가 명령을 파일로만 쓰고, 그 파일을 실제 세션에 주입하는 소비자가 없었음.

추가한 것 (daemon.js 고도화)

구성내용
injectToSession()세션 spawn(없으면) + PTY에 command + \r 주입. auto_claude 세션은 claude 기동(4초) 대기 후 주입
processQueue()data/queue/*.json 폴링 → 전담 세션에 주입 → data/queue-done/로 이동
POST /api/inject{service, session, command} 즉시 주입 API (토큰 인증)
GET /api/queue큐 대기/완료 현황
큐 워처2초 주기 setInterval(processQueue)

외부 작업지시 사용법

bashTOKEN=<crowny-terminal 토큰>

# 방법 1 — 즉시 주입
curl -X POST "http://127.0.0.1:9840/api/inject?token=$TOKEN" \
  -H "content-type: application/json" \
  -d '{"service":"terminal","session":"claude-code","command":"<작업지시>"}'

# 방법 2 — 명령 큐 (파일을 넣으면 워처가 처리)
echo '{"service":"terminal","session":"claude-code","command":"<작업지시>"}' \
  > /Users/ef/crowny-terminal/data/queue/job-$(date +%s).json

전담 세션 = terminal/claude-code (auto_claude: true) — 외부 명령이 이 세션에 주입되면 Claude Code가 받아 실행.

검증

  • /api/inject{"ok":true} → 세션 로그에 CROWNY_INJECT_TEST_OK 출력 ✓
  • 큐 파일 → 워처 처리 (pending:0 done:1) → 세션 로그에 CROWNY_QUEUE_TEST_OK

관련 파일

  • /Users/ef/crowny-terminal/src/daemon.js — 명령주입 + 큐 워처 추가
  • /Users/ef/crowny-terminal/services/terminal.yml — claude-code 전담 세션
  • /Users/ef/crowny-terminal/data/queue/ — 외부 작업지시 큐

잔여 / 다음 단계

  • 전담 클로드 세션 상시화 (현재는 첫 명령 시 spawn) — LaunchAgent 또는 데몬 부팅 시 자동 spawn
  • 게이트웨이 경유 외부(모바일) 접근 — terminal.crowny.org 라우팅
  • 작업지시 학습 — collector가 큐 명령을 학습DB에 축적