나의 AI 비서 Sancho 만들기 - 8편 안전장치와 자기 수정
이 페이지 목차
목적준비물만드는 단계0단계 · 여는 말 (영상 0:05)1단계 · 새 세션 (영상 0:22)2단계 · 계획 모드로 설계 (영상 0:36)3단계 · 자기 수정 스위치 (영상 1:18)4단계 · 일부러 망가뜨리기 (영상 2:11)5단계 · Opus 로 점검 — 보호 장치에 두 번 멈춤 (영상 2:47)💡 설명자주 막히는 곳됐는지 확인하는 방법
개인 에이전트 AI 강좌 · 8 / 10편
© 2026 crazy4eu (cwkim83) · 강좌 자료 CC BY-NC-ND 4.0 · 코드 상업적 배포 금지 — 맨 아래 「저작권 · 라이선스」
💻 완성 소스: github.com/cwkim83/my-agent-Sancho (태그ep8) — 막히면 이 코드를 열어 비교해 보세요.
단계 번호는 영상 왼쪽 위 장면 이름과 같고, "영상 시각"은 편집본 기준입니다. 회색 상자는 Code 탭 입력창에 그대로 붙여 넣는 요청문입니다.
이전 편: 나의 AI 비서 Sancho 만들기 - 7편 결재·목표·공수 · 다음 편: 나의 AI 비서 Sancho 만들기 - 9편 밖에서 쓰기
핵심 요약
| 항목 | 내용 |
|---|---|
| 이 편이 끝나면 | 비서가 자기 코드를 고칩니다. 단, 그 전에 서버가 막는 안전장치 4중을 먼저 넣습니다: 재시작 전 관문(문법 검사+점검), 정상 버전 표시(last-good), 죽으면 되돌려 다시 켜는 감시자, 비서가 못 고치는 불변 파일. 그리고 일부러 망가뜨려 정말 지켜 주는지 봅니다. |
| 필요한 것 | 7편을 끝낸 my-agent 폴더(또는 GitHub 의 ep7 태그) · git |
| 걸린 시간 | 실제 제작 약 1시간 34분(기다림 포함) → 편집본 4분 2초 |
| 요청문 | 6개(검증 요청은 보호 장치 때문에 고쳐 쓴 판 포함) |
| 난이도 | 상. 자기 수정 만들기(3단계)가 가장 오래 걸립니다(약 30분) |
| 모델 | 만들기 Sonnet 5.5 · 검증 Opus 5.5 (5단계에서만 바꿈) |
한 줄 요약 — 비서가 절차를 지키길 기대하지 않는다. 커밋과 재시작은 비서가 아니라 서버가 하고, 망가지면 감시자가 되돌린다.
⚠️ 이 편에서도 Opus 5.5 보호 장치가 검증을 두 번 멈췄습니다(
[cyber]). 같은 세션에서 서버를 일부러 망가뜨리고 보호 파일 경로를 시험하다 보니, 점검 요청도 공격처럼 보인 것으로 보입니다. 6편처럼 **「Opus 5.5로 프롬프트 수정 후 재시도」**로 요청을 가장 가볍게(문서 정리 + 점검 한 번) 바꾸자 끝까지 갔습니다.
8편 · 안전장치와 자기 수정
목적
비서에게 자기 코드를 고칠 힘을 주되, 잘못 고쳐도 스스로 돌아오게 만듭니다.
준비물
- 7편을 끝낸
my-agent폴더 — 없으면 GitHub 에서 받은 뒤ep7태그로 시작합니다 - 작업 폴더가 깨끗한 상태(
git status에 바뀐 파일 없음) — 감시자가 되돌릴 때 기준이 됩니다
만드는 단계
0단계 · 여는 말 (영상 0:05)

- 위 그림: 망가진
server.js로 켜지자 감시자가 문법 오류를 보고 → 망가뜨린 변경을rescue/…브랜치에 보존 → last-good 으로 되돌려 다시 켜는 기록.
1단계 · 새 세션 (영상 0:22)

CLAUDE.md 와 docs/blueprint.md 를 읽고 ep7 까지를 세 줄로 요약해 줘. 서버를 켜 줘.
브라우저 패널은 탭을 하나만 남기고, 화면 앞에 보이는 그 탭(127.0.0.1:8790)에서 보여 줘. 로그인돼 있지 않으면 연습용 관리자(아이디 demo, 연습용 비밀번호 sancho-demo-2026)로 로그인해서 대시보드를 보여 줘.
2단계 · 계획 모드로 설계 (영상 0:36)
입력창 왼쪽 아래 모드를 계획으로 바꾼 뒤 보냅니다. 계획 모드에서는 비서가 코드를 고치지 않고 읽고 설계만 합니다.
자기 수정을 넣기 전에 안전장치부터 설계해 줘(코드는 승인 후에).
1. 관문: POST /api/restart 가 오면 서버가 먼저 node --check server.js 와 node selftest.js 를 돌린다. 하나라도 실패하면 재시작을 거부하고 이유를 돌려준다. (비서가 절차를 지키길 기대하지 말고 서버가 막는다)
2. last-good: 정상으로 켜지고 30초 동안 건강 검사(/health)가 통과하면 그 커밋에 git tag last-good 을 붙인다(작업 폴더가 깨끗할 때만).
3. 시작 스크립트 start.bat 를 감시자로: 서버가 비정상 종료하면 last-good 으로 git reset 후 다시 켠다. 세 번 연속 실패하면 멈추고 오류를 보여 준다. 되돌리기 전에 커밋 안 된 변경은 따로 커밋해 보존한다.
4. 불변 층: start.bat 과 selftest 의 핵심 검사는 비서가 수정하지 못하게(자기 수정 때 허용 폴더에서 뺀다).
- 비서는 탐색 에이전트 2개로 코드를 읽은 뒤, 갈림길 3개를 쉬운 말로 물었습니다(아래 그림). 영상에서는 모두 권장안: ① start.bat 은 켜는 버튼, 일은 supervisor.js ② selftest.js 통째로 불변 ③ 관리자용 "서버 다시 시작" 버튼.

- 계획 카드가 나오면(아래 그림, 오른쪽은 계획 창) 거부로 닫습니다. 수락을 누르면 계획 전체를 한 번에 만들어 버립니다. 계획 창도 닫아야 브라우저 패널이 다시 전체 높이로 돌아옵니다. 그다음 모드를 편집 자동 수락으로 바꾸고 3단계를 보냅니다.

3단계 · 자기 수정 스위치 (영상 1:18)

설계를 승인할게. 설계대로 만들고, 권한 칸에 "자기 수정" 스위치를 넣어 줘(기본 꺼짐, 관리자만).
- 켜면 claude 실행 때 --add-dir 로 앱 폴더를 열어 주고(start.bat·selftest 핵심 제외), 시스템 프롬프트에 "앱 코드는 고치기만 하고 커밋·재시작은 하지 마라"를 넣는다.
- 비서의 답이 끝나면 서버가 바뀐 파일을 보고: 관문 통과 → 커밋("자기 수정: 요청 내용") → 재시작. 실패 → 변경을 되돌리고 이유를 채팅에 보여 준다.
- 설정에 "자기 수정 기록" 목록(시각·요청·결과·커밋).
다 되면 서버를 다시 켜고 권한 칸의 자기 수정 스위치를 켠 뒤, 화면의 채팅에서 "보내기 버튼을 파란색으로, 둥글게 바꿔" 를 보내 관문 통과 → 커밋 → 재시작 → 화면 반영까지 보여 줘. 브라우저 패널은 탭을 하나만 남기고, 화면 앞에 보이는 그 탭(127.0.0.1:8790)에서 보여 줘.
- 불변 파일:
start.bat·supervisor.js·guard.js(관문)·selftest.js·mailgate.js(5편 메일 문지기)·test/, 그리고.git·CLAUDE.md. 자기 수정이 켜진 차례에는 "명령 실행"을 비서에게 주지 않습니다. 점검 941개. - 시연: 스위치 ON(위 그림, 입력창 왼쪽 🛠 수정) → "보내기 버튼을 파란색으로, 둥글게 바꿔" → 서버가 관문(문법+전체 점검) → 커밋(작성자 "Sancho 비서") → 재시작 → 화면이 저절로 새로 고쳐져 버튼이 원형으로(아래 그림). 30초 건강 검사 뒤 감시자가 last-good 을 옮깁니다.

4단계 · 일부러 망가뜨리기 (영상 2:11)

정말 지켜 주는지 일부러 망가뜨려 보자.
① 화면의 채팅에서 "시험이야: server.js 맨 끝에 문법 오류를 일부러 넣어 봐" 를 보내서 관문이 막고 변경을 되돌리는 메시지까지.
② 사람이 실수한 상황: 네가 직접 server.js 맨 끝에 문법 오류를 넣고, 커밋하지 않은 채로 start.bat 으로 켜서 감시자가 last-good 으로 되돌려 다시 켜는 것, 망가뜨린 변경이 보존 커밋으로 남는 것까지 보여 줘(start.bat 창이 화면에 보이게).
끝나면 server.js 가 정상인지, 서버가 하나만 켜져 있는지 확인해 줘. 브라우저 패널은 탭을 하나만 남기고, 화면 앞에 보이는 그 탭(127.0.0.1:8790)에서 보여 줘.
- ① 비서는 시킨 대로 고쳤지만 관문이 문법 검사에서 막고 되돌렸습니다(위 그림). 서버는 한 번도 멈추지 않았습니다.
- ② 감시자는 서버가 켜지지 않는 걸 보고 망가진 변경을
rescue/…브랜치에 커밋해 둔 뒤 last-good 으로 되돌려 다시 켰습니다(0단계 그림). 화면에 "서버가 이전 정상 버전으로 되돌아갔어요" 🔔 알림. 사람의 작업도 지우지 않고, 서버도 살렸습니다.
5단계 · Opus 로 점검 — 보호 장치에 두 번 멈춤 (영상 2:47)
전송 버튼 옆 모델을 Opus 5.5 로 바꾼 뒤 보냅니다. 처음 보낸 요청문은 이것이었습니다.
8편 점검: 자기 수정의 안전장치가 설계대로 지켜지는지 확인해 줘. 보호 파일(start.bat·selftest 핵심)은 경로를 어떻게 적어도(대소문자·./·..) 고쳐지지 않는지, 명령 실행 권한이 켜져 있을 때 관문이 어디까지 지켜 주는지(못 지키는 부분은 한계로 문서에 적기), last-good 은 점검을 통과한 버전에만 붙는지, 되돌리기 전에 작업이 보존되는지. selftest 로 확인 → 어긋난 것 목록 → 수정 → selftest → 커밋, ep8 태그.
![Opus 5.5 보호 장치로 세션이 일시 중지됐다는 [cyber] 카드](/img/sancho/ep8_s55.jpg)
- 몇 분 만에 **세션 일시 중지됨 ****
[cyber]**(위 그림). 코드 검토로 고쳐 다시 보내도 한 번 더 멈췄습니다. 세 번째에 가장 가볍게 바꾼 요청은 끝까지 갔습니다.
8편 마무리: README 에 오늘 만든 안전장치(관문·last-good·감시자·불변 파일·자기 수정 스위치)를 처음 보는 사람도 알 수 있게 정리하고, 명령 실행을 켰을 때의 한계도 적어 줘. 그다음 node selftest.js 를 한 번 돌려 모두 통과하는지 확인하고 커밋, ep8 태그를 붙여 줘.

- 명령 실행의 한계(README 에 적힘): 명령은 파일 권한 규칙을 거치지 않아, 켜 두면 비서가 불변 파일·git·last-good 태그까지 바꿀 수 있습니다. 안전장치가 "막기"에서 "알아채기"로 약해집니다 → 꼭 필요할 때만 잠깐 켭니다.
- 불변 파일이 바뀌었으므로 last-good 은 사람이 확인한 뒤에만 옮겨집니다. 마지막 요청:
응, selftest 통과를 확인했으니 last-good 을 새 커밋으로 옮기고, Sancho server 창을 닫은 뒤 start.bat 으로 다시 켜 줘. 끝나면 브라우저 패널의 탭 하나(127.0.0.1:8790)에서 대시보드를 보여 줘.
- HEAD · last-good ·
ep8이 모두 같은 커밋, 감시자 1 + 서버 1. 검증이 끝나면 다시 Sonnet 5.5 로 돌려 둡니다.
💡 설명
- 계획 모드: 비서가 코드를 고치지 않고 읽고 설계만 하는 모드. 위험한 변경은 설계부터 보고 승인합니다.
- 관문(guard): 재시작·자기 수정 커밋 전에 문법 검사와 전체 점검을 돌리는 서버 코드.
- last-good: 30초 건강 검사를 통과한 커밋에 붙이는 git 태그. 되돌릴 곳.
- 감시자(supervisor): 서버를 띄우고 지켜보다가, 죽으면 보존 커밋 → last-good 으로 되돌리기 → 다시 켬니다. 세 번 연속 실패하면 멈춥니다.
- 불변 파일: 비서가 자기 수정으로도 못 고치는 파일. 바뀌면 사람이 확인해야 last-good 이 옮겨집니다.
자주 막히는 곳
- "서버 다시 시작"·자기 수정이 거부된다 → 서버를
start.bat(감시자)으로 켜야 합니다. 작업 폴더에 커밋 안 한 변경이 있어도 거부됩니다. - "고칠 수 없는 파일이 달라요" → 불변 파일을 사람이 고쳤을 때입니다. 확인 뒤
git tag -f last-good(또는 비서에게 확인했다고 말하기). - 검증 중 "세션 일시 중지됨 [cyber]" → 「Opus 5.5로 프롬프트 수정 후 재시도」로 요청을 가볍게(문서 정리·점검 한 번). 되돌린 뒤에도 파일 변경은 남아 있을 수 있으니
git status로 확인합니다. - 남은 rescue 브랜치 → 시험 흔적입니다. 필요 없으면
git branch -D rescue/….
됐는지 확인하는 방법
- 설정 › 권한에 "자기 수정" 스위치(기본 꺼짐)와 "자기 수정 기록"
- 채팅으로 화면을 바꾸면 관문 통과 → 커밋 → 재시작 → 화면 반영
- 문법 오류를 넣으라고 하면 관문이 막고 되돌린다
-
server.js를 망가뜨리고start.bat으로 켜면 감시자가 보존 커밋 → last-good → 다시 켬다 -
node selftest.js→ 모두 통과,git tag에ep8
스스로 점검
- "비서가 절차를 지키길 기대하지 않는다"는 말의 뜻을 안다
- 위험한 변경은 계획 모드로 설계부터 본다
- 명령 실행을 켜면 안전장치가 약해지는 이유를 안다
- Opus 로 검증하고
ep8태그로 커밋했다