Files
openchamber/AGENTS.md
T

3.8 KiB

OpenChamber - AI Agent Reference (verified)

Core purpose

OpenChamber provides UI runtimes (web/desktop/VS Code) for interacting with an OpenCode server (local auto-start or remote URL). UI uses HTTP + SSE via @opencode-ai/sdk.

Tech stack (source of truth: package.json, resolved: bun.lock)

  • Runtime/tooling: Bun (package.json packageManager), Node >=20 (package.json engines)
  • UI: React, TypeScript, Vite, Tailwind v4
  • State: Zustand (packages/ui/src/stores/)
  • UI primitives: Radix UI (package.json deps), HeroUI (package.json deps), Remixicon (package.json deps)
  • Server: Express (packages/web/server/index.js)
  • Desktop: Tauri v2 (packages/desktop/src-tauri/)
  • VS Code: extension + webview (packages/vscode/)

Monorepo layout

Workspaces are packages/* (see package.json).

  • Shared UI: packages/ui
  • Web app + server + CLI: packages/web
  • Desktop app (Tauri): packages/desktop
  • VS Code extension: packages/vscode

Build / dev commands (verified)

All scripts are in package.json.

  • Validate: bun run type-check, bun run lint
  • Build all: bun run build
  • Desktop build: bun run desktop:build
  • VS Code build: bun run vscode:build
  • Release smoke build: bun run release:test (shell script: scripts/test-release-build.sh)

Runtime entry points

  • Web bootstrap: packages/web/src/main.tsx
  • Web server: packages/web/server/index.js
  • Web CLI: packages/web/bin/cli.js (package bin: packages/web/package.json)
  • Desktop bootstrap: packages/desktop/src/main.tsx
  • Tauri backend: packages/desktop/src-tauri/src/main.rs
  • VS Code extension host: packages/vscode/src/extension.ts
  • VS Code webview bootstrap: packages/vscode/webview/main.tsx

OpenCode integration

  • UI client wrapper: packages/ui/src/lib/opencode/client.ts (imports @opencode-ai/sdk/v2)
  • SSE hookup: packages/ui/src/hooks/useEventStream.ts
  • Web server embeds/starts OpenCode server: packages/web/server/index.js (createOpencodeServer)
  • Web runtime filesystem endpoints: search packages/web/server/index.js for /api/fs/

Key UI patterns (reference files)

  • Settings shell: packages/ui/src/components/views/SettingsView.tsx
  • Settings shared primitives: packages/ui/src/components/sections/shared/
  • Settings sections: packages/ui/src/components/sections/ (incl skills/)
  • Chat UI: packages/ui/src/components/chat/ and packages/ui/src/components/chat/message/
  • Theme + typography: packages/ui/src/lib/theme/, packages/ui/src/lib/typography.ts
  • Terminal UI: packages/ui/src/components/terminal/ (uses ghostty-web)

External / system integrations (active)

  • Git: packages/ui/src/lib/gitApi.ts, packages/web/server/index.js (simple-git)
  • Terminal PTY: packages/web/server/index.js (bun-pty/node-pty)
  • Skills catalog: packages/web/server/lib/skills-catalog/, UI: packages/ui/src/components/sections/skills/

Agent constraints

  • Do not modify ../opencode (separate repo).
  • Do not run git/GitHub commands unless explicitly asked.
  • Keep baseline green (run bun run type-check, bun run lint, bun run build before finalizing changes).

Development rules

  • Keep diffs tight; avoid drive-by refactors.
  • Backend changes: keep web/desktop/vscode runtimes consistent (if relevant).
  • Follow local precedent; search nearby code first.
  • TypeScript: avoid any/blind casts; keep ESLint/TS green.
  • React: prefer function components + hooks; class only when needed (e.g. error boundaries).
  • Control flow: avoid nested ternaries; prefer early returns + if/else/switch.
  • Styling: Tailwind v4; typography via packages/ui/src/lib/typography.ts; theme vars via packages/ui/src/lib/theme/.
  • No new deps unless asked.
  • Never add secrets (.env, keys) or log sensitive data.

Recent changes

  • Releases + high-level changes: CHANGELOG.md
  • Recent commits: git log --oneline (latest tags: v1.4.6, v1.4.5)