<p align="center">
<img src="https://raw.githubusercontent.com/AbdoKnbGit/tau/HEAD/Logo.png" alt="Tau logo" width="120">
</p>
Tau - 적응형 코딩 에이전트 (Adaptive Coding Agent)
npm version
npm downloads
License
Tau란 무엇인가요?
Tau는 사용하기 간단한 적응형 코딩 하네스(adaptive coding harness)입니다. 실행 비용이 저렴하고, 더 높은 품질의 출력을 제공하며, 개선된 모니터링과 시각 자료를 통해 에이전트가 수행하는 작업을 추적할 수 있게 해줍니다. 도구나 플러그인을 찾아다닐 필요가 없습니다. Tau가 생태계를 사용자에게 가져다주기 때문입니다: 가장 일반적인 사용 사례들을 커버하는 사전 구축된 통합 기능들이 첫 실행부터 준비되어 있습니다. 시작하는 것은 플러그 앤 플레이(plug and play) 방식입니다. 설치하고, /login을 입력한 다음, 제공업체를 선택하고 작업을 시작하면 됩니다. Tau는 30개 제공업체에 대한 네이티브 어댑터(native adapters)를 가지고 있어 중간 프록시 없이 각 제공업체의 API와 직접 통신합니다. 전체 목록은 PROVIDERS.md에서 확인할 수 있습니다.
설치 (Install)
npx -y @abdoknbgit/tau-installer@latest
필수 요구 사항: Node.js 20.19+ 또는 22.12+ (require(esm) 지원), Git, Bash, GitHub 자동화를 위한 gh, 그리고 선택적 네이티브 Tau 헬퍼를 소스에서 빌드하려면 Go 1.25.8+가 필요합니다.
실행 (Launch)
권한 건너뛰기 모드로 실행:
tau --dangerously-skip-permissions
업데이트 (Update)
각 버전에서 변경된 내용은 **CHANGELOG.md**를 참조하세요.
<p align="center">
<img src="https://raw.githubusercontent.com/AbdoKnbGit/tau/HEAD/docs/Capture.PNG" alt="Tau start screen" width="720">
</p>
명령어 (Commands)
/models - 사용 가능한 모델을 탐색하고 활성 모델을 전환합니다.
/tools - 일반 모드에서 사용할 수 있는 선택적 도구를 토글합니다.
/mode cheap - 경계가 설정된(bounded) 도구 출력을 가진 간결하고 캐시 안정적인 코어를 사용합니다. /mode normal - 구성된 도구를 사용합니다.
전체 명령어 목록 및 사용법은 **COMMANDS.md**에서 확인하세요.
지원되는 제공업체 (Supported Providers)
네이티브 어댑터가 있는 30개 프로바이더를 지원합니다. 전체 목록과 프로바이더별 참고 사항은 **PROVIDERS.md**에서 확인하세요.
기능 (Features)
다중 프로바이더 지원, 네이티브 방식
네이티브 어댑터가 있는 30개 프로바이더를 지원합니다. 라우팅 계층(routing layer)도 아니고 번역 프록시(translation proxy)도 아닙니다. 각 프로바이더는 자체 어댑터를 통해 고유한 API로 통신합니다. 모든 프로바이더에 대해 전체 스트리밍, 속도 제한 처리(rate-limit handling), 그리고 자동 도구 스키마 정제(tool-schema sanitization) 기능을 제공합니다.
완전한 에이전트 루프 (The full agent loop)
완전한 에이전트 루프가 필요로 하는 모든 것(도구, 스킬, 서브에이전트, MCP 서버, LSP 및 훅)이 내장되어 있습니다. 이는 모든 프로바이더에서 동일하게 작동합니다.
<p align="center">
<img src="https://raw.githubusercontent.com/AbdoKnbGit/tau/HEAD/docs/AgentLoop.PNG" alt="Tau showing its agent loop, tools and integrations">
</p>
저희는 모든 도구에 공을 들여 최대한의 성능을 발휘하도록 만들었습니다. 검색(Search)이 좋은 예입니다. 대부분의 에이전트는 모델에게 기본적인 검색 도구를 제공합니다. Tau는 최신 ripgrep과 signal fetch, 네이티브 인덱싱을 사용하여 쿼리가 빠르고 결과가 더 좋으며, 대용량 출력물은 저장되어 에이전트가 다시 검색하지 않고도 해당 내용으로 돌아갈 수 있게 합니다. 또한 아직 git 리포지토리가 아닌 폴더의 .gitignore를 존중하여 node_modules와 빌드 결과물이 검색 결과에 포함되지 않도록 합니다.
파일 읽기(Reading files)도 동일한 처리를 받았습니다. Tau는 시그널(signal)을 통해 파일을 읽고 파일의 골격(skeleton)부터 시작합니다. 따라서 800줄짜리 파일에서 특정 함수가 필요할 때, 전체 파일을 읽는 대신 해당 50줄만 읽습니다. Bash 도구는 기본적으로 모범 사례를 따르며, 명령어는 Go 셸 파서(Go shell parser)를 기반으로 구축된 보안 분류기(security classifier)를 거칩니다. 이 모든 것은 컨텍스트 창(context window)에서 노이즈를 제거하고 실패하는 명령어로 인해 낭비되는 턴 수를 줄여줍니다.
선택적 백그라운드 언어 진단 (Optional background language diagnostics)
시작 메모리를 낮게 유지하기 위해 언어 서버(Language servers)는 기본적으로 비활성화됩니다. 파일 검색, 읽기, tree-sitter 파일 개요, 편집 및 프로젝트 테스트/타입 체크 명령어는 LSP 프로세스나 영구적인 언어 서버 인덱스 없이 작동합니다.
자동 백그라운드 진단(diagnostics)을 위해 /config에서 **백그라운드 언어 진단(LSP)**을 활성화하거나 .claude/settings.local.json에 "lspEnabled": true를 설정하세요. 이렇게 하면 활성화된 언어 서버 플러그인(language-server plugins)이 시작되며, 대규모 프로젝트에서는 상당한 양의 RAM을 사용할 수 있습니다. 이 기능을 끄면 해당 프로세스가 중지되고 보류 중이던 진단 상태가 지워집니다. LSP가 시작하거나 중지해도 도구 카탈로그와 시스템 프롬프트는 변경되지 않습니다.
<p align="center">
<img src="https://raw.githubusercontent.com/AbdoKnbGit/tau/HEAD/docs/LSP.PNG" alt="Tau reporting new diagnostics from the language server" width="560">
</p>
스냅샷 및 타임 트래블 (Snapshots and time travel)
Tau는 작업 중인 트리(working tree)의 스냅샷을 프로젝트의 .git과는 별개인 섀도우 git 저장소(shadow git repo)에 보관하므로, 브랜치나 히스토리가 손상되는 일이 없습니다. 이 에이전트(agent)를 통해 스냅샷을 저장하고, 목록화하며, 차이를 비교(diff)하고 복원할 수 있어 실시간 타임 트래블이 가능합니다. 즉, 한 시간 전 파일 상태로 돌아갔다가 다시 원래 위치로 되돌아올 수 있습니다. 또한 동일한 문제에 대해 두 가지 접근 방식을 시도해보고 각각 스냅샷을 저장한 뒤 더 마음에 드는 것을 유지할 수도 있습니다. 그리고 만약 에이전트가 무언가를 망가뜨리거나 세션이 작업 도중에 충돌하더라도, 마지막으로 정상이었던 상태는 여전히 복원만 하면 돌아올 수 있습니다. 2MB가 넘는 파일은 저장 공간을 작게 유지하기 위해 건너뛰어지며, 오래된 스냅샷은 매주 정리됩니다.
<p align="center">
<img src="https://raw.githubusercontent.com/AbdoKnbGit/tau/HEAD/docs/snapchot.PNG" alt="Listing snapshots, saving a new one and diffing it against the previous one">
</p>
<p align="center">
<img src="https://raw.githubusercontent.com/AbdoKnbGit/tau/HEAD/docs/snapchot%202.PNG" alt="Restoring an older snapshot, then restoring back">
</p>
웹 검색 (Web search)
웹 검색은 별도의 설정 없이 바로 작동합니다. Tau는 도구로 네이티브 MCP 검색(MCP search) 기능을 내장하고 있어 추가할 키나 구성할 것이 없으며, 제한 없이 무료입니다. Firecrawl을 선호하는 경우 /login을 통해 키를 추가한 다음 Firecrawl Search를 선택하면, Tau가 대신 Firecrawl 검색 백엔드를 사용하게 됩니다. Firecrawl의 무료 플랜은 월 1,000회 검색을 포함합니다.
원격 제어 및 공유 세션
/remote local은 사용자의 자체 Wi-Fi를 통해 세션을 제공합니다. 연결이 즉시 이루어지며, 데이터가 네트워크 외부로 나가지 않습니다. /remote global은 무료 Cloudflare HTTPS 터널을 열어 어느 곳에서나, 심지어 셀룰러 환경(이 경우 cloudflared가 필요함)에서도 작동합니다. QR 코드를 스캔하여 페어링한 후, 휴대폰으로 읽기, 프롬프트 및 도구 승인을 할 수 있으며, 작업은 컴퓨터에서 계속 실행됩니다.
이 글로벌 링크는 또한 협업하는 방법이기도 합니다. 해당 링크를 공유하면 팀원들이 세션에 참여하여 함께 작업할 수 있습니다.
<p align="center">
<img src="https://raw.githubusercontent.com/AbdoKnbGit/tau/HEAD/docs/remote.PNG" alt="A Tau session on the computer" width="70%">
<img src="https://raw.githubusercontent.com/AbdoKnbGit/tau/HEAD/docs/remote-phone.jpeg" alt="The same session on a phone" width="20%">
</p>
루프 내 Python 커널
이는 Tau가 다른 에이전트보다 비용이 적게 드는 가장 큰 이유 중 하나입니다. Tau는 지속적인(persistent) Python 커널을 가지고 있어, Python으로 할 수 있는 모든 것을 Tau도 수행할 수 있습니다. 예를 들어, 20개의 CSV 파일에서 통찰력을 얻고 싶다고 가정해 봅시다. 일반적인 에이전트는 파일을 하나씩 처리하며, 이는 쉽게 30턴(turns)에 달할 수 있습니다. 읽은 모든 파일은 컨텍스트 창(context window)에 남아 각 턴마다 이전보다 비용이 많이 들며, 과정에서 발생한 실수를 수정하는 데 사용된 턴에 대해서도 다시 비용을 지불해야 합니다. Tau는 전체 워크플로우를 하나의 Python 셀로 작성하고, 단일 턴(single turn)에 실행하여 결과만 받습니다. 컨텍스트는 깨끗하게 유지되고, 로직은 한 곳에 위치하므로 문제점을 쉽게 파악할 수 있으며, 답변의 품질이 더 좋고, 청구 금액(bill)도 훨씬 작습니다.
CSV 파일은 단지 하나의 예시일 뿐입니다. 코드베이스 전체에 걸쳐 카운팅 및 순위 매기기, 여러 파일을 한 번에 감사(auditing)하기, 데이터 교차 확인(cross-checking data) 또는 모든 곳에 동일한 변경을 적용하는 경우에도 마찬가지입니다. 커널은 셀 간 상태를 유지하고, 코드 내부에서 사용자의 다른 Tau 도구를 호출할 수 있으며, 이처럼 터미널(terminal) 내에 차트도 그릴 수 있습니다.
<p align="center">
<img src="https://raw.githubusercontent.com/AbdoKnbGit/tau/HEAD/docs/kernel.PNG" alt="Tau running one Python cell that charts the most modified files in git history" width="640">
</p>
<p align="center">
<img src="https://raw.githubusercontent.com/AbdoKnbGit/tau/HEAD/docs/kernel.gif" alt="Tau counting lines of code with its persistent Python kernel" width="640">
</p>
터미널의 다이어그램 (Diagrams in the terminal)
Tau는 텍스트로만 설명하기보다는 시각화하여 보여주는 것을 선호합니다. 일상적인 작업을 수행할 때도 흐름(flow), 아키텍처(architecture) 또는 호출 순서(sequence of calls)와 같은 다이어그램을 먼저 활용하며, 이는 짧은 설명과 함께 터미널에 바로 그려집니다. 모든 제공업체와 작동하며, 다이어그램은 다른 출력물과 마찬가지로 세션에 유지됩니다. 일반 텍스트를 선호한다면 /config에서 이를 비활성화하고 **다이어그램 그리기(Draw diagrams)**를 사용하세요.
<p align="center">
<img src="https://raw.githubusercontent.com/AbdoKnbGit/tau/HEAD/docs/Diagram.PNG" alt="A diagram of a backend drawn in the terminal" width="720">
</p>
브라우저 자동화 (Browser automation)
Tau는 브라우저에서 사용자가 할 수 있는 모든 작업을 수행할 수 있습니다: 프론트엔드(frontend) 디자인을 검사하거나, 이메일을 확인하고, 가격을 비교하거나, 항공권을 예약하는 등입니다. 실제 클릭과 타이핑이 가능한 실제 Chrome 창을 사용하며, 페이지의 콘솔(console)과 네트워크(network)도 읽어오기 때문에, 사용자가 구축하는 앱의 오류가 즉시 Tau에게 보고됩니다.
<p align="center">
<img src="https://raw.githubusercontent.com/AbdoKnbGit/tau/HEAD/docs/Browser-frontend.PNG" alt="Tau testing the filters and sorting of a local shop page" width="640">
</p>
<p align="center">
<img src="https://raw.githubusercontent.com/AbdoKnbGit/tau/HEAD/docs/work.gif" alt="Tau finding the cheapest PC for GTA 6 on Amazon and saving a screenshot of the listing">
</p>
지속되는 서브 에이전트 (Subagents that stay alive)
대부분의 하네스(harnesses)에서 서브 에이전트는 짧은 수명을 가집니다. 생성되었다가 임무를 수행하고 사라지죠. Tau는 서브 에이전트를 실제 작업자처럼 취급합니다. 이름을 지정할 수 있고, 작동하는 동안 대화하며 새로운 지침을 보낼 수 있습니다. 에이전트들이 병렬로 실행되어 같은 파일을 수정해야 할 때, Tau는 순서를 지키게 하여 변경 사항이 절대 겹치지 않도록 합니다. 또한 완료된 에이전트는 죽지 않습니다. 수집한 모든 컨텍스트를 유지하기 때문에, 처음부터 다시 읽게 하는 새로운 에이전트에게 비용을 지불하는 대신 다음 작업을 맡길 수 있습니다. 각 에이전트는 자체 제공업체(provider)와 모델에서 실행될 수도 있습니다. 이를 통해 더 나은 오케스트레이션(orchestration), 겹치지 않는 편집, 그리고 더 적은 비용을 얻게 됩니다.
여기에 이름 지정된 에이전트가 버그를 찾고, 완료된 후 후속 작업을 받아 수행한 다음, 수정 사항과 함께 보고하는 과정이 있습니다:
<p align="center">
<img src="https://raw.githubusercontent.com/AbdoKnbGit/tau/HEAD/docs/Agent1.PNG" alt="버그를 찾는 이름 지정된 서브 에이전트 생성">
</p>
<p align="center">
<img src="https://raw.githubusercontent.com/AbdoKnbGit/tau/HEAD/docs/Agent2.PNG" alt="완료된 에이전트에 후속 작업 전송">
</p>
<p align="center">
<img src="https://raw.githubusercontent.com/AbdoKnbGit/tau/HEAD/docs/Agent33.PNG" alt="검증된 수정 사항을 보고하는 에이전트">
</p>
구성 가능한 서브 에이전트 모델
/config에서 서브 에이전트가 실행될 모델을 선택한 다음, 서브 에이전트 모델을 설정합니다. 서브 에이전트만 변경되며, 메인 채팅은 모델, 노력(effort), 캐시를 유지합니다.
- 자동(Auto) (기본값): 서브 에이전트는 이전과 같이 작동하며, 각 내장 에이전트는 제공업체에 맞는 평소 모델 등급을 사용합니다.
- 메인 모델과 동일(Same as main model): 모든 서브 에이전트가 현재 대화하고 있는 모델에서 실행됩니다.
- 사용자 지정(Custom): 각 제공업체에 대한 모델과 노력을 선택하면, 서브 에이전트는 현재 사용 중인 제공업체를 위해 저장된 것을 사용합니다.
- 글로벌(Global): 메인 채팅이 다른 제공업체에서 실행되는 경우에도 모든 서브 에이전트에 대해 하나의 제공업체, 모델 및 노력을 지정합니다.
이는 내장 에이전트(built-in agents)와 자체 모델 또는 제공업체(provider)를 지정하지 않은 에이전트 파일에 적용됩니다. 서브 에이전트(sub-agent)는 작업이 완료될 때까지 자신의 제공업체와 모델을 유지하며, 그 사이에 제공업체를 전환하더라도 이를 유지하고 새로운 작업을 전달받을 때도 이를 유지합니다.
중요한 이유: 서브 에이전트가 대부분의 읽기 및 검색 작업을 수행하므로, 가장 많은 요청을 전송합니다. Claude Opus로 코딩하고, Global 설정을 DeepSeek의 deepseek-flash로 설정하면, 메인 채팅은 Opus를 유지하는 동안 5개의 병렬 Explore 에이전트가 코드베이스를 훨씬 적은 비용으로 검색할 수 있습니다. 대신 서브 에이전트를 메인 채팅만큼 똑똑하게 만들고 싶다면? **메인 모델과 동일(Same as main model)**을 선택하세요.
사용한 만큼만 비용 지불