Run tickets, boards, OKRs and cloud coding agents in your Builderforce workspace
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
A human-in-the-loop, fully agentic cloud β train your own AI agents and use them inside your own agent, manage your whole workforce on a Kanban board, and review and approve every action without ever leaving VS Code.
Builderforce.ai is a human-in-the-loop, fully agentic cloud where ideas become software and software becomes agents. You stay in control of every step while AI agents do the work β train your own specialist agents and put them to work inside your own agent, manage the whole workforce from a Kanban board, and review, validate, and approve everything without leaving your editor. It combines a full in-browser IDE with an AI training pipeline, a Workforce Registry for specialist agents, and an orchestration portal for self-hosted BuilderForce Agents meshes.
Three capabilities at the core:
| Capability | What it does |
|---|---|
| π Train agents, use them inside your agent | Train a custom agent in-browser (WebGPU LoRA + AI evaluation), publish it to the Workforce Registry, then hire it and call it from inside your own agent β your specialists become tools your main agent delegates to. |
| β¦ Kanban board & project management | Organize work into projects, then plan, assign, and track every task on a live Kanban board (swimlanes per status or per agent, plus table, calendar, and Gantt views). Humans and AI agents share the same board. |
| π§© Never leave VS Code | The BuilderForce VS Code extension runs the whole platform in your editor β chat with agents, assign and run tasks, review and validate their work, and approve human-in-the-loop actions without leaving your code. |
One platform. Three roles:
| Role | What it does |
|---|---|
| Enterprise IDE | Full Node.js runtime in the browser (WebContainers + Monaco + xterm.js); real-time collaboration; AI pair programming |
| AI Training Studio | In-browser LoRA fine-tuning on instruction datasets; WebGPU-accelerated; models up to 2B parameters; no cloud GPU required |
| Orchestration Portal | BuilderForce Agent fleet management; task assignment; heartbeat monitoring; agent-to-agent mesh relay; approval gates |
npm install, Vite dev servers, and interactive shells without leaving the browsermamba-engine.ts) runs an O(n) selective scan alongside transformer inference; agent state persists to IndexedDB as a compact Float32 state vector and is embedded in exported AgentPackage JSONforceFallbackAdapter: true; platform reports gpuMode: 'cpu-fallback' transparentlyMambaStateSnapshot into a portable AgentPackage JSON artifacttraining_sessions table tracks dataset β training β evaluation β re-training loops for continuous agent quality improvementPOST /api/ide/agents/:id/chat routes inference through OpenRouter with the agent's persona injected into the system prompt; X-Inference-Mode: lora | hybrid | base | fallback-base header signals which path ranMambaStateSnapshot; each inference call prepends [Memory: step=N signal=X context="..."] to the system prompt, giving the agent persistent conversational memory without re-trainingPUT /api/ide/agents/:id/mamba-state accepts a MambaStateSnapshot from CoderClaw after each session; upgrades the agent package to v2.0 and recomputes inference_mode; GET /api/ide/agents/:id/mamba-state retrieves the stored snapshotGET /api/ide/agents/:id/package returns the correct format and increments request_countPOST /api/ai/chat with model: "coderclawllm/workforce-<agentId>" auto-routes to the agent inference endpoint; no client-side changes requiredagent_inference_logs table captures model ref, latency, token counts, status, and inference mode per request for observability and billingBuilderforce.ai is the cloud-side control plane for BuilderForce Agents self-hosted agents:
POST /api/claws with machine profile (IP, workspace dirs, ports, tunnel metadata)PATCH /api/claws/:id/heartbeat keeps capability maps and machine profiles currentGET /api/claws/:id/assignment-context delivers assigned project metadata and context hints; CoderClaw syncs to .coderClaw/context.yamlClawRelayDO Durable Object proxies WebSocket connections between Claws; POST /api/runtime/forward dispatches tasks to remote agents with HMAC-SHA256 payload verification (X-Claw-Signature)tasks and executions tables track work assigned to specific Claws; POST /api/tasks/next feeds the next task to a waiting agentbf_default_tenant_id auto-selects on login/admin surface for platform admins (superadmin flag); logs/global-errors.txt in R2; /observability LLM usage metricssrc/infrastructure/payment/StripeProvider.ts (Stripe Checkout + Billing, hosted payment page, webhook-activated). There is deliberately no provider switch and no manual fallback: a fallback that activated plans without charging meant an unconfigured deploy handed out paid plans for free.src/infrastructure/payment/PaymentProvider.ts keeps TenantService off the concrete Stripe client and lets tests inject a fake; it is not a provider-swap seam.POST /api/tenants/:id/subscription/checkout always returns a hosted checkoutUrl. The plan activates only when the signed webhook confirms payment β never from the request itself.POST /api/webhooks/payment receives Stripe events; HMAC-verified with a 5-minute replay window; activates/cancels subscriptions via normalised WebhookEventSTRIPE_* Worker secrets (see src/infrastructure/payment/index.ts). They are validated lazily: absent secrets return 503 from the billing routes and never break Worker boot.GET /api/contributorsPOST /api/contributors/activity receives PR opened/merged/reviewed, commit, issue events with automatic daily metric aggregationpr_opened to pr_merged events tracked on each activity recordGET/POST/PUT/DELETE /api/integrations; per-provider connectivity tests (POST /api/integrations/:id/test)GET/POST/PATCH/DELETE /api/dev-teams; member add/remove endpointsGET /api/reports/standup β daily summary: active contributors, commits, PRs merged, issues resolved; recent PRs and resolved issuesGET /api/reports/code-review β 14-day window; stale PRs (>7 days old), average cycle time, reviewer activityGET /api/reports/executive β KPIs over configurable date range: contributor counts, total commits, PRs merged, lines added, average activity score, top contributorsGET/POST/PATCH/DELETE /api/reports/schedules; cron-style delivery config (daily/weekly) with hour-of-day and recipient listGET/POST /api/reports/subscriptions; per-user opt-in/opt-out per report typeTenantRateLimiterDO Cloudflare Durable Object; sliding window (60 RPM FREE, 300 RPM PRO, 1000 RPM TEAMS); X-RateLimit-Limit/Remaining/Reset + Retry-After headersGET/POST/PATCH/DELETE /api/approval-rules; rule evaluation on POST /api/approvals by actionType, max cost, max files changed; bypasses human gate when conditions matchSLACK_APPROVAL_WEBHOOK_URL + RESEND_API_KEYGET /api/approvals/escalate?secret= expires timed-out pending approvals and fires Slack alert; suitable for Cloudflare Cron TriggersPOST /api/telemetry/spans ingest; GET /api/telemetry/spans query; GET /api/telemetry/traces list; costs stored as millicent integers; W3C X-Trace-Id header forwarded from CoderClawThe platform has grown from an IDE-plus-training studio into a full system of record for agentic work. These are the most recent additions β the enterprise delivery, quality, knowledge, and FinOps surfaces that sit on top of the agent workforce.
portfolio β initiative β epic β task, with Objectives and Key Results attaching as a goal layer at any level. Every level is dated and rendered on a single nested Gantt (PlanningSpineGantt).llm_usage_log) plus human effort (member cost rate Γ hours) rolls up to every ancestor. No parallel finance system, no backfill.cost_class resolved in priority order (explicit β inherited β agent-classified by investment category β GAAP-conservative default). A child class that contradicts its parent is flagged as an anomaly for PM reconciliation.GET /api/pmo/spine, GET /api/pmo/spine/export.csv, GET /api/pmo/rollup (portfolio/initiative/workspace), PATCH /api/pmo/cost-class, POST /api/pmo/cost-class/classify, initiative POST/DELETE /api/pmo/dependencies (cycle-checked) β on-demand critical path. Surface: /projects?tab=portfolio, gated by insights.portfolio / insights.pm.@seanhogg/builderforce-quality browser SDK), OTLP, Sentry, PostHog, LogRocket (webhooks HMAC-verified; Sentry connections can backfill).error_groups keyed by (tenant, project, fingerprint) β explicit fingerprint or derived from the top stack frame + normalized message; occurrence + exact distinct-user counts; resolved bugs reopen on recurrence.POST /api/quality/groups/:id/fix creates a board task (titled + prioritized from the error, briefed with the stack trace) and dispatches a cloud agent that ships a pull request. Crash β group β task β PR on one surface./api/quality/* (collectors, integrations, rules, groups, fix); public keyed/HMAC ingest /api/quality-ingest/{events,otlp/v1/logs,otlp/v1/traces,webhooks/:collectorId/:provider}. Dashboard: /quality. Metered as error_events.GET /api/knowledge/compliance β evidence for SOX, TISAX, ISO 27001.POST /api/knowledge/ai/draft streams a Markdown draft; POST /api/knowledge/documents/:id/analyze returns structured findings (inefficiency / gap / risk / clarity) + an improved flow. Metered through the LLM gateway.NEXT_PUBLIC_COLLAB_WS_URL with presence awareness; per-document editor/viewer collaborators on top of workspace roles; falls back to autosave when collaboration is unconfigured. Surface: /knowledge.fetchTicketsSince(cursor) + pushUpdate(externalId, changeSet), normalizing to one ticket shape stamped with its source.
GET /api/board-connections/providers (catalog), CRUD /api/board-connections, POST /api/board-connections/:id/sync, GET /api/board-connections/:id/links.Move off a competitor tracker without fear, or just sync data in β a staged importer on top of the connector framework. Nothing lands in real projects/tasks/members until you commit.
discover() enumerates external projects, item types, and users for Jira, monday, Rally, GitLab, Bitbucket, GitHub (the migration-eligible providers; new Rally/GitLab/Bitbucket adapters added).import_runs + import_staged_{projects,items,users} + import_type_mappings; combine several external projects into one BuilderForce project, map item types β task type/status, and invite/map users β all reviewed before import.board_connections sync, or both. The persistent board_type_mappings makes ongoing sync land tasks in the mapped type/status (not a hardcoded backlog). Imported items keep their assignee (mapped to a member) and story points./settings/integrations is the workspace home: cards by category (PM / SCM / ITSM / incident), per-provider config panel (Credentials Β· Connections Β· Activity/diagnostics), and a "Start migration" launcher. GitHub/GitLab/Bitbucket connect both issues (migration) and repositories (code).integrations.create_credential/test, migrations.start/set_mappings/stage/commit); the Brain (right-docked) opens the migration panel on the left via open_migration_panel./api/migrations (start/list/get/:id/mappings/:id/stage/:id/commit, MANAGER+, cached + version-bumped).POST /api/qa/events) rank route-and-element zones by recency-weighted frequency (GET /api/qa/heatmap); explorations plan from the hottest zones within a budget.POST /api/qa/generate turns a flow into an executable spec and resolves a persona credential; a deterministic heatmap-only plan is also available (no model cost).GET /api/qa/quality./api/consumption) reports month-to-date usage for ai_tokens, ingestion (bytes), and error_events against the plan allowance, using the same accountants the gateway and ingestion gate enforce β so the "% used" a member sees equals the cap that's enforced. Cached 60s, keyed per tenant + calendar month.ide_agents.role_keys) drives role-aware assignment: a producer stage resolves the role from the ticket's action_type and dispatches a role-capable agent/human, never a mis-assigned one. Stops the "a Product Manager was dispatched to write code" class of failure.ticket_participants derives the required roles from the board's swimlane requirements, resolves each slot by capability, and tracks per-participant state (pending / assigned / in_progress / completed / changes_requested / waived / unstaffed).ticket_role_signoffs ledger records Who / When / Verdict / Comments / Contribution per role; default-deny RBAC (only role-capable members may sign off as a role); every sign-off emits to the unified activity log. A Resource Assessment control adds a needed role beyond the template β an unresolved add surfaces as a blocking resource gap.GET /api/kanban/tasks/:id/accountability, /participants, POST /participants (assess) / /materialize, plus MCP kanban.participants / kanban.accountability / kanban.assess_resource. Surface: the ticket-drawer Accountability tab + a board X/Y participants chip./projects/rfp/[id] detail; /api/rfp routes.*/5 sweep evaluates them and a breach auto-starts the on-call investigation (monitor β signal β incident β paging), with reporting on the timeline.CeremonyRoomDO relay; agent attendees speak live via a caption / transcript bridge; recording + transcription produce AI minutes. Google / Microsoft calendar sync. Surface: /meetings.roleCatalog (custom roles become role:<key> types); a human β manager Coaching Session carries directive | task modes with expiry / done state, steering how a manager agent runs its reports.project_facts fact tier + its Evermind SSM first and short-circuit the LLM on a confident hit (an exact-repeat Q&A cache + opt-in Evermind-first inference), single-sourced in resolveMemoryAnswer. Learning fans out to every Evermind under a project (its own head + its IDE builds' heads) via one shared contributeTextToProjectEverminds. Endpoints: GET/POST /api/projects/:id/answer, GET /api/projects/:id/evermind/targets.Builderforce.ai supports three sign-in methods that coexist on the same account. A single user can link multiple OAuth providers, set a password, and use magic links interchangeably.
| Method | How it works |
|---|---|
| Email + password | POST /api/auth/web/login β PBKDF2 (100k iterations, SHA-256); same generic error for wrong email or wrong password |
| OAuth social login | GET /api/auth/oauth/:provider β provider consent β GET /api/auth/oauth/:provider/callback β JWT issued; browser redirected to /auth/callback?token=β¦ |
| Magic link | POST /api/auth/magic-link sends a 15-minute single-use token by email; GET /api/auth/magic-link/verify?token=β¦ issues JWT; always returns 200 (no email enumeration) |
Supported OAuth providers: google, github, linkedin, microsoft.
localStorage key: bf_web_token) β 24-hour HMAC-SHA-256 JWT; payload: { sub, email, username, amr?, sa?, jti, sid }localStorage key: bf_tenant_token) β 1-hour workspace-scoped JWT; issued by POST /api/auth/tenant-tokenauth_tokens table (JTI + session ID); webAuthMiddleware validates against this table on every request, enabling instant revocation| Endpoint | Auth | Description |
|---|---|---|
GET /api/auth/linked-accounts | Web JWT | List linked OAuth providers + whether account has a password |
DELETE /api/auth/unlink/:provider | Web JWT | Unlink a provider; blocked if it would remove the last sign-in method |
POST /api/auth/add-password | Web JWT | Add a password to an OAuth-only account |
state parameter is HMAC-SHA-256 signed (using JWT_SECRET) with a nonce and 10-minute expiry; no database requiredPOST /api/auth/add-password firstEach provider is activated by supplying its client credentials as Cloudflare Worker secrets. Providers with missing credentials silently return 503 β you only need to configure the providers you want.
Register the OAuth callback URL in each provider's dashboard:
Replace {provider} with the lowercase provider name: google, github, linkedin, microsoft.
| Provider | Setup time | Manual review? | Key gotcha |
|---|---|---|---|
| ~10 min | No (for email profile openid) | Must publish the consent screen before non-test users can sign in | |
| ~10 min | No (auto-approved) | Must add the "Sign In with LinkedIn using OpenID Connect" product β without it the /v2/userinfo endpoint won't return the email address | |
| GitHub | ~5 min | No | Only one callback URL per app β create a second OAuth App for local dev |
| Microsoft | ~10 min | No | Use "Accounts in any organizational directory and personal Microsoft accounts" for broadest coverage |
email, profile, openid (non-sensitive, no review required)Publishing: While in "Testing" mode only test users can sign in. Click Publish App on the consent screen when ready for production β
email/profile/openidare standard scopes and are typically approved immediately with no manual review.
openid profile email scopes used by the code. Without it the /v2/userinfo endpoint will not return the email address.https://builderforce.aiLocal dev: GitHub allows only one callback URL per app. Create a separate OAuth App (e.g. "builderforce-dev") pointing to
http://localhost:8787/api/auth/oauth/github/callbackand use its credentials inapi/.dev.vars.
For local development, use api/.dev.vars β Wrangler loads this file automatically for wrangler dev, and it is gitignored:
The OAuth callback URL is derived from the incoming request's Origin header at runtime, so no extra API_URL variable is needed β it resolves to http://localhost:8787 locally and https://api.builderforce.ai in production automatically.
The sendMagicLinkEmail function in api/src/presentation/routes/oauthRoutes.ts is a placeholder that logs the link to the console. Wire it to your email provider (Resend, SendGrid, Mailgun, etc.) before using magic links in production:
| Route | File | Purpose |
|---|---|---|
/auth/callback | frontend/src/app/auth/callback/page.tsx | Receives ?token=JWT from OAuth redirect, persists session, navigates |
/auth/magic-link | frontend/src/app/auth/magic-link/page.tsx | Calls /api/auth/magic-link/verify, persists session, navigates |
Configure CoderClaw to connect:
CoderClaw operates fully standalone without Builderforce. The connection unlocks fleet visibility, task assignment with live execution tracking, enforced approval gates, portal-managed skill assignments, scheduled cron execution, and access to the Workforce Registry.
Builderforce.ai is built on the open-source @seanhogg/builderforce-memory stack for on-device AI:
The on-device AI layer runs in O(n) time (vs O(nΒ²) for attention), making it suitable for continuous low-latency state updates and fine-tuning entirely in the browser.
Both packages are published on npm:
@seanhogg/builderforce-memory-engine(engine) and@seanhogg/builderforce-memory(runtime).
The biggest cost lever in the stack is an embedding-keyed semantic cache that reuses a prior answer when a new prompt is a paraphrase of one already answered β so the frontier model is never called for semantically-repeated work. It is two-tier and shared across surfaces:
POST /v1/semantic-cache/{lookup,store} (tenant-scoped, KV-backed). A paraphrase answered in the web app is reusable by an agent, and vice-versa.The same portable SemanticCache from @builderforce/memory powers both surfaces β the embedder (on-device SSM) and the L2 backend are injected, so there is no browser/Node fork. On-device embeddings make L1 free; the gateway L2 turns one tenant's cache hits into platform-wide savings.
Builderforce.ai implements the full seven-layer agent stack β and the two layers most stacks leave conventional-thin (RAG retrieval and evaluation) are built out:
@seanhogg/builderforce-memory/retrieval (chunkText, bm25Search, reciprocalRankFusion, maximalMarginalRelevance, hybridRetrieve, MemoryStore.recallHybrid) and powers the LanceDB long-term-memory extension.POST /api/eval (billed through the metered gateway). Scores persist on the run record; a drift monitor (mean-shift z-score + Population Stability Index) compares baseline vs recent windows per (action-type Γ model) and raises an alert when quality regresses β daily on cron and on demand at GET /api/eval/drift. A wrong answer no longer hides behind a green dashboard.See the write-up: The AI Agent Tech Stack, Built.
Two Cloudflare Workers, one platform:
api (api.builderforce.ai) | worker (worker.builderforce.ai) | |
|---|---|---|
| Purpose | Auth, tenants, claws, tasks, brain, marketplace, dev analytics | IDE projects, files, datasets, training, collaboration |
| Auth | JWT + tenant isolation | CORS (no auth currently) |
| Durable Objects | ClawRelayDO (claw mesh relay) | CollaborationRoom (Yjs sync) |
| Storage | R2 UPLOADS (brain files, claw assets) | R2 STORAGE (project files, artifacts, datasets) |
Open http://localhost:3000. WebGPU training requires Chrome 113+.
Required secrets: CF_API_TOKEN, CF_ACCOUNT_ID, NEON_DATABASE_URL, JWT_SECRET, OPENROUTER_API_KEY. (SDK publishing uses npm Trusted Publishing OIDC β no NPM_TOKEN secret needed; see below.)
Releases: release.yml runs four independent jobs in parallel: npm packaging, API deployment, frontend deployment, and help-site deployment. The package-npm job builds, tests, and publishes each public package only when its package.json version is absent from npm, making re-runs idempotent. Auth uses npm Trusted Publishing OIDC (with NPM_TOKEN as an optional bootstrap fallback). Configure each package's trusted publisher for Organization SeanHogg, Repository Builderforce.ai, and Workflow release.yml.
Optional OAuth secrets (add only the providers you want):
GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET, LINKEDIN_CLIENT_ID, LINKEDIN_CLIENT_SECRET, MICROSOFT_CLIENT_ID, MICROSOFT_CLIENT_SECRET
| Feature | Required |
|---|---|
| WebContainers (in-browser Node.js) | Chrome 90+, Edge 90+ (COOP + COEP headers) |
| WebGPU LoRA training | Chrome 113+ |
| Collaborative editing | Any modern browser |
| CPU fallback training | Any browser (via forceFallbackAdapter) |
Chrome is the recommended browser. Firefox and Safari do not support WebContainers.
The UI follows the CoderClaw deep space aesthetic β consistent across Builderforce.ai and CoderClaw:
| Token | Dark | Light |
|---|---|---|
--bg-deep | #050810 | #fcfeff |
--bg-surface | #0a0f1a | #ffffff |
--coral-bright | #4d9eff | #3b82f6 |
--cyan-bright | #00e5cc | #008f87 |
--font-display | Clash Display | Clash Display |
--font-body | Satoshi | Satoshi |
Theme persists to localStorage('bf-theme') with an anti-FOUC inline script applied before first paint.
Planned milestones (including PHASE 4 β Multi-Agent Orchestration at Scale) and the full Consolidated Gap Register β 341 items (53 resolved Β· 288 open, grouped by revenue impact) plus archived thematic context β now live in ROADMAP.md, the single source of truth for planned work and deferred issues. New deferred issues are appended there.
Builderforce runs agents on two execution planes β On-Prem (Hosted) and Cloud. There is ONE agent engine (the current version), so the Cloud plane is a single Cloud Agent that runs on one of two surfaces: a Durable Object or a Node/Container. The routing decision is a single source of truth in cloudDispatch.ts (resolveCloudSurface / cloudAgentTypeLabel) and runtimeRoutes.ts (resolveCloudAgent); the surface column lives on ide_agents (runtime_surface migration 0105). The engine is never read from the DB β it is always the current version.
Cloud vs. On-Prem is a hard boundary. A cloud agent executes only in the cloud (everything is Cloudflare β Worker, Durable Object, or Container). A cloud agent is never dispatched to a client machine. An On-Prem (Hosted) agent β an agentHost, of which many can run on one machine β runs a task only when a host is explicitly pinned to it. See the agent taxonomy ([[agent-types-taxonomy]]).
| Cloud Agent surface | Where it runs | Persistent shell? | Best for |
|---|---|---|---|
| Cloud Agent (Durable Object) | durable β CloudRunnerDO, one LLM step per alarm() tick. Default surface. | No (CI verifies builds) | Most cloud tasks: on-demand, no always-on compute, survives long runs |
| Cloud Agent (Node/Container) | container β long-lived Cloudflare Container (AgentContainerDO) | Yes (run_command) | Very long / continuous tasks needing a real shell to install deps + run builds/tests/lint |
| (On-Prem Hosted β for contrast) | Client machine (agentHost), only when pinned | Yes (the host's own machine) | BYO-machine execution; not a cloud agent |
durableThe default. Runs the Claude Agent SDK tool loop fully in the cloud across Durable Object alarm() ticks β one LLM step per tick, conversation state persisted in DO storage between ticks (CloudRunnerDO). Inference routes through the LLM Gateway using the tenant's BYO Anthropic key.
Features
alarm() tick; each tick is a fresh Worker invocation with a fresh CPU/subrequest budget, so a multi-step run never hits the ~30s waitUntil wall that kills the interim Worker executor.state.storage is the idempotency/resume anchor β the loop resumes exactly where it left off.executions.updated_at every tick, so the orphan reaper treats an actively-ticking run as alive and only reaps a genuinely silent one.Pros
Cons
When the
CloudRunnerDObinding is absent there is no fallback executor β dispatch resolves tounavailableand the run fails fast with that reason. An in-request Worker executor used to be documented here as an interim fallback, but it could not survive the ~30swaitUntilwall on a multi-step run, so it was never selectable and has been removed: a clear "no executor bound" error beats a run that silently dies mid-task and gets orphan-reaped.
containerThe Claude Agent SDK loop running in a persistent Node process inside a real Cloudflare Container (AgentContainerDO). The container boots a small HTTP server; the DO is the Cloudflare-Containers control plane that starts/stops it and proxies the run. The container drives the loop and calls back into the Worker for every LLM step, repo telemetry, and the final PR β so the Worker stays the single source of truth for the Gateway, usage metering, and PR finalize.
Features
run_command): clone the repo, install deps, run actual builds / tests / lint, and verify before finishing.enableInternet for Gateway + GitHub reach from inside the container; stays warm 20m after the last request, then sleeps to stop billing.Pros
Cons
container run falls back to the durable DO so it still executes in the cloud β so today you do not actually get a persistent shell from this selection.resolveCloudAgent reads the agent's runtime_surface from ide_agents (the engine is always the current version, never read); resolveCloudSurface(agentSurface, hasExplicitHost) then picks the surface β an explicitly-pinned host β container, otherwise the agent's chosen surface, defaulting to durable. cloudAgentTypeLabel(surface) produces the human label used for run attribution (Cloud Agent (Durable Object) / Cloud Agent (Node/Container)).
Builderforce exposes three distinct LLM systems β they are easy to conflate, and each has its own code path. Scope work against the right one:
| # | Surface | What it is | Status | Entry point |
|---|---|---|---|---|
| A | LLM Gateway | Multi-vendor hosted chat proxy (failover, cooldowns, per-tenant budgets). Powers IDE Brain chat and studio prompt-expansion. | β Shipped | api/src/application/llm/, PRD |
| B | Custom LLM Support | Serve a user's fine-tuned LoRA agent to the CoderClaw CLI (POST /api/agents/:id/chat). | π‘ Specced β P0 gaps open (see below) | "## Custom LLM Support" section below |
| C | In-IDE llm modality | Build + train a custom model in the browser (dataset β WebGPU LoRA/Mamba β publish), then chat with it. | π’ Cloud path live; Local/Hybrid pending | frontend/src/lib/modality.ts, LlmStudioPanel.tsx |
Cloud inference for the in-IDE modality (C) routes through the Gateway (A). On-device Local and Hybrid inference for (C) are gated until the Mamba WGSL kernel and R2 weights land β see the Consolidated Gap Register.
IDE spec reference:
ide-architecture (1).mdin the repository root β the Builderforce.ai IDE architecture document (v2.0, March 2026).
This section details every change the Builderforce.ai platform (IDE frontend + Cloudflare Worker backend) must make to fully support custom LLMs built through the IDE β so that fine-tuned agents can be stored, served, versioned, and consumed by coderClaw CLI clients in production.
| Component | Status | Notes |
|---|---|---|
| In-browser LoRA training (WebGPU) | β | frontend/src/lib/webgpu-trainer.ts |
| Adapter storage in R2 | β | artifacts/{projectId}/{jobId}/adapter.bin |
| Workforce Registry (publish / browse) | β | POST /api/agents, GET /api/agents |
| Agent package download | β | GET /api/agents/:id/package β v1.0 JSON |
| AI chat inference | β | POST /api/ai/chat β Cloudflare AI / OpenRouter |
| Mamba State Engine (in-browser) | β | frontend/src/lib/mamba-engine.ts |
| Agent Runtime SDK (in-browser) | β | frontend/src/lib/agent-runtime.ts |
| Gap | Impact | Priority |
|---|---|---|
| No inference endpoint for custom agents | CoderClaw CLI cannot run a trained agent | P0 |
| No LoRA adapter loading on inference server | Training produces .bin but nothing serves it | P0 |
No mamba_state in DB / package | v2.0 agents cannot round-trip their memory | P0 |
| No CLI auth token | CLI has no way to call Builderforce inference API | P0 |
POST /api/ai/chat ignores model field | Cannot route to workforce-<id> | P1 |
| No agent streaming inference | CLI needs SSE chunked responses | P1 |
| No rate limiting per API key | Inference endpoint open to abuse | P1 |
| No agent package v2.0 | Mamba state not shipped with download | P1 |
| No usage tracking per agent | Cannot bill or monitor custom model usage | P2 |
| No model artifact versioning | Cannot distinguish adapter generations | P2 |
agents table β new columnscli_api_keys tableagent_inference_logs tablePOST /api/agents/:id/chat β Agent InferenceAccepts an OpenAI-compatible chat completion request, resolves the agent's LoRA adapter, runs inference, and streams tokens back.
GET/PUT /api/agents/:id/mamba-state β Mamba State SyncGET β returns the stored Mamba state snapshot (if any)PUT β accepts an updated state from a CLI session; keeps server-side state in sync with .coderClaw/memory/mamba-state.jsonPOST /api/auth/cli-key β Issue CLI API KeyIssues a new CLI key scoped to inference. Requires a valid web token. The rawKey is returned once and stored only as a SHA-256 hash. The user saves it as CODERCLAW_LINK_API_KEY.
DELETE /api/auth/cli-key/:keyId β Revoke CLI KeyPOST /api/ai/chat β Workforce RoutingDetects the workforce-<agentId> model prefix and delegates to the agent inference service:
CoderClaw CLI can use model: "coderclawllm/workforce-<agentId>" with no endpoint change required.
POST /api/agents β Accept Mamba State on PublishAccepts mamba_state and package_version fields. Sets inference_mode:
"base" if no r2_artifact_key"lora" if r2_artifact_key present but no mamba_state"hybrid" if both are presentThe Hono Worker selects the inference backend using this priority:
When the LoRA inference service is unavailable, the system degrades gracefully. The CLI surfaces the X-Inference-Mode header (lora | hybrid | base | fallback-base | unavailable) in the session banner.
Inference service call path:
Recommended tech stack: Rust/Axum or Python/FastAPI; candle or transformers+PEFT; SSE streaming; LRU cache for adapter bytes and loaded models.
Training Panel (AITrainingPanel.tsx):
LoRA (r=8) π§ +Mamba β HybridPublish Panel (AgentPublishPanel.tsx):
v2.0 π§ / v1.0 package version badgecoderclaw agent install <agentId>Agent State Viewer (AgentStateViewer.tsx β new component):
PUT /api/agents/:id/mamba-state| Method | Path | Auth | Description |
|---|---|---|---|
POST | /api/agents/:id/chat | CLI key | Run inference on a custom agent (streaming SSE or JSON) |
GET | /api/agents/:id/mamba-state | CLI key | Fetch the stored Mamba SSM state snapshot |
PUT | /api/agents/:id/mamba-state | CLI key | Push an updated Mamba state from CLI session |
POST | /api/auth/cli-key | Web token | Issue a new CLI API key |
DELETE | /api/auth/cli-key/:keyId | Web token | Revoke a CLI API key |
GET | /api/auth/cli-keys | Web token | List all CLI API keys for the current user |
| Method | Path | Change |
|---|---|---|
POST | /api/agents | Accept mamba_state, package_version in body; set inference_mode |
GET | /api/agents/:id/package | Return v2.0 format when mamba_state is present |
POST | /api/ai/chat | Detect workforce-<id> model prefix β delegate to agent inference |
The Avatar Filter is a user-facing feature that provides visibility into project status across multiple dimensionsβprimarily through a red-amber-green (RAG) status indicator per project. This feature enables stakeholders to quickly assess project health and prioritize work appropriately.
| Feature | Description |
|---|---|
| Project Status Indicators | Projects display a color-coded status: β’ π’ Green β Healthy, on track, or resolved β’ π‘ Amber β At risk, delayed, or needs attention β’ π΄ Red β Blocked, critical, or requires immediate action |
| Audit Trail | Every status change is logged to the audit_log, providing transparency into who made changes and when |
| List & Detail Views | Projects can be filtered and sorted by status across list, table, and detail views; the project detail page exposes the reason and timestamp for each status change, with per-project audit entries viewable from the detail panel |
| Portfolio Widget | A portfolio-level widget surfaces aggregate RAG status summaries for all projects under a portfolio, enabling high-level program health review across the entire portfolio |
| Notifications | Configurable notifications can target projects by RAG status segment β e.g., notify when a project turns Amber or Red, or alert on all projects at risk β with user opt-in and retention policies |
audit_log with project_id, old_status, new_status, changed_by, reason, and a timestamp for full traceability.Please see CONTRIBUTING.md for the full contribution guidelines, including the branch naming convention, PR template, code quality gates, and the pull request lifecycle.
This project is licensed under the MIT License β see the LICENSE file for details.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/builderforce)<a href="https://allmcps.com/mcp/builderforce"><img src="https://allmcps.com/api/badge/builderforce?style=directory" alt="Builderforce on AllMCPs" /></a>