Ship Paseo-equivalent provider snapshot, AgentComposerBar, ACP dispatch rewrite with streaming/persist, permission prompts, and agent commands. Follow-up: pane-scoped chat resolution, CoderMessageList tool timeline, WS user-delta replace, and inference orphan tool_call stripping. Archive openspec v2-2; update CHANGELOG and CURRENT. Co-authored-by: Cursor <cursoragent@cursor.com>
5.0 KiB
5.0 KiB
Agent navigation
Cursor/agent entry point for the BooCode monorepo. Deep engineering reference: CLAUDE.md (Claude Code). This file is navigation + task routing only.
Last updated: 2026-05-25
Doc map
| Need | Read |
|---|---|
| Commands, gotchas, inference, DB, env | CLAUDE.md |
| Read-only chat behavior | BOOCHAT.md |
| Write tools, dispatch, pending changes | BOOCODER.md |
| Shipped vs planned, version order | boocode_roadmap.md |
| Latest release truth | CHANGELOG.md (top entry = current) |
| System diagram + data flow | docs/ARCHITECTURE.md |
| Current focus / blockers | CURRENT.md |
| Batch convention | openspec/README.md |
| Shipped batch snapshots | openspec/changes/archived/ |
| Chat agent personas + tool lists | data/AGENTS.md |
| External repo lift inventory | boocode_code_review.md |
Monorepo layout (actual)
Three surfaces, four packages. There is no apps/chat/ directory.
| Surface | Packages | Port | Deploy |
|---|---|---|---|
| BooChat | apps/server (API + inference) + apps/web (SPA) |
100.114.205.53:9500 |
Docker boocode container |
| BooTerm | apps/booterm |
100.114.205.53:9501 |
Docker booterm container |
| BooCoder | apps/coder |
host :9502 |
systemd boocoder.service (not Docker since v2.1.0) |
Shared: Postgres 16 — Docker service boocode_db, database name boochat, host port 127.0.0.1:5500.
Task routing
| Task type | Start here |
|---|---|
| Chat inference / tools / compaction | apps/server/src/services/inference/ |
| WS frames | apps/server/src/types/ws-frames.ts + apps/web/src/api/ws-frames.ts (keep in sync) |
| Frontend chat UI | apps/web/src/components/, hooks in apps/web/src/hooks/ |
| BooCoder write tools / dispatch | apps/coder/src/ — build server first (pnpm -C apps/server build) |
| Provider picker / external agents | apps/coder/src/services/provider-registry.ts, dispatcher.ts, agent-probe.ts |
| Terminal panes | apps/booterm/src/, frontend TerminalPane.tsx |
| Schema changes | apps/server/src/schema.sql + sync *_STATUSES in apps/server/src/types/api.ts |
| New batch / feature | openspec/changes/<slug>/proposal.md + tasks.md (see below) |
Verification (before claiming done)
pnpm -C apps/server test && pnpm -C apps/server build
npx tsc -p apps/web/tsconfig.app.json --noEmit # root tsc can miss web errors
curl http://100.114.205.53:9500/api/health # Tailscale IP, not localhost:9500
curl http://100.114.205.53:9502/api/health # BooCoder on host
Deploy truth beats source-only reads — check running health + git log --oneline -3.
Hard rules (from CLAUDE.md)
- Do not commit or push unless Sam explicitly asks.
- No app-layer auth — Authelia at the reverse proxy.
- Parts table is source of truth — read message tool fields from
messages_with_partsview, write viainsertParts. - New WS frame type — update server + web schemas; publish via
publishFrame/publishUserFrameonly. - New tool — own file in
services/, register intools.tsALL_TOOLS; whitelists derive from there, never hardcoded. - Typecheck web with per-app tsconfig — root
tsc --noEmituses project references and can miss errors. includeUsage: trueoncreateOpenAICompatibleinprovider.ts— do not remove.- Agent dispatch — direct
spawn/execon host viainstall_path(v2.1.0+); SSH helpers deprecated. - Event dedup — server publishes via broker; frontend must not duplicate
sessionEvents.emitafter API calls that already WS-broadcast.
Using openspec with Cursor
Openspec is a folder convention, not a CLI. Use it to give agents a scoped brief before coding.
When starting a batch
- Create
openspec/changes/<slug>/(lowercase-hyphenated, e.g.v2-2-arena-ui). - Write
proposal.md— why, scope, non-goals, dependencies. - Write
tasks.md— numbered checkbox steps (build + smoke). - Optional
design.md— schema/API decisions that outlive the batch.
See openspec/README.md for the full shape. Shipped pre-v1.13.15 batches live in openspec/changes/archived/ as snapshots only.
Prompting an agent
@openspec/changes/<slug>/proposal.md @openspec/changes/<slug>/tasks.md
Implement tasks 1–3. Server tests must pass. Do not commit.
Attach the spec files with @ so they load into context. Point at specific code paths when known:
@openspec/changes/v2-x/proposal.md
Extend apps/coder/src/routes/providers.ts — follow provider-registry.ts patterns.
After shipping
- Tag:
vMAJOR.MINOR.PATCH-slug - Add entry to top of
CHANGELOG.md - Move or snapshot the openspec folder to
archived/if you want history preserved - Update
CURRENT.mdandboocode_roadmap.mdshipped table if the batch was roadmap-tracked
What not to use openspec for
- One-line bug fixes — just describe the bug + file.
- Exploratory questions — Ask mode +
@CLAUDE.mdis enough. - Duplicating
CLAUDE.md— openspec is per-batch scope, not permanent conventions.