Model-agnostic local coding agent CLI inspired by Claude Code, built with TypeScript and powered by Vercel AI SDK.
- Local-first agent loop (
gather -> reason -> act -> verify) - Structured outputs with strict Zod validation
- Provider adapters for OpenAI, Anthropic, and Google
- Approval-gated execution policy for safer command/tool actions
- PGLite-backed local persistence for sessions, tools, retrieval metadata, and context indexing
- Hybrid context retrieval (lexical + vector + graph-scored ranking)
- Optional daemon for automations and file/git watch re-indexing
- Extensible command/hook model via
AGENTS.md
- Node.js 24+
- pnpm 10+
pnpm install
pnpm db:migrate
pnpm buildpnpm dev -- chat
pnpm dev -- chat "summarize this repo"
pnpm dev -- plan "create a rollout plan for indexing"
pnpm dev -- index .
pnpm dev retrieval-proof --profile smoke
pnpm dev -- automations list
pnpm dev -- automations add --name "Hourly Check" --cron "0 * * * *" --prompt "summarize local status"
pnpm dev -- automations runRun daemon:
pnpm dev:daemon- The interactive chat loop now exposes lifecycle phases in the TUI:
initializing,planning,awaiting_approval,executing,interrupted,resuming,completed,failed. - Press
Ctrl+Cduring active execution to request a controlled interrupt. The loop stops at the next safe checkpoint and saves resumable state. - Use
/resumeto continue an interrupted turn from the last durable checkpoint. - Sensitive tool actions (
writeanddestructive) require an explicit in-TUI decision:/approveto execute/denyto skip/dismissto skip
pnpm lint
pnpm lint:fix
pnpm typecheck
pnpm test
pnpm buildsrc/cli- Ink TUI and command entrypointssrc/agent- orchestrator and turn schemassrc/providers- AI SDK provider adapterssrc/policy- approval and safety policy logicsrc/context- indexing, retrieval, file/git watcherssrc/db- PGLite client and migrationssrc/automation- scheduler, hooks, automation runnersrc/observability- traces/transcripts and optional OTelsrc/mcp- MCP process clienttests- unit/integration-facing tests for core behavior
Environment variables (BYOK):
DUBSBOT_PROVIDER(openai|anthropic|google) - defaults togoogleOPENAI_API_KEYANTHROPIC_API_KEYGOOGLE_GENERATIVE_AI_API_KEYDUBSBOT_OPENAI_MODELDUBSBOT_ANTHROPIC_MODELDUBSBOT_GOOGLE_MODEL(defaults togemini-3.1-pro-preview)DUBSBOT_OTEL_ENABLED=1to enable telemetry export hooksDUBSBOT_EMBEDDING_STRATEGY_V2=1to enable explicit embedding strategy resolution/fallbackDUBSBOT_EMBEDDING_STRATEGY_CONFIG_JSONto provide explicit strategy configDUBSBOT_EMBEDDING_PROVENANCE_LOG=1to emit embedding provenance log lines
- Anthropic embeddings currently fall back to deterministic local vectors.
- This project intentionally uses Biome only (no ESLint/Prettier).
- Retrieval proofing benchmark schema/workflow docs:
docs/retrieval-proofing-benchmark-schema.mdanddocs/retrieval-proofing.md. - Embedding strategy rollout guide:
docs/embedding-strategy-rollout.md.