크라우니터미널 명령 주입 메커니즘 완성
개요
크라우니터미널 = 외부 작업지시를 받아 이 컴퓨터의 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에 축적