rtk
무엇인가
rtk는 셸 명령의 표준출력을 LLM이 읽기 전에 압축하는 프록시 실행기다. 에이전트 컨텍스트 관리 계층에 속하며, 모델 API가 아니라 명령 출력 지점에서 개입한다. `git status`, 테스트 러너, 빌드 로그처럼 원문이 긴 명령의 출력을 명령 종류별 필터로 줄여 반환한다.
어떻게 동작하나
동작은 훅과 필터 두 부분으로 나뉜다. 에이전트가 Bash 도구를 호출하면 훅이 명령을 `rtk git status` 형태로 다시 쓰고, rtk가 원래 명령을 실행한 뒤 명령 유형별로 네 가지 전략을 적용한다. 스마트 필터링은 주석·공백·보일러플레이트를 제거하고, 그룹화는 파일을 디렉터리별로 오류를 유형별로 묶고, 절단은 중복 문맥을 자르고, 중복 제거는 반복 로그 줄을 횟수로 접는다. 명령이 실패하면 필터링되지 않은 원본 출력을 따로 저장해 다시 실행하지 않고 꺼내 볼 수 있다. 설정은 `~/.config/rtk/config.toml`(macOS는 `~/Library/Application Support/rtk/config.toml`)에 둔다.
무엇과 다른가
LLM 제공자를 중계하는 게이트웨이와는 층이 다르다. 모델 요청·응답을 건드리지 않고, 에이전트가 도구 호출로 읽는 텍스트만 줄인다. 필터링은 명령당 한 번 수행되고 결과가 히스토리에 저장되므로 프롬프트 캐시는 그대로 동작한다. 출력이 작아지면 캐시 쓰기·읽기 비용도 함께 줄어든다. `grep`/`head`를 손으로 파이프하는 방식과 달리 명령 유형별 규칙이 내장돼 있고 훅으로 자동 적용된다.
어떻게 쓰나
설치 후 `rtk init -g`로 훅을 등록하고 Claude Code를 재시작하면 이후 Bash 호출이 자동으로 재작성된다. `config.toml`의 `[awareness]` 레벨을 `high`로 두면 에이전트가 `rtk gain`·`rtk proxy`를 인지하고, 훅을 지원하지 않는 도구에는 `full`로 두어 에이전트가 직접 `rtk` 접두사를 붙이게 한다. 훅을 쓰지 않을 때는 `rtk read`, `rtk grep`, `rtk find`를 직접 호출한다. `rtk gain`은 절감량 분석을 보여준다.
전제와 한계
훅은 Bash 도구 호출에만 걸린다. Claude Code의 내장 `Read`, `Grep`, `Glob`은 훅을 우회하므로 해당 작업에는 셸 명령이나 명시적 rtk 호출을 써야 한다. 일부 필터는 PATH의 ripgrep(`rg`)에 의존한다. Windows는 v0.37.2부터 `rtk hook claude` 네이티브 바이너리로 동작하며, 그 이전에 설치한 셸 훅은 `rtk init -g` 재실행으로 마이그레이션한다. crates.io에 같은 이름의 다른 패키지(Rust Type Kit)가 있어 `rtk gain`이 실패하면 잘못된 패키지다.
관련 논문 4
유사 도구
- headroomLLM에 도달하기 전에 도구 출력·로그·파일·RAG 청크를 압축해 토큰을 줄이는 Python 라이브러리 겸 로컬 프록시 겸 MCP 서버다.
- 9router여러 AI 코딩 CLI 도구를 40개 이상 제공자에 연결하고, 구독→저가→무료 순 폴백과 tool_result 압축으로 토큰을 줄이는 로컬 라우팅 프록시다.
- destructive_command_guardAI 코딩 에이전트가 실행하려는 git·셸 명령을 실행 전에 가로채 파괴적 명령을 차단하는 Rust 훅 바이너리다. 여러 에이전트의 훅 설정에 등록돼 동작한다.
- code2prompt코드베이스를 소스 트리와 함께 하나의 LLM 프롬프트로 렌더링하는 Rust CLI다. glob 필터와 Handlebars 템플릿, 토큰 추정을 쓴다.
- aichat20개 이상 LLM 제공자를 하나의 인터페이스로 묶어 셸 명령 변환, REPL 대화, RAG, 함수 호출을 한 바이너리에서 처리하는 Rust CLI다.
- plano에이전트 앱 앞에 세우는 AI 네이티브 프록시 서버 겸 데이터 플레인이다. Envoy 기반으로 LLM 라우팅·오케스트레이션·가드레일을 아웃오브프로세스에서 처리한다.