예전에는 일이 끝난 뒤 리포트를 냈습니다. 지금은 일을 시작하기 전에 에이전트의 대화창에 필요한 만큼만 밀어 넣습니다. 무엇이 들어오고 무엇이 나가는지, 코드 어디가 그 일을 하는지 그림 7장으로 설명합니다.
2026-09-22저장소 ~/git-projects/agent-tracev0.5.0앞선 설명은 구성과 동작 흐름
한 장 요약. 예전 agent-trace는 블랙박스 영상을 모아 사고 구간을 표시하는 안전관리자였습니다. 지금은 운전대를 잡기 직전에 "지난번 여기서 사고 났었다"고 한 줄 말해 주는 조수석 사람이 됐습니다. 말은 짧게만 하고, 할 말이 없으면 아무 말도 하지 않으며, 운전에는 손대지 않습니다.
그림 1닫힌 고리 — 기록이 다시 기록으로
예전에는 화살표가 오른쪽 끝에서 멈췄습니다. 지금은 한 바퀴 돕니다.
에이전트는 여전히 agent-trace를 모릅니다. 다만 대화 첫머리에 짧은 메모가 한 장 붙어 있을 뿐입니다.
그림 2입출력 — 무엇이 들어오고 무엇이 나가나
들어오는 것은 많고 나가는 것은 아주 적습니다. 그게 핵심입니다.
수만 건이 들어와도 나가는 건 A4 반 장이 안 됩니다. 대화창 자리는 비싸니까요.
왜 이렇게까지 줄이나. 대화창에 넣은 글자는 전부 비용이고, 관련 없는 정보를 매번 붙이면 에이전트가 진짜 중요한 것을 놓칩니다. 그래서 개수로 먼저 자르고, 넘치면 문장을 자르지 않고 항목을 통째로 버립니다.
그림 3네 에이전트에 붙는 방법 — 둘은 설정, 둘은 코드
도구마다 문을 여는 방식이 다릅니다. 문은 달라도 들어가는 짐은 같습니다.
플러그인은 스스로 판단하지 않고 심부름만 합니다. 그래서 파이썬과 자바스크립트로 갈라져도 동작이 어긋나지 않습니다.
도구
붙는 곳
부르는 시점
넣는 방법
Claude Code
~/.claude/settings.json
세션 시작 · 프롬프트 제출
추가 컨텍스트
Codex
~/.codex/hooks.json
세션 시작 · 프롬프트 제출
추가 컨텍스트
Hermes
~/.hermes/plugins/agent-trace/
턴 시작 직전
사용자 메시지 뒤에 덧붙임
OpenCode
~/.config/opencode/plugins/
메시지 도착
사용자 메시지 뒤에 덧붙임
Codex만 한 단계 더. Codex는 등록된 훅이라도 사람이 신뢰를 승인하기 전에는 조용히 건너뜁니다. 오류도 경고도 없이 그냥 안 부릅니다. 대화형으로 codex를 한 번 띄워 승인해야 동작하고, agent-trace hook status가 미승인 여부를 알려줍니다.
그림 4언제 말을 거나 — 두 시점, 서로 다른 크기
처음 한 번은 길게, 매 질문마다는 아주 짧게.
같은 교훈은 한 세션에 한 번만 들어갑니다. 이미 대화에 남아 있으니 다시 넣을 이유가 없습니다.
그림 5교훈의 일생 — 판정에서 주입까지
문제 턴 하나가 어떻게 "다음에 조심할 한 줄"이 되는지.
②에서 ③으로 갈 때 LLM을 다시 부르지 않습니다. 판정이 이미 짧은 제안 문장을 남겨 뒀으니까요.
고를 때 매기는 점수
신호
점수
왜
프롬프트가 그 파일을 콕 집음
+3.0
가장 확실한 관련성
같은 작업 폴더
+1.5
같은 프로젝트의 일
사람이 승인함
+1.0
검증된 교훈을 앞세움
심각도
+0.5 × 등급
심한 문제를 먼저
근거 턴 수
+0.3 × log
반복될수록 신뢰
오래됨
−0.5 × 개월
옛날 교훈은 서서히 밀려남
그림 6자기 꼬리 물기 막기
우리가 넣은 글이 다시 "사용자가 한 말"로 수집되면 곤란합니다.
넣을 때 표식을 달고, 읽을 때 떼어냅니다. 왕복해도 원문이 정확히 돌아오는지 테스트로 고정해 뒀습니다.
그림 7코드 지도 — 어느 파일이 무슨 일을 하나
파이썬 파일 19개, 약 5,300줄. 역할별로 묶으면 다섯 덩어리입니다.
읽어 들이기
도구별 기록 파일을 읽어 턴이라는 하나의 모양으로 바꿉니다. 도구가 늘면 여기만 늘어납니다.
parsers/ingest.pywatcher.py
담아 두기
SQLite 한 파일. 표·색인·마이그레이션이 전부 여기 있습니다. 가장 큰 파일입니다.
store.pymodel.py
문제 찾기
규칙이 먼저 고르고, 그중에서만 LLM이 판정합니다. 순서가 반대면 비용이 터집니다.
rules.pyjudge.py
교훈 만들고 고르기
판정을 묶어 교훈으로, 주입할 때 점수로 고릅니다. 무엇을 건드렸는지는 별도 추출기가 뽑습니다.
lessons.pytoolinfo.pycontext.py
에이전트에 붙이기
설정 파일을 고치거나 플러그인 코드를 만듭니다. 남의 설정을 망가뜨리지 않는 게 제일 중요합니다.
hooks.pyplugins.pyservice.py
사람이 쓰는 문
명령 19개가 모두 여기로 들어옵니다. 설치·수집·조회·판정·교훈·훅이 한 자리에.
cli.py
입력에서 출력까지, 함수로 따라가기
단계
들어가는 것
하는 일
나오는 것
수집
기록 파일
parse_* → upsert_session
턴 · 툴 호출 · 파일 색인
표시
끝난 턴
evaluate_turn
규칙 표시(flags)
판정
표시된 턴
judge_turn
분류 · 심각도 · 제안
교훈
판정
lessons.build
교훈 레코드 + 적용 범위
선별
폴더 · 프롬프트
lessons.select
상위 몇 개
주입
훅 페이로드
session_context · prompt_context
메모 한 장 또는 빈 값
지금숫자로 보는 현재 상태
5,796모인 턴
854세션
34,831툴 호출
260규칙이 표시
6LLM 판정
2교훈
354통과 테스트
4연결된 도구
지금 가장 얇은 곳은 판정입니다. 규칙은 260건을 표시해 뒀는데 LLM 판정은 6건뿐이고, 그래서 교훈도 2건입니다. 교훈은 판정에서 나오므로 판정을 더 쌓기 전에는 이 고리가 헛돕니다. 판정은 턴당 30초쯤 걸리고 Claude Code 사용량을 씁니다.
uv run agent-trace judge --limit 20
uv run agent-trace lessons build
안전망가뜨리지 않기 위한 장치들
남의 도구 설정을 고치고 남의 대화창에 글을 넣는 일이라, 조심할 곳이 많습니다.
걱정
장치
훅이 죽어서 세션이 멈춤
무슨 일이 있어도 종료 코드 0과 빈 출력으로 끝냄
수집 프로세스와 충돌
훅은 DB를 읽기 전용으로 염. 기록만 짧은 쓰기로 따로
남의 훅 설정을 지움
기존 항목 보존 + 최초 1회 .agent-trace.bak 백업
남이 쓴 플러그인을 덮어씀
우리가 만든 파일에만 표식. 표식 없으면 건드리지 않음
두 번 설치
같은 내용이면 다시 쓰지 않음(멱등)
검증 안 된 교훈이 행동을 바꿈
승인 전에는 심각도 높은 것만. 거부하면 영구 제외
같은 말 반복
세션당 한 번. 주입 기록을 남겨 확인
데이터가 밖으로 나감
전부 로컬 SQLite. 외부 전송은 판정 때만, 명시적으로
실제로 여기서 사고가 났었습니다. 훅의 마지막 방어선인 "조용히 실패" 코드 자체가 로거를 참조하지 못해 오류로 죽었습니다. 조용해야 할 자리가 시끄러웠던 셈이고, 테스트가 잡았습니다.
해보기설치부터 확인까지
# 설치 (uv 필요, 파이썬은 알아서 받아 옴)
uv tool install "git+ssh://git@github.com/Dobraindev/agent-trace.git@v0.5.0"
# 수집 시작 + 상시 실행 등록
agent-trace setup
# 에이전트 네 종류에 훅·플러그인 붙이기
agent-trace hook install
hermes plugins enable agent-trace # Hermes만 한 줄 더
codex # Codex는 대화형으로 한 번 띄워 승인
# 무엇이 들어갈지 미리 보기 (훅 없이도 확인 가능)
agent-trace hook preview SessionStart --cwd .
agent-trace hook status