OpenCode: CLI agent a vlastní Web UI
Úvodní Kontext
Potřeboval jsem mít AI kódovacího agenta, kterého spustím v terminálu, v IDE, případně přes webové UI, a přitom si zachovám kontrolu nad tím, co běží lokálně a co se tahá z internetu. V tomhle mi dává smysl OpenCode jako privacy-first nástroj s client-server architekturou. https://opencode.ai
Co je OpenCode a jak je postavený
OpenCode beru jako open-source AI kódovacího agenta pro terminál, IDE nebo desktop, který mi pomáhá se psaním kódu, laděním a správou projektů. Podle projektu podporuje víc než 75 LLM providerů (Claude, GPT, Gemini i lokální modely) a je hodně rozšířený (uvádí 80 000+ stars a 1,5M měsíčních uživatelů). https://opencode.ai
Základní vlastnosti, které používám jako „rychlou mapu"
- CLI/TUI jako primární rozhraní: nejčastěji běžím
opencodev terminálu a UI je součást binárky (žádné externí CDN UI). https://github.com/opencode-ai/opencode - LSP integrace: mám code intelligence přes automatickou integraci LSP. https://opencode.ai
- Multi-session: používám paralelní agenty a sdílení odkazů na sessiony. https://opencode.ai
- Nástroje pro práci s repem:
glob,grep, bash execution, editování souborů a MCP pro integraci externích toolů. https://github.com/opencode-ai/opencode - Privacy-first + client-server: server běží lokálně a myšlenka je, že kód se nikam neukládá; TUI je jen jeden z klientů. https://yuv.ai/blog/opencode
Architektura (co si hlídám při debugování a integracích)
OpenCode je podle repa napsaný v Go a je modulárně rozdělený (např. cmd jako CLI s Cobra, internal/app core služby, internal/llm providery, internal/tui Bubble Tea UI, internal/db SQLite, internal/lsp atd.). https://github.com/opencode-ai/opencode
Server umím spouštět samostatně (opencode serve) a používám ho jako lokální backend s OpenAPI endpointem pro programatické ovládání; TUI beru jako klienta nad stejným backendem. https://opencode.ai/docs/server/
Z praktických „agent„ vlastností si všímám i auto-compact pro dlouhé konverzace, permission systému a git-powered snapshots pro změny. https://www.linkedin.com/posts/milind-gaharwar_ai-awesome-artificialintelligence-activity-7357393767449964546-UHqA
Poznámka, kterou beru jako riziko pro dlouhodobé používání: původní repo je archivované a projekt má pokračovat jako Crush. https://github.com/opencode-ai/opencode
Instalace a konfigurace
Instalaci jsem bral jako rychlý bootstrap (curl skript / brew / go install) a konfiguraci řeším přes ~/.opencode.json (API klíče, modely). https://github.com/opencode-ai/opencode
Použil jsem instalační skript:
curl -fsSL https://opencode.ai/install | bash
Napojení na providera jsem dělal interaktivně: spustím opencode, zadám /connect a vyberu provider. https://jecas.cz/opencode
Problém oficiálního Web UI: lokální backend, ale frontend z CDN
Když jsem chtěl webové rozhraní, narazil jsem na to, že oficiální opencode web je hybrid: lokální backend, ale vzdálený frontend.
Jak to funguje (podle dokumentace a issue)
- Backend lokálně:
opencode webneboopencode servespustí HTTP server nalocalhost(API, sessions, filesystem nástroje). https://opencode.ai/docs/cli/ - Backend je open-source: Go/Rust/CLI část je v repu. https://github.com/anomalyco/opencode
- Frontend vzdáleně: prohlížeč načítá HTML/JS/CSS bundle z CDN (např.
desktop.dev.opencode.ai), ne z lokálního disku. https://github.com/sst/opencode/issues/5237 - Zdrojáky oficiálního frontendu nejsou veřejně v
anomalyco/opencodejako buildnutelný frontend; prakticky to znamená, že si ho sám nezkompiluju a nemám verzi pod kontrolou. https://advisories.gitlab.com/pkg/npm/opencode-ai/CVE-2026-22813/
Dopady, které mi vadily v praxi
- Verze UI je řízená jejich deployem, ne verzí CLI na mém PC; downgrade CLI proto často nevyřeší bug ve Web UI.
- Když vydají rozbitý web build (příklad zmiňovaný jako
Maximum call stack size exceeded), problém vidí všichni i po downgradu a často nezbývá než čekat na fix nebo web UI nepoužívat. https://github.com/chris-tse/opencode-web OPENCODE_DISABLE_AUTOUPDATE=1mi zastaví auto-update CLI, ale neovlivní fetch frontendu z CDN.
Alternativní self-hosted Web UI (kdy a proč je použít)
Když jsem se kvůli rozbitému oficiálnímu web UI potřeboval od CDN odpojit, dávalo mi smysl postavit UI nad vlastním lokálním backendem (opencode serve) a UI hostovat lokálně.
OpenChamber (btriapitsyn/openchamber)
OpenChamber beru jako desktop + web/PWA klienta pro OpenCode. Podstatné pro mě je, že běží komplet lokálně, frontend je open-source (React/TS) a komunikuje s mým opencode serve backendem bez závislosti na oficiálním CDN. https://www.npmjs.com/package/@openchamber/web
Projekt a releasy: https://github.com/btriapitsyn/openchamber / https://github.com/btriapitsyn/openchamber/releases
chris-tse/opencode-web
Tohle je alternativní web UI postavené na React + Vite + Bun/Node. Použití chápu tak, že spustím opencode serve jako backend a v jejich repu udělám bun install + bun dev; UI mi poběží na http://localhost:5173 proti lokálnímu API. https://github.com/chris-tse/opencode-web
Poznámka/kontext, kde jsem na to narazil: https://jecas.cz/opencode
Praktické Příklady (konkrétní postup, který jsem dělal)
1) Spuštění backendu pro vlastní UI
Jako stabilní základ beru opencode serve (nebo opencode web, pokud mi jde jen o lokální server). https://opencode.ai/docs/server/
2) Instalace OpenChamber přes install.sh
OpenChamber jsem zkoušel instalovat takhle:
curl -fsSL https://raw.githubusercontent.com/btriapitsyn/openchamber/main/scripts/install.sh | bash
Instalátor mi hlásil, že potřebuje Node.js 20+.
3) Řešení Node.js 20+ přes nvm (a jak s ním pracuju)
Node.js jsem doinstaloval přes nvm takhle:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash nvm install 20
Abych si to udržel použitelné mezi shelly, beru nvm takhle (poznámka: tohle je moje provozní rutina; když se chová jinak, beru to jako závislé na shell initu):
- Verzi Node kontroluju přes
node -va aktivní nvm přesnvm --version. - Konkrétní Node v aktuálním shellu přepínám přes
nvm use 20(nvm je „per-shell“, takže v novém terminálu často musím mít nvm správně načtené a případně znovu použítnvm use ...). - Pokud chci výchozí verzi, kterou budu typicky používat, dávám
nvm alias default 20(a pak očekávám, že nový shell tuhle volbu převezme, pokud je nvm načtené).
4) Spuštění OpenChamber
OpenChamber mi stačilo spustit příkazem openchamber. Defaultně se mi otevřel na portu 3000 a připojil se k běžícímu opencode; opencode jsem musel mít předtím spuštěný.
Závěr / Výstupy
Pro rychlou a deterministickou práci mi nejlíp vychází TUI/IDE integrace (UI je součást binárky, žádné CDN). Když potřebuju web, beru opencode serve jako lokální backend a volím self-hosted UI (OpenChamber nebo chris-tse/opencode-web), protože u oficiálního opencode web nemám pod kontrolou verzi frontendu taháného z CDN. https://opencode.ai/docs/web/