Obsah

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"

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)

Dopady, které mi vadily v praxi

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):

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/