An AI code assistant for VS Code with style — ask about your code, have it edited for you, run agentic tasks, drive your screen or a browser, and keep AI-classified notes, tasks and reminders. Bring your own LLM: ASKII Cloud, Ollama, LM Studio, OpenAI, Anthropic, or opencode Go.
Install: VS Code Marketplace · Open VSX · CLI on npm
- Install ASKII from the VS Code Marketplace — or build it from source (see Development)
- Run ASKII: Open Setup (
Ctrl+Alt+K S/Cmd+Alt+K S) — a short wizard that walks you through provider, API key, models, options, wiki and advanced settings (notes, reliability, privacy) - Select some code and run ASKII: Ask (
Ctrl+Alt+K A)
ASKII uses ASKII Cloud unless you pick another provider — see Privacy & data for what is sent where.
Command (palette: ASKII: …) |
Keybinding | What it does |
|---|---|---|
| Ask | Ctrl+Alt+K A |
Ask about the selected code (or anything) — answers stream into a markdown panel with Stop, follow-ups and history |
| Edit Selection or File | Ctrl+Alt+K E |
Replace the selection with an AI-edited version; review the diff and undo if needed |
| Do (Agent Task in Workspace) | Ctrl+Alt+K D |
Agentic workspace agent — explores, creates, modifies, renames and deletes files over multiple rounds |
| Control Screen or Browser | Ctrl+Alt+K C |
Screen or browser agent — screenshot-driven mouse/keyboard control, or Puppeteer web automation |
| Notes, Tasks & Reminders | Ctrl+Alt+K N |
Notes / tasks / reminders panel with search and screenshots |
| Reload Wikis | Ctrl+Alt+K W |
Rebuild the enabled wiki indexes (docs and/or code) |
| Clear Cache | Ctrl+Alt+K X |
Clear cached inline explanations and completions |
| Open Setup | Ctrl+Alt+K S |
Re-run the setup wizard (providers, API keys, models, options, wiki, advanced settings) |
| Generate Commit Message | SCM toolbar ✦ | Write a commit message for the staged (or working-tree) diff |
| Code Review Uncommitted Changes | SCM toolbar | Review staged, unstaged and untracked changes |
On macOS swap Ctrl for Cmd. The (⌐■_■) status-bar button opens a quick-access menu for all of these.
Select some code and ask about it, or ask a general question with nothing selected — the file name, language and selection are included as context automatically (plus matching wiki chunks when wiki RAG is on). Answers stream into the markdown panel with syntax-highlighted code blocks; Stop ends an answer early (closing the panel stops it too), and once it is done the panel header gives you copy, follow-up (previous questions and answers are kept as conversation context) and a history view to re-read the whole session.
File citations are clickable: when the answer references a file or code location, references like src/app.ts:42 render as links — click one to open the file in the editor at exactly that line (ranges like src/app.ts:10-20 select the whole span). Works for workspace code and docs-wiki files alike.
Describe the change you want and ASKII rewrites your selection — or the whole file if nothing is selected, using the full file as context either way. The request shows a cancellable progress notification; the edit is applied when it arrives, then a side-by-side diff of original vs. proposed code opens beside it so you can review it, with a one-click Undo offer to revert (if you have typed in the file since, use the editor's own Undo instead). Optional askii.formatAfterEdit formats the document after the edit.
Describe a task — ASKII prints the top-level workspace structure, then loops until the task is done or askii.doMaxRounds (default 20) is reached. Read-only actions (list, view, search, wiki_search, code_search) run freely; write actions (create, write, modify, rename, copy, mkdir, delete) ask for confirmation (skip with askii.doAutoConfirm). Files are backed up before every change, and when the run ends — finished, stopped or failed — you can Keep the changes or Undo all with one click.
Safety rails that auto-confirm never turns off:
- Shell commands (
run) always ask first; Stop or the 30 s timeout kills the command and everything it started - Files that can run code —
.vscode/(tasks, launch configs, settings),.husky/,.githooks/,.devcontainer/— are always confirmed - Never written: anything inside
.git/(hooks would run on your next commit) or.askii/(Do's own backups) - Sandboxed paths:
../, absolute paths and symlinks that lead outside the workspace are blocked for reads and writes - A reply cut off at the model's output-token limit is never applied — the model is asked for smaller steps instead
- Disabled in Restricted Mode (untrusted workspaces)
Pick Screen or Browser, then describe the task. ASKII screenshots the current state each round, proposes the next action with its reasoning, and runs it without asking by default (set askii.controlAutoConfirm to false to confirm each action — it is separate from askii.doAutoConfirm):
- Screen —
mouse_move,mouse_left_click,mouse_right_click,mouse_double_click,mouse_drag,mouse_scroll,keyboard_input,key_press,click_text,DONE. Aclick_texttarget is located before you are asked, so you confirm the actual click position - Browser —
goto,click,type,wait_for,back,forward,scroll,click_text,DONE(Puppeteer). Onlyhttp(s)pages can be opened (nofile:,javascript:orchrome:URLs), Chromium's sandbox stays on, and text typed into password-like fields is masked in the log
Every proposed action is validated before it runs (numeric coordinates, known keys and directions) — a malformed sequence is rejected as a whole. Requires a vision-capable model (e.g. llava, moondream2). Browser mode auto-detects Chrome / Edge / Chromium / Brave (or set askii.chromePath) and is visible by default (askii.browserHeadless hides it); the browser closes when the loop ends. Screen control uses shell commands — Linux needs xdotool.
Type free text — the AI classifies it as a note, a task (low / medium / high priority) or a reminder (with a due time), and asks a clarifying question when the intent or time is ambiguous. Entries are stored globally, tagged by workspace, full-text searchable, and grouped by age (Pinned, Today, Yesterday, This week, Earlier). Hover an entry to pin, edit (with AI re-classify), mark done, snooze / dismiss, or delete it.
- Time triggers — a wide range of phrases resolve locally, right in the composer:
in 30 minutes,in 1h30m,in half an hour,in two hours,in a couple of hours,in a few minutes,20 minutes from now,an hour from now,at 5pm,at noon,tomorrow at noon,at 9 in the morning,half past 5,quarter to 6,later today,tonight at 8,tomorrow morning,day after tomorrow,this time tomorrow,first thing in the morning,on friday,friday evening,by tuesday at 5pm,next monday,friday next week,next week on wednesday,this weekend,end of day,end of month,end of year,on the 15th,by the 1st of next month,july 8th,2026-07-08 14:30, … - Recurring triggers —
every day at 9am,daily,every morning,every weekday at 9,every monday at 10,every monday and wednesday at 6pm,every mon, wed, fri,weekly on friday at 5pm,every weekend,every 2 hours,every hour,every half hour,every other day,biweekly,quarterly,every month,every month on the 15th,every year on july 8— the entry re-arms itself after each firing and shows a repeat badge - Event triggers — fire on editor events instead of a clock time:
when I open VS Code,on startup,when I open this workspace,when I open package.json,every time I save .env,when I open a ts file,when I save this file, or barewhen I save. One-shot triggers fire once (shown with a ⚡ badge),every time/whenevertriggers re-arm on each matching event - Task deadlines & recurring tasks — tasks accept due times too (
fix the login bug by friday) and can repeat (water the plants every 3 days); when a deadline passes you get a task-due notification with Open / Done / Snooze, and un-completing a done task re-arms it - Reminders fire as VS Code notifications with a sound (the OS's own player:
afplayon macOS, PowerShell on Windows,canberra-gtk-play/paplayon Linux) while VS Code is running — once, even with several windows open; ones missed while it was closed re-fire on the next startup - Screenshots — toggle the camera icon to attach a full-screen capture to the entry
- Files matching
askii.inlineExcludeGlobs(by default.env*, keys, certificates,.npmrc,.netrc,secrets/,*secret*) are never sent by either feature askii.inlineCompletionEnabled— Copilot-style ghost text; Tab accepts, Esc dismisses. Tune the trigger withaskii.inlineCompletionEagerness(low1200 ms /medium500 ms /high200 ms). Suggestions are cached per context, and matching context from your enabled wikis is injected into the promptaskii.inlineHelperMode— adds a kaomoji decoration after the current line:helpful,funny, orwiki(explanations enriched by matching context from your enabled wikis — docs and code). Example:
const sum = a + b; (◕‿◕) Adds two variables; prefer const for variables that won't be reassigned.- Point
askii.wikiPathat a folder of.mddocs - Run ASKII: Reload Wikis — chunks the docs by heading and builds a vector index (embeddings run locally via embeddinggemma2)
- Enable
askii.wikiEnabled— matching chunks are injected into Ask / Edit / Do as context - Optional:
askii.wikiAutoReloadrebuilds the index on startup
A vector index over your workspace code (code files only — no .md, .txt, .json, markup, or images) used as retrieval context for Ask / Edit / Do:
- Run ASKII: Reload Wikis (or
askii wiki-reload --use-code-wiki) — walks the workspace (respecting root.gitignoreand skippingnode_modules/build dirs), chunks code into overlapping 60-line windows, and embeds them - Enable
askii.codeWikiEnabled— relevant code chunks are injected into Ask / Edit as context, and the Do agent gets acode_searchaction for semantic lookup - Optional:
askii.codeWikiAutoReloadrebuilds the index on startup
Both wikis run embeddinggemma2 fully locally in JavaScript (Transformers.js + ONNX WASM — no API keys, no external services). The model downloads once (~314 MB) to ~/.askii/models on first use and is shared by the CLI and the extension. Rebuilds are incremental (unchanged files keep their vectors), crash-safe (a rebuild commits atomically, so an interrupted one leaves the previous index intact, and a corrupt index is rebuilt from scratch) and the index is memory-optimized: Int8-quantized vectors (~¼ the RAM of Float32), metadata packed as typed arrays, and chunk text stays on disk — only the top hits are read back. Indexes live in .askii/code-wiki/ (workspace) and .askii-wiki-index/ (wiki folder).
A ✦ button in the Source Control view toolbar generates a commit message from your staged (or working-tree) diff straight into the input box. It styles the message after your repo's last 10 commits, honors askii.commitMessageStyle (oneliner / brief / descriptive), and appends your own rules from the .md file in askii.commitMessageInstructions. While it runs, the button turns into a ■ stop button that cancels it.
The Code Review Uncommitted Changes button (checklist icon) in the Source Control toolbar sends all uncommitted changes (staged, unstaged and untracked files) to the Ask / Edit / Do model. It opens a review panel that lists each problem with its severity, a file:line link and a recommendation. While the review runs, the button turns into a ■ stop button that cancels it.
- Auto Fix asks the model to fix that one problem and applies the fix to the file as an unsaved edit (
Ctrl+Zundoes it) - Fixed It marks a problem you fixed yourself; Reopen undoes the mark
- Show fixed hides or shows the problems that are already fixed
| Platform | Type | Setup |
|---|---|---|
| ASKII Cloud (default) | Cloud | API key — base URL is fixed to https://api.askii.dev/v1 |
| Ollama | Local | Install + pull a model (e.g. gemma4:e4b), runs at http://localhost:11434 |
| LM Studio | Local | Enable the local server (ws://localhost:1234) and load a model |
| OpenAI or compatible | Cloud | API key; set askii.openaiUrl for Azure etc. (empty = api.openai.com) |
| Anthropic | Cloud | API key |
| opencode Go | Cloud | API key |
API keys are entered in ASKII: Open Setup and stored in VS Code's secret storage (the OS keychain) — never in settings.json.
Each feature group picks its own platform and model, so you can mix providers:
| Feature group | Platform | Model | Default model |
|---|---|---|---|
| Ask / Edit / Do, code review, Note | askii.llmPlatform |
askii.llmModel |
askii-smart |
| Inline suggestions, completion, commit messages | askii.llmInlinePlatform |
askii.llmInlineModel |
askii-fast |
| Control (vision) | askii.llmVisionPlatform |
askii.llmVisionModel |
askii-smart |
API keys and server URLs are shared per provider across all groups. An empty inline/vision model falls back to askii.llmModel only when that group uses the same platform. Every request can be cancelled, times out after askii.requestTimeoutSeconds (default 600), and is retried with backoff on network errors, rate limits (429) and server errors (5xx) — never on authentication or other client errors.
ASKII sends data only to the LLM platform you configure for each feature group — ASKII Cloud by default, so out of the box the following goes to api.askii.dev (choose Ollama or LM Studio in Setup to keep everything on your machine):
| Feature | What is sent |
|---|---|
| Ask / Edit | Your question, the file name and language, the selection (Edit: the whole file), matching wiki chunks |
| Do | The task, the workspace's top-level listing, and the files / search results the agent reads |
| Inline completion / helper | The code around the cursor (except files matching askii.inlineExcludeGlobs) |
| Commit message / code review | The diff of your changes and the last 10 commit messages |
| Control | Screenshots of the screen or browser page, and the task |
| Note | The note text and its context (workspace, file name, selection) for classification |
Wiki embeddings run locally (embeddinggemma2) — documents and code are never sent anywhere to be indexed; the model is downloaded once from Hugging Face. ASKII collects no telemetry.
- Restricted Mode: in an untrusted workspace ASKII Do is disabled, wikis are not rebuilt automatically, and the workspace's
.vscode/settings.jsoncannot change which platform, files or features ASKII uses - See ASKII Do and ASKII Control for the agents' safety rails, and SECURITY.md to report a vulnerability
All settings live in VS Code Settings under the askii.* namespace.
LLM
| Setting | Default | Description |
|---|---|---|
askii.llmPlatform |
askiicloud |
Platform for Ask / Edit / Do / code review / Note |
askii.llmModel |
askii-smart |
Model for that group |
askii.llmInlinePlatform |
askiicloud |
Platform for inline features and commit messages |
askii.llmInlineModel |
askii-fast |
Model for that group |
askii.llmVisionPlatform |
askiicloud |
Platform for Control |
askii.llmVisionModel |
askii-smart |
Vision-capable model for Control |
askii.ollamaUrl |
http://localhost:11434 |
Ollama server |
askii.lmStudioUrl |
ws://localhost:1234 |
LM Studio server |
askii.openaiUrl |
(empty) | OpenAI-compatible base URL |
askii.requestTimeoutSeconds |
600 |
Cancel a request after this long (0 = never) |
askii.maxOutputTokens |
0 |
Output-token cap per reply (0 = provider default; Anthropic 8192) |
Inline
| Setting | Default | Description |
|---|---|---|
askii.inlineCompletionEnabled |
false |
Ghost-text completions |
askii.inlineCompletionEagerness |
medium |
low / medium / high trigger delay |
askii.inlineHelperMode |
off |
Kaomoji line helper: off, helpful, funny, wiki |
askii.inlineExcludeGlobs |
secrets | Files never sent by the inline features |
Notes & reminders
| Setting | Default | Description |
|---|---|---|
askii.noteReminderSound |
true |
Play a sound when a reminder fires |
askii.noteSnoozeMinutes |
10 |
Minutes added by Snooze |
Agents & browser
| Setting | Default | Description |
|---|---|---|
askii.doMaxRounds |
20 |
Max rounds for Do / Control |
askii.doAutoConfirm |
false |
Skip Do's file-edit confirmations (never run or sensitive files) |
askii.controlAutoConfirm |
true |
Run Control actions without asking |
askii.formatAfterEdit |
false |
Format files after Edit / Do |
askii.browserHeadless |
false |
Hide the Puppeteer browser window |
askii.chromePath |
(empty) | Browser executable (empty = auto-detect) |
Git
| Setting | Default | Description |
|---|---|---|
askii.commitMessageStyle |
oneliner |
Generated message style |
askii.commitMessageInstructions |
(empty) | .md / .txt file with extra commit rules |
Wiki RAG
| Setting | Default | Description |
|---|---|---|
askii.wikiEnabled |
false |
Inject docs wiki context into Ask / Edit / Do |
askii.wikiPath |
(empty) | Folder of .md docs |
askii.wikiAutoReload |
false |
Rebuild docs wiki on startup |
askii.codeWikiEnabled |
false |
Inject code wiki context into Ask / Edit / Do |
askii.codeWikiAutoReload |
false |
Rebuild code wiki on startup |
Embeddings for both wikis run locally (embeddinggemma2) — no embedding settings required. Diagnostics are logged to Output → ASKII.
ASKII also ships as a terminal CLI with an interactive REPL and the same ask / edit / do / control / browse / note commands:
npm install -g askii-cliSee cli/README.md.
- VS Code 1.108+
- Control requires a vision-capable model; screen control needs
xdotoolon Linux; browser mode needs a Chromium-based browser - Remote development (SSH, containers, WSL): ASKII runs on the remote side, next to your files — Do, Ask, Edit and the wikis work as usual, but Control and note screenshots act on the remote machine's display, so use them locally
git clone https://github.com/danisss9/ASKII.git
cd ASKII && npm install
npm run watch # tsc + esbuild watchers — then F5 to launch the extension
npm run compile # type-check (extension + CLI) + lint + bundle
npm run package # production bundle (for vsce)
npm run test:unit # unit tests in plain Node (fast)
npm test # the same suites inside VS Code (@vscode/test-electron)src/— extension host codecommon/— pure Node code shared with the CLI (never importsvscode)cli/— the CLI package (npm run build/npm run dev)
See CONTRIBUTING.md for the release process.