OpenClaw 구축·운영 (17/26) — Claude Code 브릿지: Discord 메시지 연동

coding-agent SKILL + --permission-mode bypassPermissions --print + process 모니터링 verbatim


핵심 요약

  • 대상 독자: OpenClaw 기본은 잡혔고(#9, #10), Claude Code도 쓰고 있는 사용자. 메신저에서 코딩 작업을 지시하면 Claude Code가 자동으로 실행되는 파이프라인을 구축하고 싶다.
  • 얻을 것: 공식 coding-agent SKILL 기반의 브릿지 구조, Claude Code 전용 --permission-mode bypassPermissions --print verbatim 사용법, background + sessionId 모니터링 8가지 action(list/poll/log/write/submit/send-keys/paste/kill), 채널에 결과 회신하는 루프, 공식 8개 핵심 규칙.
  • 선행 조건: OpenClaw gateway 동작, Claude Code 설치, coding-agent 스킬 enable.
  • 중요: "브릿지"는 별도 제품이 아니라 coding-agent 스킬을 통해 이루어지는 패턴. 공식 repo openclaw/openclaw/skills/coding-agent/가 브릿지의 소스.

1. 아키텍처 개요

Discord / Slack / Telegram 사용자
       ↓ (메시지 수신)
OpenClaw Gateway (~/.openclaw/workspace/)
       ↓ (bindings로 에이전트 선택)
Agent session (메인 또는 서브)
       ↓ (coding-agent SKILL 트리거)
bash 도구로 Claude Code 실행
  └─ `claude --permission-mode bypassPermissions --print "작업 내용"`
       ↓ (배경 세션 sessionId 반환)
process 도구로 진행 모니터링
       ↓ (결과 수집)
Agent가 메신저 채널에 회신

핵심: Claude Code를 OpenClaw의 bash 도구로 직접 호출한다. 별도 IPC나 MCP 서버 없이 표준 CLI 인자를 조합하는 방식.


2. Claude Code 전용 호출 규칙

공식 coding-agent SKILL이 명시한 Claude Code 호출의 특수성:

"For Claude Code (claude CLI), use --print --permission-mode bypassPermissions instead" of PTY mode.

에이전트 호출 방식
Codex / Pi / OpenCode pty: true (인터랙티브 터미널 할당)
Claude Code --permission-mode bypassPermissions --print (PTY 없음)

Claude Code에 PTY를 쓰면 "PTY can exit after the confirmation dialog"라는 경고가 공식에 명시되어 있다. 이 조합을 지키는 것이 필수.

2.1 foreground 실행 (즉시 응답용)

OpenClaw 세션 안에서:

bash workdir:~/project command:"claude --permission-mode bypassPermissions --print '파일 구조를 요약해줘'"

Claude Code가 실행 → stdout 캡처 → agent가 그대로 채널에 회신.

2.2 background 실행 (장시간 작업)

bash workdir:~/project background:true command:"claude --permission-mode bypassPermissions --print '로그인 폼에 이메일 검증 추가'"

background: truesessionId를 반환한다. 이후 process 도구로 모니터링.


3. bash 도구 인자 — 전체

OpenClaw 공식 coding-agent SKILL이 정의한 bash 도구 인자:

인자 타입 용도
command string 실행할 셸 명령
pty boolean 인터랙티브 CLI용 의사 터미널 할당
workdir string 에이전트의 작업 디렉터리
background boolean sessionId 반환, 비동기 모니터링 가능
timeout number N초 후 kill
elevated boolean 호스트 vs 샌드박스 실행 여부

중요: elevated: true는 호스트 full access. 공유 채널에서 이 플래그를 쉽게 허용하지 말 것.


4. process 도구 — 8가지 action

background 세션의 상태를 제어하는 8개 action.

action 동작
list 실행 중/최근 세션 목록
poll 세션이 살아있는지 체크
log 세션 출력 조회 (offset/limit 옵션)
write stdin에 raw 데이터 전송
submit 데이터 + 개행 (타이핑 + Enter 시뮬레이트)
send-keys 키 토큰 또는 hex 바이트 전송
paste 텍스트 붙여넣기 (bracketed 모드 옵션)
kill 세션 강제 종료

사용 예:

process action:log sessionId:abc123
process action:submit sessionId:abc123 data:"yes"
process action:poll sessionId:abc123
process action:kill sessionId:abc123

5. 워크플로 패턴 — Spawn → Monitor → Collect

5.1 1단계: background 실행

bash workdir:~/project background:true \
  command:"claude --permission-mode bypassPermissions --print '로그인 폼에 이메일 검증 추가'"

반환: sessionId: s-a7f92c

5.2 2단계: 진행 모니터링

process action:log sessionId:s-a7f92c

출력 스트림을 확인. Claude Code가 어떤 파일을 편집 중인지, 에러가 없는지 점검.

5.3 3단계: 필요 시 입력 주입

Claude Code의 --permission-mode bypassPermissions --print는 승인 프롬프트가 안 뜨므로 실무상 input 주입이 필요한 경우는 드물다. Codex와 다른 점.

다만 외부 명령(git push 등)이 내부에서 실행되며 confirmation을 요구한다면:

process action:submit sessionId:s-a7f92c data:"y"

5.4 4단계: 결과 수집 후 채널 회신

process action:log sessionId:s-a7f92c

종료된 세션의 전체 출력을 가져와 agent가 요약 후 채널에 전송.

5.5 에이전트의 중간 보고 원칙

공식 규칙:

"When you spawn coding agents in the background, keep the user in the loop" with brief status updates on milestones, questions, errors, and completion.

즉, agent는 사용자(채널)에게 중간 status를 넣어주어야 한다. 오래 침묵하면 UX가 깨진다.


6. 공식 8개 핵심 규칙 (반드시 준수)

공식 coding-agent SKILL이 명시한 필수 규칙:

  1. 실행 모드 매칭 — Codex/Pi/OpenCode는 pty:true, Claude Code는 --print --permission-mode bypassPermissions.
  2. 도구 선택 존중 — 사용자가 Codex를 지정하면 Codex 사용. agent가 대신 코드 작성하지 않고 위임한다.
  3. 세션 인내 — 느리다고 조기 종료하지 말 것.
  4. 모니터링은 process:log — 간섭하지 말고 관찰만.
  5. --full-auto vs 바닐라 구분 — 빌드 작업은 --full-auto(자동 승인), 리뷰 작업은 바닐라.
  6. 병렬 허용 — 배치 작업 시 복수 background agent 동시 실행 가능.
  7. 상태 디렉터리 금기 — "NEVER start Codex inside your OpenClaw state directory" (조직 컨텍스트 오염).
  8. 라이브 인스턴스 보호 — "NEVER checkout branches in ~/Projects/openclaw/" (프로덕션 인스턴스).

7. 실전 예 — Discord에서 코드 수정 지시

7.1 사용자 메시지 (Discord)

@ClawBot src/auth/login.ts에 rate limiting 추가해줘. 
Claude Code로 작업해줘.

7.2 OpenClaw agent의 내부 동작

agent는 이렇게 추론한다: - 사용자가 "Claude Code로"를 명시 → coding-agent SKILL의 Claude Code 경로 - 작업이 길 수 있음 → background 사용 - workdir은 프로젝트 루트

7.3 실제 호출

bash workdir:~/Projects/my-app background:true \
  command:"claude --permission-mode bypassPermissions --print \
    'src/auth/login.ts에 rate limiting 추가. 테스트도 추가. 100% 통과 후 diff 출력.'"

반환: sessionId: s-38df2e

7.4 agent의 채널 응답

@user 작업 시작했습니다. Claude Code 세션 s-38df2e.
진행 보고는 2분마다 드릴게요.

7.5 모니터링 루프 (agent 내부)

2분 간격으로:

process action:log sessionId:s-38df2e

출력에 "Adding rate-limit middleware..." 같은 진행이 보이면 채널에 요약:

@user 진행중: rate-limit 미들웨어 추가 → 테스트 4개 작성중

7.6 완료 시

@user 완료. 변경 요약:
- src/auth/login.ts: +18 -3
- src/auth/rate-limit.ts: 신규 (42 lines)
- tests/auth/rate-limit.test.ts: 신규 (테스트 5개, 모두 PASS)
diff를 채널에 첨부할까요?

8. 보안 — 이 브릿지가 열어주는 권한

이 파이프라인은 기본적으로 메신저 사용자가 호스트에서 Claude Code를 실행하게 만든다. 치명적 함의:

  • --permission-mode bypassPermissions는 Claude Code의 모든 권한 프롬프트를 건너뛴다. 즉, agent가 허용한 명령은 그대로 실행된다.
  • 기본 OpenClaw 설정은 main 세션 = 호스트 full access.
  • 메신저 경로는 inbound message가 들어오므로 prompt injection 위험.

최소 방어선:

8.1 sandbox.mode: "non-main" 강제

{
  agents: {
    defaults: {
      sandbox: { mode: "non-main" }
    }
  }
}

8.2 DM Policy를 "allowlist"

{
  channels: {
    discord: {
      dmPolicy: "allowlist",
      allowFrom: ["discord:<YOUR_ID>"]
    }
  }
}

아무도 무작위로 코딩 명령을 내릴 수 없게.

8.3 위험 경로는 훅으로 차단

Claude Code 쪽에 을 설치해 rm -rf, git push --force 등을 PreToolUse에서 차단. OpenClaw 브릿지가 우회할 수 없는 방어층.

8.4 coding-agent의 금기 경로 존중

공식 규칙 7·8: Codex를 OpenClaw 상태 디렉터리 안에서 실행 금지, 라이브 openclaw 디렉터리에서 브랜치 checkout 금지. Claude Code 호출에도 같은 원칙 적용 — workdir를 항상 의도한 프로젝트 루트로 설정.


9. 대안 — 브릿지 안 쓰고 해결할 수 있는 경우

  • 혼자 쓰는 로컬 환경 → OpenClaw 없이 직접 Claude Code 터미널 쓰기. 브릿지 오버엔지니어링.
  • 간단한 스크립트 실행만 필요 → OpenClaw 자체 bash 도구로 직접 처리. Claude Code 경유할 필요 없음.
  • 이미 MCP 서버가 다 있는 환경 → Claude Code에서 MCP를 호출하면 충분. 굳이 OpenClaw로 감쌀 필요 없음.
  • 팀 공유 코드베이스 → 보안·감사 요구 때문에 브릿지의 bypassPermissions는 위험. 대신 Claude Code Plan mode로 사람이 최종 승인하는 경로.

10. 디버깅 — 브릿지가 작동 안 할 때

10.1 Claude Code 바이너리 경로 확인

OpenClaw가 쓰는 쉘에서 claude 명령이 잡혀야 한다.

which claude

잡히지 않으면 PATH 문제. OpenClaw가 돌아가는 환경(launchd/systemd user service)의 PATH는 대화형 쉘과 다르다.

Linux systemd user service에서:

[Service]
Environment="PATH=/usr/local/bin:/home/myuser/.local/bin:/usr/bin"

macOS launchd plist에서:

<key>EnvironmentVariables</key>
<dict>
  <key>PATH</key>
  <string>/usr/local/bin:/Users/myuser/.local/bin:/usr/bin</string>
</dict>

10.2 Claude Code 인증 확인

claude auth status --text

OpenClaw 데몬이 돌고 있는 사용자 계정의 Claude Code 로그인이 유효한지. Token이 만료되면 브릿지 실행 시 로그인 프롬프트가 뜨는데 background라 사용자에게 전달 안 됨 → 무한 hang.

10.3 sessionId 추적

process action:list로 살아있는 세션 확인. 예상 밖으로 누적되고 있으면 kill.

10.4 OpenClaw doctor

openclaw doctor

coding-agent 스킬이 로드되었는지, 도구 접근 권한에 문제는 없는지.


11. 제약 — 솔직한 한계

  • PTY 불가 제약: Claude Code의 대화형 상호작용(slash command 세션, confirmation dialog)은 브릿지에서 불가능. --print는 one-shot.
  • 긴 세션의 stdout 누적: 대용량 diff·로그를 stdout으로 뽑으면 agent 컨텍스트에 부담. 파일로 저장 후 경로만 회신하는 패턴이 안전.
  • 인터랙티브 승인 불가: bypassPermissions 없이 Claude Code를 쓰면 첫 승인 프롬프트에서 hang. 그래서 공식이 bypassPermissions를 강제.
  • 비용: 브릿지 경유 시 OpenClaw agent + Claude Code 양쪽에서 토큰 소비. 메신저로 오는 짧은 질문이라면 Claude Code 직접 호출보다 2배 토큰.

12. 확장 아이디어

기본 브릿지가 작동하면 다음 단계:

  1. 배치 실행: 여러 파일을 병렬로 Claude Code 호출 후 취합. 공식 규칙 6("parallel 허용")과 일치.
  2. 스케줄 트리거: OpenClaw의 cron 섹션으로 매일 아침 Claude Code에게 "최신 changelog 요약해서 Discord에 포스팅".
  3. 리뷰 봇: GitHub webhook → OpenClaw hook → Claude Code /review → PR 코멘트.
  4. Claude Code 훅과 2층: 브릿지가 호출한 Claude Code 세션 안에서 훅이 추가 enforcement. 권한 이중화.

13. 반대 시나리오 — 브릿지 접근이 맞지 않는 경우

  • 업무 메신저가 보안 민감 → 메신저 → 호스트 명령 실행 파이프라인이 정책 위반일 수 있음.
  • 사용자 입력을 곧장 명령으로 → prompt injection으로 공격 벡터. agent가 입력을 한 번 이상 해석하는 단계를 넣는 것이 필수.
  • Claude Code 외에 다른 도구 필요 → coding-agent 스킬은 Codex/Pi/OpenCode도 지원. Claude Code 전용으로 한정하지 말기.
  • 빠른 응답이 필요한 짧은 질문 → background + 2분 폴링은 오버. --print foreground 동기 호출이 나음.

14. 다음 단계

OpenClaw 파트는 여기서 마무리. 다음 파트는 Hermes Agent.

  1. Hermes Agent 설치 완전판 + SOUL.md 첫 작성 (예정)
  2. OpenClaw 프로덕션 운영 — 24/7 운영 환경.
  3. Claude Code 훅 완전 가이드 — 브릿지 방어층.

참고


이 글은 "AI 코딩 CLI 진입 가이드" 시리즈의 11/15 편입니다. 여기서 OpenClaw 파트가 끝나고 다음 편부터 Hermes Agent 파트로 넘어갑니다. last verified: 2026-04-25 (openclaw/openclaw/skills/coding-agent/SKILL.md + Claude Code 공식 CLI 문서 기준).

댓글

이 블로그의 인기 게시물

"LLM 핵심 학습 (1/6) — 기본: 토큰화·임베딩·어텐션·위치 인코딩"

"LLM 핵심 학습 (2/6) — 파인튜닝: LoRA·QLoRA·증류·Adapter"

"ML 기초 학습 (1/9) — 머신러닝과 sklearn: 학습의 좌표계"