Codaro Builder
Your AI writes the code. You stay in control.
Codaro Builder is an agentic coding assistant that works inside your editor: it reads your
project, edits files and runs commands for you — but every step is yours to approve. Start in
Plan mode to see what it intends to do before it touches anything, drop to per-step
approval when you want a closer look, or hand it the wheel. In a git workspace every turn is
snapshotted first, so one command rolls your tracked files back to where they were.
It points at any OpenAI-compatible endpoint — your team's gateway, a hosted provider, or a
model running on your own hardware. Nothing is locked to one vendor, and your code does not
have to leave your infrastructure.
Built on stable vscode.* APIs only, so it runs on VS Code, Cursor, Antigravity, and other
VS Code–compatible IDEs.
It is a clean rebuild of the Codaro Studio Builder agent (Studio is the spec, not the source — see
docs/BUILD_SPEC.md) and the coding half of the Codaro symbiosis: it writes code, and its
partner extension codaro-vs reviews it live (see docs/SYMBIOSIS.md).
Features
- Chat webview (vanilla HTML/CSS/JS, re-skinned to match codaro-vs) in the Secondary Side Bar,
with Markdown rendering, streamed replies, collapsible tool steps, copy buttons, a live
token/elapsed strip, and smart auto-scroll (a "↓ Latest" pill when you scroll up).
- Client-side ReAct loop — streaming, native function-calling, budget hints at 60%/85%,
retry-on-empty, and round-aware history trimming that keeps the request valid for the gateway on
long sessions.
- 13 tools:
read_file, list_directory, search_codebase, edit_file (four-phase fuzzy
match, approval-gated, post-edit diagnostics), write_file, run_terminal, get_diagnostics,
find_references, go_to_definition, get_hover_info, rename_symbol, open_folder,
update_plan (live checklist).
- Permission modes: Manual (approve everything), Plan (read-only planning), Auto (auto-run edits
- safe commands, ask on dangerous ones), Full-auto. Remembered per workspace.
- Checkpoints: a non-destructive git snapshot per turn, with one-click revert.
- Project context: open files, a bounded workspace tree, terminal errors, project rules
(
.codararules / .codaro/rules.md / .cursorrules), and pinned files, injected per turn.
- Symbiosis with codaro-vs: after a turn writes files, the agent asks codaro-vs to review them;
findings flow back into the chat as a structured card (severity chips + jump-to-source) with an
optional depth-capped auto-fix.
- Dev-model (GCP) control: start/stop a dev inference VM from the command palette, with a
readiness probe and a connection guard on model requests.
Setup
npm install
npm run build
- Press F5 to launch an Extension Development Host.
- Run Codaro Builder: Configure Endpoint. The gateway URL comes pre-filled with Codaro's
gateway — accept it or point it at your own — then enter your API key (stored in
SecretStorage,
never in settings). On Codaro's gateway the agent refuses to run and sends no request until a
key is set; a custom endpoint that needs no auth works without one.
- Set
codaro.gateway.model in Settings if your gateway does not serve the default model id.
- Open the Codaro Builder view and chat. Pick a permission mode under the composer.
Configuration
codaro.gateway.* is shared with the codaro-vs reviewer on purpose — one value configures both.
Everything else is namespaced codaroBuilder.* so it cannot collide with another extension.
Because that id is shared, codaro.gateway.url declares an empty default in the manifest: a
manifest default is the one thing that crosses the extension boundary, and a non-empty one here
could become what codaro-vs reads. The effective default is DEFAULT_GATEWAY_URL in
src/provider/openAiProvider.ts — leave the setting empty and you reach Codaro's gateway.
| Setting |
Default |
Purpose |
codaro.gateway.url |
(empty → https://gw.codaro.dev/v1/chat/completions) |
OpenAI-compatible /v1/chat/completions endpoint |
codaro.gateway.model |
codaro-agent |
Routing key, not a model id — the gateway maps it to your team’s model |
codaro.gateway.stream |
true |
Stream assistant output incrementally (SSE) |
codaroBuilder.agent.maxIterations |
50 |
ReAct loop cap (1–100) |
codaroBuilder.agent.maxTokens |
0 |
Per-turn generation cap. 0 omits max_tokens so the server's own limit applies |
codaroBuilder.agent.permissionMode |
manual |
Initial mode for a new workspace |
codaroBuilder.symbiosis.autoReview |
true |
Ask codaro-vs to review files the agent wrote |
codaroBuilder.symbiosis.autoFix |
false |
Auto-run one fix turn when the reviewer returns findings |
codaroBuilder.agent.projectRules.enabled |
true |
Inject project rules into the system prompt |
codaroBuilder.devVm.* |
(empty) |
GCP dev-inference VM control (project/zone/instance/probe) |
The API key is not a setting Builder declares — set it via Codaro: Set Gateway API Key or
Codaro Builder: Configure Endpoint, and it is stored in SecretStorage under
codaro.gateway.apiKey.
Builder resolves the key from its own SecretStorage first, and falls back to the shared
codaro.gateway.apiKey setting contributed by the codaro-vs reviewer, so a single pasted key
configures both extensions. Builder only ever reads that setting — it never declares it (which would
collide with codaro-vs in VS Code's global configuration registry) and never writes to it, so a key
set through Builder never lands in settings.json.
Development
npm run build — bundle the extension host (dist/extension.js) via esbuild. The webview media
(src/webview/media/*) ships as-is and is loaded through asWebviewUri.
npm run typecheck — tsc --noEmit.
node test/run.js — pure/Node-only test harnesses (registry, session history, streaming,
context, checkpoints, …) bundled against a minimal vscode stub.
| |