Install from the VS Code Marketplace
AI coding agent with chat, code actions, and diagnostics integration. Uses Qwen3-Coder-30B via an internal LiteLLM gateway.
Install
From the Marketplace (recommended):
code --install-extension anuraghkp.doit-vscode
Or open the Extensions view (Ctrl+Shift+X) and search for "DoIt".
From VSIX (GitLab releases):
Download the latest doit-vscode-*.vsix from the GitLab releases page and run:
code --install-extension doit-vscode-*.vsix
Or in VS Code: Ctrl+Shift+P → "Install from VSIX..."
What's New — v0.3.2
- Live streaming terminal output with pulsing dot, ANSI colors, and "Move to background" escape hatch
- Process-tree kill — dev servers are fully terminated, freeing ports properly
- ApplyManager disk-corruption fix — auto-accept default prevents merged-state poisoning during multi-step agent flows
- Thinking indicator — three-dot pulsing bar shows the agent is still working between events
Configure
Open VS Code Settings (Ctrl+,) → search "DoIt":
| Setting | Value |
|---|---|
doit.baseUrl |
http://192.168.1.95:4000/v1 |
doit.apiKey |
Your personal API key |
doit.model |
qwen3-coder-30B |
Falls back to ~/.config/doit/config.json if VS Code settings are empty.
Features
- Chat sidebar — DoIt icon in the activity bar opens the chat panel
- Code actions — Right-click selected code → Explain / Fix / Ask DoIt (language-aware, includes diagnostics)
- Inline permissions — Allow / Allow All / Deny for file edits and shell commands
- Inline diff apply — Green decorations on added lines (auto-accept mode) or full Accept/Reject CodeLens per hunk
- Live terminal streaming — Command output streams into the chat with pulsing status dot and ANSI colors
- Move to background — Long-running dev servers can be detached to the
bg_*registry mid-command - Keep/Undo bar — One-click revert for edited files
- Status bar — Git branch, context tokens, indexing progress, mode indicator
- Markdown rendering — Headings, lists, bold, italic, code blocks
- Slash commands —
/init,/new,/plan,/direct,/help
Development
# From monorepo root — build core first
cd packages/core && npx tsc
cd packages/vscode
# Build
npm run build # One-shot esbuild
npm run watch # Watch mode
# Package VSIX
npx @vscode/vsce package --no-dependencies
# Install locally
code --install-extension doit-vscode-*.vsix --force
Debug in VS Code
- Open the monorepo in VS Code
- Press
F5to launch Extension Development Host - The extension loads from
packages/vscode/dist/extension.js
Architecture
src/
├── extension.ts # Entry point, command registration, webview provider
├── agent-bridge.ts # Core agent wrapper (events, permissions, tool wrapping)
├── terminal.ts # Streaming run_command tool with process-group kill
├── logger.ts # Dual logger (output channel + file)
├── apply/
│ ├── ApplyManager.ts # Inline diff apply (per-hunk accept/reject)
│ ├── decorations.ts # Green/red TextEditorDecorationType
│ └── codeLens.ts # Accept / Reject CodeLens per hunk
└── webview/
├── main.js # Chat UI logic (messages, tool calls, permissions, status bar)
├── markdown.js # Markdown renderer (headings, lists, code blocks)
└── style.css # VS Code-themed styles
Key Design Decisions
- esbuild bundled — Single CJS file, native modules (LanceDB, ONNX) stubbed out via esbuild plugin
- XML fragment filter — Strips raw
<function=...>tags from streaming text (Qwen3-Coder parser artifacts) - structuredPatch diffs — Accurate
+N -Nstats using thedifflibrary - Singleton output channel — Single "DoIt Commands" channel reused across all
run_commandcalls - Abort-safe permissions — Pending permission dialogs resolve as denied on abort (no deadlock)
- Session reset cleanup —
/newclears messages, todos, memory, diff store, and project context cache - Context updates — Token count pushed to webview status bar via
context-updateevents - Status bar polling — Git branch, indexing, mode refreshed every 3 seconds via extension → webview messages
Webview Communication
Extension → Webview:
text-delta— Streaming text chunktool-call— Tool execution started (now carriestoolCallId)tool-progress— Live partial output from a long-running tool (e.g.run_command)tool-result— Tool execution complete (now carriestoolCallId)permission-request— Inline Allow/Deny promptdone— Turn complete (with edited files for Keep/Undo)error/info— Status messagescontext-update— Token countstatus-update— Git branch, cwd, indexing, modecontext— Active file indicator
Webview → Extension:
message— User chat messageabort— Stop current responsenew-session— Reset conversationset-mode— Switch plan/directpermission-response— Allow/Deny/AllowAllmove-to-background— Detach a running command into thebg_*registryundo-file— Revert file changesinit-context— Generate .doit/context.md