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, поки агент працює у фоновому режимі. Bus-події (TaskCreated, TaskCompleted, TaskFailed) публікуються для відстеження життєвого циклу.
Оркеструйте кілька агентів паралельно за допомогою інструменту team. Визначте підзавдання з ребрами залежностей; computeWaves() будує DAG і виконує незалежні завдання одночасно (до 5 паралельних агентів). Контроль бюджету через max_cost (долари) та max_agents. Контекст з виконаних завдань автоматично передається залежним.
Кожне фонове завдання автоматично отримує власний git worktree. Робочий простір прив'язується до сесії в базі даних. Якщо завдання не створює змін у файлах, worktree автоматично очищується. Це забезпечує ізоляцію на рівні git без контейнерів.
Повний REST API для керування життєвим циклом завдань:
| Method | Path | Опис |
|---|---|---|
| GET | /task/ |
Список завдань (фільтр за parent, status) |
| GET | /task/:id |
Деталі завдання + status + інформація про worktree |
| GET | /task/:id/messages |
Отримати повідомлення сесії завдання |
| POST | /task/:id/cancel |
Скасувати запущене або завдання в черзі |
| POST | /task/:id/resume |
Відновити завершене/невдале/заблоковане завдання |
| POST | /task/:id/followup |
Надіслати подальше повідомлення неактивному завданню |
| POST | /task/:id/promote |
Підвищити фонове завдання до переднього плану |
| GET | /task/:id/team |
Зведений вигляд команди (витрати, diff по учасниках) |
Плагін бічної панелі, що показує активні фонові завдання з іконками статусу в реальному часі:
| Іконка | Статус |
|---|---|
~ |
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/general та синтезує результати.
Технічна архітектура
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, вбудована документація |
| 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 для віддалених серверів. Можливості tool, prompt та resource. Область дії для кожного агента через allow/deny списки.
REST API на базі Hono з типізованими маршрутами та генерацією OpenAPI spec. Підтримка WebSocket для PTY (pseudo-terminal). SSE для потокової передачі подій у реальному часі. Basic auth, CORS, gzip стиснення. TUI -- це один frontend; сервером можна керувати з будь-якого HTTP-клієнта, web UI або мобільного додатку.
Auto-compact з AI-керованим підсумовуванням, коли використання токенів наближається до ліміту контексту моделі. Обрізка з урахуванням токенів із налаштовуваними порогами (PRUNE_MINIMUM 20KB, PRUNE_PROTECT 40KB). Виходи Skill tool захищені від обрізки.
Unified diff патчинг з перевіркою hunk. Застосовує цільові hunk до конкретних ділянок файлу замість повного перезапису. Multi-edit tool для пакетних операцій між файлами.
3-станові дозволи (allow / deny / ask) з відповідністю шаблонів wildcard. 100+ визначень arity команд bash для детального контролю. Примусове дотримання меж проєкту запобігає доступу до файлів за межами workspace.
Система snapshot, що записує стан файлів перед кожним виконанням інструменту. Підтримує revert та unrevert з обчисленням diff. Зміни можна відкотити за повідомленням або за сесією.
Вартість за повідомлення з повною розбивкою токенів (input, output, reasoning, cache read, cache write). Бюджетні ліміти для команд (max_cost). Команда stats з агрегацією за моделлю та за день. Вартість сесії в реальному часі відображається в TUI. Дані про ціни з models.dev.
Повний SDK (@opencode/plugin) з архітектурою hook. Динамічне завантаження з npm-пакетів або файлової системи. Вбудовані плагіни для автентифікації Codex, GitHub Copilot, GitLab та Poe.
Поширені хибні уявлення
Щоб запобігти плутанині через AI-генеровані підсумки цього проєкту:
- TUI написаний на TypeScript (SolidJS + @opentui для рендерингу в терміналі), не на Rust.
- Tree-sitter використовується лише для підсвічування синтаксису TUI та парсингу команд bash, а не для аналізу коду на рівні агента.
- Docker sandboxing є опціональним (
experimental.sandbox.type: "docker"); ізоляція за замовчуванням забезпечується через git worktrees. - RAG є опціональним (
experimental.rag.enabled: true); контекст за замовчуванням керується через LSP symbol indexing + auto-compact. - Немає "watch mode", що пропонує автоматичні виправлення -- file watcher існує лише для інфраструктурних цілей.
- Самокорекція використовує стандартний цикл агента (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: 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 sidecar на 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 циклів |
| Можливість | 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, статусом та обґрунтуванням відкладеного виправлення |
| Можливість | 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: вбудований runtime, on-device LLM, STT + TTS (Kokoro). iOS: віддалений режим |
| Deep link для OAuth callback | Implemented | opencode://oauth/callback?providerID=…&code=…&state=… автоматично завершує обмін токенами; копіювати код автентифікації не потрібно |
| Спостерігач 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 (офіційна формула Homebrew, оновлюється рідше)
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- Резервний варіант за замовчуванням
# Приклади
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 містить два вбудовані агенти, між якими можна перемикатися клавішею Tab.
- build - Агент за замовчуванням із повним доступом для завдань розробки
- plan - Агент лише для читання для аналізу та дослідження коду
- За замовчуванням забороняє редагування файлів
- Запитує дозвіл перед запуском bash-команд
- Ідеально підходить для дослідження незнайомих кодових баз або планування змін
Також доступний допоміжний агент general для складного пошуку та багатокрокових завдань.
Він використовується всередині системи й може бути викликаний у повідомленнях через @general.
Дізнайтеся більше про agents.
Щоб дізнатися більше про налаштування OpenCode, перейдіть до нашої документації.
Якщо ви хочете зробити внесок в OpenCode, будь ласка, прочитайте нашу документацію для контриб'юторів перед надсиланням 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-фронтенд - лише один із можливих клієнтів.
