오픈 소스 AI 코딩 에이전트.
English | 简体中文 | 繁體中文 | 한국어 | Deutsch | Español | Français | Italiano | Dansk | 日本語 | Polski | Русский | Bosanski | العربية | Norsk | Português (Brasil) | ไทย | Türkçe | Українська | বাংলা | Ελληνικά | Tiếng Việt
요약 — DAG 기반 오케스트레이터, REST 태스크 API, 에이전트별 MCP 스코핑, 9 상태 세션 FSM, 내장 취약점 스캐너 그리고 온디바이스 LLM 추론을 지원하는 일급 Android 앱까지 모두 제공하는 유일한 오픈소스 코딩 에이전트입니다. 독점이든 오픈소스든 이 모두를 결합한 다른 CLI는 없습니다.
See the English README.md for the full positioning prose (vs. vendor-locked CLIs, vs. BYOM peers, vs. specialized CLIs) and architecture diagram.
Legend: ✅ shipped · ❌ absent · partial limited/incomplete · plugin via community add-on · paid behind a subscription tier.
| Capability | This fork | Claude Code | Codex CLI | Gemini CLI | opencode (upstream) | Aider | Goose | Cline | Roo Code | Cursor | Continue | Crush | Qwen Code |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Open source | ✅ | ❌ | partial | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ |
| BYOM (bring your own model) | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | partial | ✅ | ✅ | partial |
| Local models (llama.cpp / Ollama) | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ |
| Parallel agents in isolated worktrees | ✅ native | ✅ (Teams) | partial | ❌ | via plugin | ❌ | partial | ✅ (v3.58) | partial | ❌ | ❌ | ❌ | ❌ |
| Explicit DAG orchestration | ✅ unique | ad-hoc | ❌ | ❌ | ❌ | ❌ | recipes (linear) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| REST task API (programmable) | ✅ unique | partial (SDK) | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| TUI task dashboard | ✅ | ❌ | ❌ | ❌ | partial | ❌ | ❌ | ❌ | ❌ | n/a | n/a | ❌ | partial |
| MCP support | ✅ + per-agent scoping | ✅ | ✅ | ✅ | ✅ | via plugins | ✅ | ✅ | ✅ | partial | ✅ | ❌ | ✅ |
| 9-state session FSM | ✅ unique (6/9 persisted) | ❌ | ❌ | ❌ | basic | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Built-in vulnerability scanner | ✅ unique | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| DLP / secret redaction before LLM call | ✅ | partial | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Per-agent tool allow/deny | ✅ | partial | ❌ | ❌ | basic | ❌ | ❌ | ❌ | partial | ❌ | ❌ | ❌ | ❌ |
| Docker sandboxing (bash only) | ✅ bash-only | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Git auto-commits / rollback | ✅ | ✅ | ✅ | ✅ | ✅ (signed) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Capability | This fork | Claude Code | Codex CLI | Gemini CLI | opencode (upstream) | Aider | Goose | Cline | Roo Code | Cursor | Continue | Crush | Qwen Code |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| LSP integration (go-to-def, diagnostics) | ✅ | partial | partial | partial | ✅ | partial | partial | ✅ | ✅ | ✅ | ✅ | partial | partial |
Plugin SDK (@opencode/plugin) |
✅ | partial | ❌ | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ |
| Prompt caching (cloud + local KV) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| RAG: BM25 or vector (selectable) + exponential decay | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | vector only | ❌ | vector only | vector only | ❌ | ❌ |
Auto-learn (requires learner agent configured) |
opt-in | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Auto-compact (AI summarization) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | partial | ✅ |
| Unified-diff edit engine | ✅ | ✅ | ✅ | partial | ✅ | ✅ | partial | partial | ✅ | partial | partial | partial | partial |
| ACP (Agent Client Protocol) layer | ✅ | ❌ | ❌ | ❌ | basic | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Capability | This fork | Claude Code | Codex CLI | Gemini CLI | opencode (upstream) | Aider | Goose | Cline | Roo Code | Cursor | Continue | Crush | Qwen Code |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| First-class Android app | ✅ unique | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| iOS (remote mode) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Adaptive runtime (VRAM/CPU, thermal Android-only) | ✅ partial | ❌ | ❌ | ❌ | hardcoded | hardcoded | hardcoded | hardcoded | hardcoded | n/a | hardcoded | hardcoded | hardcoded |
| STT (voice-to-text, Parakeet) | ✅ desktop + mobile | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | partial | ❌ | ❌ | ❌ | ❌ | ❌ |
| TTS (Kokoro desktop + mobile; Pocket desktop only + voice clone) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| OAuth deep-link callback (Tauri) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
mDNS service discovery (CLI flag --mdns) |
opt-in | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
Upstream branch watcher (vcs.branch.behind) |
✅ unique | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Collaborative mode (JWT + presence + file-lock) | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | partial | ❌ | ❌ | ❌ |
| AnythingLLM bridge | ✅ unique | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| GDPR export/erasure route | ✅ unique | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Price | free + BYOM | $20/mo sub | $20/mo sub | 1000/day free | free + BYOM | free + BYOM | free + BYOM | free + BYOM | free + BYOM | $20/mo sub | free + BYOM | free + BYOM | free + BYOM |
⚡ 한눈에 보기
OpenCode (포크) — 데스크톱, 서버, 스마트폰에서 실행되는 AI 코딩 에이전트. 엔드투엔드 로컬 모델, 클라우드 종속성 제로, 엔터프라이즈급 거버넌스 내장. Rwanbt가 유지관리하는 anomalyco/opencode 포크.
# CLI (macOS / Linux / Windows)
curl -fsSL https://opencode.ai/install | bash
# Desktop app + Android APK
# → https://github.com/Rwanbt/opencode/releases/latest| 🤖 DAG orchestration | Wave-based parallel agents, up to 5 concurrent |
| 🧠 Local LLM end-to-end | llama.cpp + runtime that auto-tunes to your VRAM / CPU |
| 📱 Android app | On-device inference, terminal, PTY — single APK |
| 🎙️ Voice STT / TTS | Parakeet (25 languages) + Kokoro desktop+mobile / Pocket TTS desktop |
| 🔒 9-state session FSM | 6 of 9 states persist to SQLite, audit log survives restart |
| 🔌 REST task API | 8 endpoints — drive the agent from cron, Temporal, Airflow |
| 🛡️ Vulnerability scanner | Auto-scans every edit / write for secrets & injection sinks |
| 🔍 RAG: BM25 or vector | Selectable at index time + exponential confidence decay |
opencode # TUI
opencode run "fix the failing test in src/" # one-shot💡 세부 정보가 필요하세요? 아래 모든 섹션은 접혀 있습니다 — 필요한 부분만 펼치세요.
포크 기능
이것은 anomalyco/opencode의 포크로, Rwanbt가 관리합니다. 업스트림과 동기화 유지. 최신 변경 사항은 dev 브랜치를 참조하세요.
OpenCode는 소비자용 하드웨어(VRAM 8 GB / RAM 16 GB)에서 AI 모델을 로컬 실행하며, 4B~7B 모델은 클라우드 의존성 제로로 동작합니다.
프롬프트 최적화 (94% 감소)
- 로컬 모델용 ~1K 토큰 시스템 프롬프트 (클라우드용 ~16K 대비)
- 스켈레톤 도구 스키마 (멀티KB 설명문 대비 1줄 시그니처)
- 7개 도구 화이트리스트 (bash, read, edit, write, glob, grep, question)
- skills 섹션 없음, 최소한의 환경 정보
추론 엔진 (llama.cpp b8731)
- Vulkan GPU 백엔드, 첫 모델 로드 시 자동 다운로드
- 런타임 적응형 설정 (
packages/opencode/src/local-llm-server/auto-config.ts): 감지된 VRAM, 여유 RAM, big.LITTLE CPU 분할, GPU 백엔드 (CUDA/ROCm/Vulkan/Metal/OpenCL), 온도 상태로부터n_gpu_layers, 스레드, batch/ubatch 크기, KV 캐시 양자화, 컨텍스트 크기를 도출합니다. 기존의 하드코딩된--n-gpu-layers 99를 대체 — 4 GB Android는 OOM 종료 대신 CPU 폴백으로 실행되고, 플래그십 데스크톱은 기본 512 대신 조정된 batch 값을 얻습니다. --flash-attn on— 메모리 효율을 위한 Flash Attention--cache-type-k/v— 회전 KV 캐시; VRAM 여유에 따른 적응형 계층 (f16 / q8_0 / q4_0)--fit on— 포크 전용 보조 VRAM 조정 (OPENCODE_LLAMA_ENABLE_FIT=1로 옵트인)- 투기적 디코딩 (
--model-draft) 및 VRAM 가드 (여유 공간 < 4 GB 시 자동 비활성화) - 단일 슬롯 (
-np 1)으로 메모리 사용량 최소화 - 벤치마크 하니스 (
bun run bench:llm): 모델별, 실행별 FTL / TPS / 피크 RSS / 총 실행 시간을 재현 가능하게 측정, CI 아카이브용 JSONL 출력
음성 인식 (Parakeet TDT 0.6B v3 INT8)
- NVIDIA Parakeet (ONNX Runtime 경유) — 5초 오디오에 ~300ms (18배 실시간)
- 25개 유럽 언어 (영어, 프랑스어, 독일어, 스페인어 등)
- VRAM 제로: CPU 전용 (~700 MB RAM)
- 첫 마이크 사용 시 모델 자동 다운로드 (~460 MB)
- 녹음 중 파형 애니메이션
텍스트 음성 변환 (Kyutai Pocket TTS)
- Kyutai(파리)가 개발한 프랑스어 네이티브 TTS, 1억 파라미터
- 8개 내장 음성: Alba, Fantine, Cosette, Eponine, Azelma, Marius, Javert, Jean
- 제로샷 음성 클로닝: WAV 업로드 또는 마이크 녹음
- CPU 전용, ~6배 실시간, 포트 14100 HTTP 서버
- 폴백: Kokoro TTS ONNX 엔진 (54개 음성, 9개 언어, CMUDict G2P)
모델 관리
- HuggingFace 검색 (모델별 VRAM/RAM 호환성 배지)
- UI에서 GGUF 모델 다운로드, 로드, 언로드, 삭제
- 사전 큐레이션 카탈로그: Gemma 3 4B, Qwen3 4B/1.7B/0.6B
- 모델 크기에 따른 동적 출력 토큰
- 투기적 디코딩을 위한 드래프트 모델 자동 감지 (0.5B~0.8B)
구성
- 프리셋: Fast / Quality / Eco / Long Context (원클릭 최적화)
- 색상 코딩된 사용량 바 (녹색 / 노란색 / 빨간색) 포함 VRAM 모니터링 위젯
- KV 캐시 타입: auto / q8_0 / q4_0 / f16
- GPU 오프로딩: auto / gpu-max / balanced
- 메모리 매핑: auto / on / off
- 웹 검색 토글 (프롬프트 도구 모음의 지구 아이콘)
에이전트 신뢰성 (로컬 모델)
- 사전 점검 가드 (코드 수준, 0 토큰): 편집 전 파일 존재 확인, old_string 내용 검증, read-before-edit 강제, 기존 파일에 write 방지
- 무한 루프 자동 차단: 동일 도구 호출 2회 시 오류 주입 (코드 수준 가드, 프롬프트만이 아님)
- 도구 텔레메트리: 세션별 성공/오류율 및 도구별 분석 자동 로깅
크로스 플랫폼: Windows (Vulkan), Linux, macOS, Android
서브에이전트에 비동기 작업을 위임합니다. task 도구에서 mode: "background"를 설정하면 에이전트가 백그라운드에서 작업하는 동안 task_id가 즉시 반환됩니다. 수명 주기 추적을 위해 버스 이벤트(TaskCreated, TaskCompleted, TaskFailed)가 발행됩니다.
team 도구를 사용하여 여러 에이전트를 병렬로 오케스트레이션합니다. 의존성 엣지를 가진 하위 작업을 정의하면 computeWaves()가 DAG를 구축하고 독립적인 작업을 동시에 실행합니다(최대 5개 병렬 에이전트). max_cost(달러)와 max_agents를 통한 예산 제어. 완료된 작업의 컨텍스트가 의존 작업에 자동으로 전달됩니다.
각 백그라운드 작업은 자동으로 자체 git worktree를 할당받습니다. 워크스페이스는 데이터베이스의 세션에 연결됩니다. 작업이 파일 변경을 생성하지 않으면 worktree가 자동으로 정리됩니다. 컨테이너 없이 git 수준의 격리를 제공합니다.
작업 수명 주기 관리를 위한 완전한 REST API:
| Method | Path | Description |
|---|---|---|
| GET | /task/ |
List tasks (filter by parent, status) |
| GET | /task/:id |
Get task details + status + worktree info |
| GET | /task/:id/messages |
Retrieve task session messages |
| POST | /task/:id/cancel |
Cancel a running or queued task |
| POST | /task/:id/resume |
Resume completed/failed/blocked task |
| POST | /task/:id/followup |
Send follow-up message to idle task |
| POST | /task/:id/promote |
Promote background task to foreground |
| GET | /task/:id/team |
Aggregated team view (costs, diffs per member) |
실시간 상태 아이콘으로 활성 백그라운드 작업을 표시하는 사이드바 플러그인:
| Icon | Status |
|---|---|
~ |
Running / Retrying |
? |
Queued / Awaiting input |
! |
Blocked |
x |
Failed |
* |
Completed |
- |
Cancelled |
액션이 포함된 다이얼로그: 작업 세션 열기, 취소, 재개, 후속 메시지 전송, 상태 확인.
에이전트별 MCP 서버 허용/거부 목록. opencode.json의 각 에이전트 mcp 필드에서 설정합니다. toolsForAgent() 함수가 호출 에이전트의 스코프에 따라 사용 가능한 MCP 도구를 필터링합니다.
{
"agents": {
"explore": {
"mcp": { "deny": ["dangerous-server"] }
}
}
}세션은 9가지 상태 중 하나를 추적하며 데이터베이스에 영속화됩니다:
idle · busy · retry · queued · blocked · awaiting_input · completed · failed · cancelled
영속 상태(queued, blocked, awaiting_input, completed, failed, cancelled)는 데이터베이스 재시작 후에도 유지됩니다. 인메모리 상태(idle, busy, retry)는 재시작 시 초기화됩니다.
읽기 전용 코디네이터 에이전트(최대 50단계). task와 team 도구에 접근할 수 있지만 모든 편집 도구는 거부됩니다. 구현을 빌드/범용 에이전트에 위임하고 결과를 종합합니다.
기술 아키텍처
25개 이상의 프로바이더를 기본 지원: Anthropic, OpenAI, Google Gemini, Azure, AWS Bedrock, Vertex AI, OpenRouter, GitHub Copilot, XAI, Mistral, Groq, DeepInfra, Cerebras, Cohere, TogetherAI, Perplexity, Vercel, Venice, GitLab, Gateway, Ollama Cloud, 그리고 모든 OpenAI 호환 엔드포인트 (Ollama, LM Studio, vLLM, LocalAI). 가격 정보는 models.dev에서 제공.
| Agent | Mode | Access | Description |
|---|---|---|---|
| build | primary | full | 기본 개발 에이전트 |
| plan | primary | read-only | 분석 및 코드 탐색 |
| general | subagent | full (no todowrite) | 복잡한 다단계 작업 |
| explore | subagent | read-only | 빠른 코드베이스 검색 |
| orchestrator | subagent | read-only + task/team | 다중 에이전트 코디네이터 (50단계) |
| critic | subagent | read-only + bash + LSP | 코드 리뷰: 버그, 보안, 성능 |
| tester | subagent | full (no todowrite) | 테스트 작성 및 실행, 커버리지 확인 |
| documenter | subagent | full (no todowrite) | JSDoc, README, 인라인 문서화 |
| compaction | hidden | none | AI 기반 컨텍스트 요약 |
| title | hidden | none | 세션 제목 생성 |
| summary | hidden | none | 세션 요약 |
완전한 Language Server Protocol 지원(심볼 인덱싱, 진단, 다중 언어 지원: TypeScript, Deno, Vue 등 확장 가능). 에이전트는 텍스트 검색 대신 LSP 심볼을 통해 코드를 탐색하여 정확한 go-to-definition, find-references, 실시간 타입 오류 감지를 수행합니다.
Model Context Protocol 클라이언트 및 서버. stdio, HTTP/SSE, StreamableHTTP 전송 지원. 원격 서버용 OAuth 인증 흐름. 도구, 프롬프트, 리소스 기능. 에이전트별 허용/거부 목록을 통한 스코핑.
Hono 기반 REST API(타입 라우트 및 OpenAPI 사양 생성). PTY(의사 터미널)용 WebSocket 지원. 실시간 이벤트 스트리밍용 SSE. Basic 인증, CORS, gzip 압축. TUI는 하나의 프런트엔드이며, 서버는 모든 HTTP 클라이언트, 웹 UI, 모바일 앱에서 구동 가능합니다.
토큰 사용량이 모델의 컨텍스트 한도에 도달하면 AI 기반 요약을 통한 자동 압축. 설정 가능한 임계값(PRUNE_MINIMUM 20KB, PRUNE_PROTECT 40KB)으로 토큰 인식 프루닝. skill 도구 출력은 프루닝에서 보호됩니다.
hunk 검증이 포함된 unified diff 패치. 파일 전체 덮어쓰기가 아닌 특정 파일 영역에 타겟 hunk 적용. 여러 파일에 걸친 일괄 작업을 위한 multi-edit 도구.
와일드카드 패턴 매칭을 지원하는 3단계 권한(allow / deny / ask). 세밀한 제어를 위한 100개 이상의 bash 명령어 arity 정의. 워크스페이스 외부의 파일 접근을 차단하는 프로젝트 경계 적용.
각 도구 실행 전 파일 상태를 기록하는 스냅샷 시스템. diff 계산과 함께 revert 및 unrevert 지원. 메시지 단위 또는 세션 단위로 변경 사항을 롤백할 수 있습니다.
메시지별 비용과 전체 토큰 분석(input, output, reasoning, cache read, cache write). 팀별 예산 한도(max_cost). 모델별, 일별 집계가 가능한 stats 명령어. TUI에서 세션 비용 실시간 표시. 가격 데이터는 models.dev에서 제공.
훅 아키텍처를 갖춘 완전한 SDK(@opencode/plugin). npm 패키지 또는 파일 시스템에서 동적 로딩. Codex, GitHub Copilot, GitLab, Poe 인증을 위한 내장 플러그인.
흔한 오해
본 프로젝트에 대한 AI 생성 요약으로 인한 혼란을 방지하기 위해:
- TUI는 TypeScript로 작성되었습니다(SolidJS + @opentui 터미널 렌더링). Rust가 아닙니다.
- Tree-sitter는 TUI 구문 강조 및 bash 명령어 파싱에만 사용되며, 에이전트 수준의 코드 분석에는 사용되지 않습니다.
- Docker 샌드박싱은 선택 사항입니다(
experimental.sandbox.type: "docker"). 기본 격리는 git worktree입니다. - RAG은 선택 사항입니다(
experimental.rag.enabled: true). 기본 컨텍스트는 LSP 심볼 인덱싱 + 자동 압축으로 관리됩니다. - 자동 수정을 제안하는 "워치 모드"는 없습니다 -- 파일 워처는 인프라 목적으로만 존재합니다.
- 자기 수정은 표준 에이전트 루프(LLM이 도구 결과의 오류를 확인하고 재시도)를 사용하며, 전문화된 자동 복구 메커니즘이 아닙니다.
기능 매트릭스
| 기능 | Status | Notes |
|---|---|---|
| Background tasks | Implemented | mode: "background" on task tool |
| Agent teams (DAG) | Implemented | Wave-based parallel execution, budget control |
| Git worktree isolation | Implemented | Auto-created per background task |
| Task REST API | Implemented | 8 endpoints for full lifecycle |
| TUI task dashboard | Implemented | Sidebar + dialog actions |
| MCP agent scoping | Implemented | Per-agent allow/deny config |
| 9-state lifecycle | Implemented | Persistent to SQLite |
| Orchestrator agent | Implemented | Read-only coordinator |
| Multi-provider (25+) | Implemented | Including local models via OpenAI-compatible API |
| LSP integration | Implemented | Symbols, diagnostics, multi-language |
| MCP protocol | Implemented | Client + server, 3 transports |
| Plugin system | Implemented | SDK + hook architecture |
| Cost tracking | Implemented | Per-message, per-team, per-model |
| Context auto-compact | Implemented | AI summarization + pruning |
| Git rollback/snapshots | Implemented | Revert/unrevert per message |
| Specialized agents | Implemented | critic, tester, documenter subagents |
| Dry run / command preview | Implemented | dry_run param on bash/edit/write tools |
| Auto-learn | Implemented | Post-session lesson extraction to .opencode/learnings/ |
| Web search | Implemented | Globe toggle in prompt toolbar |
| 기능 | Status | Notes |
|---|---|---|
| Local LLM (llama.cpp b8731) | Implemented | Vulkan GPU, auto-download runtime, --fit auto-VRAM |
| 런타임 적응형 설정 | Implemented | auto-config.ts: 감지된 VRAM, RAM, big.LITTLE, GPU 백엔드, 온도 상태에서 n_gpu_layers / 스레드 / batch / KV 양자화 도출 |
| 벤치마크 하니스 | Implemented | bun run bench:llm은 모델별 FTL, TPS, 피크 RSS, 총 실행 시간을 측정; JSONL 출력 |
| Flash Attention | Implemented | --flash-attn on on desktop and mobile |
| KV cache quantization | Implemented | q4_0 / q8_0 / f16 adaptive with standard llama.cpp quantization (~50% KV memory savings at q4_0) |
| Exact tokenizer (OpenAI) | Implemented | gpt-*/o1/o3/o4용 js-tiktoken; Llama/Qwen/Gemma용 경험적 3.5 문자/토큰 |
| Speculative decoding | Implemented | VRAM Guard (desktop) / RAM Guard (mobile), draft model auto-detection |
| VRAM / RAM monitoring | Implemented | Desktop: nvidia-smi, Mobile: /proc/meminfo |
| Configuration presets | Implemented | Fast / Quality / Eco / Long Context |
| HuggingFace model search | Implemented | Zod 검증 응답, VRAM 배지, 다운로드 매니저, 9개 사전 선별 모델 |
| 재개 가능한 GGUF 다운로드 | Implemented | HTTP Range 헤더 — 4G 중단이 4 GB 전송을 처음부터 다시 시작하지 않음 |
| STT (Parakeet TDT 0.6B) | Implemented | ONNX Runtime, ~300ms/5s, 25개 언어, 데스크톱 + 모바일 (마이크 리스너 양쪽 모두 연결됨) |
| TTS (Pocket TTS) | Implemented | 8개 음성, 제로샷 음성 복제, 프랑스어 네이티브 (데스크톱 전용 — Android에는 Python 사이드카 없음) |
| TTS (Kokoro) | Implemented | 54개 음성, 9개 언어, 데스크톱 + Android에서 ONNX (모바일 speech.rs에 6개 Tauri 명령 연결, CPUExecutionProvider) |
| Prompt reduction (94%) | Implemented | ~1K tokens vs ~16K for cloud, skeleton tool schemas |
| Pre-flight guards | Implemented | File-exists, old_string verification, read-before-edit, write-on-existing (code-level, 0 tokens) |
| Doom loop auto-break | Implemented | Auto-injects error on 2x identical calls (code-level, not prompt) |
| Tool telemetry | Implemented | Per-session success/error rate logging with per-tool breakdown |
| 회로 차단기 재시작 | Implemented | ensureCorrectModel은 120초 내 3회 재시작 후 중단하여 번 사이클 루프 방지 |
| 기능 | Status | Notes |
|---|---|---|
| Docker sandboxing | Implemented | Optional via experimental.sandbox.type: "docker" |
| Vulnerability scanner | Implemented | Auto-scan on edit/write for secrets, injections, unsafe patterns |
| DLP / AgentShield | Implemented | experimental.dlp.enabled: true, redacts secrets before LLM calls |
| Policy engine | Implemented | experimental.policy.enabled: true, conditional rules + custom policies |
| 엄격한 CSP (데스크톱 + 모바일) | Implemented | connect-src는 loopback + HuggingFace + HTTPS 공급자로 범위 제한; unsafe-eval 없음, object-src 'none', frame-ancestors 'none' |
| Android 릴리스 하드닝 | Implemented | isDebuggable=false, allowBackup=false, isShrinkResources=true, FOREGROUND_SERVICE_TYPE_SPECIAL_USE |
| 데스크톱 릴리스 하드닝 | Implemented | devtools가 더 이상 강제로 활성화되지 않음 — Tauri 2 기본값(디버그 전용)이 복원되어 XSS 발판이 프로덕션의 __TAURI__에 연결될 수 없음 |
| Tauri 명령 입력 검증 | Implemented | download_model / load_llm_model / delete_model 가드: 파일명 charset, huggingface.co / hf.co로의 HTTPS 허용 목록 |
| Rust 로깅 체인 | Implemented | 모바일에서 log + android_logger; 릴리스에서 eprintln! 없음 → logcat으로의 경로/URL 누출 없음 |
| 보안 감사 트래커 | Implemented | SECURITY_AUDIT.md — 모든 발견 항목을 path:line, 상태, 연기된 수정 근거와 함께 S1/S2/S3로 분류 |
| 기능 | Status | Notes |
|---|---|---|
| Vector DB / RAG | Implemented | experimental.rag.enabled: true, SQLite + cosine similarity |
| Confidence/decay | Implemented | Time-based scoring for RAG embeddings, exponential decay |
| Memory conflict resolution | Dead code | rag/conflict.ts is unit-tested but not invoked in production; treat as unimplemented |
| 기능 | Status | Notes |
|---|---|---|
| Mobile app (Tauri) | Implemented | Android: 내장 런타임, 온디바이스 LLM, STT + TTS (Kokoro). iOS: 원격 모드 |
| OAuth 콜백 딥 링크 | Implemented | opencode://oauth/callback?providerID=…&code=…&state=…가 토큰 교환을 자동으로 완료; 인증 코드 복사-붙여넣기 불필요 |
| 업스트림 브랜치 감시기 | Implemented | 주기적인 git fetch (워밍업 30초, 간격 5분)가 로컬 HEAD가 추적된 업스트림에서 분기될 때 vcs.branch.behind 발생; 데스크톱과 모바일에서 platform.notify()로 표시 |
| 뷰포트 크기 PTY 스폰 | Implemented | Pty.create({cols, rows})가 window.innerWidth/innerHeight의 추정기를 사용 — 셸이 80×24→36×11 대신 최종 치수로 시작, mksh/bash에서 Android 첫 프롬프트 비표시 버그 수정 |
| Collaborative mode | Experimental | JWT auth, presence, file locking, WebSocket broadcast |
| AnythingLLM bridge | Experimental | MCP adapter, context injection, vector store bridge |
| Per-message token display | Partial | Stored in DB, shown as session aggregate |
아키텍처
graph TB
subgraph Clients
TUI[TUI - SolidJS + opentui]
Web[Web UI - SolidJS + Vite]
Desktop[Desktop - Tauri 2.0]
Mobile[Mobile - Tauri iOS/Android]
end
subgraph Server
Hono[Hono HTTP Server<br/>REST + SSE + WebSocket]
Auth[Auth - JWT + Basic]
Broadcast[WebSocket Broadcast]
end
subgraph "Agent Engine"
Session[Session + Agent Loop]
Router[Provider Router]
Tools[Tool Engine<br/>bash, read, write, edit, glob,<br/>grep, list, webfetch, task...]
Context[Context Manager<br/>Auto-compact + Token Pruning]
end
subgraph Intelligence
Cloud[25+ Cloud APIs<br/>Anthropic, OpenAI, Google,<br/>Azure, Bedrock, Vertex...]
Local[Local LLM<br/>llama.cpp b8731 Vulkan<br/>port 14097]
MCP[MCP Servers<br/>stdio, HTTP/SSE, StreamableHTTP]
LSP[15+ LSP Servers<br/>Auto-download + Symbol Index]
end
subgraph "Speech (ONNX Runtime)"
STT[Parakeet TDT 0.6B<br/>25 languages, ~300ms/5s]
TTS[Pocket TTS + Kokoro<br/>Voice Cloning, port 14100]
end
subgraph Storage
DB[(SQLite - Drizzle ORM<br/>Sessions, Messages, Snapshots)]
RAG[RAG - SQLite Vectors]
ALLM[AnythingLLM Bridge]
end
TUI & Web & Desktop & Mobile --> Hono
Hono --> Session
Session --> Router
Router --> Cloud & Local
Session --> Tools
Tools --> LSP & MCP
Session --> Context
Context --> RAG & ALLM
Hono --> DB
Desktop & Mobile --> STT & TTS
| Service | Port | Protocol |
|---|---|---|
| OpenCode Server | 4096 | HTTP (REST + SSE + WebSocket) |
| LLM (llama-server) | 14097 | HTTP (OpenAI-compatible) |
| TTS (pocket-tts) | 14100 | HTTP (FastAPI) |
보안 및 거버넌스
| 기능 | 설명 |
|---|---|
| 샌드박스 | 선택적 Docker 실행 (experimental.sandbox.type: "docker") 또는 프로젝트 경계 적용이 포함된 호스트 모드 |
| 권한 | 3단계 시스템 (allow / deny / ask), 와일드카드 패턴 매칭. 세밀한 제어를 위한 100개 이상의 bash 명령어 정의 |
| DLP | 데이터 손실 방지 (experimental.dlp), LLM 프로바이더에 전송하기 전 시크릿, API 키, 자격 증명 비식별화 |
| 정책 엔진 | 조건부 규칙 (experimental.policy), block 또는 warn 액션. 경로 보호, 편집 크기 제한, 사용자 정의 정규식 패턴 |
| 프라이버시 | 로컬 우선: 모든 데이터는 디스크의 SQLite에 저장. 기본적으로 텔레메트리 없음. 시크릿은 로그에 기록되지 않음. 구성된 LLM 프로바이더 외에 데이터 전송 없음 |
인텔리전스 인터페이스
| 기능 | 설명 |
|---|---|
| MCP 준수 | 완전한 Model Context Protocol 지원 — 클라이언트/서버 모드, 에이전트별 허용/거부 목록을 통한 도구 스코핑 |
| 컨텍스트 파일 | .opencode/ 디렉터리, opencode.jsonc 구성 파일. YAML 프런트매터가 포함된 마크다운으로 정의된 에이전트. instructions 구성을 통한 사용자 정의 지침 |
| 프로바이더 라우터 | Provider.parseModel("provider/model")로 25개 이상의 프로바이더. 자동 폴백, 비용 추적, 토큰 인식 라우팅 |
| RAG 시스템 | 선택적 로컬 벡터 검색 (experimental.rag), 구성 가능한 임베딩 모델 (OpenAI/Google). 수정된 파일 자동 인덱싱 |
| AnythingLLM 브리지 | 선택적 통합 (experimental.anythingllm) — 컨텍스트 주입, MCP 서버 어댑터, 벡터 스토어 브리지, Agent Skills HTTP API |
기능 브랜치 (dev에 구현 완료)
3개의 주요 기능이 전용 브랜치에서 구현되어 dev에 머지되었습니다. 각각 기능 게이트가 적용되어 하위 호환성을 유지합니다.
다중 사용자 실시간 협업. 구현 내용:
- JWT 인증 — HMAC-SHA256 토큰, 리프레시 로테이션, Basic 인증과 하위 호환
- 사용자 관리 — 등록, 역할 (admin/member/viewer), RBAC 적용
- WebSocket 브로드캐스트 — GlobalBus → Broadcast 배선을 통한 실시간 이벤트 스트리밍
- 프레즌스 시스템 — 30초 하트비트를 통한 온라인/유휴/자리비움 상태
- 파일 잠금 — edit/write 도구에서의 낙관적 잠금 및 충돌 감지
- 프런트엔드 — 로그인 폼, 프레즌스 인디케이터, 옵저버 배지, WebSocket 훅
설정: experimental.collaborative.enabled: true
Tauri 2.0을 통한 Android/iOS 네이티브 앱, 임베디드 런타임 — 단일 APK, 외부 의존성 제로. 구현 내용:
레이어 1 — 임베디드 런타임 (Android, 100% 네이티브 성능):
- APK 내 정적 바이너리 — Bun, Bash, Ripgrep, Toybox (aarch64-linux-musl), 첫 실행 시 추출 (~15초)
- 번들 CLI — 임베디드 Bun으로 실행되는 JS 번들로서의 OpenCode CLI, 코어 기능에 네트워크 불필요
- 직접 프로세스 생성 — Termux 없음, intent 없음 — Rust에서 직접
std::process::Command - 서버 자동 시작 —
bun opencode-cli.js serve, 데스크톱 사이드카와 동일한 UUID 인증 포함 localhost
레이어 2 — 온디바이스 LLM 추론:
- JNI를 통한 llama.cpp — Kotlin LlamaEngine이 JNI 브리지로 네이티브 .so 라이브러리 로드
- 파일 기반 IPC — Rust가
llm_ipc/request에 명령 기록, Kotlin 데몬이 폴링하여 결과 반환 - llama-server — 포트 14097의 OpenAI 호환 HTTP API (프로바이더 통합용)
- 모델 관리 — HuggingFace에서 GGUF 모델 다운로드, 로드/언로드/삭제, 9개 사전 큐레이션 모델
- 프로바이더 등록 — 로컬 모델이 모델 선택기에서 "Local AI" 프로바이더로 표시
- Flash Attention — 메모리 효율적 추론을 위한
--flash-attn on - KV 캐시 양자화 — 회전 포함
--cache-type-k/v q4_0(72% 메모리 절약) - 투기적 디코딩 —
/proc/meminfo를 통한 RAM 가드 포함 드래프트 모델 자동 감지 (0.5B~0.8B) - RAM 모니터링 —
/proc/meminfo를 통한 디바이스 메모리 위젯 (전체/사용/여유) - 구성 프리셋 — 데스크톱과 동일한 Fast/Quality/Eco/Long Context 프리셋
- 스마트 GPU 선택 — Adreno 730+ (SD 8 Gen 1+)에 Vulkan, 이전 SoC에 OpenCL, CPU 폴백
- 빅코어 고정 — ARM big.LITTLE 토폴로지 감지, 추론을 성능 코어에만 고정
레이어 3 — 확장 환경 (선택적 다운로드, ~150MB):
- proot + Alpine rootfs — 추가 패키지용
apt install포함 완전한 Linux - 바인드 마운트된 레이어 1 — Bun/Git/rg는 proot 내에서도 네이티브 속도로 실행
- 온디맨드 — 설정에서 "확장 환경"을 활성화할 때만 다운로드
레이어 4 — 음성 및 미디어:
- STT (Parakeet TDT 0.6B) — 데스크톱과 동일한 ONNX Runtime 엔진, ~300ms/5s 오디오, 25개 언어
- 파형 애니메이션 — 녹음 중 시각적 피드백
- 네이티브 파일 피커 — 파일/디렉터리 선택 및 첨부 파일용
tauri-plugin-dialog
공통 (Android + iOS):
- 플랫폼 추상화 —
"mobile"+"ios"/"android"OS 감지를 포함한 확장Platform타입 - 원격 연결 — 네트워크를 통해 데스크톱 OpenCode 서버에 연결 (iOS 전용 또는 Android 폴백)
- 인터랙티브 터미널 — 커스텀 musl
librust_pty.so(forkpty 래퍼)를 통한 완전한 PTY, canvas 폴백 포함 Ghostty WASM 렌더러 - 외부 스토리지 — 서버 HOME에서
/sdcard/디렉터리 (Documents, Downloads, projects)로의 심볼릭 링크 - 모바일 UI — 반응형 사이드바, 터치 최적화 메시지 입력, 모바일 diff 뷰, 44px 터치 타겟, 세이프 영역 지원
- 푸시 알림 — 백그라운드 작업 완료를 위한 SSE-to-네이티브 알림 브리지
- 모드 선택기 — 첫 실행 시 Local (Android) 또는 Remote (iOS + Android) 선택
- 모바일 액션 메뉴 — 세션 헤더에서 터미널, 포크, 검색, 설정에 빠른 접근
OpenCode와 AnythingLLM의 문서 RAG 플랫폼 간의 브리지. 구현 내용:
- REST 클라이언트 — AnythingLLM 워크스페이스, 문서, 검색, 채팅용 완전한 API 래퍼
- MCP 서버 어댑터 — 4개 도구:
anythingllm_search,anythingllm_list_workspaces,anythingllm_get_document,anythingllm_chat - 플러그인 컨텍스트 주입 —
experimental.chat.system.transform훅이 관련 문서를 시스템 프롬프트에 주입 - Agent Skills HTTP API —
GET /agent-skills+POST /agent-skills/:toolId/execute로 OpenCode 도구를 AnythingLLM에 노출 - 벡터 스토어 브리지 — 로컬 SQLite RAG와 AnythingLLM 벡터 DB 결과를 병합하는 복합 검색
- Docker Compose — 공유 네트워크 포함
docker-compose.anythingllm.yml
설정: experimental.anythingllm.enabled: true
# YOLO
curl -fsSL https://opencode.ai/install | bash
# 패키지 매니저
npm i -g opencode-ai@latest # bun/pnpm/yarn 도 가능
scoop install opencode # Windows
choco install opencode # Windows
brew install anomalyco/tap/opencode # macOS 및 Linux (권장, 항상 최신)
brew install opencode # macOS 및 Linux (공식 brew formula, 업데이트 빈도 낮음)
sudo pacman -S opencode # Arch Linux (Stable)
paru -S opencode-bin # Arch Linux (Latest from AUR)
mise use -g opencode # 어떤 OS든
nix run nixpkgs#opencode # 또는 github:anomalyco/opencode 로 최신 dev 브랜치[!TIP] 설치 전에 0.1.x 보다 오래된 버전을 제거하세요.
OpenCode 는 데스크톱 앱으로도 제공됩니다. releases page 에서 직접 다운로드하거나 opencode.ai/download 를 이용하세요.
| 플랫폼 | 다운로드 |
|---|---|
| macOS (Apple Silicon) | opencode-desktop-darwin-aarch64.dmg |
| macOS (Intel) | opencode-desktop-darwin-x64.dmg |
| Windows | opencode-desktop-windows-x64.exe |
| Linux | .deb, .rpm, 또는 AppImage |
# macOS (Homebrew)
brew install --cask opencode-desktop
# Windows (Scoop)
scoop bucket add extras; scoop install extras/opencode-desktop설치 스크립트는 설치 경로를 다음 우선순위로 결정합니다.
$OPENCODE_INSTALL_DIR- 사용자 지정 설치 디렉터리$XDG_BIN_DIR- XDG Base Directory Specification 준수 경로$HOME/bin- 표준 사용자 바이너리 디렉터리 (존재하거나 생성 가능할 경우)$HOME/.opencode/bin- 기본 폴백
# 예시
OPENCODE_INSTALL_DIR=/usr/local/bin curl -fsSL https://opencode.ai/install | bash
XDG_BIN_DIR=$HOME/.local/bin curl -fsSL https://opencode.ai/install | bashOpenCode 에는 내장 에이전트 2개가 있으며 Tab 키로 전환할 수 있습니다.
- build - 기본값, 개발 작업을 위한 전체 권한 에이전트
- plan - 분석 및 코드 탐색을 위한 읽기 전용 에이전트
- 기본적으로 파일 편집을 거부
- bash 명령 실행 전에 권한을 요청
- 낯선 코드베이스를 탐색하거나 변경을 계획할 때 적합
또한 복잡한 검색과 여러 단계 작업을 위한 general 서브 에이전트가 포함되어 있습니다.
내부적으로 사용되며, 메시지에서 @general 로 호출할 수 있습니다.
agents 에 대해 더 알아보세요.
OpenCode 설정에 대한 자세한 내용은 문서 를 참고하세요.
OpenCode 에 기여하고 싶다면, Pull Request 를 제출하기 전에 contributing docs 를 읽어주세요.
OpenCode 와 관련된 프로젝트를 진행하면서 이름에 "opencode"(예: "opencode-dashboard" 또는 "opencode-mobile") 를 포함한다면, README 에 해당 프로젝트가 OpenCode 팀이 만든 것이 아니며 어떤 방식으로도 우리와 제휴되어 있지 않다는 점을 명시해 주세요.
기능 면에서는 Claude Code 와 매우 유사합니다. 주요 차이점은 다음과 같습니다.
- 100% 오픈 소스
- 특정 제공자에 묶여 있지 않습니다. OpenCode Zen 을 통해 제공하는 모델을 권장하지만, OpenCode 는 Claude, OpenAI, Google 또는 로컬 모델과도 사용할 수 있습니다. 모델이 발전하면서 격차는 줄고 가격은 내려가므로 provider-agnostic 인 것이 중요합니다.
- 기본으로 제공되는 LSP 지원
- TUI 에 집중. OpenCode 는 neovim 사용자와 terminal.shop 제작자가 만들었으며, 터미널에서 가능한 것의 한계를 밀어붙입니다.
- 클라이언트/서버 아키텍처. 예를 들어 OpenCode 를 내 컴퓨터에서 실행하면서 모바일 앱으로 원격 조작할 수 있습니다. 즉, TUI 프런트엔드는 가능한 여러 클라이언트 중 하나일 뿐입니다.
