TOOLS_REFERENCE.md
TOOLS_REFERENCE.md
Updated to reflect current state: ~136 registered tools (~131 unique) dynamically registered across 24 tool modules (v1.9.12, released 31.08; per-module counts audited against src/tools/*.ts definitions + toolsProvider.ts registry on 28.08 — 5 memory/session names are shared between the utility and context-management registrations). Includes the Graphify-Inspired Suite (v1.9.5) — Confidence-Tagged Results, Hub-Exclusion Clustering, Project Auto-Detection, Context Tier Provenance, Cluster-Aware Tool Priority — plus v1.9.7 crash-resilient atomic writes, v1.9.8 hang prevention & registry sync, and v1.9.9 grep_files hard limits + mid-loop token deltas, plus the pattern_scan search tool (v1.9.12, 30.–31.08).
| Category | Count | Default State | Status |
|---|---|---|---|
| File System | 23 | ✅ Enabled | Active |
| Code Refactoring | 1 | ✅ Enabled | Active |
| Web Research | 3 | ✅ Enabled | Active |
| Browser Automation | 5 | ❌ Disabled | Active |
| Git & GitHub | 15 | ❌ Disabled | Active |
| Database | 1 | ❌ Disabled | Active |
| Background Commands | 3 | ❌ Disabled | Active |
| Execution | 5 | ❌ Mixed (JS/Python: enabled) | Active |
| Utilities | ~25 (+6 context-management duplicates; +detect_os_environment) | ✅ Utility toggle | Active |
| Image Processing | 4 | ✅ Enabled | Active |
| Vector RAG | 7 | ✅ Enabled | Active |
| UI Generation | 3 | ❌ Disabled | Active |
| Context Management | 20 (12 core + 8 session-index/project-registry tools) | ✅ Enabled | Active |
| Text Processing | 4 | ✅ Enabled | Active |
| Backup & Restore | 5 | ✅ Utility toggle | Active |
| Data Visualization | 1 | ✅ Utility toggle | Active |
| Document Parsing | 1 | ✅ Enabled | Active |
| HTTP Client | 3 | ❌ Disabled | Active |
| Task Planning | 3 | ✅ Enabled | Active |
Note: All tool categories are fully registered in
toolsProvider.tsusing the declarative registry pattern (v1.8.2+). The former gateway-tools file has been removed from the codebase (v1.9.10 session, 24.08) — direct SDK registration is the sole pattern and handles grammar parser compatibility via schema minification.
| Tool | Description |
|---|---|
list_directory | List files and directories with optional depth control; supports recursive traversal |
read_file | Read file content with auto-chunking for large files; binary detection prevents corrupt output |
read_file_chunked | Read files in structured chunks returning start/end indices for streaming control |
save_file | Async atomic write operations via shared atomicWrite utility (src/utils/atomicWrite.ts) — randomized temp filenames prevent collisions, crash-resilient (original intact if interrupted); parent directory auto-creation; batch save support |
| Tool | Description |
|---|---|
replace_text_in_file | Replace text globally or per-occurrence with async atomic write + backup; line-ending preservation, binary protection, crash-resilient temp-file pattern |
insert_at_line | Insert content at specific 1-indexed line number; CRLF/LF detection preserves Windows line endings; async atomic write via shared utility |
append_file | Append text to file end (or create if missing); combined size limit enforcement (existing + new ≤ 10MB); async atomic write with crash resilience |
delete_lines_in_file | Delete single or range of lines; default backup=true for irreversible operations; async atomic write via shared utility |
| Tool | Description |
|---|---|
make_directory | Create directory with recursive parent creation; idempotent (succeeds if exists) |
move_file | Move/rename files or directories using async atomic rename with cross-filesystem copy+delete fallback |
copy_file | Copy file to new location with async atomic write and parent directory auto-creation |
delete_files_by_pattern | Delete multiple files in the current directory matching a regex pattern |
All file-modifying tools now use the shared atomicWrite utility (src/utils/atomicWrite.ts) for crash-resilient writes.
All 9 modules converted from sync writes to async atomic pattern:
| Module | Tools | Pattern |
|---|---|---|
lineOperations.ts | delete_lines, line_operations | async → atomicWrite |
refactorCodeTools.ts | rename_identifier, move_function, extract_function, unused_import_cleanup | async → atomicWrite + rollback-on-failure |
utilityTools.ts | ~25 tools (backup, chart, etc.) | All async → atomicWrite |
dataVisualizationTools.ts | generate_chart | async → atomicWriteBinaryFile |
imageProcessingTools.ts | attachment temp-file materialization (resolveAttachmentFile) | async → atomicWriteBinaryFile |
markdownPreviewTools.ts | markdown_preview HTML save | async → atomicWrite |
imageProcessingTools.ts | screenshot_desktop PNG/JPEG save | external platform process writes the file directly — no Node-side write |
uiGenerationTools.ts | UI component saves | async → atomicWrite |
recodeEngine.ts (recodeTool/) | AST transformation output | async → atomicWrite + rollback-on-failure |
Note: Zero
writeFileSync/renameSynccalls remain insrc/tools/. All file operations use asyncfs.promiseswith crash-resilient atomic write pattern. |delete_path| Delete file or recursively delete directory with proper error handling | |change_directory| Set working directory for all subsequent file operations; validates path exists and is a directory |
| Tool | Description |
|---|---|
find_files | Recursive filename search with async optimization and configurable depth limit (default: 5) |
fuzzy_find_local_files | Levenshtein-based fuzzy name matching with 60s caching; excludes large directories automatically |
get_file_metadata | Retrieve size, creation/modification/access timestamps via fs.stat() |
analyze_project | Project-wide analysis: TypeScript diagnostics, circular dependency detection, ESLint, config optimization, import structure (configurable max-imports warning) |
file_diff | Compare two files and return a unified diff with +/− markers and line numbers |
directory_tree | Visualize directory structure in tree format; supports max depth, optional file sizes, automatic exclusion of large directories |
grep_files | Regex or AST pattern search across files; ReDoS-validated patterns with escape-aware top-level alternation splitting, include/exclude globs, context lines; hard limits: 15 s total scan deadline (GREP_SCAN_DEADLINE_MS) → partial results + aborted flag, regex mode skips lines >20k chars (MAX_LINE_CHARS_REGEX_MODE), per-regex budget 500 ms with abandon-and-continue (PER_REGEX_TIMEOUT_MS), single-file backstop via Promise.race at deadline+5 s (v1.9.9); parameter (default 10, range 1–50) + per-file line cap configurable via (default , over-cap files reported in ) + per-file size gate via (default 100 KB — oversize files reported in , never scanned) (v1.9.8+); (29.–30.08, post-v1.9.11): patterns the stricter triage gate cannot cheaply PROVE safe are regex-evaluated for the whole file inside an isolated Worker — hard-killed via after 2 s () if suspected catastrophic backtracking; a kill lands that file in (reason "likely ReDoS-prone pattern") and the scan continues, while proven-safe patterns keep the inline fast path with zero overhead; (v1.9.13, 02.09 — new module ): regex-mode directory scans first run an in-process WASM ripgrep prefilter (lazy dynamic import on first use — a missing dep or a Rust-dialect parse error such as lookarounds/backreferences transparently falls back to the full-JS walk described above, all hang guards intact; boot is never at risk) that restricts phase-2 match shaping to the candidate files it names — every limit, cap and record stays unchanged (byte-identical skip-record contract, pinned by the parity suite vs a frozen golden baseline); always applies in regex mode as before, hidden-file scanning mirrors previous walker behavior; single-file targets and AST mode are untouched code paths |
REV-24 (28.08, v1.9.10): Prose alternations with a bare
&(e.g."Backup & Restore|Git & GitHub") now correctly stay in regex mode —&is not a JS regex metacharacter and no longer false-positives the code-signature heuristic. Genuine code-signature patterns are still auto-escaped to literal only when an unescaped*,+or?pairs with a signature indicator; the response then carriespatternMode:"auto_escaped"with a hint string explaining why (no more silent 0-match fallback).
Requires "🔧 AST Code Refactoring Tools" toggle in settings or God Mode.
refactor_code)Leverages Babel's Abstract Syntax Tree (AST) parser for safe, syntax-aware code transformations. Replaces fragile line-based string manipulation with proper node traversal and regeneration. Supports TypeScript out-of-the-box.
| Operation | Description |
|---|---|
rename_identifier | Globally rename variables, functions, or class names across a file using AST binding analysis |
move_function | Extract functions (including Arrow Functions & Class Methods) to another file with proper syntax preservation |
extract_function | Pull selected code blocks into new standalone functions via Babel AST parsing |
unused_import_cleanup | Detect and remove dead imports/specifiers using static analysis; TypeScript-aware (import type) |
The src/tools/recodeTool/ module implements a pluggable rule engine for advanced AST-based code analysis. Rules are applied sequentially with dry-run diff output and backup/rollback support.
| Rule File | Purpose | Status |
|---|---|---|
unusedImports.ts | Identifies unused imports via cross-reference analysis against usage patterns | ✅ Implemented (Tier 1) — the only live rule as of v1.9.12 rev 23 |
🗑️ Removed 01.09.2026: The former rules
deadCodeDetection.ts,modulePathNormalization.ts,typeInference.tsandasyncModernizer.ts(documented in v1.9.8-era entries below) were never wired into anyrefactor_codeoperation — removed as audited Tier-1 dead code; see the CHANGELOG_v2.md entry [01.09.2026 ~18:30].
1. Rename Identifiers
2. Move Functions Between Files
3. Extract Code Block into New Function
4. Clean Up Unused Imports
| Tool | Description |
|---|---|
web_search | Multi-engine search (DDG, Google, Bing) with automatic fallback chain configuration |
wikipedia_search | Search Wikipedia summaries supporting multiple languages; returns concise overviews |
fetch_web_content | Clean text extraction from URLs removing ads/navigation; supports custom headers and timeouts |
| Tool | Description |
|---|---|
browser_open_page | Navigate Puppeteer headless browser to URL with optional selector wait and screenshot capture |
browser_session_control | Manage persistent browser session lifecycle including connection state and inactivity timers |
browser_session_close | Gracefully close browser session preventing orphaned Chromium processes |
preview_html | Render raw HTML or existing .html file in default system browser via OS shell command |
open_file | Open files/URLs in system default application (Windows start, macOS open, Linux xdg-open) |
| Tool | Description |
|---|---|
git_status | Repository status: staged/unstaged files, branch info, ahead/behind counts vs remote |
git_diff | Changes between commits/branches/work-tree with stat summary and name-only options |
git_commit | Commit staged changes; supports --amend for modifying last commit and -a for auto-staging |
git_log | Ordered commit history with max-count, date range, author filtering and custom format output |
git_add | Stage files (individual, directory, or all) returning list of staged items with status |
git_checkout | Switch branches, create new (-b), checkout remote tracking; handles merge conflicts gracefully |
| Tool | Description |
|---|---|
git_stash | Manage uncommitted changes: save, pop, drop, and list stashes via native Git CLI fallback (isomorphic-git does not support stash) |
git_blame | Per-line commit history showing author, timestamp, hash; path validation prevents traversal attacks |
| Tool | Description |
|---|---|
gh_create_issue | Create repository issues supporting title, body, labels, assignees, milestones |
gh_list_issues | List issues filtered by state (open/closed), labels, assignees with pagination support |
gh_view_comments | Retrieve issue/PR comment threads with author, timestamp, body, and reaction data |
gh_create_pr | Create PRs from current branch with draft status, reviewers, and label assignment |
gh_list_prs | List pull requests filtered by state, author, base branch for lifecycle tracking |
gh_view_pr_diff | Fetch PR diff/patch showing added/removed lines without requiring local checkout |
gh_push | Push commits to remote via gh CLI with automatic auth and force push option support |
| Tool | Description |
|---|---|
query_database | Read-only SQLite queries with SQL injection prevention; parameterized binding for safe input handling |
| Tool | Description |
|---|---|
run_background_command | Start long-running process continuing independently without blocking the event loop |
check_background_command | Monitor status, stdout, stderr of running/completed background processes with exit codes |
cancel_background_command | Terminate running background command gracefully by PID or session reference |
| Tool | Description |
|---|---|
run_javascript | Execute JS in isolated VM context; blocks eval, require, child_process with 5s timeout default |
run_python | Execute Python in controlled environment; blocks os/subprocess/sys imports with 10s timeout default |
| Tool | Description |
|---|---|
execute_command | Run shell commands with multi-layer sanitization: dangerous pattern blocking and pipe limits |
run_in_terminal | Launch OS-native terminal window (cmd/PowerShell/zsh/bash) with env vars and visibility options |
run_tests | Auto-detect test framework from package.json scripts; supports Jest, Mocha, Vitest runners |
| Tool | Description |
|---|---|
save_memory | Persist facts to .ai_toolbox_memory.msgpack MessagePack binary for cross-session continuity |
get_memory | Retrieve all saved memory entries with optional type filtering and result limits |
search_memory | Keyword search across stored memories returning relevance confidence scores per match |
delete_memory | Remove specific memory entry by unique ID returned during save operations |
save_session_summary | Save structured summary (accomplishments, pending tasks) with zlib compression bypassing 10k SDK limit |
get_session_summary | Retrieve latest session summary with backward-compatible legacy fallback parser for pre-v1.5.15 data |
| Tool | Description |
|---|---|
get_system_info | OS type/version, CPU model/count, total/available memory, disk usage statistics |
system_monitor | Detailed CPU, memory, disk, network interface metrics reporting for performance tracking |
process_list | Running processes with CPU%, memory footprint, PID hierarchy; case-insensitive name filtering |
env_inspect | List environment variables with optional prefix filtering for targeted variable inspection |
detect_os_environment | Report OS capabilities ensuring correct command syntax before shell/path operations |
| Tool | Description |
|---|---|
read_clipboard | Cross-platform clipboard read (Windows GetClipboardData, macOS pbpaste, Linux xclip/xsel) |
write_clipboard | Write text to system clipboard with automatic platform detection and no manual config needed |
send_notification | OS-native toast notification with title, message body, optional custom icon for user awareness |
| Tool | Description |
|---|---|
findLMStudioHome | Locate LM Studio installation directory across Windows/macOS/Linux returning model storage path |
get_enabled_tools | List currently enabled tools verifying active categories and God Mode bypass status |
hash_file | Generate MD5/SHA1/SHA256 cryptographic checksums for file integrity verification |
token_count | LLM token counting via tiktoken (cl100k_base, p50k_base, gpt2 encodings) for context estimation |
convert_format | JSON↔CSV conversion, base64 encode/decode, compress/decompress with configurable levels |
secret_scan | Scan files for exposed API keys, passwords, tokens; supports custom exclusion patterns |
port_check | Synchronous TCP port availability check on localhost or custom host for service verification |
package_manage | Install/uninstall/update/audit npm/pip/cargo packages (⚠️ requires config toggle enablement) |
json_query | jq-style JSON field extraction with dot notation, array indexing, wildcard support; 10MB file cap |
env_update | Safe .env key-value management with validation (alphanumeric + underscores); auto-creates entries |
get_current_working_directory | Return absolute working directory path for reliable relative path reference in workflows |
| Tool | Description |
|---|---|
image_to_text | Tesseract.js OCR extracting text with confidence score, language detection, bounding boxes (50MB max) |
describe_image | Get image metadata: dimensions, format, size, timestamps for PNG/JPG/BMP/GIF/WebP/TIFF |
screenshot_desktop | Cross-platform desktop capture via PowerShell (.NET GDI+), macOS screencapture, or ImageMagick import |
compare_images | Byte-level similarity comparison with dimension checking; pixel-level requires sharp/jimp library |
| Tool | Description |
|---|---|
rag_index_pdf | Extract PDF text via pdf-parse, chunk by page boundary with page_number metadata; bounded ~300 words/chunk for OOM safety; traceable results per page number |
rag_index_docx | Extract DOCX raw text via mammoth library, word-bounded chunks (default 300 words, 50 overlap); same embedding pipeline as PDF |
rag_index_xlsx | Extract all sheets as row arrays via xlsx package; chunks by rows (default 100), optional sheet-name prefix for traceability; includeSheetNames parameter controls prefix behavior |
| Tool | Description |
|---|---|
rag_index_files | Index files for semantic search supporting TS/JS/MD/JSON/YAML/text formats with batch processing |
rag_query_vector | Cosine similarity query returning top-k results (default 5, max 20) with chunk content and scores |
rag_clear_index | Clear entire vector index requiring confirm=true for safety; useful before full reindexing |
rag_web_content | RAG pipeline fetching URL content then extracting only text chunks relevant to query |
| Tool | Description |
|---|---|
generate_ui_component | Create interactive HTML/CSS/JS components (buttons, forms, tables) from user descriptions |
render_and_preview_ui | Render components in browser with live editing and hot reload for rapid prototyping |
extract_ui_data | Extract structured data from pages using CSS selectors/XPath returning tabular output |
Note: 5 additional context management tools (save_session_summary, get_session_summary, save_memory, get_memory, delete_memory) are also available under the Utilities category for backward compatibility.
| Tool | Description |
|---|---|
auto_summarize_context | Analyze session patterns, tool usage frequency, config changes; saves to persistent memory with default 'global' scope (v1.9.1+) |
get_context_memory | Retrieve past entries filtered by type (decision/pattern/config/error/summary) with deterministic heuristic scoring applied — recent + frequently accessed entries surface first (v1.9.1+) |
search_context | Fuzzy text search across titles, content bodies, tags for efficient retrieval and analysis; expired session entries pruned before search (24h TTL, v1.9.1+) |
context_summary | Statistical overview: total entries, type breakdowns, recent activity counts for auditing |
delete_context_entry | Remove specific context entry by unique ID without clearing entire history |
clear_context_memory | Clear all persistent memory entries (⚠️ irreversible; requires confirm=true) |
track_important_event | Manually record events/decisions/milestones with custom tags for categorized retrieval |
save_session_summary | Save structured summary (accomplishments, pending tasks) with zlib compression bypassing 10k SDK limit |
get_session_summary | Retrieve latest session summary with backward-compatible legacy fallback parser for pre-v1.5.15 data |
save_memory | Persist facts to .ai_toolbox_memory.msgpack MessagePack binary for cross-session continuity |
get_memory |
Documented 28.08 — present in contextManagementTools.ts since before the last doc sync.
| Tool | Description |
|---|---|
list_sessions | Browse all saved session summaries with pagination and limit controls |
search_sessions | Keyword search across stored session summaries (newest first) |
clear_session_index | Remove all session index entries (lightweight index only — summaries untouched; requires confirm=true) |
register_project | Register or update a project in the cross-project registry by name + working-dir path |
get_project_info | Retrieve details of one registered project by its working directory path |
list_projects | List all registered projects with paths, last-accessed time and session counts |
search_projects | Search registered projects by name or path substring |
switch_context | Switch context storage to another project's working directory (memory/session lookup target) |
Memory System Enhancements (v1.9.1):
global/project/session scope for future isolation filtering(Recency × 0.7) + (Frequency × 0.3) ensures intelligent orderingCross-Project Registry (v1.9.8+):
search_projects / get_project_info now call _syncFromSessionMemory() before lookup — auto-registers projects discovered from session memory decisions (.ai_toolbox_memory.msgpack) so the registry never returns stale empty results. Lazy pattern: no startup overhead.register_project remains the primary explicit registration method (requires confirmed path). Silent auto-registration was removed in v1.9.8; Step 0.7 keyword detection in promptPreprocessor.ts surfaces registered projects on mention (confirm-first: banner only — the one-shot CWD switch happens exclusively after an explicit YES/JA reply).| Tool | Description |
|---|---|
text_transform | Regex substitution with capture groups ($1, $2), line ranges, global/case-insensitive modes; safer than shell sed |
line_operations | Insert/delete/reorder lines using awk-like operations without shell dependencies; atomic writes safety + NEW v1.7.0: Three-layer guardrail system (pattern matching, verification, bounds validation) |
text_extract | Structured data extraction from delimited text (CSV/TSV/custom) with configurable zero-based field indices |
markdown_table_gen | Generate Markdown tables from object arrays with headers, alignment, truncation, and customizable ellipsis |
Resolved recurring issues where LLMs inserted content at wrong lines due to stale line numbers. Three-layer defense-in-depth:
Find insertion point by searching file content instead of trusting line numbers — works regardless of current position.
| Parameter | Type | Required | Description |
|---|---|---|---|
insert_after_pattern | string | No | Line containing this text → insert AFTER it (max 500 chars) |
insert_before_pattern | string | No | Line containing this text → insert BEFORE it (max 500 chars) |
Example:
Verify expected text exists at target_line before proceeding — blocks operation with error + actual context on mismatch.
| Parameter | Type | Required | Description |
|---|---|---|---|
verify_before_insert | string | No | Content expected at target_line; if mismatch → blocked (max 200 chars) |
Example:
target_line outside valid range (1 to file length + 1)\n into individual array elements (fixed bug where \n became literal characters on single line)replace_text_in_file insteadMD5 hash verification ensures file content was written correctly. After writing content, the tool:
crypto.createHash('md5'))success: false with error showing both hashesTest Results: 9/9 test scenarios passed — zero regressions in existing delete/move operations.
| Tool | Description |
|---|---|
create_backup | Compressed ZIP backup of entire working directory stored in .ai_toolbox_backups/; requires confirm=true |
list_backups | List backups sorted by date newest-first with filename, path, size bytes, and creation timestamp |
restore_backup | Restore full working directory from archive (⚠️ overwrites all files; requires confirm=true) |
delete_backup | Remove specific backup file (⚠️ irreversible; validates existence before deletion) |
cleanup_backups | List and optionally delete .bak edit backups (dry-run by default; confirm required to delete) — registered under the utility toggle key (cleanupBackupsTool.ts) |
Status: src/tools/gatewayTools.ts has been removed from the codebase (v1.9.10 session, 24.08) — no gateway tool definitions remain anywhere under src/. Direct SDK registration + schema minification is the active approach; this section documents the historical design only.
The direct SDK registration approach (all tools exposed directly to LLM) has proven more effective for usability. Grammar parser compatibility is now handled via schema minification (toolsSchemaMinifier.ts), which compresses descriptions and caps constraints without limiting tool count.
The gateway pattern was originally designed as follows:
explore_toolsDiscovers available tools and their categories without exposing all registered tools at once. Returns category names only to keep schema small.
| Parameter | Type | Required | Description |
|---|---|---|---|
category | string | No | Optional: Filter by specific category name (e.g., "fileSystem", "webSearch") |
Returns: { success: boolean, categories: string[], message?: string }
execute_gateway_toolExecutes any registered tool by name with built-in validation and error handling. Delegates to the existing ToolRegistry for execution.
| Parameter | Type | Required | Description |
|---|---|---|---|
toolName | string | Yes | Name of the tool to execute (e.g., "read_file", "web_search") |
arguments | Record<string, unknown> | Yes | Tool-specific arguments as key-value pairs |
Returns: Tool execution result or error message
Why Gateway Was Designed: Sending all registered tools directly to llama.cpp's grammar parser caused failed to parse grammar errors due to EBNF recursion limits. The gateway pattern was intended to reduce initial schema payload while maintaining full functionality on-demand via delegation.
utility toggle)| Tool | Description |
|---|---|
generate_chart | Create line/bar/pie/scatter/area charts outputting SVG/PNG with customizable colors, labels, legends. Registered via dataVisualizationTools.ts in the utility tools registry. |
| Tool | Description |
|---|---|
read_document | Read PDF (pdf-parse), DOCX (mammoth), or TXT files; automatic binary detection prevents corrupt output |
| Tool | Description |
|---|---|
http_request | Generic GET/POST/PUT/DELETE/PATCH client with retry logic, timeout config, multipart upload support |
http_get_json | GET requests expecting JSON response with automatic parsing and optional schema validation |
http_post_json | POST requests with JSON payload, content-type auto-handling, auth token support, status code return |
Requires taskPlanning toggle in settings or God Mode.
Structured multi-step workflow management tools for creating, tracking, and updating execution plans. Tools persist plan data to .ai_toolbox_plans.json using atomic writes with Zod schema validation.
| Tool | Description |
|---|---|
create_plan | Create a new execution plan with goal and ordered steps (1-30 steps, 500 chars max each). Replaces any existing active plan. Returns planId, goal, and stepCount. |
get_plan | Return the active plan details including goal, all step statuses, completion percentage, elapsed time since creation, and timestamps. Returns null if no plan exists. |
update_plan_step | Update a single step's status according to state machine rules (pending→in_progress→done, any→blocked, blocked→pending). Requires note when marking as blocked. Returns completion metrics including completedSteps, totalSteps, and allDone boolean. |
Example Workflow:
All categories toggleable in LM Studio settings panel. Most dangerous tools disabled by default requiring explicit opt-in through the UI. God Mode enables all categories instantly — use cautiously.
All tools implement multiple security layers:
validatePath()rm -rf, sudo)⚠️ Important: Most dangerous tools disabled by default requiring explicit user opt-in through settings panel. God Mode bypasses all category restrictions.
Reference updated from actual source code analysis on 2026-08-24 (v1.9.10); v1.9.10 sync: Web Research count 4→3 after duplicate rag_web_content removal (tool served by Vector RAG module since v1.9.10). Prior baseline: 2026-08-17 (v1.9.8). All tool counts verified against toolsProvider.ts registry entries and src/tools/*.ts. insert_at_line read-back drift detection documented with v1.8.8 hard fix. Graphify-Inspired Suite features (v1.9.5): Confidence-Tagged Results, Hub-Exclusion Clustering (83 tests), Project Auto-Detection, Context Tier Provenance, Cluster-Aware Tool Priority.
Five new architectural modules added in v1.9.5 following graphify repository analysis patterns:
src/types/confidenceTypes.ts)Typed confidence metadata attached to all tool execution outputs.
Three confidence levels for result reliability assessment:
Helper functions available for standardized confidence assignment:
src/utils/hubExclusionClustering.ts)Louvain community detection with hub-exclusion for architectural transparency.
Algorithm flow: Build dependency graph → Calculate degrees → Identify hubs (80th percentile) → Louvain clustering on non-hubs → Majority-vote hub reattachment.
Output includes modularity score, cluster density metrics, and hub identification — all running synchronously under 10ms for typical plugin graphs. 83 tests verify correctness across graph construction, hub identification at various percentiles, Louvain convergence, majority-vote reattachment, and edge cases.
Use cases: Architectural visualization, refactoring guidance (identify modules to refactor together), ContextGuard optimization (compress related clusters), tool priority ranking via centrality scoring.
src/projectAutoDetect.ts)Automatic project registration when cross-project registry searches return empty.
Confidence scoring signals: package.json (+0.4), src/ or lib/ (+0.3), .git (+0.1), build configs (+0.2). Name normalization handles hyphen↔underscore variants and scoped packages (@lmstudio/ai-toolbox). ⚠️ DEPRECATED (v1.9.8+): initializeProjectDetection() no longer called from index.ts at startup. Registration requires explicitConfirmation=true via register_project tool. See src/index.ts comment: "NO AUTO-REGISTRATION ON STARTUP".
src/contextTiers.ts)Typed provenance markers for tier-scoped context replacement.
Origin types: _origin: 'ast' | 'semantic' distinguishes raw file content from derived AI insights. replaceTier() replaces only changed tiers while preserving unchanged ones — follows graphify's incremental update pattern to prevent silent overwrites of unchanged nodes.
src/tools/toolPriority.ts)Five-tier priority ranking with hub-exclusion clustering integration.
Tiers: CRITICAL (1, file system tools), HIGH (2, web research/execution/git), STANDARD (3, browser/image/RAG), OPTIONAL (4, context management), BACKGROUND (5, backup/cleanup). Centrality scoring computed from module degree × hub bonus — used for intelligent tool filtering when grammar parser limits require pruning.
imageAnalysis toggle)Vision model-based image analysis via loaded LM Studio vision models (e.g., Llama 3.2 Vision, Moondream). Requires a vision-enabled model loaded in LM Studio (model.vision === true).
| Tool | Description |
|---|---|
analyze_image | Sends image to loaded vision-capable LLM along with optional prompt; returns model's textual analysis + image metadata (size, format, dimensions). Supports filesystem paths and attached files via SDK attachment resolution. Uses shared atomicWriteBinaryFile() for any saved outputs. |
fs.existsSync() checkpath.resolve(process.cwd(), inputPath)os.tmpdir(), , )require('../attachmentManager.js') with static — eliminates warningUpdated to reflect current state: ~136 registered tools (~131 unique) dynamically registered across 24 tool modules (v1.9.12, released 31.08; per-module counts audited against src/tools/*.ts definitions + toolsProvider.ts registry on 28.08 — 5 memory/session names are shared between the utility and context-management registrations). Includes the Graphify-Inspired Suite (v1.9.5) — Confidence-Tagged Results, Hub-Exclusion Clustering, Project Auto-Detection, Context Tier Provenance, Cluster-Aware Tool Priority — plus v1.9.7 crash-resilient atomic writes, v1.9.8 hang prevention & registry sync, and v1.9.9 grep_files hard limits + mid-loop token deltas, plus the pattern_scan search tool (v1.9.12, 30.–31.08).
| Category | Count | Default State | Status |
|---|---|---|---|
| File System | 23 | ✅ Enabled | Active |
| Code Refactoring | 1 | ✅ Enabled | Active |
| Web Research | 3 | ✅ Enabled | Active |
| Browser Automation | 5 | ❌ Disabled | Active |
| Git & GitHub | 15 | ❌ Disabled | Active |
| Database | 1 | ❌ Disabled | Active |
| Background Commands | 3 | ❌ Disabled | Active |
| Execution | 5 | ❌ Mixed (JS/Python: enabled) | Active |
| Utilities | ~25 (+6 context-management duplicates; +detect_os_environment) | ✅ Utility toggle | Active |
| Image Processing | 4 | ✅ Enabled | Active |
| Vector RAG | 7 | ✅ Enabled | Active |
| UI Generation | 3 | ❌ Disabled | Active |
| Context Management | 20 (12 core + 8 session-index/project-registry tools) | ✅ Enabled | Active |
| Text Processing | 4 | ✅ Enabled | Active |
| Backup & Restore | 5 | ✅ Utility toggle | Active |
| Data Visualization | 1 | ✅ Utility toggle | Active |
| Document Parsing | 1 | ✅ Enabled | Active |
| HTTP Client | 3 | ❌ Disabled | Active |
| Task Planning | 3 | ✅ Enabled | Active |
Note: All tool categories are fully registered in
toolsProvider.tsusing the declarative registry pattern (v1.8.2+). The former gateway-tools file has been removed from the codebase (v1.9.10 session, 24.08) — direct SDK registration is the sole pattern and handles grammar parser compatibility via schema minification.
| Tool | Description |
|---|---|
list_directory | List files and directories with optional depth control; supports recursive traversal |
read_file | Read file content with auto-chunking for large files; binary detection prevents corrupt output |
read_file_chunked | Read files in structured chunks returning start/end indices for streaming control |
save_file | Async atomic write operations via shared atomicWrite utility (src/utils/atomicWrite.ts) — randomized temp filenames prevent collisions, crash-resilient (original intact if interrupted); parent directory auto-creation; batch save support |
| Tool | Description |
|---|---|
replace_text_in_file | Replace text globally or per-occurrence with async atomic write + backup; line-ending preservation, binary protection, crash-resilient temp-file pattern |
insert_at_line | Insert content at specific 1-indexed line number; CRLF/LF detection preserves Windows line endings; async atomic write via shared utility |
append_file | Append text to file end (or create if missing); combined size limit enforcement (existing + new ≤ 10MB); async atomic write with crash resilience |
delete_lines_in_file | Delete single or range of lines; default backup=true for irreversible operations; async atomic write via shared utility |
| Tool | Description |
|---|---|
make_directory | Create directory with recursive parent creation; idempotent (succeeds if exists) |
move_file | Move/rename files or directories using async atomic rename with cross-filesystem copy+delete fallback |
copy_file | Copy file to new location with async atomic write and parent directory auto-creation |
delete_files_by_pattern | Delete multiple files in the current directory matching a regex pattern |
All file-modifying tools now use the shared atomicWrite utility (src/utils/atomicWrite.ts) for crash-resilient writes.
All 9 modules converted from sync writes to async atomic pattern:
| Module | Tools | Pattern |
|---|---|---|
lineOperations.ts | delete_lines, line_operations | async → atomicWrite |
refactorCodeTools.ts | rename_identifier, move_function, extract_function, unused_import_cleanup | async → atomicWrite + rollback-on-failure |
utilityTools.ts | ~25 tools (backup, chart, etc.) | All async → atomicWrite |
dataVisualizationTools.ts | generate_chart | async → atomicWriteBinaryFile |
imageProcessingTools.ts | attachment temp-file materialization (resolveAttachmentFile) | async → atomicWriteBinaryFile |
markdownPreviewTools.ts | markdown_preview HTML save | async → atomicWrite |
imageProcessingTools.ts | screenshot_desktop PNG/JPEG save | external platform process writes the file directly — no Node-side write |
uiGenerationTools.ts | UI component saves | async → atomicWrite |
recodeEngine.ts (recodeTool/) | AST transformation output | async → atomicWrite + rollback-on-failure |
Note: Zero
writeFileSync/renameSynccalls remain insrc/tools/. All file operations use asyncfs.promiseswith crash-resilient atomic write pattern. |delete_path| Delete file or recursively delete directory with proper error handling | |change_directory| Set working directory for all subsequent file operations; validates path exists and is a directory |
| Tool | Description |
|---|---|
find_files | Recursive filename search with async optimization and configurable depth limit (default: 5) |
fuzzy_find_local_files | Levenshtein-based fuzzy name matching with 60s caching; excludes large directories automatically |
get_file_metadata | Retrieve size, creation/modification/access timestamps via fs.stat() |
analyze_project | Project-wide analysis: TypeScript diagnostics, circular dependency detection, ESLint, config optimization, import structure (configurable max-imports warning) |
file_diff | Compare two files and return a unified diff with +/− markers and line numbers |
directory_tree | Visualize directory structure in tree format; supports max depth, optional file sizes, automatic exclusion of large directories |
grep_files | Regex or AST pattern search across files; ReDoS-validated patterns with escape-aware top-level alternation splitting, include/exclude globs, context lines; hard limits: 15 s total scan deadline (GREP_SCAN_DEADLINE_MS) → partial results + aborted flag, regex mode skips lines >20k chars (MAX_LINE_CHARS_REGEX_MODE), per-regex budget 500 ms with abandon-and-continue (PER_REGEX_TIMEOUT_MS), single-file backstop via Promise.race at deadline+5 s (v1.9.9); parameter (default 10, range 1–50) + per-file line cap configurable via (default , over-cap files reported in ) + per-file size gate via (default 100 KB — oversize files reported in , never scanned) (v1.9.8+); (29.–30.08, post-v1.9.11): patterns the stricter triage gate cannot cheaply PROVE safe are regex-evaluated for the whole file inside an isolated Worker — hard-killed via after 2 s () if suspected catastrophic backtracking; a kill lands that file in (reason "likely ReDoS-prone pattern") and the scan continues, while proven-safe patterns keep the inline fast path with zero overhead; (v1.9.13, 02.09 — new module ): regex-mode directory scans first run an in-process WASM ripgrep prefilter (lazy dynamic import on first use — a missing dep or a Rust-dialect parse error such as lookarounds/backreferences transparently falls back to the full-JS walk described above, all hang guards intact; boot is never at risk) that restricts phase-2 match shaping to the candidate files it names — every limit, cap and record stays unchanged (byte-identical skip-record contract, pinned by the parity suite vs a frozen golden baseline); always applies in regex mode as before, hidden-file scanning mirrors previous walker behavior; single-file targets and AST mode are untouched code paths |
REV-24 (28.08, v1.9.10): Prose alternations with a bare
&(e.g."Backup & Restore|Git & GitHub") now correctly stay in regex mode —&is not a JS regex metacharacter and no longer false-positives the code-signature heuristic. Genuine code-signature patterns are still auto-escaped to literal only when an unescaped*,+or?pairs with a signature indicator; the response then carriespatternMode:"auto_escaped"with a hint string explaining why (no more silent 0-match fallback).
Requires "🔧 AST Code Refactoring Tools" toggle in settings or God Mode.
refactor_code)Leverages Babel's Abstract Syntax Tree (AST) parser for safe, syntax-aware code transformations. Replaces fragile line-based string manipulation with proper node traversal and regeneration. Supports TypeScript out-of-the-box.
| Operation | Description |
|---|---|
rename_identifier | Globally rename variables, functions, or class names across a file using AST binding analysis |
move_function | Extract functions (including Arrow Functions & Class Methods) to another file with proper syntax preservation |
extract_function | Pull selected code blocks into new standalone functions via Babel AST parsing |
unused_import_cleanup | Detect and remove dead imports/specifiers using static analysis; TypeScript-aware (import type) |
The src/tools/recodeTool/ module implements a pluggable rule engine for advanced AST-based code analysis. Rules are applied sequentially with dry-run diff output and backup/rollback support.
| Rule File | Purpose | Status |
|---|---|---|
unusedImports.ts | Identifies unused imports via cross-reference analysis against usage patterns | ✅ Implemented (Tier 1) — the only live rule as of v1.9.12 rev 23 |
🗑️ Removed 01.09.2026: The former rules
deadCodeDetection.ts,modulePathNormalization.ts,typeInference.tsandasyncModernizer.ts(documented in v1.9.8-era entries below) were never wired into anyrefactor_codeoperation — removed as audited Tier-1 dead code; see the CHANGELOG_v2.md entry [01.09.2026 ~18:30].
1. Rename Identifiers
2. Move Functions Between Files
3. Extract Code Block into New Function
4. Clean Up Unused Imports
| Tool | Description |
|---|---|
web_search | Multi-engine search (DDG, Google, Bing) with automatic fallback chain configuration |
wikipedia_search | Search Wikipedia summaries supporting multiple languages; returns concise overviews |
fetch_web_content | Clean text extraction from URLs removing ads/navigation; supports custom headers and timeouts |
| Tool | Description |
|---|---|
browser_open_page | Navigate Puppeteer headless browser to URL with optional selector wait and screenshot capture |
browser_session_control | Manage persistent browser session lifecycle including connection state and inactivity timers |
browser_session_close | Gracefully close browser session preventing orphaned Chromium processes |
preview_html | Render raw HTML or existing .html file in default system browser via OS shell command |
open_file | Open files/URLs in system default application (Windows start, macOS open, Linux xdg-open) |
| Tool | Description |
|---|---|
git_status | Repository status: staged/unstaged files, branch info, ahead/behind counts vs remote |
git_diff | Changes between commits/branches/work-tree with stat summary and name-only options |
git_commit | Commit staged changes; supports --amend for modifying last commit and -a for auto-staging |
git_log | Ordered commit history with max-count, date range, author filtering and custom format output |
git_add | Stage files (individual, directory, or all) returning list of staged items with status |
git_checkout | Switch branches, create new (-b), checkout remote tracking; handles merge conflicts gracefully |
| Tool | Description |
|---|---|
git_stash | Manage uncommitted changes: save, pop, drop, and list stashes via native Git CLI fallback (isomorphic-git does not support stash) |
git_blame | Per-line commit history showing author, timestamp, hash; path validation prevents traversal attacks |
| Tool | Description |
|---|---|
gh_create_issue | Create repository issues supporting title, body, labels, assignees, milestones |
gh_list_issues | List issues filtered by state (open/closed), labels, assignees with pagination support |
gh_view_comments | Retrieve issue/PR comment threads with author, timestamp, body, and reaction data |
gh_create_pr | Create PRs from current branch with draft status, reviewers, and label assignment |
gh_list_prs | List pull requests filtered by state, author, base branch for lifecycle tracking |
gh_view_pr_diff | Fetch PR diff/patch showing added/removed lines without requiring local checkout |
gh_push | Push commits to remote via gh CLI with automatic auth and force push option support |
| Tool | Description |
|---|---|
query_database | Read-only SQLite queries with SQL injection prevention; parameterized binding for safe input handling |
| Tool | Description |
|---|---|
run_background_command | Start long-running process continuing independently without blocking the event loop |
check_background_command | Monitor status, stdout, stderr of running/completed background processes with exit codes |
cancel_background_command | Terminate running background command gracefully by PID or session reference |
| Tool | Description |
|---|---|
run_javascript | Execute JS in isolated VM context; blocks eval, require, child_process with 5s timeout default |
run_python | Execute Python in controlled environment; blocks os/subprocess/sys imports with 10s timeout default |
| Tool | Description |
|---|---|
execute_command | Run shell commands with multi-layer sanitization: dangerous pattern blocking and pipe limits |
run_in_terminal | Launch OS-native terminal window (cmd/PowerShell/zsh/bash) with env vars and visibility options |
run_tests | Auto-detect test framework from package.json scripts; supports Jest, Mocha, Vitest runners |
| Tool | Description |
|---|---|
save_memory | Persist facts to .ai_toolbox_memory.msgpack MessagePack binary for cross-session continuity |
get_memory | Retrieve all saved memory entries with optional type filtering and result limits |
search_memory | Keyword search across stored memories returning relevance confidence scores per match |
delete_memory | Remove specific memory entry by unique ID returned during save operations |
save_session_summary | Save structured summary (accomplishments, pending tasks) with zlib compression bypassing 10k SDK limit |
get_session_summary | Retrieve latest session summary with backward-compatible legacy fallback parser for pre-v1.5.15 data |
| Tool | Description |
|---|---|
get_system_info | OS type/version, CPU model/count, total/available memory, disk usage statistics |
system_monitor | Detailed CPU, memory, disk, network interface metrics reporting for performance tracking |
process_list | Running processes with CPU%, memory footprint, PID hierarchy; case-insensitive name filtering |
env_inspect | List environment variables with optional prefix filtering for targeted variable inspection |
detect_os_environment | Report OS capabilities ensuring correct command syntax before shell/path operations |
| Tool | Description |
|---|---|
read_clipboard | Cross-platform clipboard read (Windows GetClipboardData, macOS pbpaste, Linux xclip/xsel) |
write_clipboard | Write text to system clipboard with automatic platform detection and no manual config needed |
send_notification | OS-native toast notification with title, message body, optional custom icon for user awareness |
| Tool | Description |
|---|---|
findLMStudioHome | Locate LM Studio installation directory across Windows/macOS/Linux returning model storage path |
get_enabled_tools | List currently enabled tools verifying active categories and God Mode bypass status |
hash_file | Generate MD5/SHA1/SHA256 cryptographic checksums for file integrity verification |
token_count | LLM token counting via tiktoken (cl100k_base, p50k_base, gpt2 encodings) for context estimation |
convert_format | JSON↔CSV conversion, base64 encode/decode, compress/decompress with configurable levels |
secret_scan | Scan files for exposed API keys, passwords, tokens; supports custom exclusion patterns |
port_check | Synchronous TCP port availability check on localhost or custom host for service verification |
package_manage | Install/uninstall/update/audit npm/pip/cargo packages (⚠️ requires config toggle enablement) |
json_query | jq-style JSON field extraction with dot notation, array indexing, wildcard support; 10MB file cap |
env_update | Safe .env key-value management with validation (alphanumeric + underscores); auto-creates entries |
get_current_working_directory | Return absolute working directory path for reliable relative path reference in workflows |
| Tool | Description |
|---|---|
image_to_text | Tesseract.js OCR extracting text with confidence score, language detection, bounding boxes (50MB max) |
describe_image | Get image metadata: dimensions, format, size, timestamps for PNG/JPG/BMP/GIF/WebP/TIFF |
screenshot_desktop | Cross-platform desktop capture via PowerShell (.NET GDI+), macOS screencapture, or ImageMagick import |
compare_images | Byte-level similarity comparison with dimension checking; pixel-level requires sharp/jimp library |
| Tool | Description |
|---|---|
rag_index_pdf | Extract PDF text via pdf-parse, chunk by page boundary with page_number metadata; bounded ~300 words/chunk for OOM safety; traceable results per page number |
rag_index_docx | Extract DOCX raw text via mammoth library, word-bounded chunks (default 300 words, 50 overlap); same embedding pipeline as PDF |
rag_index_xlsx | Extract all sheets as row arrays via xlsx package; chunks by rows (default 100), optional sheet-name prefix for traceability; includeSheetNames parameter controls prefix behavior |
| Tool | Description |
|---|---|
rag_index_files | Index files for semantic search supporting TS/JS/MD/JSON/YAML/text formats with batch processing |
rag_query_vector | Cosine similarity query returning top-k results (default 5, max 20) with chunk content and scores |
rag_clear_index | Clear entire vector index requiring confirm=true for safety; useful before full reindexing |
rag_web_content | RAG pipeline fetching URL content then extracting only text chunks relevant to query |
| Tool | Description |
|---|---|
generate_ui_component | Create interactive HTML/CSS/JS components (buttons, forms, tables) from user descriptions |
render_and_preview_ui | Render components in browser with live editing and hot reload for rapid prototyping |
extract_ui_data | Extract structured data from pages using CSS selectors/XPath returning tabular output |
Note: 5 additional context management tools (save_session_summary, get_session_summary, save_memory, get_memory, delete_memory) are also available under the Utilities category for backward compatibility.
| Tool | Description |
|---|---|
auto_summarize_context | Analyze session patterns, tool usage frequency, config changes; saves to persistent memory with default 'global' scope (v1.9.1+) |
get_context_memory | Retrieve past entries filtered by type (decision/pattern/config/error/summary) with deterministic heuristic scoring applied — recent + frequently accessed entries surface first (v1.9.1+) |
search_context | Fuzzy text search across titles, content bodies, tags for efficient retrieval and analysis; expired session entries pruned before search (24h TTL, v1.9.1+) |
context_summary | Statistical overview: total entries, type breakdowns, recent activity counts for auditing |
delete_context_entry | Remove specific context entry by unique ID without clearing entire history |
clear_context_memory | Clear all persistent memory entries (⚠️ irreversible; requires confirm=true) |
track_important_event | Manually record events/decisions/milestones with custom tags for categorized retrieval |
save_session_summary | Save structured summary (accomplishments, pending tasks) with zlib compression bypassing 10k SDK limit |
get_session_summary | Retrieve latest session summary with backward-compatible legacy fallback parser for pre-v1.5.15 data |
save_memory | Persist facts to .ai_toolbox_memory.msgpack MessagePack binary for cross-session continuity |
get_memory |
Documented 28.08 — present in contextManagementTools.ts since before the last doc sync.
| Tool | Description |
|---|---|
list_sessions | Browse all saved session summaries with pagination and limit controls |
search_sessions | Keyword search across stored session summaries (newest first) |
clear_session_index | Remove all session index entries (lightweight index only — summaries untouched; requires confirm=true) |
register_project | Register or update a project in the cross-project registry by name + working-dir path |
get_project_info | Retrieve details of one registered project by its working directory path |
list_projects | List all registered projects with paths, last-accessed time and session counts |
search_projects | Search registered projects by name or path substring |
switch_context | Switch context storage to another project's working directory (memory/session lookup target) |
Memory System Enhancements (v1.9.1):
global/project/session scope for future isolation filtering(Recency × 0.7) + (Frequency × 0.3) ensures intelligent orderingCross-Project Registry (v1.9.8+):
search_projects / get_project_info now call _syncFromSessionMemory() before lookup — auto-registers projects discovered from session memory decisions (.ai_toolbox_memory.msgpack) so the registry never returns stale empty results. Lazy pattern: no startup overhead.register_project remains the primary explicit registration method (requires confirmed path). Silent auto-registration was removed in v1.9.8; Step 0.7 keyword detection in promptPreprocessor.ts surfaces registered projects on mention (confirm-first: banner only — the one-shot CWD switch happens exclusively after an explicit YES/JA reply).| Tool | Description |
|---|---|
text_transform | Regex substitution with capture groups ($1, $2), line ranges, global/case-insensitive modes; safer than shell sed |
line_operations | Insert/delete/reorder lines using awk-like operations without shell dependencies; atomic writes safety + NEW v1.7.0: Three-layer guardrail system (pattern matching, verification, bounds validation) |
text_extract | Structured data extraction from delimited text (CSV/TSV/custom) with configurable zero-based field indices |
markdown_table_gen | Generate Markdown tables from object arrays with headers, alignment, truncation, and customizable ellipsis |
Resolved recurring issues where LLMs inserted content at wrong lines due to stale line numbers. Three-layer defense-in-depth:
Find insertion point by searching file content instead of trusting line numbers — works regardless of current position.
| Parameter | Type | Required | Description |
|---|---|---|---|
insert_after_pattern | string | No | Line containing this text → insert AFTER it (max 500 chars) |
insert_before_pattern | string | No | Line containing this text → insert BEFORE it (max 500 chars) |
Example:
Verify expected text exists at target_line before proceeding — blocks operation with error + actual context on mismatch.
| Parameter | Type | Required | Description |
|---|---|---|---|
verify_before_insert | string | No | Content expected at target_line; if mismatch → blocked (max 200 chars) |
Example:
target_line outside valid range (1 to file length + 1)\n into individual array elements (fixed bug where \n became literal characters on single line)replace_text_in_file insteadMD5 hash verification ensures file content was written correctly. After writing content, the tool:
crypto.createHash('md5'))success: false with error showing both hashesTest Results: 9/9 test scenarios passed — zero regressions in existing delete/move operations.
| Tool | Description |
|---|---|
create_backup | Compressed ZIP backup of entire working directory stored in .ai_toolbox_backups/; requires confirm=true |
list_backups | List backups sorted by date newest-first with filename, path, size bytes, and creation timestamp |
restore_backup | Restore full working directory from archive (⚠️ overwrites all files; requires confirm=true) |
delete_backup | Remove specific backup file (⚠️ irreversible; validates existence before deletion) |
cleanup_backups | List and optionally delete .bak edit backups (dry-run by default; confirm required to delete) — registered under the utility toggle key (cleanupBackupsTool.ts) |
Status: src/tools/gatewayTools.ts has been removed from the codebase (v1.9.10 session, 24.08) — no gateway tool definitions remain anywhere under src/. Direct SDK registration + schema minification is the active approach; this section documents the historical design only.
The direct SDK registration approach (all tools exposed directly to LLM) has proven more effective for usability. Grammar parser compatibility is now handled via schema minification (toolsSchemaMinifier.ts), which compresses descriptions and caps constraints without limiting tool count.
The gateway pattern was originally designed as follows:
explore_toolsDiscovers available tools and their categories without exposing all registered tools at once. Returns category names only to keep schema small.
| Parameter | Type | Required | Description |
|---|---|---|---|
category | string | No | Optional: Filter by specific category name (e.g., "fileSystem", "webSearch") |
Returns: { success: boolean, categories: string[], message?: string }
execute_gateway_toolExecutes any registered tool by name with built-in validation and error handling. Delegates to the existing ToolRegistry for execution.
| Parameter | Type | Required | Description |
|---|---|---|---|
toolName | string | Yes | Name of the tool to execute (e.g., "read_file", "web_search") |
arguments | Record<string, unknown> | Yes | Tool-specific arguments as key-value pairs |
Returns: Tool execution result or error message
Why Gateway Was Designed: Sending all registered tools directly to llama.cpp's grammar parser caused failed to parse grammar errors due to EBNF recursion limits. The gateway pattern was intended to reduce initial schema payload while maintaining full functionality on-demand via delegation.
utility toggle)| Tool | Description |
|---|---|
generate_chart | Create line/bar/pie/scatter/area charts outputting SVG/PNG with customizable colors, labels, legends. Registered via dataVisualizationTools.ts in the utility tools registry. |
| Tool | Description |
|---|---|
read_document | Read PDF (pdf-parse), DOCX (mammoth), or TXT files; automatic binary detection prevents corrupt output |
| Tool | Description |
|---|---|
http_request | Generic GET/POST/PUT/DELETE/PATCH client with retry logic, timeout config, multipart upload support |
http_get_json | GET requests expecting JSON response with automatic parsing and optional schema validation |
http_post_json | POST requests with JSON payload, content-type auto-handling, auth token support, status code return |
Requires taskPlanning toggle in settings or God Mode.
Structured multi-step workflow management tools for creating, tracking, and updating execution plans. Tools persist plan data to .ai_toolbox_plans.json using atomic writes with Zod schema validation.
| Tool | Description |
|---|---|
create_plan | Create a new execution plan with goal and ordered steps (1-30 steps, 500 chars max each). Replaces any existing active plan. Returns planId, goal, and stepCount. |
get_plan | Return the active plan details including goal, all step statuses, completion percentage, elapsed time since creation, and timestamps. Returns null if no plan exists. |
update_plan_step | Update a single step's status according to state machine rules (pending→in_progress→done, any→blocked, blocked→pending). Requires note when marking as blocked. Returns completion metrics including completedSteps, totalSteps, and allDone boolean. |
Example Workflow:
All categories toggleable in LM Studio settings panel. Most dangerous tools disabled by default requiring explicit opt-in through the UI. God Mode enables all categories instantly — use cautiously.
All tools implement multiple security layers:
validatePath()rm -rf, sudo)⚠️ Important: Most dangerous tools disabled by default requiring explicit user opt-in through settings panel. God Mode bypasses all category restrictions.
Reference updated from actual source code analysis on 2026-08-24 (v1.9.10); v1.9.10 sync: Web Research count 4→3 after duplicate rag_web_content removal (tool served by Vector RAG module since v1.9.10). Prior baseline: 2026-08-17 (v1.9.8). All tool counts verified against toolsProvider.ts registry entries and src/tools/*.ts. insert_at_line read-back drift detection documented with v1.8.8 hard fix. Graphify-Inspired Suite features (v1.9.5): Confidence-Tagged Results, Hub-Exclusion Clustering (83 tests), Project Auto-Detection, Context Tier Provenance, Cluster-Aware Tool Priority.
Five new architectural modules added in v1.9.5 following graphify repository analysis patterns:
src/types/confidenceTypes.ts)Typed confidence metadata attached to all tool execution outputs.
Three confidence levels for result reliability assessment:
Helper functions available for standardized confidence assignment:
src/utils/hubExclusionClustering.ts)Louvain community detection with hub-exclusion for architectural transparency.
Algorithm flow: Build dependency graph → Calculate degrees → Identify hubs (80th percentile) → Louvain clustering on non-hubs → Majority-vote hub reattachment.
Output includes modularity score, cluster density metrics, and hub identification — all running synchronously under 10ms for typical plugin graphs. 83 tests verify correctness across graph construction, hub identification at various percentiles, Louvain convergence, majority-vote reattachment, and edge cases.
Use cases: Architectural visualization, refactoring guidance (identify modules to refactor together), ContextGuard optimization (compress related clusters), tool priority ranking via centrality scoring.
src/projectAutoDetect.ts)Automatic project registration when cross-project registry searches return empty.
Confidence scoring signals: package.json (+0.4), src/ or lib/ (+0.3), .git (+0.1), build configs (+0.2). Name normalization handles hyphen↔underscore variants and scoped packages (@lmstudio/ai-toolbox). ⚠️ DEPRECATED (v1.9.8+): initializeProjectDetection() no longer called from index.ts at startup. Registration requires explicitConfirmation=true via register_project tool. See src/index.ts comment: "NO AUTO-REGISTRATION ON STARTUP".
src/contextTiers.ts)Typed provenance markers for tier-scoped context replacement.
Origin types: _origin: 'ast' | 'semantic' distinguishes raw file content from derived AI insights. replaceTier() replaces only changed tiers while preserving unchanged ones — follows graphify's incremental update pattern to prevent silent overwrites of unchanged nodes.
src/tools/toolPriority.ts)Five-tier priority ranking with hub-exclusion clustering integration.
Tiers: CRITICAL (1, file system tools), HIGH (2, web research/execution/git), STANDARD (3, browser/image/RAG), OPTIONAL (4, context management), BACKGROUND (5, backup/cleanup). Centrality scoring computed from module degree × hub bonus — used for intelligent tool filtering when grammar parser limits require pruning.
imageAnalysis toggle)Vision model-based image analysis via loaded LM Studio vision models (e.g., Llama 3.2 Vision, Moondream). Requires a vision-enabled model loaded in LM Studio (model.vision === true).
| Tool | Description |
|---|---|
analyze_image | Sends image to loaded vision-capable LLM along with optional prompt; returns model's textual analysis + image metadata (size, format, dimensions). Supports filesystem paths and attached files via SDK attachment resolution. Uses shared atomicWriteBinaryFile() for any saved outputs. |
fs.existsSync() checkpath.resolve(process.cwd(), inputPath)os.tmpdir(), , )require('../attachmentManager.js') with static — eliminates warningcrypto.randomBytes(9) (72-bit entropy) — collision probability ~1/2^72 even under rapid concurrent writesatomicWriteBinaryFile() uses raw buffer writes for image attachment temp files and chart generation — no encoding corruptionrefactorCodeTools and recodeEngine automatically restore from .bak backup if atomic write fails during AST transformationsmax_depthmax_linesMAX_LINES_PER_FILE=5000skipped_filesmax_file_sizeskipped_filespatternNeedsWorkerIsolation()node:worker_threadsworker.terminate()WORKER_KILL_MS=2000skipped_filessrc/utils/ripgrepEngine.tsskipped_files-ifind_replace_all | Regex search & replace across multiple files with dry-run preview, .bak backups, file-extension filter; max_depth enforcement (default 10, range 1–50) + MAX_LINES_PER_FILE=5000 hang prevention (v1.9.8+) |
pattern_scan | Recursive content search returning matching lines as {file, line, content} (post-v1.9.11, 30.–31.08 — engine in clean-room module src/tools/patternScan.ts, tool registered in fileSystemTools.ts). Regex by default; unsafe or syntactically invalid regexes fail fast and are auto-demoted to literal mode (reported via demoted_to_literal), unlike grep_files which force-escapes with a hint. Fully async with bounded concurrency (concurrency 1–16, default 4). Resource caps: per-file size gate maxFileSizeBytes (default 256 KB), line-cap gate maxFileLines (default 10,000) — oversize/over-line files reported in skipped[], never scanned; per-file match cap maxMatchesPerFile (default 50); global cap maxTotalMatches (default 200) with stats.truncated=true when hit. Options: root (directory or single file, relative paths resolve against the plugin working directory), mode (regex/literal), caseSensitive (default true), includeGlobs/excludeGlobs (a matching exclude dir is pruned whole), maxDepth (1–50, default 10), matchLineLength truncation (default 300 chars + ellipsis). Directories node_modules, .git, dist, build, out, .next, .nuxt, __pycache__, .venv, coverage are always pruned. Ripgrep phase-1 candidate prefilter (B', 02.09 — same Option A architecture as grep_files v1.9.13, shared module src/utils/ripgrepEngine.ts): directory scans first run an in-process WASM ripgrep prefilter (rg -l; lazy dynamic import on first use — a missing dep or Rust-dialect parse error such as lookarounds transparently falls back to the full JS walk above with byte-identical output, boot never at risk); on ok, workers scan only the rg-named candidates while every non-named target still passes the stat size gate + newline-count probe (Buffer read, no utf8 decode), so 'size'/'line-cap' skip records and stats.filesScanned stay byte-identical to the full walk. Documented divergence: no 'binary' skip record is emitted for a file rg proved pattern-absent (binary detection needs content inspection; such a file is unobservable in every output field except skipped[]). Case-sensitivity is honored per call (caseSensitive, default true — deliberately NOT mirroring grep_files' hardcoded -i); single-file roots leave the prefilter inert |
.ts/.tsx natively with typescript plugin enabled.import { used, unused } from 'lib') by removing only dead specifiers while preserving formatting..bak backup before any file modification.| Retrieve all saved memory entries with optional type filtering and result limits |
delete_memory | Remove specific memory entry by unique ID returned during save operations |
require()eval()child_processlmstudio/ai-toolbox/listAttachments() / getAttachment() from attachmentManager.js (ESM import, v1.9.8+)import { listAttachments, getAttachment }@typescript-eslint/no-require-importstype FileHandleWithReadFile = { name: string; readFile?: () => Promise<Buffer> } + cast via as unknown as FileHandleWithReadFile | undefined resolves TS2339 where SDK's FileHandle lacks .readFile() declaration (pattern matches promptPreprocessor.ts:218-247)@typescript-eslint/no-unsafe-*) — file no longer imports Tesseract// Atomic write pattern: Write to temp → atomic rename → delete temp on failure
const tempFile = `${originalPath}.${crypto.randomBytes(9).toString('hex')}.tmp`; // 72-bit entropy
await fs.writeFile(tempFile, content); // Write to randomized temp
await fs.rename(tempFile, originalPath); // Atomic rename (survives crashes)
// If interrupted: temp file orphaned but original intact
// Renames 'oldVar' to 'newVar' across the entire file
{
"file_path": "./src/index.ts",
"operation": "rename_identifier",
"old_name": "oldVar",
"new_name": "newVar"
}
// Moves 'calculateTotal' from src.ts to utils.ts
{
"file_path": "./src/operations.ts",
"operation": "move_function",
"old_name": "placeholder", // required by schema, ignored for this operation
"function_name": "calculateTotal",
"target_path": "./src/utils.ts"
}
// Extracts the provided code block into a function named 'processData'
{
"file_path": "./src/handler.ts",
"operation": "extract_function",
"old_name": "const result = value * 2;\nconsole.log(result);", // raw code to extract
"new_name": "processData"
}
// Scans file for dead imports and removes them automatically
{
"file_path": "./src/module.ts",
"operation": "unused_import_cleanup"
}
// Pattern-based — works regardless of current line number:
line_operations(
file_name,
operation: "insert",
insert_after_pattern: "if (width <= 0 || height <= 0)",
content: "// fix"
)
→ Finds line containing pattern → inserts after it → works correctly even if file changed
// Verification-based — catches drift errors before corruption:
line_operations(
file_name,
operation: "insert",
target_line: 84,
content: "// fix",
verify_before_insert: "return;" // Content expected at line 84
)
→ Checks if line 84 contains "return;" → If no → BLOCKS with error + context shown (±3 lines)
pending → in_progress → done (terminal)
any → blocked ← blocked → pending (retry)
// 1. Create plan with goal and steps
create_plan({
goal: "Refactor authentication module",
steps: [
"Read current auth.ts file",
"Identify refactoring opportunities",
"Implement changes to separate concerns",
"Run tests to verify functionality"
]
})
// 2. Track progress as you work
update_plan_step({ planId: "...", index: 0, status: "done" })
update_plan_step({ planId: "...", index: 1, status: "in_progress" })
// 3. Check current state
get_plan() // Returns full plan with progress metrics
// 4. Handle blockers if needed
update_plan_step({ planId: "...", index: 2, status: "blocked", note: "Need API documentation for new auth flow" })
determineConfidence(operationType: 'extraction'|'inference'|'execution'|'search', success: boolean, fallbackUsed?: boolean): Confidence;
createToolResult<T>(data: T, confidence: Confidence, options?: {provenance?: string; note?: string}): { success: true; data: T & ToolResultMetadata };
createErrorResult(message: string, provenance?: string): { success: false; error: string; data: ToolResultMetadata };
{
imagePath: string; // Path to image file or attached filename
prompt?: string; // Optional analysis prompt (e.g., "Describe this image in detail", "What text is visible?")
}
crypto.randomBytes(9) (72-bit entropy) — collision probability ~1/2^72 even under rapid concurrent writesatomicWriteBinaryFile() uses raw buffer writes for image attachment temp files and chart generation — no encoding corruptionrefactorCodeTools and recodeEngine automatically restore from .bak backup if atomic write fails during AST transformationsmax_depthmax_linesMAX_LINES_PER_FILE=5000skipped_filesmax_file_sizeskipped_filespatternNeedsWorkerIsolation()node:worker_threadsworker.terminate()WORKER_KILL_MS=2000skipped_filessrc/utils/ripgrepEngine.tsskipped_files-ifind_replace_all | Regex search & replace across multiple files with dry-run preview, .bak backups, file-extension filter; max_depth enforcement (default 10, range 1–50) + MAX_LINES_PER_FILE=5000 hang prevention (v1.9.8+) |
pattern_scan | Recursive content search returning matching lines as {file, line, content} (post-v1.9.11, 30.–31.08 — engine in clean-room module src/tools/patternScan.ts, tool registered in fileSystemTools.ts). Regex by default; unsafe or syntactically invalid regexes fail fast and are auto-demoted to literal mode (reported via demoted_to_literal), unlike grep_files which force-escapes with a hint. Fully async with bounded concurrency (concurrency 1–16, default 4). Resource caps: per-file size gate maxFileSizeBytes (default 256 KB), line-cap gate maxFileLines (default 10,000) — oversize/over-line files reported in skipped[], never scanned; per-file match cap maxMatchesPerFile (default 50); global cap maxTotalMatches (default 200) with stats.truncated=true when hit. Options: root (directory or single file, relative paths resolve against the plugin working directory), mode (regex/literal), caseSensitive (default true), includeGlobs/excludeGlobs (a matching exclude dir is pruned whole), maxDepth (1–50, default 10), matchLineLength truncation (default 300 chars + ellipsis). Directories node_modules, .git, dist, build, out, .next, .nuxt, __pycache__, .venv, coverage are always pruned. Ripgrep phase-1 candidate prefilter (B', 02.09 — same Option A architecture as grep_files v1.9.13, shared module src/utils/ripgrepEngine.ts): directory scans first run an in-process WASM ripgrep prefilter (rg -l; lazy dynamic import on first use — a missing dep or Rust-dialect parse error such as lookarounds transparently falls back to the full JS walk above with byte-identical output, boot never at risk); on ok, workers scan only the rg-named candidates while every non-named target still passes the stat size gate + newline-count probe (Buffer read, no utf8 decode), so 'size'/'line-cap' skip records and stats.filesScanned stay byte-identical to the full walk. Documented divergence: no 'binary' skip record is emitted for a file rg proved pattern-absent (binary detection needs content inspection; such a file is unobservable in every output field except skipped[]). Case-sensitivity is honored per call (caseSensitive, default true — deliberately NOT mirroring grep_files' hardcoded -i); single-file roots leave the prefilter inert |
.ts/.tsx natively with typescript plugin enabled.import { used, unused } from 'lib') by removing only dead specifiers while preserving formatting..bak backup before any file modification.| Retrieve all saved memory entries with optional type filtering and result limits |
delete_memory | Remove specific memory entry by unique ID returned during save operations |
require()eval()child_processlmstudio/ai-toolbox/listAttachments() / getAttachment() from attachmentManager.js (ESM import, v1.9.8+)import { listAttachments, getAttachment }@typescript-eslint/no-require-importstype FileHandleWithReadFile = { name: string; readFile?: () => Promise<Buffer> } + cast via as unknown as FileHandleWithReadFile | undefined resolves TS2339 where SDK's FileHandle lacks .readFile() declaration (pattern matches promptPreprocessor.ts:218-247)@typescript-eslint/no-unsafe-*) — file no longer imports Tesseract// Atomic write pattern: Write to temp → atomic rename → delete temp on failure
const tempFile = `${originalPath}.${crypto.randomBytes(9).toString('hex')}.tmp`; // 72-bit entropy
await fs.writeFile(tempFile, content); // Write to randomized temp
await fs.rename(tempFile, originalPath); // Atomic rename (survives crashes)
// If interrupted: temp file orphaned but original intact
// Renames 'oldVar' to 'newVar' across the entire file
{
"file_path": "./src/index.ts",
"operation": "rename_identifier",
"old_name": "oldVar",
"new_name": "newVar"
}
// Moves 'calculateTotal' from src.ts to utils.ts
{
"file_path": "./src/operations.ts",
"operation": "move_function",
"old_name": "placeholder", // required by schema, ignored for this operation
"function_name": "calculateTotal",
"target_path": "./src/utils.ts"
}
// Extracts the provided code block into a function named 'processData'
{
"file_path": "./src/handler.ts",
"operation": "extract_function",
"old_name": "const result = value * 2;\nconsole.log(result);", // raw code to extract
"new_name": "processData"
}
// Scans file for dead imports and removes them automatically
{
"file_path": "./src/module.ts",
"operation": "unused_import_cleanup"
}
// Pattern-based — works regardless of current line number:
line_operations(
file_name,
operation: "insert",
insert_after_pattern: "if (width <= 0 || height <= 0)",
content: "// fix"
)
→ Finds line containing pattern → inserts after it → works correctly even if file changed
// Verification-based — catches drift errors before corruption:
line_operations(
file_name,
operation: "insert",
target_line: 84,
content: "// fix",
verify_before_insert: "return;" // Content expected at line 84
)
→ Checks if line 84 contains "return;" → If no → BLOCKS with error + context shown (±3 lines)
pending → in_progress → done (terminal)
any → blocked ← blocked → pending (retry)
// 1. Create plan with goal and steps
create_plan({
goal: "Refactor authentication module",
steps: [
"Read current auth.ts file",
"Identify refactoring opportunities",
"Implement changes to separate concerns",
"Run tests to verify functionality"
]
})
// 2. Track progress as you work
update_plan_step({ planId: "...", index: 0, status: "done" })
update_plan_step({ planId: "...", index: 1, status: "in_progress" })
// 3. Check current state
get_plan() // Returns full plan with progress metrics
// 4. Handle blockers if needed
update_plan_step({ planId: "...", index: 2, status: "blocked", note: "Need API documentation for new auth flow" })
determineConfidence(operationType: 'extraction'|'inference'|'execution'|'search', success: boolean, fallbackUsed?: boolean): Confidence;
createToolResult<T>(data: T, confidence: Confidence, options?: {provenance?: string; note?: string}): { success: true; data: T & ToolResultMetadata };
createErrorResult(message: string, provenance?: string): { success: false; error: string; data: ToolResultMetadata };
{
imagePath: string; // Path to image file or attached filename
prompt?: string; // Optional analysis prompt (e.g., "Describe this image in detail", "What text is visible?")
}