Files
boocode/boocode_roadmap.md
indifferentketchup b6469055d8 docs: reconcile roadmap with merged state
v1.8.3 (tool-call compaction), themes-v1, v1.9 (settings pane +
per-project defaults + bulk archive), and v1.11 (agents Tier 2) were
all marked Planned/in-flight in the roadmap despite being merged on
main. Reconcile the Batch summary table and reorder the Order of
operations to start at v1.10. Drop the stale "Active work" section —
themes-v1 description belongs in the past tense now.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 20:50:16 +00:00

11 KiB
Raw Permalink Blame History

BooCode — Roadmap

Last updated: 2026-05-17

Overview

BooCode is a standalone code-chat tool at /opt/boocode/. Read-only by design in v1.x — pick a project, chat with a local LLM that has file-inspection tools, get streaming responses over WebSocket.

Live at https://code.indifferentketchup.com (Caddy → Authelia → Tailscale → 100.114.205.53:9500).

Architectural commitments:

  • No embeddings. File-view tools + sidecar analyzers replace RAG.
  • Read-only in v1.x. Write tools land in BooCoder (separate container, post-v1.x).
  • One Postgres (boocode_db), one frontend SPA, container-per-service for new capabilities.

Current state

  • main: v1.8.1 (b09d0ff was last known tip prior to v1.8.2).
  • Just merged / committed to main: v1.8.2 — tool-loop fixes (read-only loop cap raised, "tool loop depth exceeded" error surfaced with continue button, max_tool_calls AGENTS.md frontmatter, messages.metadata column).
  • In flight RIGHT NOW: v1.x-themes branch — Claude Code implementing 18-theme system. See "Active work" below.

Active work

v1.x-themes — Theme system (in flight)

Spec source: locked in this session. Anchors below derived from /mnt/user-data/uploads/boocode-theme-previews.html (16 themes extracted) + spec §3 family rules for the two missing (fuchsia-noir, midnight-sapphire).

18 themes, grouped:

Family IDs
Neutral dark obsidian (default), gunmetal
Brown / warm espresso, volcanic-brown
Orange / amber copper, gold
Red oxblood, crimson
Purple elderflower, plum
Pink / magenta steel-pink, fuchsia-noir
Green matrix, sage
Blue cobalt, midnight-sapphire
Light-only ivory, chalk

Dark anchors (bg, card, border, muted-fg, accent):

obsidian          #0c0c0e #15151a #1f1f23 #6b6b75 #8b5cf6
gunmetal          #0d1117 #161b22 #21262d #7d8590 #388bfd
espresso          #1c1410 #241a14 #2e2218 #8a7058 #c8a880
volcanic-brown    #140906 #1e0e0a #2e1610 #7a4030 #cc4a1a
copper            #100800 #1c1408 #2e1f0a #8a6040 #b87333
gold              #0e0800 #1a1200 #2a1f00 #a07c30 #d4af37
oxblood           #0a0303 #180606 #2a0808 #7a3028 #8b1a1a
crimson           #0e0404 #1a0808 #2e0a0a #8a3030 #dc143c
elderflower       #100818 #1c1024 #2c1830 #8a78a0 #b89cd8
plum              #0c0814 #180e20 #241830 #7a4878 #8e4585
steel-pink        #0e0408 #1a080e #2e0c1a #9a4070 #cc33aa
fuchsia-noir      #0a0610 #14081a #2a0c2e #8a3878 #ff1493
matrix            #000a00 #031403 #0a200a #208030 #00ff41
sage              #0a0e08 #141a10 #1e2e1a #7a8870 #9caf88
cobalt            #020817 #061434 #0c2244 #3060a0 #0047ab
midnight-sapphire #02050e #060c1f #0e1a36 #4a6088 #1e3a8a
ivory             #fdfcf8 #f5f2e8 #e8e4d8 #8a8478 #3a3328   (light-only)
chalk             #fafaf7 #f0f0ec #e5e5e0 #75756e #2a2a28   (light-only)

Light-variant derivation (for the 16 dark themes):

  • Lightest anchor → background
  • Accent darkens ~15% (HSL L 15pp)
  • Foreground = near-black tinted toward family hue
  • Surfaces / borders scale up symmetrically

Fallback: ivory or chalk + dark mode → obsidian dark.

Token map (shadcn nova set):

background        ← anchor 1
card / popover    ← anchor 2
border / muted    ← anchor 3
muted-foreground  ← anchor 4
primary / accent  ← anchor 5
foreground        ← derived: anchor-5 hue, ~92% L, ~25% S
--destructive     ← red family, unchanged across themes
--ring            ← per-theme accent
--radius          ← 0.5rem locked
fonts             ← Inter + JetBrains Mono locked

Wiring locked:

  • Schema: settings.theme_id TEXT NOT NULL DEFAULT 'obsidian', settings.theme_mode TEXT NOT NULL DEFAULT 'dark' CHECK IN ('dark','light','system')
  • API: GET /api/settings extended, PATCH whitelists 18 theme ids → 400 otherwise
  • CSS: apps/web/src/styles/themes/*.css (18 + _tokens.css), imported from globals.css (NOT index.css)
  • .theme-<id> + .theme-<id>.dark composed on <html>
  • apps/web/src/lib/theme.ts (new): THEMES const, applyTheme(id, mode), useTheme() hook. matchMedia subscribed only when mode === 'system'
  • apps/web/src/App.tsx: useTheme() at top
  • Settings page: card grid, mode toggle (radio: Dark/Light/System). No header dropdown.
  • shadcn primitives: card, radio-group installed via pnpm dlx shadcn@latest add. button, label already present.
  • FOUC mitigation: localStorage cache + inline <script> in index.html sets <html> class before React hydrates

Out of scope (v1):

  • Custom user palettes (no color picker)
  • Per-project / per-session themes
  • Shiki syntax-highlighting themes
  • Header quick-switcher

Verify after Claude Code hands back:

  • fuchsia-noir and midnight-sapphire visual check — derived, not from preview. Swap hexes if they read wrong.
  • Light variants of the 16 dark themes — algorithmic. Spot-check 3-4 across families (warm/cool/dark/saturated).
  • FOUC on hard reload, theme-switch persistence, system-mode matchMedia teardown.

Batch summary

Version Theme Status
v1.0 Initial scaffold, read-only tools, WS streaming Merged
v1.1-batch1 Markdown, Copy + Regen, tok/s + ctx, AI naming Merged
v1.1-batch2 Sidebar restructure Merged
v1.1-batch3 Pane system, FileBrowserPane + Shiki, cross-tab Merged
v1.1-batch3.5 Chip infra, @file, line-select Merged
v1.2 Chats inside sessions, right-rail, /compact, archive, force-send Merged
v1.2-project-ux Project archive, sidebar context, Gitea API, bootstrap Merged
v1.3 Tab-close + chat-archive Merged
v1.4 Fork message, delete message, header polish (was original Batch 5) Merged
v1.5 resolveProjectPath, BOOTSTRAP_ROOT, vitest pin Merged
v1.5.1 Bootstrap hotfix (git in container, SSH keypair, known_hosts) Merged (4a9f207)
v1.6 Mobile pass: drawer, single-pane, long-press, IME-safe, pull-to-refresh, swipe-close Merged
v1.6.1 RightRail mobile wrapper fix Merged
Tool-loop bump MAX_TOOL_LOOP_DEPTH 5→15 Merged
v1.6.2 Workspace + Session+Project headers, ChatTabBar new-chat, RightRail mobile drawer Merged
v1.7 Drag-drop file + paste-as-attachment (was Batch 6) Merged
v1.8 Settings drawer + git_status added to ALL_TOOL_NAMES (was Batch 7) Merged
v1.8.1 WS reconnect toast tuning (silent/gray/red thresholds), pane status indicators Merged
v1.8.2 Tool-loop fixes: read-only cap raised, "depth exceeded" error + continue, max_tool_calls frontmatter, messages.metadata Merged
v1.x-themes 18 themes, settings page, dark/light/system, FOUC mitigation 🔄 Claude Code in flight
v1.8.3 Tool call UI compaction: collapse-by-default, group consecutive same-tool, result preview cap Planned (small, frontend-only)
v1.9 Settings pane (system prompt per project + session, web search toggle, + button) Planned (spec locked, was on branch v1.9-settings-pane)
v1.10 Web search backend: SearXNG web_search + web_fetch Planned
v1.11 Agents Tier 2: AGENTS.md, per-agent temp/tools whitelist, AgentPicker in ChatInput Planned
v1.12 BooTerm: separate container, xterm.js + node-pty + tmux Planned
v1.13 Architect: codecontext sidecar (MCP, tree-sitter, no embeddings) Planned
v1.13b Architect: repo health (call graph, circular deps, dead code) Planned
v1.14 Tool approval + plan/act mode (cline-style) Planned
Post-v1.x Append-only event log (OpenHands V1) Planned
Post-v1.x BooCoder pending-changes (plandex) Planned
Post-v1.x BooCoder runtime isolation (per-session Docker sandbox) Planned
Optional Multi-provider LLM abstraction (pi-ai) Skip unless need surfaces
Far future Workflow graphs (microsoft/agent-framework concepts) v2.x topic

Flagged follow-ups (not in a batch yet)

  • Agents in /data/AGENTS.md don't list git_status in their tools: blocks. Out of scope until pre-BooCoder cleanup pass.
  • v1.9 dispatch had item (g): verify useUserEvents broadcasts project_updated on PATCH /projects/:id. Add if missing.
  • v1.8.2 follow-up: confirm messages.metadata migration ran clean in prod DB after deploy.

Order of operations

  1. v1.x-themes finishes (Claude Code in flight). Audit + smoke test. Merge.
  2. v1.8.3 — tool call UI compaction. Small frontend batch, addresses current pain.
  3. v1.9 — settings pane. Branch already named v1.9-settings-pane. Spec locked.
  4. v1.10 — web search backend.
  5. v1.11 — agents.
  6. v1.12 — BooTerm.

Track B (architect, no UI dep, can run parallel anytime): v1.13 → v1.13b → v1.14.

Architecture target state

Container Port Mount Purpose Status
boocode 100.114.205.53:9500 /opt:/opt:ro Chat + read-only tools + SPA Live
boocode_db 127.0.0.1:5500 boocode_pgdata volume Postgres 16-alpine Live
codecontext 100.114.205.53:8765 (internal) project root :ro MCP server for architect tools v1.13
booterm 100.114.205.53:9501 /opt/repos:/opt/repos:rw Terminals (tmux + node-pty) v1.12
boocoder 100.114.205.53:9502 per-session sandbox Write tools Post-v1.x

Schema additions ahead

  • v1.x-themes (current): settings.theme_id, settings.theme_mode
  • v1.9: projects.default_system_prompt, projects.default_web_search_enabled, sessions.web_search_enabled
  • v1.11: sessions.agent_id
  • v1.13b: repo_health_cache (project_id, file_hashes_sig, payload JSONB, created_at)
  • v1.14: sessions.tool_approval_mode, sessions.approved_tools
  • Post-v1.x: session_events; deprecate messages long-tail
  • Post-v1.x: pending_changes

Decisions log

  • Embeddings dropped from BooCode. File-view tools + sidecar analyzers replace RAG.
  • Old Batch 11 (aider PageRank port) → replaced by codecontext sidecar (v1.13).
  • Old Batch 12 (Harrier indexer) → removed entirely.
  • Batch 9 reordered ahead of 58, decoupled from Batch 7 (2026-05-16). Subsequently superseded — settings pane (v1.9) and themes (v1.x-themes) jumped ahead. Agents now slated as v1.11.
  • Theme work split into its own version (v1.x-themes) rather than blocked behind v1.9 (2026-05-17). Branched off main after v1.8.2 committed.

Workflow

Each batch:

  1. Verify previous merged.
  2. Dispatch via Paseo to Claude Code at /opt/boocode (or OpenCode for smaller batches).
  3. Recon → blocking questions → implement → hand back.
  4. Compliance review in separate Claude chat.
  5. Deploy: docker compose up --build -d.
  6. Smoke test.
  7. Sam commits and pushes.

Sam reviews all diffs. Sam commits. Never git pull/push/commit on his behalf.