AI agents가 레포(repo) 간에 통신하도록 만든 방법 — 그리고 SAMP를 사용해 구현
Source: Dev.to
Situation
저는 lumen‑argus라는 프로젝트를 작업하고 있었는데, 이 프로젝트는 서로 다른 세 개의 저장소에 걸쳐 세 개의 Claude Code 세션을 사용합니다. 세션들 간에 컨텍스트를 공유해야 했습니다—예를 들어 “방금 인증 모듈을 리팩터링했어요”, “스키마 마이그레이션이 적용됐으니 main을 풀어 주세요”. 몇 주 동안 저는 터미널 창 사이를 복사‑붙여넣기 하며 원시인처럼 작업했습니다.
Task
AI 에이전트들을 위한 교차‑세션, 교차‑저장소 메시징 시스템을 만들고자 했습니다. 요구사항은 다음과 같습니다:
- 저렴하고 빠름
- 로컬에서 동작 (외부 서비스 불필요)
- 문제가 생겼을 때
cat으로 내용을 읽을 수 있을 정도로 가독성 유지
제약 조건
- 메시지당 토큰 비용은 거의 없어야 합니다.
- 새로운 서버, 데몬, 혹은 MCP 핸드셰이크를 추가하지 않아야 합니다.
- 현재 Claude Code든, 내일은 Cursor든, 앞으로 나올 어떤 에이전트든 동작해야 합니다.
Action
기존 옵션들을 평가했습니다 (예: mcp_agent_mail, Agent Teams, 브로커 데몬). 이들 모두 HTTP 서버를 띄우고, 아이덴티티를 등록하고, SQLite 스토어를 운영하며, 폴링 훅에 토큰을 소모합니다—하루에 수십 개의 메시지만 교환하는 세 에이전트에게는 과도한 설계였습니다.
Linus Torvalds의 Git 방식을 차용해 SAMP(Simple Agent Message Protocol)를 만들었습니다:
-
작성자 전용 추가 전용 로그 – 에이전트당 하나의 파일:
log-<agent>.jsonl파일에 두 명 이상의 작성자가 없으므로 락이 필요 없고, 인터리빙도 없으며 Syncthing, Dropbox, iCloud 같은 도구가 병합 충돌을 일으킬 수 없습니다.
-
콘텐츠 주소 기반 ID
import hashlib, json, time def make_id(ts, frm, to, thread, body): payload = json.dumps({ "ts": ts, "from": frm, "to": to, "thread": thread, "body": body }, sort_keys=True).encode() return hashlib.sha256(payload).hexdigest()[:16]같은 내용이면 같은 ID가 생성되므로 동기화 후 중복 제거가 자동으로 이루어집니다.
-
mtime 단축 회로 – 로그 파일을 파싱하기 전에
stat으로 수정 시간을 확인하고, 변화가 없으면 바로 종료합니다.
스펙을 벤더 중립 문서로 정리하고 참고 구현인 agent‑message를 배포했습니다:
- 세 개의 Claude Code 슬래시 명령:
/message‑send,/message‑inbox,/message‑reply - 인간이 직접 사용할 수 있는
msg셸 헬퍼 - 다른 에이전트 CLI가 호출할 수 있도록 하는 작은 Python 래퍼
Result
- Claude Code에서 보내고 받는 각각에 Bash 도구 호출 1회만 필요합니다. MCP 초기화나 ack 라운드‑트립이 없습니다.
- 인간(또는 cron 작업, 스크립트)이 셸 헬퍼를 통해 읽고 보낼 때 LLM 토큰 0—모델이 전혀 관여하지 않습니다.
- ≈30 ms 지연 – 사실상 Python 3 시작 시간이며, 그 외는 파일 추가 작업뿐입니다.
- 오프라인에서도 동작하고 Syncthing, Dropbox, iCloud 등을 통해 기기 간 동기화가 가능하며, 설계상 충돌이 발생하지 않습니다.
- 원클릭 설치 –
pip,npm, Docker가 전혀 필요 없습니다.
Documentation & source
- Docs:
- GitHub:
- SPEC:
여러 에이전트 세션을 동시에 사용하면서 복사‑붙여넣기에 지치셨다면 SAMP을 한번 시도해 보세요. PR과 이슈는 언제든 환영합니다.