Открытый AI-агент для программирования.
English | 简体中文 | 繁體中文 | 한국어 | Deutsch | Español | Français | Italiano | Dansk | 日本語 | Polski | Русский | Bosanski | العربية | Norsk | Português (Brasil) | ไทย | Türkçe | Українська | বাংলা | Ελληνικά | Tiếng Việt
Если кратко — единственный open source агент для кодирования, в котором есть оркестратор на базе DAG, REST API задач, разграничение MCP по агентам, FSM сессии с 9 состояниями, встроенный сканер уязвимостей и полноценное Android-приложение с on-device LLM-инференсом. Ни один другой 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 (форк) — оркестрированный ИИ-агент для программирования, который работает на десктопе, сервере и телефоне, с локальными моделями от начала до конца, без облачных зависимостей и со встроенными примитивами управления уровня предприятия. Форк anomalyco/opencode, поддерживаемый Rwanbt.
# 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. Синхронизируется с upstream. Смотрите ветку dev для последних изменений.
OpenCode запускает AI-модели локально на потребительском оборудовании (8 ГБ VRAM / 16 ГБ RAM), без облачных зависимостей для моделей 4B–7B.
Оптимизация промптов (сокращение на 94%)
- ~1K токенов системный промпт для локальных моделей (против ~16K для облачных)
- Скелетные схемы инструментов (однострочные сигнатуры вместо многокилобайтных описаний)
- Белый список из 7 инструментов (bash, read, edit, write, glob, grep, question)
- Без секции skills, минимальная информация об окружении
Движок вывода (llama.cpp b8731)
- GPU-бэкенд Vulkan, автоматическая загрузка при первом запуске модели
- Адаптивная конфигурация во время выполнения (
packages/opencode/src/local-llm-server/auto-config.ts):n_gpu_layers, потоки, размер batch/ubatch, квантование KV-кэша и размер контекста выводятся из обнаруженной VRAM, свободной RAM, разбиения CPU big.LITTLE, бэкенда GPU (CUDA/ROCm/Vulkan/Metal/OpenCL) и теплового состояния. Заменяет старый жёстко зашитый--n-gpu-layers 99— Android с 4 ГБ теперь работает в CPU-откате вместо OOM-убийства, флагманские десктопы получают настроенный batch вместо стандартного 512. --flash-attn on— Flash Attention для эффективного использования памяти--cache-type-k/v— KV-кэш с поворотом Адамара; адаптивный уровень (f16 / q8_0 / q4_0) в зависимости от запаса VRAM--fit on— вторичная корректировка VRAM только в форке (opt-in черезOPENCODE_LLAMA_ENABLE_FIT=1)- Спекулятивное декодирование (
--model-draft) с защитой VRAM (автоотключение при < 1.5 ГБ свободной) - Один слот (
-np 1) для минимального потребления памяти - Стенд для бенчмарков (
bun run bench:llm): воспроизводимое измерение FTL / TPS / пикового RSS / общего времени на модель и запуск, вывод JSONL для архивации в CI
Распознавание речи (Parakeet TDT 0.6B v3 INT8)
- NVIDIA Parakeet через ONNX Runtime — ~300мс для 5с аудио (18x реального времени)
- 25 европейских языков (английский, французский, немецкий, испанский и т.д.)
- Без использования VRAM: только CPU (~700 МБ RAM)
- Автозагрузка модели (~460 МБ) при первом нажатии микрофона
- Анимация волны во время записи
Синтез речи (Kyutai Pocket TTS)
- Французский TTS от Kyutai (Париж), 100M параметров
- 8 встроенных голосов: Alba, Fantine, Cosette, Eponine, Azelma, Marius, Javert, Jean
- Клонирование голоса zero-shot: загрузите WAV или запишите с микрофона
- Только CPU, ~6x реального времени, HTTP-сервер на порту 14100
- Резервный вариант: Kokoro TTS ONNX (54 голоса, 9 языков, CMUDict G2P)
Управление моделями
- Поиск по HuggingFace с бейджами совместимости VRAM/RAM для каждой модели
- Загрузка, подключение, отключение, удаление GGUF-моделей из интерфейса
- Предварительный каталог: Gemma 3 4B, Qwen3 4B/1.7B/0.6B
- Динамическое количество выходных токенов в зависимости от размера модели
- Автоопределение draft-модели (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
- Переключатель веб-поиска (иконка глобуса в панели промпта)
Надёжность агента (локальные модели)
- Pre-flight проверки (на уровне кода, 0 токенов): проверка существования файла перед edit, верификация содержимого old_string, принудительное чтение перед edit, защита от write в существующий файл
- Автоматический выход из зацикливания: 2 одинаковых вызова инструмента → инъекция ошибки (на уровне кода, не промпта)
- Телеметрия инструментов: процент успехов/ошибок за сессию с разбивкой по инструментам, автоматическое логирование
Кроссплатформенность: Windows (Vulkan), Linux, macOS, Android
Делегируйте работу субагентам, работающим асинхронно. Установите mode: "background" в инструменте task, и он немедленно вернёт 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, но все инструменты редактирования запрещены. Делегирует реализацию build-/общим агентам и синтезирует результаты.
Техническая Архитектура
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-совместимый endpoint (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, inline-документация |
| 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 для удалённых серверов. Возможности инструментов, промптов и ресурсов. Область действия per-agent через списки allow/deny.
REST API на основе Hono с типизированными маршрутами и генерацией спецификации OpenAPI. Поддержка WebSocket для PTY (псевдо-терминал). SSE для потоковой передачи событий в реальном времени. Basic auth, CORS, gzip-сжатие. TUI — один из фронтендов; сервер может управляться из любого HTTP-клиента, веб-интерфейса или мобильного приложения.
Auto-compact с AI-управляемым резюмированием при приближении использования токенов к лимиту контекста модели. Обрезка с учётом токенов и настраиваемыми порогами (PRUNE_MINIMUM 20KB, PRUNE_PROTECT 40KB). Выходные данные инструмента Skill защищены от обрезки.
Unified diff-патчинг с верификацией hunks. Применяет целевые hunks к определённым участкам файла вместо полной перезаписи файла. Инструмент multi-edit для пакетных операций над файлами.
3-уровневые разрешения (allow / deny / ask) с сопоставлением шаблонов с подстановочными знаками. 100+ определений арности bash-команд для детального контроля. Принудительное соблюдение границ проекта предотвращает доступ к файлам за пределами workspace.
Система снимков, записывающая состояние файлов перед каждым выполнением инструмента. Поддерживает revert и unrevert с вычислением различий. Изменения могут быть отменены по сообщению или по сессии.
Стоимость за сообщение с полной разбивкой токенов (input, output, reasoning, cache read, cache write). Лимиты бюджета per-team (max_cost). Команда stats с агрегацией per-model и per-day. Стоимость сессии в реальном времени отображается в 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 + auto-compact. - Нет "режима наблюдения", предлагающего автоматические исправления -- file watcher существует только для инфраструктурных целей.
- Самокоррекция использует стандартный цикл агента (LLM видит ошибки в результатах инструментов и повторяет попытку), а не специализированный механизм авто-восстановления.
Матрица Возможностей
| Capability | 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 |
| Capability | Status | Notes |
|---|---|---|
| Local LLM (llama.cpp b8731) | Implemented | Vulkan GPU, auto-download runtime, --fit auto-VRAM |
| Адаптивная конфигурация во время выполнения | Implemented | auto-config.ts: n_gpu_layers / потоки / batch / квантование KV выводятся из обнаруженной VRAM, RAM, big.LITTLE, бэкенда GPU, теплового состояния |
| Стенд для бенчмарков | 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 | js-tiktoken для gpt-*/o1/o3/o4; эмпирически 3.5 символов/токен для Llama/Qwen/Gemma |
| 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 ГБ с нуля |
| STT (Parakeet TDT 0.6B) | Implemented | ONNX Runtime, ~300ms/5s, 25 языков, desktop + mobile (слушатель микрофона подключён с обеих сторон) |
| TTS (Pocket TTS) | Implemented | 8 голосов, zero-shot клонирование голоса, нативный французский (только desktop — нет Python-сайдкара на Android) |
| TTS (Kokoro) | Implemented | 54 голоса, 9 языков, ONNX на desktop + Android (6 команд Tauri подключены в speech.rs mobile, 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 прекращает после 3 перезапусков за 120 с, чтобы избежать burn-cycle циклов |
| Capability | 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 (desktop + mobile) | 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 |
| Ужесточение desktop-релиза | Implemented | Devtools больше не форсятся — восстановлен дефолт Tauri 2 (только в debug), чтобы опорная точка XSS не могла прицепиться к __TAURI__ в продакшене |
| Валидация входных данных команд Tauri | Implemented | Стражи download_model / load_llm_model / delete_model: charset имени файла, allowlist HTTPS для huggingface.co / hf.co |
| Цепочка логирования Rust | Implemented | log + android_logger на мобильных; никаких eprintln! в релизе → никаких утечек путей/URL в logcat |
| Трекер аудита безопасности | Implemented | SECURITY_AUDIT.md — все находки классифицированы как S1/S2/S3 с path:line, статусом и обоснованием отложенного исправления |
| Capability | 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 |
| Capability | Status | Notes |
|---|---|---|
| Mobile app (Tauri) | Implemented | Android: встроенный runtime, on-device LLM, STT + TTS (Kokoro). iOS: удалённый режим |
| Deep link для OAuth callback | Implemented | opencode://oauth/callback?providerID=…&code=…&state=… автоматически завершает обмен токенами; копирование auth-кода не требуется |
| Наблюдатель за upstream-веткой | Implemented | Периодический git fetch (прогрев 30 с, интервал 5 мин) публикует vcs.branch.behind, когда локальный HEAD расходится с отслеживаемым upstream; отображается через platform.notify() на desktop и mobile |
| Запуск PTY по размеру viewport | Implemented | Pty.create({cols, rows}) использует оценщик из window.innerWidth/innerHeight — шеллы стартуют сразу с финальными размерами вместо 80×24→36×11, исправляет баг невидимого первого prompt на Android для mksh/bash |
| 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) |
Безопасность и Управление
| Feature | Description |
|---|---|
| Sandbox | Опциональное выполнение в Docker (experimental.sandbox.type: "docker") или хост-режим с принудительными границами проекта |
| Permissions | 3-уровневая система (allow / deny / ask) с wildcard-паттернами. 100+ определений bash-команд для детального контроля |
| DLP | Предотвращение утечки данных (experimental.dlp) — маскировка секретов, API-ключей и учётных данных перед отправкой LLM-провайдерам |
| Policy Engine | Условные правила (experimental.policy) с действиями block или warn. Защита путей, ограничение размера edit, пользовательские regex-паттерны |
| Privacy | Приоритет локальности: все данные в SQLite на диске. Без телеметрии по умолчанию. Секреты никогда не логируются. Данные не передаются третьим сторонам кроме настроенного LLM-провайдера |
Интеллектуальный Интерфейс
| Feature | Description |
|---|---|
| MCP Compliant | Полная поддержка Model Context Protocol — клиентский и серверный режимы, область действия инструментов per-agent через списки allow/deny |
| Context Files | Каталог .opencode/ с конфигурацией opencode.jsonc. Агенты определяются как markdown с YAML frontmatter. Пользовательские инструкции через параметр instructions |
| Provider Router | 25+ провайдеров через Provider.parseModel("provider/model"). Автоматический fallback, отслеживание затрат, маршрутизация с учётом токенов |
| RAG System | Опциональный локальный векторный поиск (experimental.rag) с настраиваемыми моделями эмбеддингов (OpenAI/Google). Автоиндексация изменённых файлов |
| AnythingLLM Bridge | Опциональная интеграция (experimental.anythingllm) — инъекция контекста, MCP-адаптер, мост к векторному хранилищу, Agent Skills HTTP API |
Реализованные ветки функций (на dev)
Три крупных функции были реализованы в выделенных ветках и влиты в dev. Каждая управляется feature-флагами и обратно совместима.
Многопользовательская совместная работа в реальном времени. Реализовано:
- JWT-аутентификация — токены HMAC-SHA256 с ротацией обновления, обратная совместимость с basic auth
- Управление пользователями — Регистрация, роли (admin/member/viewer), применение RBAC
- WebSocket broadcast — Потоковая передача событий в реальном времени через GlobalBus → Broadcast
- Система присутствия — Статус online/idle/away с heartbeat каждые 30с
- Блокировка файлов — Оптимистичные блокировки на инструментах edit/write с обнаружением конфликтов
- Фронтенд — Форма входа, индикатор присутствия, бейдж наблюдателя, WebSocket-хуки
Настройка: experimental.collaborative.enabled: true
Нативное Android/iOS-приложение через Tauri 2.0 со встроенной средой выполнения — один APK, ноль внешних зависимостей. Реализовано:
Уровень 1 — Встроенная среда выполнения (Android, 100% нативная производительность):
- Статические бинарники в APK — Bun, Bash, Ripgrep, Toybox (aarch64-linux-musl), извлечение при первом запуске (~15с)
- Встроенный CLI — OpenCode CLI как JS-бандл, запускаемый встроенным Bun, сеть не требуется для ядра
- Прямой запуск процессов — Без Termux, без intents —
std::process::Commandиз Rust напрямую - Автозапуск сервера —
bun opencode-cli.js serveна localhost с UUID-аутентификацией, как десктопный sidecar
Уровень 2 — Локальный вывод LLM на устройстве:
- llama.cpp через JNI — Kotlin LlamaEngine загружает нативные .so библиотеки через JNI-мост
- IPC через файлы — Rust записывает команды в
llm_ipc/request, Kotlin-демон опрашивает и возвращает результаты - llama-server — OpenAI-совместимый HTTP API на порту 14097 для интеграции с провайдером
- Управление моделями — Загрузка GGUF-моделей с HuggingFace, подключение/отключение/удаление, 9 предустановленных моделей
- Регистрация провайдера — Локальная модель отображается как "Local AI" провайдер в выборе модели
- Flash Attention —
--flash-attn onдля эффективного использования памяти при выводе - Квантование KV-кэша —
--cache-type-k/v q4_0с поворотом Адамара (экономия памяти 72%) - Спекулятивное декодирование — Автоопределение draft-модели (0.5B–0.8B) с RAM Guard через
/proc/meminfo - Мониторинг RAM — Виджет памяти устройства (всего/использовано/свободно) через
/proc/meminfo - Пресеты конфигурации — Те же Fast/Quality/Eco/Long Context пресеты, что и на десктопе
- Умный выбор GPU — Vulkan для Adreno 730+ (SD 8 Gen 1+), OpenCL для старых SoC, CPU fallback
- Привязка к большим ядрам — Определяет топологию ARM big.LITTLE, привязывает вывод только к производительным ядрам
Уровень 3 — Расширенное окружение (опциональная загрузка, ~150MB):
- proot + Alpine rootfs — Полный Linux с
apt installдля дополнительных пакетов - Bind-mounted Уровень 1 — Bun/Git/rg по-прежнему работают на нативной скорости внутри proot
- По запросу — Загружается только при включении "Extended Environment" в настройках
Уровень 4 — Речь и медиа:
- STT (Parakeet TDT 0.6B) — Тот же ONNX Runtime движок, что и на десктопе, ~300мс/5с аудио, 25 языков
- Анимация волны — Визуальная обратная связь во время записи
- Нативный выбор файлов —
tauri-plugin-dialogдля выбора файлов/каталогов и вложений
Общее (Android + iOS):
- Абстракция платформы — Расширенный тип
Platformс"mobile"+ определение ОС"ios"/"android" - Удалённое подключение — Подключение к десктопному серверу OpenCode по сети (только iOS или Android fallback)
- Интерактивный терминал — Полный PTY через пользовательскую musl
librust_pty.so(обёртка forkpty), Ghostty WASM renderer с canvas fallback - Внешнее хранилище — Символьные ссылки из HOME сервера на каталоги
/sdcard/(Documents, Downloads, projects) - Мобильный UI — Адаптивная боковая панель, сенсорный ввод сообщений, мобильный diff view, 44px сенсорные цели, поддержка safe area
- Push-уведомления — Мост SSE→нативные уведомления для завершения фоновых задач
- Выбор режима — Выбор Local (Android) или Remote (iOS + Android) при первом запуске
- Мобильное меню действий — Быстрый доступ к терминалу, fork, поиску и настройкам из заголовка сессии
Мост между OpenCode и платформой документального RAG AnythingLLM. Реализовано:
- REST-клиент — Полная обёртка API для рабочих пространств, документов, поиска, чата AnythingLLM
- 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
- 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, обновляется реже)
sudo pacman -S opencode # Arch Linux (Stable)
paru -S opencode-bin # Arch Linux (Latest from AUR)
mise use -g opencode # любая ОС
nix run nixpkgs#opencode # или github:anomalyco/opencode для самой свежей ветки dev[!TIP] Перед установкой удалите версии старше 0.1.x.
OpenCode также доступен как десктопное приложение. Скачайте его со страницы релизов или с 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$HOME/bin- Стандартный каталог пользовательских бинарников (если существует или можно создать)$HOME/.opencode/bin- Fallback по умолчанию
# Примеры
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 | bashВ OpenCode есть два встроенных агента, между которыми можно переключаться клавишей Tab.
- build - По умолчанию, агент с полным доступом для разработки
- plan - Агент только для чтения для анализа и изучения кода
- По умолчанию запрещает редактирование файлов
- Запрашивает разрешение перед выполнением bash-команд
- Идеален для изучения незнакомых кодовых баз или планирования изменений
Также включен сабагент general для сложных поисков и многошаговых задач.
Он используется внутренне и может быть вызван в сообщениях через @general.
Подробнее об agents.
Больше информации о том, как настроить OpenCode: наши docs.
Если вы хотите внести вклад в OpenCode, прочитайте contributing docs перед тем, как отправлять pull request.
Если вы делаете проект, связанный с OpenCode, и используете "opencode" как часть имени (например, "opencode-dashboard" или "opencode-mobile"), добавьте примечание в README, чтобы уточнить, что проект не создан командой OpenCode и не аффилирован с нами.
По возможностям это очень похоже на Claude Code. Вот ключевые отличия:
- 100% open source
- Не привязано к одному провайдеру. Мы рекомендуем модели из OpenCode Zen; но OpenCode можно использовать с Claude, OpenAI, Google или даже локальными моделями. По мере развития моделей разрыв будет сокращаться, а цены падать, поэтому важна независимость от провайдера.
- Поддержка LSP из коробки
- Фокус на TUI. OpenCode построен пользователями neovim и создателями terminal.shop; мы будем раздвигать границы того, что возможно в терминале.
- Архитектура клиент/сервер. Например, это позволяет запускать OpenCode на вашем компьютере, а управлять им удаленно из мобильного приложения. Это значит, что TUI-фронтенд - лишь один из возможных клиентов.
