@clawboo/* scope in packages/; all of them are internal (private: true); the only published npm artifact is the clawboo CLI (apps/cli), which inlines every @clawboo/* package it needs into its bundle (dist/). The two consumers are apps/web (the dashboard + Express API) and apps/cli (clawboo). Packages divide cleanly into pure / browser-safe ones (no node:* imports, safe to bundle into the Vite SPA or run in a worker) and server-only ones (touch node:fs/node:http/better-sqlite3 and may only run in the Express server, the bundled CLI server, or the MCP stdio bins). Dependencies flow one way: apps depend on packages, packages depend on packages, and packages never import apps. That rule, and the split between apps/web’s Node server and its browser SPA, are enforced by lint, not convention, see Layer boundaries. @clawboo/tsconfig is the shared TypeScript-config root (a devDependency everywhere, no runtime edge).
There are 30 packages (25 top-level + 5 nested adapters under packages/adapters/*). Versions diverge per package; most sit at 0.1.0, events and gateway-client are at 0.1.1, and tsconfig is 0.0.0.
“Purity” here describes the package’s imports, not whether it ships to the browser. The five runtime adapters import nothing from
node:* (they take injected driver factories; the real subprocess/SDK drivers live server-side in apps/web/server/lib/runtimes/), so they are import-pure even though they’re consumed server-side.At a glance
Dependency graph
Runtimedependencies only (@clawboo/* edges). @clawboo/tsconfig is a devDependency root, omitted from the runtime graph. Leaf nodes (config, protocol, boo-avatar, board-core, agent-registry, capability-registry, compaction, executor, model-catalog, obs, process-lookup, scheduler, worktrees) have no @clawboo/* runtime edges.
Build order
Packages build before the apps that depend on them. Within each tier, packages have no@clawboo/* edge on a sibling in the same tier.
tsconfig+logger, the shared TS-config root and the base logger (loggerhas no@clawboo/*edge).config·gateway-client·protocol·agent-registry·board-core;gateway-clientdepends onlogger; the rest are pure/zero-dep.board-coreis the task state machine bothdbandteam-orchestrationbuild on.events·db·gateway-proxy;events→gateway-client/logger/protocol;gateway-proxy→config;db→compaction/governance/obs(which build in tier 4 below;dbis sequenced after them in practice).executor·adapters/*·worktrees·compaction·model-catalog·scheduler·governance·obs;executoris pure (./+./contract+./tiers); the five adapters depend only onexecutor(adapter-openclawalso onevents/gateway-client/logger/protocol);compaction/obs/governanceare the dependenciesdbpulls in;model-catalogis a zero-dep leaf bothapps/weblayers read.boo-avatar+ui;ui→boo-avatar.mcp, depends ondb; bundles its stdio bins.apps/web→apps/cli; the web app consumes all 29 runtime packages (28 as direct dependencies;boo-avatarreaches it transitively viaui); the CLI consumes onlyconfigandprocess-lookup, both inlined into its bundle (declared as devDependencies alongsidetsconfig).
The
db ↔ compaction/governance/obs and evals ↔ db/executor/governance/obs edges mean tiers 3–4 are interleaved in dependency terms; Turbo resolves the exact topological order from each package.json. The tiers above are the human-readable grouping, not a strict serial sequence.