<p align="center">
<img src="https://raw.githubusercontent.com/directionally-local/autopilot/main/docs/logo.png" alt="Autopilot 로고" width="160">
</p>
<h1 align="center">autopilot <sub>(이전 명칭: kimiflare)</sub></h1>
<p align="center">
<a href="https://www.npmjs.com/package/autopilot-ai"><img src="https://img.shields.io/npm/v/autopilot-ai?style=flat-square&color=cb3837" alt="npm 버전"></a>
<a href="https://github.com/directionally-local/homebrew-tap"><img src="https://img.shields.io/badge/Homebrew-%EC%84%A4%EC%B9%98-FBB040?style=flat-square&logo=homebrew&logoColor=black" alt="Homebrew로 설치"></a>
<a href="https://www.npmjs.com/package/autopilot-ai"><img src="https://img.shields.io/npm/dm/autopilot-ai?style=flat-square&color=cb3837" alt="npm 다운로드 수"></a>
<a href="https://github.com/directionally-local/autopilot/blob/main/LICENSE"><img src="https://img.shields.io/github/license/directionally-local/autopilot?style=flat-square&color=2ea44f" alt="라이선스"></a>
<img src="https://img.shields.io/badge/node-%3E%3D22.23.4-339933?style=flat-square&logo=nodedotjs&logoColor=white" alt="Node.js >= 22.23.4">
<img src="https://img.shields.io/badge/typescript-5.7-3178c6?style=flat-square&logo=typescript&logoColor=white" alt="TypeScript">
<img src="https://img.shields.io/badge/runs%20on-OpenRouter%20%C2%B7%20OpenAI%20%C2%B7%20DeepSeek%20%C2%B7%20Ollama%20%C2%B7%20%E2%80%A6-6566f1?style=flat-square" alt="OpenRouter, OpenAI, DeepSeek, Ollama 및 기타에서 실행">
</p>
<p align="center">
<strong>사용자 자신의 제공업체 키로 실행되는 터미널 코딩 에이전트입니다.</strong><br>
OpenRouter (400개 이상의 모델, 턴당 비용 청구), OpenAI, DeepSeek, Kimi, Z.ai, 로컬 Ollama / LM Studio 또는 모든 OpenAI 호환 엔드포인트에서 실행됩니다.
<p align="center">
Directionally Local의 일부로, 자체 하드웨어에서 코딩 에이전트를 실행하기 위한 오픈 소스 스택이며, Hotcell 및 Serverless Objects와 함께 제공됩니다. 제품 페이지: <a href="https://directionallylocal.com/autopilot/">directionallylocal.com/autopilot</a>.
</p>
작동 방식 (How it works)
autopilot은 모든 모델 호출을 **사용자가 선택한 제공업체(provider)**로 사용자 자신의 키를 사용하여 전송합니다. 즉, 사용자가 직접 키를 가져오는 방식(bring-your-own-key)이며, 프록시되거나 수정되는 과정이 없습니다. 처음 실행 시에는 제공업체를 하나 선택하고, 한 번 연결하며 (키는 저장되기 전에 검증됨), 모델을 선택하기만 하면 됩니다. 이것이 전체 설정입니다. OpenRouter가 권장되는 기본값이며, 나머지 제공업체에 대한 내용은 Providers를 참조하십시오.
OpenRouter를 사용하면 다음 기능들도 얻을 수 있습니다:
- 모든 모델, 단 하나의 키. 모델 선택기는 OpenRouter의 실시간 카탈로그입니다. Claude, GPT, Gemini, Grok, Qwen, GLM, Kimi, DeepSeek, 무료 모델 등 다양한 모델이 포함되어 있으며, 벤치마크 점수를 기준으로 가장 좋고 최신 모델부터 열람할 수 있고 모든 항목에 대해 퍼지 검색(fuzzy search)을 지원합니다.
/model을 사용하여 언제든지 전환할 수 있습니다.
- 실제 비용, 호출당. OpenRouter는 각 생성(generation)이 실제로 얼마의 비용이 들었는지 보고하며, 상태 표시줄에 이를 보여줍니다 (청구된 금액이 도착하기 전까지는 로컬 추정치로
≈$ 표시). /cost를 사용하면 세션별, 일별, 월별, 총 누적 비용을 계산할 수 있습니다.
- 신뢰할 수 있는 도구 호출(tool calling). 요청은 autopilot이 보내는 모든 매개변수(특히 도구)를 지원하는 상위 제공업체로만 전송되며, OpenRouter는 도구 호출 트래픽을 가장 높은 성공률을 가진 제공업체로 라우팅합니다. 상태 표시줄에는 마지막 턴을 처리한 제공업체가 표시됩니다.
- 따뜻하게 유지되는 프롬프트 캐싱(Prompt caching that stays warm). 각 세션은 하나의 상위 제공업체에 고정됩니다 (OpenRouter 스티키 라우팅, sticky routing). 따라서 길고 안정적인 프롬프트 접두사(prompt prefix)가 턴을 거치며 해당 제공업체의 캐시를 계속 사용하게 됩니다.
기억해야 할 점 (What to remember)
• 최대 100만 개 이상의 컨텍스트(context) (모델 의존적) — 모델이 추적을 잃지 않고 전체 모듈, 대규모 설정(configs), 그리고 전체 스택 트레이스(stack traces)를 읽을 수 있습니다.
• 이미지 이해(Image understanding) — 이미지 경로(PNG, JPG, WebP, GIF, BMP, 최대 5MB)를 모든 프롬프트에 넣을 수 있습니다. UI 검토, 다이어그램, 스크린샷 등에 유용합니다.
• 계획 (plan) / 편집 (edit) / 자동 (auto) 모드 — plan은 화이트리스트 전용 연구 모드입니다: 읽기 전용 도구(read, glob, grep, 웹 검색, GitHub 읽기 전용, 브라우저 가져오기(browser fetch))만 허용됩니다. 쓰기, 편집, 변경 가능한 bash, MCP 도구, 및 LSP 이름 변경은 모두 차단됩니다. edit (기본값)은 변경 호출마다 프롬프트를 요청합니다. auto는 신뢰할 수 있는 작업을 위해 모든 것을 승인합니다. plan과 edit에서 자격 증명 파일(~/.ssh, ~/.aws, Autopilot 자체 설정(제공자 키 포함), .env, /proc/*/environ)을 읽는 경우에도 먼저 요청하므로, 프롬프트 주입 공격이 조용히 키를 읽어내고 web_fetch와 함께 전송할 수 없습니다. 마찬가지로 web_fetch와 browser_fetch는 로컬 또는 사설 네트워크 주소(localhost, 127.0.0.1, 10.x/192.168.x, 169.254.169.254의 클라우드 메타데이터 포함, 해당 주소를 해석하는 이름 및 리디렉션 포함)에 도달하기 전에 출처별로 승인을 요청하므로, 프롬프트 주입 공격이 메타데이터 자격 증명이나 로컬 서비스를 읽을 수 없습니다.
• 서브 에이전트 (Subagents) — 기본적으로 코디네이터(coordinator)가 상당한 작업을 독립적인 연구를 위해 평가하고 특별한 문구 없이 위임할 수 있습니다. 워커 호출은 여전히 권한 확인을 거치며 구성된 백엔드가 필요합니다. 예시, 제어, 제한 및 설정에 대해서는 서브 에이전트 가이드를 참조하십시오.
• 장시간 비감독 실행 (Long-running unattended runs) — 헤드리스(headless) 서버는 분리된 작업(detached jobs)을 시작하고, 체크인 사이에 대기하며, 저장된 체크포인트(checkpoints)에서 재개할 수 있습니다. 전체 실행 시간, 토큰, 비용 및 액션 예산은 선택 사항이며, 명시적인 예산 소진 시 입력을 위해 일시 중지됩니다. 장시간 비감독 실행 가이드를 참조하십시오.
• Windows 지원 — OS 인식 셸이 Windows에서 cmd.exe / PowerShell, Unix에서 bash를 자동으로 감지합니다. bash 도구는 모든 플랫폼에서 기본적으로 작동합니다.
⚠️ [IMG:N] 형식 토큰은 이미지 placeholder 입니다.
- 메시지 큐잉(Message queuing) — 에이전트가 바쁜 동안 여러 메시지를 제출할 수 있습니다. 이 메시지들은 큐에 대기하며 자동으로 처리됩니다(auto-drain). Escape 키는 현재 턴을 중단하지만, 큐는 유지합니다.
- 스마트 권한 모달(Smart permission modal) — 도구를 거부하면 인라인 피드백이 표시되어 에이전트에게 대신 무엇을 해야 할지 알려줄 수 있습니다. 키보드 네이티브 탐색(
↑/↓, j/k, Alt+1/2/3)을 지원합니다.
- 루프 가드레일(Loop guardrails) — 턴에 있는 모든 도구가 차단되면 에이전트가 강제 중단됩니다. 이는 무한 토큰 소모 주기를 방지합니다.
- 영구적인 전체 비용 기록(Persistent all-time cost history) — 추가 전용(append-only)
history.jsonl 파일은 일일 사용량을 영구적으로 추적하여, /cost 명령어가 세션 및 버전 업데이트를 거쳐도 실제 전체 기간 및 월별 총액을 보여줍니다.
- LSP + MCP — Language Server Protocol (LSP)을 통해 시맨틱 코드 인텔리전스(호버, 정의로 이동, 참조, 진단 등)를 제공합니다. Model Context Protocol (MCP)을 통해 외부 도구와 확장할 수 있습니다.
- 로컬 구조화 메모리(Local structured memory) — SQLite와 임베딩 기반의 세션 간 메모리를 구현했습니다. 에이전트는
remember, recall, 그리고 forget 도구를 사용하여 세션 전반에 걸쳐 사실, 지침 및 선호도를 기억합니다.
- 웹 검색, GitHub, 그리고 헤드리스 브라우저(Web search, GitHub, and headless browser) — 터미널을 벗어나지 않고 웹 검색, GitHub 리포지토리 읽기, 그리고 JavaScript로 렌더링된 페이지 가져오기가 가능합니다.
최근 출시 기능
- 모델 제공자로 OpenRouter 사용(OpenRouter as the model provider) — 모든 OpenRouter 모델을 사용할 수 있으며, 사용자 자체 키를 이용하고 턴(turn)당 비용이 청구됩니다. Cloudflare Workers AI / AI 게이트웨이를 대체합니다 (업그레이드 방법은 Upgrading from Cloudflare 참조).
- OS 인식 셸 및 Windows 지원(OS-aware shell with Windows support) — 플랫폼에 따라
cmd.exe, PowerShell, 또는 bash를 자동 감지합니다. KIMIFLARE_SHELL 또는 /shell로 재정의할 수 있습니다.
- 인라인 피드백이 있는 스마트 권한 모달(Smart permission modal with inline feedback) — 도구 사용을 거부하고 에이전트에게 대신 무엇을 해야 할지 즉시 알려줍니다.
↑/↓, j/k, Alt+1/2/3를 사용한 키보드 네이티브 탐색 기능을 제공합니다.
- 진정한 메시지 큐잉(True message queuing) — 에이전트가 바쁠 때 메시지를 큐에 넣을 수 있습니다. Esc 키는 중단하고 큐를 자동으로 비웁니다.
- 하드 스톱 루프 가드레일(Hard-stop loop guardrail) — 한 턴에서 모든 도구가 차단되면 토큰 소모 사이클을 중지합니다.
- 헤드리스 SDK(Headless SDK) —
autopilot 위에 구축하기 위한 프로그래밍 방식의 createAgentSession API와 JSONL-over-stdio RPC 모드를 제공합니다.
전체 변경 로그는 github.com/directionally-local/autopilot/releases에서 확인하세요.
빠른 시작 (Quick start)
npm install -g autopilot-ai
autopilot
최초 실행 시, OpenRouter로 로그인(Sign in with OpenRouter) 하세요: 브라우저에서 autopilot을 승인하면 자동으로 키가 생성되거나 (또는 https://openrouter.ai/keys에서 복사한 키를 붙여넣으세요). 그런 다음 모델을 선택합니다. 끝입니다.
또는 macOS나 Linux에서 Homebrew로 설치할 수 있습니다 (Homebrew가 Node.js를 자동으로 설치해 줍니다):
brew install directionally-local/tap/autopilot
autopilot
설치 없이 실행하려면:
kimiflare에서 오신가요? 패키지 이름이 변경되었습니다. npm uninstall -g kimiflare && npm install -g autopilot-ai를 실행하고, 대신 autopilot을 사용하세요. 설정, 세션, 메모리 및 비용 기록은 유지됩니다 (여전히 ~/.config/kimiflare와 ~/.local/share/kimiflare에 저장됨). 또한 KIMIFLARE_* 환경 변수도 여전히 작동합니다.
Node.js 22.23.4+, 24.22.1+ 또는 26.12.1+가 필요합니다 (이전 버전은 Brotli 버그 CVE-2026-111497을 가지고 있으며, web_fetch는 해당 버전에서 실행을 거부합니다).
이전 대화를 이어서 진행하려면, autopilot resume <id>를 실행하세요 (정확한 명령어는 종료 시 출력됨), 이 디렉토리에서 선택하려면 autopilot resume, 가장 최근의 대화는 autopilot -c를 사용하세요. autopilot 내부에서는 /resume가 동일한 기능을 수행합니다.
Provider
| Provider | id | Key | Notes |
|---|
| OpenRouter (기본값) | openrouter | OPENROUTER_API_KEY 또는 브라우저 로그인 | 400개 이상의 모델, 턴당 비용 청구, 스티키 라우팅(sticky routing), 서브 에이전트(subagents), Jev 체크 |
| ... | | | |
- 첫 실행 시 사용할 Provider를 요청합니다. 환경에 이미 키가 있는 Provider는 먼저 제공되며, 키를 저장하지 않고 사용됩니다.
- 언제든지 전환 가능합니다.
/provider <id> [key]로 전환하거나 ( /provider는 목록을 보여주고 각 키의 출처를 알려줍니다), 또는 CLI에서 autopilot auth <id> (키를 저장하고 활성화합니다), autopilot auth use <id>, autopilot auth status를 사용하세요. 한 번의 실행에 대해서는 AUTOPILOT_PROVIDER=<id>로 설정합니다.
- 모든 것이 Provider를 따릅니다: 채팅, 압축(compaction) 및 메모리 사이드콜, 메모리/스킬 임베딩, 모델 선택기 (각 Provider의 자체 카탈로그 — 호스팅된 Provider는 models.dev, Ollama와 LM Studio는 라이브 디스커버리), 가격 책정, 오류 메시지 및 상태 페이지 링크. 다른 Provider가 활성화되어 있는 동안에는 OpenRouter로 아무것도 전송되지 않습니다.
- OpenRouter에서만 사용 가능한 기능은 다른 Provider에서는 비활성화됩니다: 비용 청구 확인 (다른 곳의
/cost는 Provider가 공개한 가격을 기반으로 추정치를 보여줍니다), Hotcell 서브 에이전트, 그리고 Jev 완료/분류(triage) 체크.
- 임베딩: 임베딩 API가 없는 Provider (Anthropic, DeepSeek, Moonshot, Kimi Code, the Coding Plan, LM Studio)는 텍스트 및 토픽 키 검색을 통해 메모리를 유지합니다. 벡터 검색(vector recall)을 유지하려면 해당 Provider의 키를 사용하여 `
세 가지 방법으로 제공할 수 있습니다—가장 먼저 발견되는 방법이 적용됩니다:
- 환경 변수(Environment):
OPENROUTER_API_KEY (또는 KIMIFLARE_OPENROUTER_KEY). 이 변수를 설정하면 초기 설정 화면이 나타나지 않습니다—kimiflare를 헤드리스(headless)로 실행하는 방법입니다 (CI, VM, 컨테이너 등).
- 로그인/설정 화면/CLI: 첫 실행 시 "OpenRouter로 로그인(Sign in with OpenRouter)"을 하거나,
autopilot auth openrouter를 사용합니다—브라우저에서 승인하면 키가 생성되어 저장됩니다 (OpenRouter의 OAuth PKCE 플로우). SSH 또는 컨테이너 내에서는 모든 장치에서 열 수 있는 링크가 표시되며 OpenRouter가 보여주는 코드를 요청합니다 (--code로 강제할 수 있습니다). 대신 --paste는 기존 키를 입력하라는 메시지를 표시하며, autopilot auth openrouter <key>는 키를 직접 저장합니다. TUI 내부에서는 /key set <key> 명령어가 이를 대체합니다.
- 설정 파일(Config file):
~/.config/kimiflare/config.json에 "openrouterApiKey": "sk-or-…" 형태로 작성합니다 (mode 600으로 생성).
/key는 현재 사용 중인 키가 무엇인지, 얼마나 사용했는지, 그리고 남은 크레딧을 보여줍니다. 메모리 임베딩(memory embeddings)과 작은 내부 사이드 콜(side-calls, 요약, 메모리 추출 등)을 포함한 모든 모델 호출은 이 키로 청구됩니다.
크레딧이 없는 키라도 OpenRouter의 **무료 모델(free models)**을 사용할 수 있습니다 (/model 섹션의 "Free", ID가 :free로 끝나는 경우). 단, OpenRouter의 일일 요청 한도(daily request cap)를 준수해야 합니다.
Cloudflare 버전에서 업그레이드하기
이전의 kimiflare 버전은 Cloudflare Workers AI / AI Gateway에서 실행되었습니다. 업그레이드 후 첫 실행 시 한 번 OpenRouter 키를 요청받게 되며, 그 이후에는: