Extensions Gallery
This page provides an overview of all available extensions in the AiderDesk repository. Each extension demonstrates different capabilities and patterns you can use as reference when building your own extensions.
Production Extensions
Ready-to-use extensions that add functionality to AiderDesk.
| Extension | Description | API Usage |
|---|---|---|
| bmad | BMAD Method workflows for planning, designing, and implementing software projects | onLoad, getModes, getUIComponents, onTaskUpdated, onAgentStarted, onToolApproval, triggerUIComponentsReload |
| questions | Extracts questions from messages and displays as interactive questionnaire | onLoad, onUnload, getCommands, getUIComponents, getUIExtensionData, TaskContext.getContextMessages, TaskContext.generateText |
| wakatime.ts | Tracks coding activity by sending heartbeats to WakaTime | onLoad, onPromptStarted, onPromptFinished, onToolFinished, onFilesAdded |
| protected-paths.ts | Blocks file operations on protected paths (.env, .git/, node_modules/) | onLoad, onToolCalled |
| permission-gate.ts | Prompts for confirmation before running dangerous bash commands | onLoad, onToolCalled, TaskContext.askQuestion |
| ultrathink.ts | Detects "ultrathink" / "think hard" and increases reasoning effort | onLoad, onAgentStarted |
| external-rules.ts | Includes rule files from Cursor, Claude Code, and Roo Code | onLoad, onRuleFilesRetrieved |
| sound-notification.ts | Plays a "Jobs Done" sound when a prompt finishes | onLoad, onPromptFinished |
| sandbox | OS-level sandboxing for bash commands using @anthropic-ai/sandbox-runtime | onLoad, onToolCalled |
| rtk | Rewrites shell commands to RTK equivalents, reducing token usage by 60-90% | onLoad, getCommands, onToolCalled |
| redact-secrets | Redacts secret values from .env* files in file read results | onToolFinished |
| chunkhound-search | Provides chunkhound-search tool for semantic code search | getTools, onProjectStarted, onToolFinished |
| fff | Fast file content search using FFF (Freakin Fast File Finder) — replaces the internal grep tool | onLoad, onUnload, onProjectStarted, getTools |
| seek | Fast ranked code search using seek (zoekt) — replaces the internal grep tool | onLoad, onUnload, getTools, onProjectStarted |
| tree-sitter-repo-map | Enhanced repository map using tree-sitter parsing with PageRank-based symbol ranking | onLoad, getCommands, onAgentStarted |
| tps-counter | Displays tokens per second for agent responses with UI components in usage info and message bar | onLoad, onUnload, onResponseChunk, onResponseCompleted, getUIComponents, getUIExtensionData, getCommands, triggerUIDataRefresh |
| programmatic-tool-calls | Execute JavaScript code in a sandbox with access to all tools as async functions | getTools |
| lsp | Language Server Protocol integration for code intelligence | onLoad, onUnload, getTools, onToolFinished, onProjectStarted, onProjectStopped |
| context-autocompletion-words | Adds custom words to context file autocompletion | onLoad, onFilesAdded, onFilesDropped, TaskContext.getContextFiles, TaskContext.updateAutocompletionWords |
| plannotator | Comprehensive planning assistant with structured plan files | onLoad, onUnload, getModes, getTools, getCommands, onToolCalled, onToolApproval, onAgentStarted, onAgentFinished, onTaskInitialized, onTaskClosed, onImportantReminders |
| multi-model-run | Run the same prompt across multiple models simultaneously | onLoad, getUIComponents, getUIExtensionData, executeUIExtensionAction, onPromptStarted, ProjectContext.duplicateTask, ProjectContext.getTask, TaskContext.runPrompt |
Learning Examples
Simple extensions designed for learning the extension API patterns.
| Extension | Description | API Usage |
|---|---|---|
| pirate.ts | Adds a Pirate agent that speaks like a swashbuckling sea dog | onLoad, getAgents, onAgentProfileUpdated |
| ui-placement-demo.ts | Demonstrates all available UI component placement locations | onLoad, getUIComponents |
| chunkhound-on-semantic-search-tool | Overrides power---semantic_search to use ChunkHound | onToolCalled, onToolFinished, onProjectStarted |
| theme.ts | Adds /theme command to switch AiderDesk themes | onLoad, getCommands, ExtensionContext.updateSettings |
| generate-tests.ts | Adds /generate-tests command to generate unit tests for files | onLoad, getCommands, TaskContext.runPrompt |
| plan-mode.ts | Adds a Plan mode that enforces planning before coding | onLoad, getModes, onAgentStarted |
UI Components
Extensions can render custom React components in various locations throughout the AiderDesk interface.
Finding the Right Placement
To determine the best placement for your UI component:
- Install the ui-placement-demo extension to see all available placements in action
- Each placement is shown with a chip indicating its location name
- Choose the placement that best fits your component's purpose
# Install the placement demo extension
npx @aiderdesk/extensions install ui-placement-demo
UI Component Examples
- ui-placement-demo.ts - Simple demo showing all placements with static chips (
getUIComponents) - active-files-counter.ts - Simple UI component with data loading and tooltip (
getUIComponents,getUIExtensionData) - tps-counter - UI with event tracking and data refresh (
getUIComponents,getUIExtensionData,onResponseChunk,onResponseCompleted,triggerUIDataRefresh) - multi-model-run - Complex example with state management, data loading, and action handling (
getUIComponents,getUIExtensionData,executeUIExtensionAction)
Installing Extensions
Install via CLI (Recommended)
The easiest way to install extensions is using the CLI tool:
# Interactive selection - choose from all available extensions
npx @aiderdesk/extensions install
# Install a specific extension by ID
npx @aiderdesk/extensions install sound-notification
npx @aiderdesk/extensions install pirate --global
# Install to global extensions (available to all projects)
npx @aiderdesk/extensions install --global
# List all available extensions
npx @aiderdesk/extensions list
The CLI automatically handles:
- Downloading single-file extensions
- Cloning and setting up folder-based extensions
- Installing dependencies for folder extensions
- Both global and project-level installation
Manual Download
Alternatively, you can manually download extensions:
Single-File Extension
# Download to global extensions
curl -o ~/.aider-desk/extensions/sound-notification.ts \
https://raw.githubusercontent.com/hotovo/aider-desk/main/packages/extensions/extensions/sound-notification.ts
Folder-Based Extension
# Clone and copy
git clone --depth 1 https://github.com/hotovo/aider-desk temp-aider
cp -r temp-aider/packages/extensions/extensions/sandbox ~/.aider-desk/extensions/
cd ~/.aider-desk/extensions/sandbox
npm install
rm -rf temp-aider
Use as Template
Copy an extension that matches your needs and modify it:
- Choose an extension with similar capabilities
- Copy it to your extensions directory
- Modify the class name and implementation
- Update the metadata
- Save and test (hot reload applies changes automatically)