LLM 프록시에 실시간 대시보드를 추가했습니다. 별도 도구 없이 URL만 바꿨습니다.
Source: Dev.to
원래 문제
LLM을 활용해 개발할 때는 할당량 초과가 피할 수 없습니다. Claude의 무료 티어는 관대하지만 어느 순간 한계에 도달합니다. 중간 세션에서 발생하는 429 오류는 컨텍스트를 끊고, 작업 흐름을 방해하며, 생각의 흐름을 끊어버립니다.
Trooper가 이 문제를 해결했습니다. 앱을 Claude API 대신 http://localhost:3000 으로 지정하면 됩니다. Claude가 실패했을 때 Trooper가 이를 잡아 3단계 압축 시스템(Anchor + SITREP + Tail)을 통해 전체 세션 컨텍스트를 보존하고, 로컬 Ollama에서 계속 진행합니다. 앱은 아무 일도 일어나지 않은 것처럼 동작합니다.
Passive의 문제점
Passive 인프라는 채택에 어려움을 겪습니다. 개발자는 설치하고는 잊어버리며, 문제가 발생했을 때만 눈치챕니다. 이것은 제품이 아니라 안전망에 불과합니다.
제가 계속 스스로에게 던진 질문: Trooper가 일상적인 가치, 즉 실패 상황이 아닌 경우에도 어떤 가치를 제공하는가?
답은 코드 안에 이미 존재하고 있었습니다.
이미 존재하던 것
Trooper는 모든 세션의 모든 메시지를 캡처합니다. 각 메시지에 대해 분류기를 실행해 — 의도, 엔터티, 미해결 루프, 완료된 단계, 최근 행동 등을 추출합니다. 전부 규칙 기반이며 LLM 호출이 없고 지연도 없습니다.
이 정보는 폴백 컨텍스트 보존에 활용됩니다. Claude가 실패하고 Ollama가 대신 작업을 이어받을 때, Ollama는 SITREP(상황 보고)를 받아 세션이 무엇에 관한 것이었는지, 어떤 작업이 완료됐는지, 아직 남은 작업은 무엇인지 알게 됩니다.
이 데이터는 모든 세션에 존재하지만 개발자에게는 보이지 않았을 뿐입니다.
대시보드
실시간 대시보드는 http://localhost:3000/dashboard 에서 확인할 수 있습니다.
어떤 에이전트든 Trooper에 연결하기만 하면 됩니다 — 베이스 URL만 바꾸면 됩니다:
export ANTHROPIC_BASE_URL=http://localhost:3000
# or
export OPENAI_BASE_URL=http://localhost:3000
에이전트를 실행하는 동안 두 번째 모니터에 대시보드를 띄워 두세요. 페이지를 새로 고치지 않아도 5초마다 자동 새로 고침되며, 각 메시지마다 다음 정보를 보여줍니다:
- Intent – 에이전트가 수행하려는 작업, 자동 추출
- Open Loops – 에이전트가 막힌 부분(빨간색 강조)
- Completed Steps – 실시간으로 추적되는 완료 단계
- Entities – 언급된 핵심 요소들
- Session Transcript – 역할별 색상 구분된 전체 메시지
실제 사용 예시

데이터베이스 디버깅 워크플로를 시뮬레이션하는 3턴 에이전트 세션을 실행했습니다:
Turn 1
“Go API 서버를 만들고 있습니다. 데이터베이스 연결이 포트 5432에서 연결 거부 오류로 실패하고 있어요.”
Turn 2
“설정을 확인했습니다. Postgres가 포트 5433에서 실행 중이고 포트 5432가 아닙니다. 이제 연결 문자열을 수정합니다.”
Turn 3
“포트를 수정했습니다. 데이터베이스 연결이 정상입니다. API 서버도 성공적으로 실행 중입니다.”
Turn 1 이후 대시보드에 표시된 내용:
- Intent: “go api 서버를 구축 중. 데이터베이스 연결이 포트에서 연결 거부 오류로 실패” (신뢰도 100 %)
- Entities: Postgres, 네트워크
- Open Loops: “포트에서 연결 거부 오류 발생”
Turn 3 이후:
- Completed Steps: “포트를 성공적으로 수정”
- Open Loops: 해제됨
계측 코드 없이, SDK 없이, 에이전트 코드를 변경하지 않고 단지 URL만 바꾼 결과입니다.
왜 중요한가
모든 관측 도구는 코드에 계측을 요구합니다:
| Tool | Required instrumentation |
|---|---|
| LangSmith | LangChain으로 에이전트를 래핑 |
| Langfuse | 해당 SDK 추가 |
| AgentOps | @observe 데코레이터 추가 |
| Helicone | 프록시 기반이지만 클라우드 전용(2026년 3월 현재 유지보수 모드) |
Trooper는 아무것도 요구하지 않습니다. 에이전트는 이미 HTTP를 통해 LLM과 통신하고 있습니다. Trooper는 그 경로에 끼어들어 자동으로 모든 트래픽을 관찰합니다.
Trooper는 오픈소스이며 로컬 우선, 영구 무료입니다. 데이터는 절대 외부로 나가지 않습니다.
Sessions 엔드포인트
어떤 세션을 확인해야 할지 모를 때는 /sessions 를 호출하세요:
curl http://localhost:3000/sessions
# {"sessions":["agent-debug-123","agent-debug-456"],"count":2}
대시보드 메인 페이지(http://localhost:3000/dashboard)에서 원하는 세션을 클릭하면 상세 화면으로 이동합니다.
Recovery 엔드포인트
에이전트가 작업 중에 실패했을 때:
curl http://localhost:3000/recovery/{session_id}
응답에는 완료된 내용과 재개 위치가 정확히 포함됩니다. 대시보드에서는 이를 시각화해 — 완료된 단계가 실시간으로 표시됩니다.
전환점
Trooper는 처음에 “Claude가 실패했다. Trooper가 잡았다.” 라는 역할이었습니다.
이제는 “에이전트가 HTTP로 LLM에 요청한다. Trooper가 이를 관찰한다.” 로 바뀌었습니다.
폴백은 이제 기능이며, 관측 자체가 제품이 된 것입니다.
에이전트는 언제나 말을 하고 있었습니다. 이제 그 말을 들을 수 있습니다.
시작하기
git clone https://github.com/shouvik12/trooper
cd trooper
export CLAUDE_API_KEY=sk-ant-...
go run .
브라우저에서 http://localhost:3000/dashboard 를 열어 보세요.
에이전트를 Trooper에 연결:
export ANTHROPIC_BASE_URL=http://localhost:3000
그게 전부입니다. 의존성 없이 순수 Go로 60초 이내에 실행됩니다.
GitHub: