Home → VS Code

aico in VS Code

A tab of its own in the Secondary Side Bar, beside Chat. Drawn natively, styled from your theme's own colours, and aware of what you have open — not the web workspace in an iframe.

Install it

The extension needs aico on your PATH and Node 22.5+. It is not on the Marketplace yet, so install the packaged build:

npm install -g @suhail-akhtar/aico
code --install-extension aico-vscode-0.6.0.vsix

The .vsix is attached to each release. Reload the window afterwards — an editor that was already open predates the extension and has not loaded it, which from the inside is indistinguishable from a broken install. If a keypress does nothing, run aico: Check the Setup from the command palette; it reports the version, the folder, the server and the command it would run.

aico needs a folder open. A session's log is filed under one and its file tools are confined to it, so an empty window offers you a folder picker rather than a chat box.

The server still owns the run

Closing the panel, or the whole window, does not stop the work. The extension does not reimplement the engine — it starts aico serve for the folder you have open and talks to it. Reopen the panel and the session replays from its event log, and it is the same session you can pick up in a browser tab.

The webview never sees the server or its token. Every request is tunnelled through the extension host, which is what lets the panel be a plain UI rather than a browser page that happens to be hosted in an editor.

It knows what you are looking at

The active file, your selection with its line range, and that file's Problems arrive as chips above the composer. Every chip is removable, and a removal sticks — so what gets sent is on screen before you send it.

The rule behind the chips: inline what nothing else can recover — a selection, a language server's diagnostics — and merely name files, because aico has Read and can fetch exactly the part that matters. Getting that backwards is how an editor integration sends fifteen thousand tokens of open tabs with every "hello".

Edits land in the editor

A write is applied as a WorkspaceEdit, not written behind VS Code's back. So Ctrl+Z takes it back, Source Control shows it, and the file opens where it changed.

Declining one is a real answer. The tool call fails, the agent is told why, and it takes another route — rather than carrying on believing it wrote a file that is not there.

Approve as much or as little as you like

ModeWhat it asks about
AutoNothing. The default, and what every session did before this existed.
Ask, not for editsFile writes go through; commands, fetches and delegation are put to you.
Ask every timeEvery tool call waits for a decision. Thorough, and slow by design.

Prompts are native modals rather than cards in the panel — a card can be scrolled past while the turn sits blocked on it. Terminal is deliberately not in the middle mode's pass-through list: a shell command can do everything a file write can and more, so "auto-accept edits" would be a lie if it also ran commands.

The editor as a tool

Three things the engine cannot do from outside VS Code, which it can do from inside it. They are offered only while an editor is attached — the same conversation opened in a browser tab has none, and a tool that can only answer "there is no editor here" costs a turn to discover.

ToolWhat it does
VSCodeDiagnostics Reads your Problems panel. After an edit the agent can ask the language server what it thinks, instead of grepping for the shape of an error or running a full build.
VSCodeTasks Lists and runs the commands already in your tasks.json, so the project's own flags and environment are used rather than a command line the model invented.
VSCodeWorkspace Reports, creates, adds and opens folders — enough to finish setting a project up so you land in it.

VSCodeDiagnostics works in Plan mode too, because "what is already broken here?" is the first question of most plans and the language server answers it better than a grep. Adding a workspace folder or opening one always confirms first, whatever the approval mode says — opening a folder replaces the window.

There is deliberately no "run any VS Code command" tool: that surface reaches deleting files and installing extensions, and no permission prompt can describe it honestly. There is no editor terminal either — commands run on aico's own shell, which is visible in the transcript and identical on every surface.

Windows gets a shell whose commands exist

The tool a model sees is called Bash, so it writes ls and head. Running those through cmd.exe returns 'ls' is not recognized and the run burns turns rediscovering it. aico prefers Git Bash, then PowerShell, then cmd — and the prompt names which one it picked. AICO_SHELL overrides.

The shape of a run, on screen

Messages can be copied, rated, branched from, and edited and sent again with arrows to move between versions. The conversation itself can be renamed in place, forked, or archived from the menu.

Settings: basic here, the rest on the web

The model and the active provider are switchable from the composer. Keys, endpoints, MCP servers, skills, memory and agents are a form and a pasted secret — a 300px column does neither well — so Settings in the menu opens the web workspace straight onto them. VS Code's own settings hold the extension's behaviour:

SettingMeaning
aico.commandHow to run aico, when it is not on your PATH.
aico.autoStartStart the server for a folder without asking. On by default.

Two surfaces, one core

The panel is not a second product. The state layer — the reducer, the store, the turn projection, plans and task lists — is imported unchanged from the browser client, so a fix to how a failed edit is drawn lands in both. What differs is the view: VS Code gets an editor panel, and the browser gets width, which is what Mini Apps, the trajectory view and the settings screens actually need.