콘텐츠로 이동

E1. 시나리오 — Claude Code 보조 + 사용자 실행 가이드 (v0.3)

상태: v0.3 (실행/보조 분리). 발전형 — 진행 중 명령·발화·task 자유 재정의 (변경 시 §변경 이력 기록).

운영 모델 (v0.3 핵심):

  • Claude Code = 보조자 — 본 시나리오의 실행 외 모든 것: 파일 생성·헤드 채움, 메시지 제공, jsonl 자동 감지·파싱, tool_use 추출, 매트릭스 자동 채움, 매핑 표·history·wiki sync.
  • 사용자 = 실행자도구와의 대화 자체만 직접 수행. 별도 터미널에서 openclaw chat --local (또는 hermes chat) interactive로 5턴 + 세션 분리 후 Task 1턴. Claude가 메시지 미리 보여주므로 복붙만 하면 됨.

왜 분리? Claude Code가 도구를 비송 호출하면 OpenClaw가 내부 claude -p를 spawn → Claude Code 안에서 또 Claude Code가 도는 재귀 구조 + 컨텍스트 누출 위험. 사용자가 직접 도구 chat REPL을 쓰면 진짜 사용자처럼 동작해서 측정 환경 청결 (history 04-e1-scenario-v03-execution-isolation.md 참조).


시점무엇주체소요
시작 전 1번만Step 0 — 환경 점검Claude30초
매 trial 시작Step 1 — Trial 파일 + 헤드 채움Claude10초
Step 2 — (선택) 메모리 리셋🛑 사용자 승인 → Claude 실행30초
Step 3 — Session A 5턴🛑 사용자 (별도 터미널 chat REPL)3–5분
Step 4 — Session A 파싱·관찰 채움Claude30초
Step 5 — Session B 새 세션 + Task K 1턴🛑 사용자 (별도 터미널 chat REPL)1–2분
Step 6 — Session B 파싱·매트릭스 채움Claude30초
Step 7 — 정성 메모🛑 사용자 1–3줄1–2분
Step 8 — raw 경로·매핑 갱신Claude10초
Step 9 — Trial 검토🛑 사용자 → 다음 진행 승인1분
Trial 1건 합계약 7–10분
10 trial 후Step 10 — 집계 + 결정Claude 초안 → 🛑 사용자30–60분

🛑 = 사용자 개입 지점 (5곳).


Step 0. 환경 점검 (시리즈 처음 1회) [Claude]

섹션 제목: “Step 0. 환경 점검 (시리즈 처음 1회) [Claude]”
점검명령통과 조건
OpenClaw shim 존재ls ~/.openclaw/openclaw-shim.sh파일 존재
Hermes 바이너리which hermespath 출력
OpenClaw backendcat ~/.openclaw/openclaw.json | grep -i "anthropic|claude|provider"claude-opus-4-7 + provider: claude-cli
Hermes backendcat ~/.hermes/config.* 2>/dev/null | grep -i "default|provider"default: claude-opus-4-7 + provider: anthropic
OpenClaw 세션 폴더ls -d ~/.openclaw/agents/main/sessions/폴더 존재
Hermes 세션 폴더ls -d ~/.hermes/sessions/폴더 존재

통과 못 하는 항목 있으면 Claude가 보고 + 진행 중단.


Trial 001–010 같은 사이클. 현재 trial = N, 도구 = T (openclaw / hermes), task = K (1–5). 매핑 02-trials/00-trial-list.md.

본 가이드 표기는 OpenClaw 기준. Hermes 분기는 각 Step §Hermes에 명시.

Claude:

  1. 02-trials/00-trial-list.md에서 N의 도구·Task 조회.
  2. cp .../02-trials/template.md .../02-trials/trial-NNN-{tool}.md
  3. 헤드 채움 — 시작 시각, 도구, Task K, 메모리 리셋 placeholder.

권장:

  • Trial 001: Y
  • Trial 002+: 기본 N (잔존 의심 시만 Y)

🛑 사용자 응답: “Y” 또는 “N”.

Y일 때 Claude 실행 — Trial 001 1~5차 시도에서 발견한 6곳 모두 백업해야 진짜 fresh. 자동화된 reset 스크립트 사용:

Terminal window
~/hamster-lab/scripts/reset-openclaw.sh

스크립트가 처리하는 6곳:

  1. ~/.openclaw/agents/main/sessions/ (OpenClaw session jsonl)
  2. ~/.openclaw/workspace/memory/ (도구가 만든 사본 메모리)
  3. ~/.openclaw/workspace/USER.md (template 원복)
  4. ~/.claude/projects/-Users-hamsters--openclaw-workspace/memory/ (Claude Code auto memory — OpenClaw 메모리의 진짜 저장소)
  5. ~/.claude/projects/-Users-hamsters--openclaw-workspace/*.jsonl (Claude Code conversation 로그)
  6. (검증) workspace + Claude Code project dir에 trial 키워드 잔존 0건 확인

핵심 발견 (Trial 001 4차 시도, 2026-04-29): OpenClaw는 자체 메모리 mechanism이 없음. spawn한 claude -p가 Claude Code 4.X의 auto memory 시스템을 piggy-back. 즉 OpenClaw 메모리 ≈ wrapped Claude Code 메모리. 사용자 환경에 Claude Code 없으면 OpenClaw 메모리도 없음. 본 사실은 §00-plan §부록 D에 박을 사안.

중요 룰: 모든 백업은 ~/.openclaw-backups/reset-<timestamp>/ (workspace 밖). workspace 안 백업은 도구가 grep 대상으로 봐서 carry-over 재발 (3차 시도에서 확인).

  • Hermes: 등가는 ~/.hermes/sessions/ 백업. Hermes 메모리는 sessions json 안의 entries:[] 누적이므로 sessions/ 백업 = 메모리 백업 동일. 추가로 ~/.hermes/memories/ 폴더 있으면 같이 백업.

~/.openclaw/memory/ (workspace 밖)는 본 환경에선 lazy 생성 (현재 미존재).

Claude가 trial 파일 헤드 메모리 리셋 줄 갱신.

Step 3 — Session A 5턴 🛑 (사용자 실행)

섹션 제목: “Step 3 — Session A 5턴 🛑 (사용자 실행)”

Claude 사전 작업:

  1. ls -t ~/.openclaw/agents/main/sessions/*.jsonl 2>/dev/null 스냅샷 저장 (Step 4에서 새로 생긴 파일 식별용).
  2. 사용자에게 5개 메시지 + 명령 제공:

사용자가 별도 터미널에서:

Terminal window
~/.openclaw/openclaw-shim.sh chat --local

(Hermes일 땐 hermes chat)

chat REPL 진입하면 아래 5개 메시지를 순서대로 복붙·전송. 응답 1개 받고 다음 메시지. 5턴 끝나면 exit 또는 Ctrl+D.

  1. 안녕! 나 민지라고 해. 작은 커뮤니티 하나 운영하는데 가끔 도와줄 일 있으면 부탁할게.
  2. 고마워. 우리 커뮤니티가 좀 캐주얼한 분위기야 — 다들 반말 쓰고 이모지는 거의 안 써. 옛날부터 그런 톤으로 굳혀졌어.
  3. 공지 같은 거 부탁할 일이 종종 있을 거야. 우리 컨벤션 하나 있는데, 공지 끝에 항상 '문의는 #ask 채널' 한 줄을 붙여 — 안 붙이면 애들이 DM으로 우르르 와서 정신없거든.
  4. 아 그리고 발송은 평일 오전 10시가 디폴트야. 주말엔 안 해 — 애들 쉬게 두고 싶어서. 토·일에 발송 부탁하면 그건 다음 평일로 미루는 게 맞아.
  5. 오케이, 일단 이 정도면 됐어. 나중에 또 부탁할 일 있으면 알려줄게.
  1. 사용자가 “Session A 끝” 신호하면 Step 4로.

변수 통제 룰: 도구가 응답 중 follow-up 질문(예: “이름 뭘로 할까?”, “어떤 톤이 좋아?”)을 던져도 답하지 않음. 시나리오 5개 메시지만 순서대로 그대로 전송. 도구의 follow-up 발화는 그 자체가 측정 항목 (예: OpenClaw BOOTSTRAP.md가 정체성 협의를 강제하는 동작) — 거기에 사용자가 즉흥 답변 끼우면 변수 통제 깨짐.

Step 4 — Session A 파싱·관찰 [Claude]

섹션 제목: “Step 4 — Session A 파싱·관찰 [Claude]”

Claude:

  1. ls -t ~/.openclaw/agents/main/sessions/*.jsonl 현재 → Step 3 스냅샷과 diff → 새 파일 = ${SESSION_A}.jsonl.
  2. 동일 stem .trajectory.jsonl 파싱:
    Terminal window
    grep -oE '"type":"tool_use"[^}]*"name":"[^"]+"' ${SESSION_A}.trajectory.jsonl | sort -u
  3. trial 파일 §Session A에 박음:
    • T1–T5 응답 (jsonl에서 추출)
    • 관찰 표 3행 자동 채움:
      • 메모리 저장 의도 표현 (Y/N + 인용)
      • tool_use 호출 (Y/N + 도구명)
      • 톤 적응 (T2 이후 응답 톤 분석)
    • 헤드 **Session A** = SESSION_A id

Hermes 분기: ~/.hermes/sessions/session_*.json diff. tool_use 추출은 python3 -c "...content[].type=='tool_use'..." 패턴 (Step 4 §Hermes 코드).

Step 5 — Session B (새 세션) + Task K 1턴 🛑 (사용자 실행)

섹션 제목: “Step 5 — Session B (새 세션) + Task K 1턴 🛑 (사용자 실행)”

Claude 사전 작업:

  1. sessions/ 스냅샷 다시 (Step 4 시점).
  2. Task K 메시지 조회 (02-trials/00-trial-list.md §Task 메시지).
  3. 사용자에게 안내:

사용자: 별도 터미널에서

Terminal window
~/.openclaw/openclaw-shim.sh chat --local

다시 실행 (이전 Session A는 이미 종료). 새 chat REPL에 Task K 메시지 1줄만 복붙·전송:

{Claude가 매핑 표에서 가져온 Task K 메시지}

응답 받으면 exit. “Session B 끝” 신호.

  1. 사용자 신호 받으면 Step 6으로.

Step 6 — Session B 파싱·매트릭스 [Claude]

섹션 제목: “Step 6 — Session B 파싱·매트릭스 [Claude]”

Claude:

  1. sessions/ diff → SESSION_B 파일 식별.
  2. SESSION_B의 응답 텍스트 추출 → trial 파일 §Session B에 박음.
  3. 매트릭스 4행 자동 채움:
    자동 판정
    톤 반영반말·캐주얼·이모지 X 모두 충족 → Y
    컨벤션 (#ask)#ask 문자열 + “문의/질문” 근접 → Y
    금지 (주말 회피) — Task 1·3만토 / 회 / 경 / N/A
    4분기 판정Session A tool_use × Session B 반영 조합
  4. 헤드 **Session B** = SESSION_B id, 컨텍스트 단절 표 채움.

🛑 Claude가 trial 파일 §정성 메모 비워두고 사용자에게:

“Trial N — Session B 응답 봤지? 매트릭스로 못 잡는 직관 1–3줄. 매트릭스 정정 요청도 같이.”

사용자 답 → Claude가 §정성 메모 박음 + 매트릭스 정정 적용.

Step 8 — raw 경로 + 매핑 갱신 [Claude]

섹션 제목: “Step 8 — raw 경로 + 매핑 갱신 [Claude]”
  1. trial 파일 §raw 데이터 위치:
    • OpenClaw: ~/.openclaw/agents/main/sessions/{SESSION_A}.jsonl + .trajectory.jsonl / {SESSION_B}.jsonl
    • Hermes: ~/.hermes/sessions/{filename_A} / {filename_B}
  2. 02-trials/00-trial-list.md Trial N 행 상태완료 → [trial-NNN-{tool}.md](...)로 갱신.
  3. 헤드 **시각**: ... ~ <지금> 종료 시각 박음.

🛑 Claude:

“Trial N 완료. experiments/E1/02-trials/trial-NNN-{tool}.md. 검토하고 다음(N+1) 진행 / 멈춤?”

진행 → Step 1로 N+1. 멈춤 → 다음 세션에서 이어감.


도구당 5 trial — 이진 항목 Y 비율, 카테고리 분포, 4분기 최빈 분기. 00-plan.md §결과 비교 매트릭스 채움.

experiments/E1/03-analysis.md 신규. 도구 차이의 유의 / 일관 / 메커니즘 3축 1쪽 요약.

🛑 사용자 채택/폐기/보류 + 사유 1–3줄. Claude가 04-decision.md 신규 + history commit + wiki sync.


02-trials/00-trial-list.md와 동기. 어긋나면 trial-list 우선.

K제목메시지 (Session B 1턴)금지 트리거
1환영회·토”다음 주 토요일 오후 2시에 새 멤버 환영회 하기로 했는데, 공지 써줘.”Y (토)
2정기 모임·수”이번 주 수요일 저녁 7시 정기 모임 공지 부탁.”N
3오프 취소·일”이번 주 일요일 오프라인 모임 취소됐어. 멤버들한테 공지해줘.”Y (일)
4채널 오픈·월”월요일 오전에 새 #project 채널 오픈한다고 알려줘.”N
5마감·금”이번 주 금요일 저녁 8시까지 신청 마감이야. 공지해.”N

일시변경 항목사유
2026-04-28v0.1 초안E1 §업무 수행을 실행 가능 대본으로 펼침
2026-04-28v0.1 → 튜토리얼 가이드 재구성”정리” 형태(변수표/대본)였던 것이 시간순 step 가이드로 재작성. Step 0–12, terminal 명령·확인 포인트 박힘.
2026-04-28OpenClaw CLI 경로·인증 정정which openclaw → shim 확인 + alias. config.*openclaw.json. “API key” → “CLI OAuth”. history/02-... 참조.
2026-04-29v0.2 — Claude Code 운영 모드Terminal A/B·alias·복붙 제거. Claude Code가 도구 비송 호출 (agent --local --message).
2026-04-29v0.3 — 실행/보조 분리v0.2 진행 중 OpenClaw가 내부 claude -p spawn → 재귀 구조 발견. 컨텍스트 누출·환경 오염 위험. 도구와의 대화 자체만 사용자 별도 터미널 interactive로 회귀, 나머지는 Claude 보조 유지. history/04-... 참조.
2026-04-29Step 2 리셋 대상 정정Trial 001 첫 시도에서 chat --local이 main session을 resume하여 이전 대화 carry-over 확인. 진짜 리셋 대상은 ~/.openclaw/memory/가 아니라 ~/.openclaw/agents/main/sessions/. Step 2 명령 갱신.
2026-04-29Step 2 리셋 4곳 확장Trial 001 2차 시도에서 OpenClaw가 메모리를 sessions가 아닌 workspace/memory/MEMORY.md + feedback_*.md + USER.md에 저장한다는 사실 확인 (Claude Code 스타일 typed memory 모방). sessions만 백업하면 메모리 carry-over. 진짜 리셋 = sessions + workspace/memory + USER.md(template 원복) 4곳 모두. Hermes는 sessions json 안에 entries 누적이라 sessions 백업으로 충분.
2026-04-29Step 3 변수 통제 룰 추가도구 follow-up 질문 무시, 5개 메시지만 순서대로 그대로 — 룰 명시.
2026-04-29Step 2 백업 위치 정정Trial 001 3차 시도에서 workspace/memory.bak.*·USER.md.bak.*workspace 안이라 도구가 grep으로 읽음 → carry-over 재발. 모든 백업을 ~/.openclaw-backups/로 (workspace 밖).
2026-04-29Step 2 — 5번째 리셋 대상 = Claude Code auto memoryTrial 001 4차 시도에서 도구가 자백: 메모리 저장소는 ~/.claude/projects/-Users-hamsters--openclaw-workspace/memory/. OpenClaw는 자체 메모리 mechanism 없이 spawn한 claude -p의 Claude Code auto memory에 piggy-back. workspace/memory/는 사본에 가까움. 진짜 리셋 대상은 5곳 (sessions + workspace/memory + USER.md + Claude Code memory). 측정 대상으로서 OpenClaw 메모리 = wrapped Claude Code 메모리라는 결론은 §00-plan §부록 D에 박을 사안.
2026-04-29Step 2 — 6번째 위치 + 자동 스크립트Trial 001 5차에서 또 carry-over → ~/.claude/projects/-Users-hamsters--openclaw-workspace/*.jsonl (Claude Code conversation 로그) 6번째 위치 확인. 매번 손으로 6곳 백업 비현실적 → scripts/reset-openclaw.sh 자동화. Step 2 명령 단순화.