LiyaAI Coding Agent for VS Code
AI-powered coding assistant for VS Code — powered by LiyaAI Platform.
Why LiyaAI?
LiyaAI is not just a model provider — it's an intelligent AI platform with:
- 🚀 Performance Middleware — Smart caching, context optimization, and request batching
- 💰 Cost Optimization — Up to 65% cost savings with intelligent token management
- 🔄 Multi-Model Support — Access Claude, GPT-4, and other models through unified API
- 🎯 Custom Assistants — Pre-configured assistants with domain-specific instructions
- 📊 Usage Analytics — Track costs, tokens, and performance per project
- 🔒 Enterprise Security — API key management, audit logs, and data privacy
Features
- 🤖 AI Chat Panel — Sidebar chat with your custom coding assistants
- 🔧 Agentic Tool Execution — AI can read, write, and edit files autonomously
- 🔍 Code Search — Fast grep and file search (ripgrep/fd powered)
- 📝 Git Integration — Status, diff, and log commands
- 💻 Terminal Commands — Run commands with safety checks; auto-executed in Accept mode (dangerous patterns always confirmed)
- 💰 Real-time Cost Tracking — See token usage and costs per session
- 🛡️ Security First — Workspace sandboxing, command blocklist, sensitive file protection
- 🧩 MCP Support — Connect to any Model Context Protocol server
- 🤝 Sub-agents — Delegate tasks to specialized built-in agents
- 🪝 Hook System — Automate actions on prompt submit, tool use, and stop events
- 🔐 Permission Modes — Fine-grained tool access control (plan / default / acceptEdits / bypassPermissions)
- 🧠 Project Memory — Persistent workspace memory via
LIYAAI.md with periodic re-injection on long tool chains (hash-diff + adaptive cadence), and a plugin-maintained ## 📍 Current live status block
- 📓 Jupyter Notebook Support — Read and edit
.ipynb files directly
- 🖼️ Image & Screenshot Input — Paste screenshots, pick files via button, or drag-and-drop images into chat
- ⚡ Auto-compact — Automatic context window management at 85% usage
- ⏪ Prompt Rewind — Snapshot and revert file changes per message
- 📎 File Attachments — Attach files to chat via paperclip UI
- 🛠️ Script Runner — Run custom scripts from
.liyaai/scripts/
- 🌐 Web Fetch Tool — AI can fetch URLs (SSRF-protected)
- 📈 Analytics — Session and tool-use event tracking
- 🎙️ Speech to Text — Dictate prompts hands-free using your microphone
- 🔊 Text to Speech — Have AI responses read aloud automatically
- 🏷️ Smart Chat History Titles — New chats are titled automatically from the first user message
- ♿ Accessibility First — Full voice I/O support designed for visually impaired developers
Requirements
Getting Started
- Install the extension from VS Code Marketplace
- Click the LiyaAI icon in the Activity Bar (or move it to the right sidebar)
- Enter your Backend URL and API Key
- Select a coding assistant from your LiyaAI project
- Start chatting with your AI coding partner!
Commands
| Command |
Shortcut |
Description |
LiyaAI: Set API Key & Backend URL |
— |
Configure connection |
LiyaAI: Select Assistant |
— |
Choose coding assistant |
LiyaAI: New Chat Session |
Cmd+Alt+N |
Start new chat |
LiyaAI: Focus Chat Panel |
Cmd+Alt+L |
Focus chat + mention current line |
LiyaAI: Explain Selected Code |
Cmd+Alt+E |
Explain code |
LiyaAI: Fix Selected Code |
Cmd+Alt+X |
Fix code |
LiyaAI: Optimize Selected Code |
Cmd+Alt+O |
Optimize code |
LiyaAI: Add Comments |
Cmd+Alt+D |
Add comments |
LiyaAI: Generate Tests |
Cmd+Alt+U |
Generate unit tests |
LiyaAI: Refactor Selected Code |
Cmd+Alt+R |
Refactor code |
LiyaAI: Insert Line Reference |
Cmd+Alt+A |
Insert line reference to chat |
LiyaAI: Cancel Current Request |
Cmd+Alt+. / Escape |
Cancel ongoing request |
LiyaAI: Show Balance |
— |
Show account balance |
LiyaAI: Open Project Memory |
— |
Open LIYAAI.md |
LiyaAI: Initialize Project Memory |
— |
Create LIYAAI.md |
LiyaAI: Create Workspace Config |
— |
Create .liyaai/ config folder |
Settings
| Setting |
Default |
Description |
liyaai.maxIterations |
15 |
Max iterations for agentic loop |
liyaai.autoApplyEdits |
false |
Auto-apply file edits |
liyaai.showCostPerMessage |
true |
Show cost per message |
liyaai.enableThinking |
true |
Enable extended thinking |
liyaai.enablePromptCaching |
true |
Enable prompt caching (up to 90% savings) |
liyaai.language |
en |
Display language (en/tr) |
liyaai.autoConnect |
true |
Auto-connect on startup |
Workspace Configuration
Create a .liyaai/ folder in your project root to customize behavior:
| File |
Description |
.liyaai/rules.md |
Project-specific AI instructions |
.liyaai/ignore |
Files/folders to hide from AI |
.liyaai/memory/ |
Persistent project memory files |
.liyaai/commands/ |
Custom slash commands (.md files) |
.liyaai/scripts/ |
Runnable scripts via run_script tool |
.liyaai/output-style.md |
Customize AI response format and tone |
LIYAAI.md |
High-level project memory (auto-loaded) |
Hook System
Configure automated hooks in .liyaai/settings.json:
{
"hooks": {
"UserPromptSubmit": [{ "command": "echo 'prompt submitted'" }],
"PreToolUse": [{ "matcher": "write_file", "command": "lint-check.sh" }],
"PostToolUse": [{ "matcher": "terminal", "command": "run-tests.sh" }],
"Stop": [{ "command": "notify-done.sh" }]
}
}
Hooks can allow, block, or modify tool inputs.
Permission Modes
| Mode |
Description |
plan |
Read-only — no file writes or commands |
default |
Standard — confirms before writes and commands |
acceptEdits |
Auto-applies file edits and runs terminal commands without confirmation (dangerous patterns still require confirmation) |
bypassPermissions |
Fully autonomous (env/user setting only) |
Per-tool rules support glob and regex patterns in .liyaai/settings.json.
MCP (Model Context Protocol)
Connect any MCP server in .liyaai/settings.json:
{
"mcpServers": {
"my-server": {
"command": "npx",
"args": ["-y", "@my-org/mcp-server"],
"env": { "API_KEY": "..." }
}
}
}
Sub-agents
Delegate tasks to built-in specialized agents:
| Agent |
Purpose |
code-reviewer |
Code quality review |
debugger |
Error diagnosis |
planner |
Task decomposition |
explorer |
Codebase exploration |
general-purpose |
Open-ended research |
┌─────────────────────────────────────────────────────────┐
│ VS Code Plugin │
│ (Tool Execution, Context Collection, Security) │
└─────────────────────┬───────────────────────────────────┘
│ API Request
▼
┌─────────────────────────────────────────────────────────┐
│ LiyaAI Platform │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Caching │ │ Context │ │ Billing │ │
│ │ Middleware │ │ Optimization│ │ & Usage │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Custom Assistants (Instructions, │ │
│ │ Knowledge Base, Tool Permissions) │ │
│ └─────────────────────────────────────────────────┘ │
└─────────────────────┬───────────────────────────────────┘
│
┌─────────────┼─────────────┐
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│ Claude │ │ GPT-4 │ │ Gemini │
│ Models │ │ Models │ │ Models │
└─────────┘ └─────────┘ └─────────┘
LiyaAI works on macOS, Linux, and Windows with full cross-platform terminal command handling.
Safe Commands (auto-approved, no confirmation needed)
| Platform |
Commands |
| Unix/macOS |
cat, head, tail, ls, pwd, echo, which, wc, file, stat, du, df, grep, find |
| Windows CMD |
type, dir, where, findstr, tree, hostname, whoami, ver, systeminfo, tasklist, netstat, sort, fc, comp |
| PowerShell |
Get-Content, Get-ChildItem, Get-Item, Get-Location, Get-Process, Get-Service, Test-Path, Select-String |
| Cross-platform |
git status/log/diff/branch/show, npm list/ls/view, pip list/show/freeze, node -v, npm -v, python --version |
Blocked Commands (always rejected)
| Platform |
Commands |
| Unix/macOS |
rm -rf /, rm -rf ~, mkfs, dd if=, chmod -R 777 /, curl \| sh, shutdown, reboot, kill -9 -1 |
| Windows |
format c:, del /f /s /q c:, rd /s /q c:, reg delete, bcdedit, diskpart, net user |
| PowerShell |
Remove-Item -Recurse -Force C:, Format-Volume, Clear-Disk, Stop-Computer, Restart-Computer |
All other commands require user confirmation before execution.
Auto-Accept Mode — Dangerous Pattern Filter
Even when Auto-Accept Mode (⚡) is active, the following terminal patterns always prompt for confirmation:
| Pattern |
Example |
Reason |
rm -<flag> |
rm -rf ./dist |
Recursive/force deletion |
sudo |
sudo npm install -g |
Privilege escalation |
del (Windows) |
del /f myfile |
File deletion |
rm / |
rm /etc/hosts |
Absolute path deletion |
dd of= |
dd if=/dev/zero of=/dev/sda |
Disk overwrite |
format |
format c: |
Drive formatting |
shutdown/halt/reboot |
shutdown -h now |
System shutdown |
Security
- API keys stored in OS keychain (macOS Keychain, libsecret, Windows Credential Manager)
- Workspace sandboxing — no access outside project
- Command blocklist for dangerous operations
- Sensitive file protection (.env, SSH keys)
- SSRF protection on web_fetch tool
Development
# Install dependencies
npm install
# Watch mode
npm run watch
# Run extension (F5 in VS Code)
# Package
npm run package
Keyboard Shortcuts
| Shortcut (Mac) |
Shortcut (Win/Linux) |
Command |
Cmd+Alt+L |
Ctrl+Alt+L |
Focus Chat Panel |
Cmd+Alt+N |
Ctrl+Alt+N |
New Chat Session |
Cmd+Alt+A |
Ctrl+Alt+A |
Insert Line Reference |
Cmd+Alt+E |
Ctrl+Alt+E |
Explain Selected Code |
Cmd+Alt+X |
Ctrl+Alt+X |
Fix Selected Code |
Cmd+Alt+O |
Ctrl+Alt+O |
Optimize Selected Code |
Cmd+Alt+D |
Ctrl+Alt+D |
Add Comments |
Cmd+Alt+U |
Ctrl+Alt+U |
Generate Tests |
Cmd+Alt+R |
Ctrl+Alt+R |
Refactor Selected Code |
Cmd+Alt+. / Escape |
Ctrl+Alt+. / Escape |
Cancel Current Request |
Accessibility — Voice I/O for Visually Impaired Developers
♿ LiyaAI is committed to making AI-assisted coding accessible to everyone — including developers with visual impairments.
LiyaAI includes built-in voice input/output so you can interact with your AI coding assistant entirely hands-free and screen-independently:
🎙️ Speech to Text (STT)
- Press the microphone button in the chat panel (or use the keyboard shortcut) to start recording
- Speak your prompt naturally — LiyaAI transcribes your speech and sends it as a message
- Fully compatible with screen readers; no mouse interaction required
- Works offline-capable depending on your platform's STT engine
🔊 Text to Speech (TTS)
- AI responses are automatically read aloud when TTS is enabled
- Code blocks, file paths, and technical content are spoken in a clear, structured way
- Pause, resume, or stop playback at any time via keyboard
- Adjustable speech rate and voice settings
⌨️ Keyboard-First Workflow
All voice features are fully operable via keyboard — no mouse required:
| Action |
Shortcut (Mac) |
Shortcut (Win/Linux) |
| Start/stop recording |
Cmd+Alt+M |
Ctrl+Alt+M |
| Stop TTS playback |
Escape |
Escape |
Screen Reader Compatibility
The chat panel is built with ARIA labels, live regions, and semantic HTML to ensure compatibility with:
- macOS VoiceOver
- NVDA / JAWS (Windows)
- Orca (Linux)
What's New in 0.2.5
Smart Routing — Empty-Response Fallback
- 💬 No more blank replies — Smart-routing assistants occasionally let a lightweight model spend its turn only on the internal routing-advice call, producing no text. The chat now shows a clear status message instead of an empty bubble, so you always know the turn finished. Pairs with a backend fix that stops the model from replacing its answer with the advice call and guards against ever returning an empty response.
This build also bundles the 0.2.4 improvements below (active-project path disambiguation, selective tool-result masking, edit_file uniqueness recovery).
What's New in 0.2.4
Multi-Repo Path Safety
- 🛡️
write_file no longer silently writes to the wrong location on basename-only paths — In multi-project workspaces the plugin now scans for matches and: redirects automatically if there's exactly 1 match, throws an Ambiguous file_path error listing candidates if there are multiple, or creates at workspace root only if the file is genuinely new.
- 🪞 Write confirmation dialog shows the resolved path — The dialog now displays the actual destination path after redirection, so you can visually confirm before accepting.
- 🎯
edit_file auto-find biases toward the active editor's project — When the same filename exists in multiple subfolders, disambiguation now prefers the file inside the currently open project, preventing spurious old_string not found errors.
- 🛡️
write_file ambiguity check also uses active-project bias — When multiple matches exist for a basename-only write, the plugin first narrows to the active project before surfacing a scoped error message.
- 🔓 File tool results are no longer over-masked — Previously, sensitive-data masking was applied too broadly to file reads, causing
edit_file to fail because the snippet the AI saw didn't match raw disk content — leading to repetitive retry loops. Masking is now applied selectively only to tools that can surface real runtime secrets.
- 🎯 Selective masking —
run_terminal, run_script, and web_fetch outputs are still masked for safety. File I/O tools return content as-is, so the AI can reliably edit files that mention tokens, keys, or auth-related identifiers in source code.
edit_file Uniqueness Recovery
- 📍
old_string found N times error now includes line numbers + context — Previously this error caused the AI to re-read the entire file and retry with the same non-unique snippet (3–5 wasted turns). The error now lists match line numbers and embeds surrounding context so the AI can build a unique match without re-reading.
What's New in 0.2.3
Memory & Long-Run Reliability
- 🧠 LIYAAI.md periodic re-injection — On long tool chains the AI can drift away from workspace rules. The plugin now periodically re-injects a fresh copy of
LIYAAI.md so rules stay in context regardless of session length.
- 🪙 Hash-diff optimization — Re-injection skips the full payload when
LIYAAI.md hasn't changed, sending a lightweight "rules still apply" marker instead to save tokens.
- 📈 Adaptive cadence — Re-injection frequency adjusts automatically based on recent error rate: more frequent during error bursts, less frequent during smooth runs.
- 📍 Plugin-maintained
## 📍 Current block — The plugin writes a live status block into LIYAAI.md after every tool call (task, last action, modified files, pending decisions, timestamp), so the AI can recover task state even after context drift.
Multi-Repo Path Safety
- 🗂️ Subfolder prefix rule enforced — The AI is now explicitly instructed to always include the subfolder prefix on file paths in multi-project workspaces, preventing files from being resolved relative to the wrong project root.
Bug Fixes
- 💬
ask_user_question options now render — A field-name mismatch was silently dropping the answer choices, forcing free-text input. This is now fixed and choice buttons render correctly.
Chat History Improvements
- 🏷️ Automatic Session Titles — New chat sessions now generate history titles from the first user message instead of staying as a generic "New Chat"
- 🔄 Restored Session Titles — Loaded backend sessions rebuild their local title state from the first user message for consistent history display
- 🧹 Cleaner Title Formatting — Chat titles normalize whitespace and truncate to 50 characters for a compact history tab
What's New in 0.2.2
Auto-Accept Mode — Terminal Command Support
- ⚡ Auto-Accept Terminal —
run_terminal, git commit, and git push now execute without confirmation when Auto-Accept Mode is active
- 🛡️ Smart Safety Filter — Dangerous commands (
rm -rf, sudo, format, shutdown, dd if= etc.) still require explicit user confirmation even in Auto-Accept mode
- 🔔 Transparency Log — Terminal commands auto-executed in Accept mode show an
⚡ Auto-executing status in the chat for full visibility
- 🏷️ Updated Banner & Toast — Mode indicator now reads "edits & terminal commands run without confirmation" to accurately reflect the new behavior
Accessibility — Voice I/O
- 🎙️ Speech to Text — Dictate prompts hands-free via microphone; no typing required
- 🔊 Text to Speech — AI responses are read aloud automatically
- ♿ Designed for visually impaired developers — ARIA-compliant chat panel, screen reader support (VoiceOver, NVDA, Orca), keyboard-only workflow
What's New in 0.2.0
WebSocket Transport
- ⚡ WebSocket-only — HTTP polling fully replaced; tool call latency drops from ~3 s to ~50 ms
- 🔗 Persistent connection — Single WS session per conversation; no reconnect overhead between messages
- 🏓 Ping/pong keepalive — 30 s server-driven heartbeat; 400 s+ agent runs work without timeout
- 🗑️
useWebSocket setting removed — No fallback path; WS is the only transport
Agent Infrastructure
- 🪝 Hook System —
UserPromptSubmit, PreToolUse, PostToolUse, Stop hooks with allow/block/modify semantics
- 🔐 Permission Modes — 4-tier access control: plan / default / acceptEdits / bypassPermissions; per-tool allow/ask/deny rules with glob/regex support
- 🤝 Sub-agents — Spawn specialized built-in agents (code-reviewer, debugger, planner, explorer) within a session
- ⚡ Auto-compact — Automatic context compaction at 85% usage;
/compact slash command; 3 modes (prompt / auto / disabled)
Workspace & Memory
- 🧠 Project Memory — Persistent memory via
LIYAAI.md and .liyaai/memory/; /memory slash command
- 📋 Custom Commands — Add project slash commands as
.md files in .liyaai/commands/
- ⏪ Prompt Rewind — Per-message file snapshots; rewind button to undo AI edits
- 🌐 web_fetch Tool — AI can fetch URLs directly (SSRF-protected Python script)
- 🛠️ Script Runner — Run
.liyaai/scripts/ scripts via run_script tool (venv-aware Python)
- 📦 Multi-project Workspace —
workspace.json for managing multiple sub-projects in one session
- 🧩 MCP Client — Connect any Model Context Protocol server; tools auto-registered in agent loop
- 🎯 Skills System — Reusable, parameterized instruction sets loaded from
.liyaai/skills/
- 🐚 Background Shell — Long-running background processes with
background_shell tool
- ✅ Checkpointing — Save and restore agent state mid-session
- 📓 Jupyter Notebook Tools —
notebook_read and notebook_edit for .ipynb files
- 🖼️ Image/Screenshot Input — Paste screenshots, pick files via button, or drag-and-drop images into chat
- 📎 File Attachments — Attach files via paperclip UI; injected as
<attached_file> context
- 📊 Statusline — Live workspace context injection via
statusline.sh
- 🎨 Output Style — Customize AI response format/tone via
.liyaai/output-style.md
- 📈 Analytics Client — Session and tool-use event tracking
- 🛒 Marketplace — Feature flag system and
/marketplace command
- ⌨️ New Keybindings — Switched to
Ctrl+Alt+* / Cmd+Alt+* to eliminate chord conflicts
- 🔄 Backend Session Lock — Polling loop for 202 "processing" responses (100 × 3 s, up to 5 min)
- 🔒 Security Hardening — Content Security Policy on WebView, 10 MB image upload limit, SSRF-protected web_fetch
See CHANGELOG.md for full release notes.
Documentation
License
LiyaLabs Community License v1.0 — Free for individual use. Commercial use (white-labeling, reselling, SaaS) requires a license from LiyaLabs. See LICENSE for details.
| |