ACLine
A VS Code extension that browses and captures acline SDLC
state (tasks, decisions, memory, specs, audit trail) without leaving the
editor. It's an MCP client, not a second CLI wrapper: it spawns
acline mcp serve as a subprocess and talks the Model Context Protocol to
it, the same interface any other MCP client (Claude Desktop, another agent)
uses.
Requirements
acline on PATH (or set the acline.binaryPath setting to its full path).
If the default "acline" isn't found, the extension automatically tries a
few common install locations (~/.local/bin, ~/go/bin,
/opt/homebrew/bin, /usr/local/bin) before giving up — useful because
a GUI-launched (or already-running, reused-process) VS Code doesn't
always inherit the PATH your terminal has. If none of those have it
either, the error notification has an "Open Settings" button that jumps
straight to acline.binaryPath.
- Go 1.25+ to build
acline itself, from the repo root: go build -o acline .
Development
npm install
npm run compile # or: npm run watch
Then open this directory in VS Code and press F5 to launch an Extension
Development Host with the extension loaded.
After any change to acline's Go code (new/changed MCP tools, bug fixes),
rebuild and reinstall the binary the extension actually spawns, then
reload the window:
cd .. && go build -o ~/.local/bin/acline . # or wherever acline.binaryPath points
Then, in the Extension Development Host window: Cmd+Shift+P (or
Ctrl+Shift+P) → "Developer: Reload Window". A plain refresh/retry isn't
enough — ACLineClient spawns one acline mcp serve child process per
activation and reuses it for the rest of the session, so a rebuilt binary
only takes effect once that process is replaced, which only happens on
reload (or relaunching F5). Symptoms of forgetting this step: "unknown
tool" errors, or a tool call failing with an error that doesn't match
what the current server code should do.
Tests
npm test
Unit tests for the extension's pure logic (currently dashboardRender.ts,
the Dashboard webview's HTML-building) via Node's built-in test runner —
no VS Code, no MCP server, no network. This intentionally doesn't cover
extension.ts/mcpClient.ts/treeViews.ts, which are thin glue over the
VS Code API and an MCP client and would need @vscode/test-electron's full
extension-host harness (a downloaded VS Code build) to exercise
meaningfully; that's a bigger lift not yet done. The practical pattern
going forward: when adding non-trivial logic to the extension, pull it into
its own vscode-free module (as dashboardRender.ts was split out of
dashboardView.ts) so it stays unit-testable without that harness.
What it does (v1)
- Tree views (activity bar → ACLine icon): Tasks, Memory, Decisions,
Specs, Audit Trail — each a thin list view over the corresponding
acline mcp serve tool/resource.
- Commands (Command Palette → "ACLine: ..."): Search, Semantic Search,
Add Task, Add Memory, Add Decision, Add Spec, Add Note, Show Memory Decay
Candidates, Refresh All Views, Show Dashboard, Select Project.
- Dashboard (Command Palette or the Tasks view's toolbar icon): a
webview covering
acline dashboard, acline metrics, and acline verify
in one place — active session, tasks needing attention, review/decay
nudges, verification-tax metrics, and audit-chain integrity, with a
Refresh button.
- Select Project (Tasks view's toolbar icon): lists registered projects
(
acline project list) and sets acline.projectFilter to scope every
view/command to one, without leaving VS Code.
- Context menus (right-click an item in its tree view):
- Tasks: Show Gate Status, Mark Task Done, Approve Task, Reject Task.
Marking a task done with an unsatisfied gate shows the blockers and
offers to override (recorded, never silent) rather than just failing.
Approving as an agent actor without a name set still gets rejected
server-side — an agent can't approve its own work — the same rule the
CLI enforces.
- Memory: Reconfirm (Touch), Forget (mark stale — never deletes).
- Decisions: Accept, Reject, Supersede With Another Decision.
- Specs: Approve, Revise (replaces the body and bumps the version).
- Settings:
acline.binaryPath, acline.dbPath (optional --db
override), acline.projectFilter (optional project name to scope every
view/command to).
| |