ELI5 · 쉬운 설명

agent-trace — 에이전트의 블랙박스를 읽어
교본에 한 줄 적어 넣는 도구

마지막 업데이트 2026-09-18

Claude Code, Codex, Hermes가 일하면서 남긴 기록을 모아, 어느 턴에서 헛돌았는지 찾고, 그 교훈을 CLAUDE.md / AGENTS.md에 한 줄로 되돌려 넣습니다. 그림 7장으로 설명합니다.

2026-09-18저장소 ~/git-projects/agent-trace실행 절차·명령은 실행 가이드

한 장 요약. 에이전트가 운전자라면 agent-trace는 블랙박스 영상을 모아 위험 구간을 찍어 주고, 반복되는 실수를 운전 교본에 적어 넣는 안전관리자입니다. 운전에 끼어들지 않고, 영상을 고치지 않고, 밖으로 보내지 않습니다.

그림 1전체 그림 — 기록에서 교본까지

왼쪽에서 오른쪽으로 한 번 흐르고, 마지막에 다시 왼쪽으로 돌아옵니다.

agent-trace 전체 흐름 세 도구가 홈 디렉터리에 기록을 남기고, agent-trace가 읽어 SQLite에 저장하고 Phoenix에 보여주며, 룰과 judge가 문제 턴을 골라 제안을 만들고, 사람이 승인하면 CLAUDE.md에 한 줄이 추가되어 다음 세션의 에이전트가 읽는다. 코딩 에이전트 Claude Code Codex CLI Hermes 남김 기록 파일 ~/.claude ~/.codex ~/.hermes 읽음 agent-trace ① 하나의 모양으로 번역 ② SQLite에 저장 ③ 문제 턴 표시 + 판정 ④ 개선 제안 Phoenix 화면 보고 · 표시하는 곳 사람이 승인 apply --yes 교본 CLAUDE.md 다음 세션의 에이전트가 교본을 읽고 같은 실수를 덜 한다

agent-trace는 에이전트 옆에 서 있지 않습니다. 에이전트가 떠난 뒤 남은 기록을 읽습니다.

그림 2어디서 읽나 — 미들웨어가 아닙니다

에이전트는 agent-trace가 있는지도 모릅니다. 원래 남기던 파일을 나중에 읽을 뿐입니다.

미들웨어와 agent-trace의 위치 비교 위 줄은 미들웨어가 사용자와 에이전트 사이에 끼어 있는 그림. 아래 줄은 사용자와 에이전트가 직접 대화하고, 에이전트가 디스크에 남긴 기록을 agent-trace가 나중에 읽는 그림. ✗ 미들웨어라면 이렇게 끼어 있어야 합니다 사용자 미들웨어 에이전트 ✓ agent-trace는 흐름 밖에서 기록을 읽습니다 사용자 에이전트 늘 남기던 것 홈 디렉터리의 기록 파일 ~/.claude/projects/**/*.jsonl · ~/.codex/sessions/** 읽기 전용 agent-trace 파일이 바뀌면 2초 뒤 자동으로 읽습니다(watch). 과거 파일은 한 번에 전부 읽습니다(backfill). 원본은 절대 고치지 않습니다.

그림 3번역 — 세 가지 모양을 하나로

도구마다 기록 형식이 다릅니다. 도구별 통역사(파서)가 같은 모양으로 바꿔 줍니다.

세 도구의 기록을 하나의 모델로 번역 왼쪽에 서로 다른 모양의 세 기록(Claude Code JSONL, Codex rollout, Hermes SQLite)이 있고, 각각의 파서를 거쳐 오른쪽 하나의 모델(세션 → 턴 → LLM 호출 / 툴 호출)로 합쳐진다. Claude Code user / assistant / system 줄 Codex CLI task_started / response_item … Hermes sessions / messages 테이블 통역사 ① 통역사 ② 통역사 ③ 하나의 모양 세션어느 도구, 어느 폴더, 어느 모델 내 질문 하나 → 에이전트의 마지막 답 LLM 호출모델 · 토큰 · 걸린 시간 툴 호출무슨 툴 · 입력 · 출력 · 에러 한쪽에만 있는 정보는 억지로 채우지 않고 비워 둡니다

"턴"이 기준 단위입니다. Claude Code 턴과 Codex 턴을 같은 표에 놓고 비교할 수 있게 됩니다.

그림 4저장과 화면 — 정본 하나, 뷰어 하나

SQLite가 정본입니다. Phoenix는 그것을 보여 주는 별도 프로그램(Docker 컨테이너)입니다.

SQLite 정본과 Phoenix 뷰어 agent-trace가 SQLite 파일에 쓰고, 같은 내용을 OTLP로 Phoenix 컨테이너에 보낸다. Phoenix는 브라우저 화면으로 보여 주고, 사람이 남긴 표시만 agent-trace로 되돌아온다. agent-trace 쓴다 SQLite (정본) ~/.local/share/agent-trace/ 세션 · 턴 · LLM · 툴 표시 · 판정 · 사람 표시 지워도 기록 파일에서 다시 만들 수 있음 복사본을 보냄 OTLP · 127.0.0.1:6006 Phoenix (뷰어) 별도 Docker 컨테이너 · 오픈소스 턴을 트리와 시간축으로 사람이 "이건 이상해" 표시 꺼져 있어도 수집·판정은 됨 브라우저 :6006 사람이 남긴 표시만 되돌아옴 (sync-marks)

라이브러리로 내장한 것이 아니라 네트워크로 통신하는 별도 프로그램입니다. 자세한 화면 사용법은 Phoenix 사용법.

그림 5문제 턴 — 룰 7개가 후보를 찍습니다

"확실히 나쁜 턴"이 아니라 "볼 가치가 있는 턴"을 넓게 잡습니다. 진짜 판정은 다음 단계에서.

🐢 느린 턴
같은 도구 평소보다 훨씬 오래 걸림 (p95 초과)
오탐 많음 — 툴·사람 대기 포함
🔁 같은 툴 반복
같은 명령을 3번 이상 똑같이 실행
루프 의심
💥 툴 에러 잦음
툴 호출 중 40% 이상 실패
시행착오
🙅 사용자가 고침
다음 말이 "아니", "다시", "왜"로 시작
가장 확실한 신호
🧹 기억 압축 직후
컨텍스트가 요약된 바로 다음 턴
위치 정보일 뿐
⛔ 중단됨
턴이 끝나기 전에 멈춤
Codex만 감지
🤔 생각만 많음
thinking 토큰이 답의 10배 초과
과잉 추론
왜 룰이 먼저인가. 룰은 공짜고 3,000턴을 몇 초에 훑습니다. LLM은 비싸서 룰이 찍은 턴만 봅니다. "사용자가 고침"은 사람이 이미 라벨을 붙여 준 것과 같아서 가장 값진 신호입니다.

그림 6판정과 환류 — 교본에 한 줄이 들어가기까지

네 명령이 이어지고, 마지막은 반드시 사람이 승인합니다.

flag → judge → propose → apply 루프 flag가 후보를 찍고, judge가 LLM으로 판정과 제안을 만들고, propose가 반복되는 제안을 묶고, 사람이 apply --yes로 승인하면 CLAUDE.md에 한 줄이 추가되어 다음 세션이 읽는다. ① flag 룰 7개로 후보 찍기 코드 · 공짜 · 몇 초 239건 표시됨 ② judge LLM이 읽고 판정 + 제안 찍힌 턴만 · 구독으로 가능 6건 판정됨 ③ propose 같은 제안끼리 묶기 반복되는 것이 진짜 교훈 심각도 2↑만 (기본) ④ apply --yes 사람이 diff 보고 승인 교본 끝에 한 줄만 추가 아직 0건 CLAUDE.md / AGENTS.md / SOUL.md ## agent-trace 개선 규칙 - [316a5efb] 사용자가 준 경로는 타이핑하지 말고 … 다음 세션의 에이전트 시작할 때 교본을 읽는다 실행 중인 세션에는 영향이 없습니다. 파일을 고쳐서 다음 세션부터 효과가 납니다.

①은 자동으로 돌 수도 있지만, ②③④는 지금 사람이 명령을 실행합니다. ④는 설계상 자동화하지 않습니다.

지금 위치. 표시 239건 중 판정은 6건, 교본에 들어간 규칙은 0건입니다. 판정 6건의 심각도가 전부 0~1이라 묶일 제안이 아직 없습니다. 루프는 완성되어 있지만 재료가 덜 쌓였습니다.

그림 7서브에이전트 — 부모 턴 안에 자식 턴

에이전트가 다른 에이전트를 부르면, 그 대화도 따로 기록되고 부모 턴 아래에 붙습니다.

부모 턴과 서브에이전트 턴의 중첩 부모 턴 하나의 시간축 위에 툴 호출들이 있고, 그중 Agent 툴 호출에서 서브에이전트 세션이 갈라져 나와 자기 턴들을 가진 뒤 부모로 돌아온다. 부모 턴"run" — 26개 서브에이전트를 띄운 실제 Codex 턴 Agent 툴 (spawn) 서브에이전트 세션이름: Singer · 자기 턴과 툴 호출을 따로 가짐 자식 턴 1 · 툴 15회 · 167초 자식 턴 2 · 툴 9회 · 55초 자식 턴 3 · 툴 7회 · 43초 부모가 느렸을 때 "그 시간이 자식에서 쓰였나"를 이 그림으로 확인합니다. Phoenix에서는 부모 trace 안에 중첩되어 보입니다.

오늘숫자로 한눈에 — 2026-09-18

814세션
5,554
33,698툴 호출
239문제 턴 표시
6LLM 판정
0교본에 들어간 규칙

SQLite 254MB · watch가 launchd로 상시 실행 중 · 이 문서를 만든 대화도 이미 들어가 있음

관련 문서