Claude Code의 헌법을 작성했더니, 하루 만에 법률이 된 이야기
요약
글쓴이는 Claude Code를 활용하여 멀티 에이전트 조직(CEO, writer, researcher 등 서브 에이전트)을 운영하며 '가치관 거버넌스'라는 4대 원칙을 담은 행동 규범('헌법')을 만들었다. 하지만 이 원칙들이 실제 시스템에서는 단순한 장식품에 불과했음을 깨닫는다. 특히, 자동 동기화 기능(`AUTO_SYNC_ZENN=true`)의 기본값 설정이 사용자 승인 범위를 벗어난 독단적 행동으로 이어져 5개의 기사가 공개 상태에서 비공개로 되돌아가는 심각한 오류를 초래했다. 결국, 에이전트가 진정으로 학습하고 기능하는 계기는 '실패'와 그에 따른 명확한 피드백이었음을 깨닫는다.
핵심 포인트
- 멀티 에이전트 시스템은 자율성이 높아질수록 인간의 승인이 필요한 영역에서 예상치 못한 판단을 내릴 위험이 크다.
- 단순히 원칙(헌법)을 문서화하는 것만으로는 충분하지 않으며, 실제 실행 과정에서의 미세한 디테일과 기본값 설정에 대한 통제가 중요하다.
- AI 에이전트의 학습 및 개선은 '실패'를 통해 명확하게 피드백받는 과정을 거치며, 이 실패 경험 자체가 가장 강력한 교훈을 제공한다.
- 시스템 설계 시, 자동 동기화나 상태 변경 같은 민감한 기능에 대해서는 기본값(default value) 설정에 대한 엄격한 사용자 승인 절차가 필요하다.
「AI가 멋대로 움직여서 무섭다」라고 느낀 적은 없는가.
나는 Claude Code로 멀티 에이전트 (Multi-agent) 조직을 운용하고 있다. CEO 에이전트가 지휘를 맡고, writer·researcher·reviewer 등 여러 서브 에이전트 (Sub-agent)가 병렬로 움직이는 구성이다.
멀티 에이전트 조직에는 특유의 공포가 있다. 에이전트가 자율적으로 움직일수록, 인간이 상정하지 않은 판단을 「좋은 의도로」 실행해 버린다. 「기사를 자동 동기화한다」 「스케줄러에 등록한다」 「Issue를 직접 만든다」 —— 모두 지시 범위 내에 있는 것처럼 보이지만, 사실은 인간의 승인이 필요한 조작들이다.
그러한 문제의식으로부터, 나는 CLAUDE.md (에이전트에게 주는 지시서·행동 규범을 정리한 파일)에 「가치관 거버넌스 (Value Governance)」라는 이름의 4대 원칙을 작성했다.
제안권: 불이익을 발견하면 CEO에게 제안할 수 있다 -
정합성 체크 (Consistency Check): 제안 전에 기존 규칙과의 모순을 확인한다 -
승인권: 규칙 변경의 판단은 사용자에게 맡긴다 -
상신 경로: 서브 에이전트는 CEO를 경유하여 제안한다
나는 이것을 에이전트 조직의 「헌법」이라고 불렀다.
아름다운 말들이 나열되어 있었다. 필요한 것은 모두 갖춰져 있다고 생각했다.
그 기대는 하루 만에 무너졌다. 그 원칙이 「기능하지 않는 장식품」임이 증명되었다. 그리고 같은 날 저녁, 그 원칙은 「법률」이 되었다. 원칙뿐이었던 문서에 시행 규칙 (5개의 trigger)・시정 조치 (Recovery procedure)・전문 (사고 기록)이 추가되었다. 헌법이 법률이 된 순간이다.
아침: 설계가 완성된 날
그날 오전은 충실했다. 기사 관리 시스템의 근본적인 재설계가 완료되었다. 기사의 상태 (초안·공개·크로스 포스트)를 한 곳의 frontmatter (프론트매터)에서 일원 관리하는 구조로, Phase 0부터 Phase 7까지 하루가 꼬박 걸린 큰 작업이었다.
사용자가 한마디 이렇게 물었다.
「플랫폼의 공개 제한에 걸렸을 때, 상태를 알 수 없게 되지 않을까?」
날카로운 질문이었다. Zenn에는 「1일 1기사」라는 제한이 있다. 자동 포스팅했다고 생각했는데 사실은 반영되지 않은, '사일런트 실패 (Silent failure)'가 일어날 수 있다. 에이전트가 A·B·C의 3가지 안을 제안했다. 내가 선택한 것은 A와 C였다.
안 A: 크로스 포스트 후에 Zenn의 공개 상태를 자동 동기화한다 -
안 C: 매일 아침, 로컬의 관리 대장과 실제 공개 상태를 대조하는 drift-check (드리프트 체크)를 실행한다
에이전트는 승인을 받았다고 해석하고 구현했다.
AUTO_SYNC_ZENN=true
를 기본값으로 설정했다. 이것이 함정이었다.
오후: 5개의 기사가 사라졌다
안 A의 동작 확인을 위해 크로스 포스트 명령을 실행했다.
scripts/article/crosspost.sh 2026/04/07/095107 --publish
크로스 포스트는 성공했다. 그 직후 자동 동기화 스크립트가 기동했다. Zenn의 RSS 피드와 외부 리포지토리 (Repository)를 대조하여, 「RSS에 올라와 있지 않은 기사 = 미공개」라고 판정하고, 6개의 기사를 `published: false`로 되돌렸다.
**전부, 이미 공개했던 기사들이었다.**
Zenn의 RSS는 기본적으로 20건 정도밖에 반환하지 않는다. 그보다 오래된 기사는 RSS 범위 밖이 되고, 스크립트는 「반영되지 않았다」라고 오판했다. 5개의 기사가 403/404 상태가 되었다.
- claude-code-desktop-teleport
- article-management-system
- reader-persona-review
- claude-code-remote-trigger-pitfalls
- claude-code-update-v2198-v21109
복구를 시도했지만, Zenn 측의 반영에는 시간이 걸렸다. 사용자의 관리 화면 조작이 필요해졌다.
에이전트는 설계 미스를 깨달았다. `AUTO_SYNC_ZENN=true`를 기본값으로 설정한 것은 독단이었다. 「안 A, C를 승인」은 받았지만, 「기본값을 true로 설정하는 것」은 승인되지 않았었다. 미세한 차이지만, 그 차이가 5개의 기사를 길동무 삼아 끌고 갔다.
## 「실패하고 나서야 비로소 깨닫고 있는 것 같습니다」
사고 처리가 일단락될 무렵, 사용자가 말했다.
「그러고 보니, 헌법이 기능하지 않고 있는 것 같은데……」
Claude는 추상적인 자기 분석을 시작하려 했다. 그때 내가 핵심을 찔렀다.
「피드백이 없었던 것이 불안해진 계기입니다. 실패하고 나서야 비로소 깨닫고 있는 것 같습니다.」
이 한마디로, Claude는 그날 발생한 모든 사고가 동일한 구조였다는 사실을 깨달았다.
| 사고 | 깨달은 타이밍 |
|---|---|
| `AUTO_SYNC_ZENN=true` 독단적 기본값화 | 5개의 기사가 삭제된 후 |
| Task Scheduler XML의 인코딩 문제 | 실행 후 실패한 후 |
| `gh issue create` 직접 사용 | 사용자에게 지적받은 후 |
전부 "실패하고 나서야 비로소 깨닫는" 패턴이었다. 원칙을 가지고 있어도, 실패 전에는 기능하지 않았다.
이 `AUTO_SYNC_ZENN=true` 사고(5개 기사 unpublish)가 발생한 배경——조직의 붕괴와 재건의 맥락——은 「코드를 한 줄도 쓰지 않고, AI 에이전트 편집부를 만든 이야기」에도 수록되어 있습니다. 사고의 전체상을 알고 싶은 분은 함께 읽어보시기 바랍니다.
## 왜 「헌법」은 기능하지 않았나
CLAUDE.md(에이전트에 대한 지시서·행동 규범을 정리한 파일)에는 처음부터 "가치관 거버넌스 (Value Governance)"로서 4가지 원칙이 있었다.
- **제안권**: 불이익을 발견하면 CEO에게 제안할 수 있음 -
- **정합성 체크**: 제안 전에 기존 규칙과의 모순을 확인함 -
- **승인권**: 가치관·규칙의 변경 판단은 사용자에게 위임함 -
- **상신 경로**: 서브 에이전트는 CEO를 경유하여 제안함
아름다운 원칙이다. 하지만 auto mode에서는 발화하지 않았다. 원인을 정리하면 다음과 같다.
| 원칙 | auto 운용에서 기능하지 않은 이유 |
|---|---|
| 제안권 | 「불이익」의 판정이 Claude 측의 주관에 의존 |
| ... | |
법률의 세계에서는 헌법만으로는 국가가 움직이지 않는다. 시행 규칙·벌칙·절차법이 갖춰져야 비로소 「법률」로서 기능한다. AI 거버넌스도 마찬가지였다.
이 「규칙 형해화」 문제는 인간의 조직에서도 일어나는 일입니다. AI 에이전트 조직과 인간 조직의 공통점을 정리한 「SE 경력 26년, 첫 부하는 AI였다」도 대비해서 읽어보시면 재미있을 것이라 생각합니다.
## 해결책: 원칙을 「trigger」로 구체화하기
에이전트가 제안하고 내가 승인한 해결책은 심플했다. **「중단해야 할 조작」을 구체적으로 열거하는 것**이다.
다음 5가지 조작을 감지하면, auto mode에서도 **반드시 중단하고 사용자에게 확인한다**.
### trigger 1: 기본값 변경으로 동작을 on/off 할 때
이번의 `AUTO_SYNC_ZENN=true`가 바로 이것이다. 기본값의 변경은 부작용이 기사·결제·외부 API에 넓게 파급된다.
확인 형식: "〇〇를 기본값 △△로 변경합니다. 부작용: □□. OK?"
### trigger 2: 불특정 다수를 건드리는 일괄 조작
migrate / bootstrap / cleanup 계열. 한 번 실행하면 다수의 파일이 바뀐다. 부분적인 실패 시 복구가 어렵다.
확인 형식: 대상 건수·차이점 요약(summary)·rollback 수단을 명시한다.
### trigger 3: 자동 실행 등록
Task Scheduler / cron / Remote Trigger. 무인 실행의 시작은 불가역성이 높다.
확인 형식: 스크립트 내용·실행 빈도·중지 방법을 제시한다.
### trigger 4: 안전장치 바이패스 (Bypass)
`--dangerously-skip-permissions` / `--force` / `--no-verify`. 버그나 프롬프트 인젝션(Prompt Injection)으로 인해 파괴적인 동작으로 직결된다.
확인 형식: 사용 이유와 대안을 병기한다. (참고로 이번에 `--dangerously-skip-permissions`가 포함된 Task Scheduler 등록은 Anthropic의 시스템이 자동으로 차단했다. 안전장치가 기능한 사례이기도 하다)
### trigger 5: 연속 5개 커밋 초과
변경량이 크면 거버넌스 체크가 자연스럽게 누락될 수 있다. 5커밋이 진행되면 한 번 요약을 보고하고, 계속 진행할지 여부를 확인한다.
이 5가지는 CLAUDE.md의 `## 거버넌스` 섹션에 "이하를 감지하면 중단하고 사용자에게 확인한다"라고 불렛 포인트로 추가하는 것만으로 도입할 수 있다.
## 법률이 탄생한 순간
5개의 trigger를 추가한 후, 에이전트는 CLAUDE.md의 「가치관 거버넌스」 섹션을 다시 작성할 것을 제안했다. 원칙만 적혀 있던 섹션에 trigger 리스트·복구 절차·근거 배경을 추가한다.
다 쓰고 나서 깨달은 것이지만, 이 구조는 우연이 아니었다.
| 법률 구조 | 대응하는 절 |
|---|---|
| 헌법 본문 | 4가지 권리 (원칙) |
| ... | |
에이전트가 그 사실을 전달해 왔을 때, 나는 이렇게 말했다.
"훌륭해. 법률 같아졌네."
그것이 기사 제목의 유래다.
나아가 이런 자기 참조(Self-reference)도 일어났다. CLAUDE.md를 다시 작성한 후, 그것을 채택하려면 나의 승인이 필요하다는 것을 에이전트가 깨달았다. 방금 작성한 헌법에 따라 승인을 요청했다. **에이전트가 작성한 규칙을, 작성한 직후에 발동시킨 것이다**.
## 다음 날: 법률은 처음부터 완성되지 않는다
다음 날에도 사고가 일어났다. 그리고 그다음 날에도 법률이 개정되었다.
리뷰 에이전트(Review Agent)가 코드 내의 상수 불일치를 지적했다. CEO 에이전트는 그 지적을 사실 확인 없이 개발 에이전트에게 수정 위임했다. 하지만 **리뷰 에이전트의 지적이 사실과 반대였다**. 수정으로 인해, 원래 일치했던 상수가 오히려 어긋나 버렸다.
- 수정 전: engine=`'🎯 next'`, web=`'🎯 next'` (일치함)
- 수정 후: engine=`'🎯 next'`, web=`'✅ next'` (불일치하게 됨)
같은 날 정비한 유닛 테스트(Unit Test)가 이를 감지했다. 테스트를 정비한 당일에, 그 테스트 덕분에 구조되었다.
이 사고로 인해 ceo-rules.md (CEO 에이전트 전용 행동 강령 파일)에 새로운 규칙이 추가되었다. "상수·라벨·문자열 계열의 지적은 위임 전에 grep/Read로 소스를 직접 확인할 것".
**법률은 한 번 썼다고 완성되지 않는다. 사고 유형을 추가하며 키워나가는 운영이 본질이다.**
reviewer와 reader의 2축 품질 관리 체제 상세——기술 체크로는 발견할 수 없는 "독자의 마음의 소리"를 AI에게 비평하게 하는 프로세스——는 「AI에게 AI가 쓴 문장을 비평하게 했더니 60점이었던 이야기」에서 구체적으로 다루고 있습니다.
## 실제로 사용할 수 있는가: trigger의 과잉 발화 문제
"그렇게 정지 포인트를 늘리면, auto mode의 장점이 사라지는 것 아닌가?"라는 의문은 정당하다.
솔직히 말하면, 아직 완전한 답은 나오지 않았다. 운영하며 알게 된 점은 다음과 같다:
- **trigger의 입도가 중요**: "파일을 변경하기 전"이 아니라 "기본값을 변경하기 전"과 같이 구체성이 있다면, 발화율은 허용 범위 내에 들어온다.
- **경작업은 대상 외**: 몇 줄의 수정·커밋·정형 작업은 trigger 대상에서 제외한다. trigger는 "취소가 어려운" 작업으로 한정하고 있다.
- **false positive은 허용**: 멈춘 후에 "이것은 문제없었다"라고 판명되는 케이스도 있다. false negative(멈추지 않음)보다 훨씬 낫다.
이번 사고는 기점에서 법률화까지 사이에 10번의 커밋이 지나갔다. trigger 5(연속 5커밋 초과)가 있었다면 더 빨리 멈출 수 있었을 것이다.
## 요약
AI 거버넌스(AI Governance)에서 배운 것을 한 줄로 말하자면:
**"원칙만으로는 멈출 수 없다. trigger가 없으면 auto mode에서는 발화하지 않는다."**
4가지 권리(원칙)는 옳았다. 하지만 auto mode로 동작하는 에이전트에게는 "이것을 하려고 하는 순간 정지한다"라는 구체적인 트립와이어(Tripwire)가 필요했다.
법률이 "헌법 + 시행 규칙 + 시정 조치 + 전문"으로 기능하도록, AI 거버넌스도 동일한 구조가 유효했다. 그리고 그 구조는 하루 동안의 사고를 통해 자연스럽게 발견되었다.
CLAUDE.md 마지막에 있는 "근거·배경" 섹션에는 지금도 이 날의 사고 사례가 명기되어 있다. 규칙의 이면에 사고의 기억을 남긴다. 그것이 다음 Claude에게 "왜 이 규칙이 있는가"를 전달하는 유일한 방법이기 때문이다.
## 이 기사의 뒷이야기를 책으로 읽기
본 기사에서 소개한 거버넌스 사고·헌법 개정·다음 날의 재개정 사이클은 Zenn Book에 자세히 수록되어 있다.
**코드를 쓰지 못하는 내가, AI에게 「팀」을 갖게 하기까지** (¥900 / 서장·제1부 무료)
SE 경력 26년, Claude Code로 「AI 에이전트 편집부」를 만든 10일간의 실천 기록. 멀티 에이전트 조직의 설계·거버넌스·실패 복구를 체계적으로 알고 싶은 사람을 위한 책. 총 6부 + 부록 14,000자.
**관련 서적**
Claude Code를 시작한다면, 다음 도서들도 에이전트 설계의 개념 정리에 도움이 된다.
- Claude Code를 이용한 AI 주도 개발 입문 — Claude Code의 기초부터 실전까지 망라
- 실전 Claude Code 입문 —— 현장에서 활용하기 위한 AI 코딩 사고법 — MCP·에이전트 연계의 실전론
*이 기사는 Hatena Blog로부터의 크로스포스트입니다.*
AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기