name: extension-development description: Build, install, and hot-reload Nimbalyst extensions using MCP tools. Use when developing, testing, or iterating on Nimbalyst extensions.
Extension Development in Nimbalyst
Nimbalyst provides MCP tools for building, installing, and hot-reloading extensions directly from within the running app. This enables rapid iteration on extension development without manually running build commands.
The recommended in-app scaffold flow uses File > New Extension Project, Developer > New Extension Project, or the Extension Developer Kit's /new-extension command. Enable Extension Dev Tools in Settings > Advanced before using the build/install workflow.
Available MCP Tools
Build Extension
mcp__nimbalyst-extension-dev__extension_build
Runs npm run build (vite build) on an extension project.
Parameters:
path: Absolute path to the extension project root (directory containing package.json and manifest.json)
Returns: Build output including any errors or warnings.
Install Extension
mcp__nimbalyst-extension-dev__extension_install
Installs a built extension into the running Nimbalyst instance. The extension must be built first.
Parameters:
path: Absolute path to the extension project root
Returns: Installation status and any validation warnings.
Hot Reload Extension
mcp__nimbalyst-extension-dev__extension_reload
Rebuilds and reinstalls an extension in one step. This is the most common tool for iterating on extension development.
Parameters:
extensionId: The extension ID from manifest.json (e.g., "com.nimbalyst.my-extension")path: Absolute path to the extension project root
Returns: Build and reload status.
Uninstall Extension
mcp__nimbalyst-extension-dev__extension_uninstall
Removes an installed extension from the running Nimbalyst instance.
Parameters:
extensionId: The extension ID to uninstall
Get Extension Status
mcp__nimbalyst-extension-dev__extension_get_status
Gets the current status of an installed extension, including whether it loaded successfully and what it contributes.
Parameters:
extensionId: The extension ID to query
Restart Nimbalyst
mcp__nimbalyst-extension-dev__restart_nimbalyst
Restarts the entire Nimbalyst application. Only use when explicitly requested by the user.
Testing Tools
Run Playwright Tests
mcp__nimbalyst-extension-dev__extension_test_run
Execute Playwright scripts against the running Nimbalyst instance via CDP. Supports inline scripts or .spec.ts file paths.
Parameters:
script: Inline Playwright code (runs inside an async test withpageconnected to Nimbalyst)testFile: Absolute path to a.spec.tsfiletimeout: Max execution time in ms (default: 30000)
Provide either script or testFile, not both.
Open File for Testing
mcp__nimbalyst-extension-dev__extension_test_open_file
Opens a file in Nimbalyst and waits for the editor to mount. Use before running tests that need a specific file open.
Parameters:
filePath: Absolute path to the file to openwaitForExtension: Extension ID to wait for (waits until the extension's editor container renders)timeout: Max wait time in ms (default: 5000)
Test AI Tool Handler
mcp__nimbalyst-extension-dev__extension_test_ai_tool
Execute an extension's AI tool handler directly and return the result. Bypasses full MCP routing.
Parameters:
extensionId: The extension IDtoolName: Tool name without extension prefix (e.g., "get_elements")args: Arguments object to pass to the handlerfilePath: For editor-scoped tools: file path for context
Development Workflow
Initial Setup
- Create extension project with
/new-extension <path> <name> [file-patterns] - Implement the extension code
- Build with
extension_build - Install with
extension_install - Test in Nimbalyst
Iteration Loop with Testing
- Make code changes
- Run
extension_reloadto rebuild and reinstall - Run
extension_get_statusto verify it loaded - Run
extension_test_open_fileto open a sample file - Run
extension_test_runwith Playwright scripts to verify behavior - Use
capture_editor_screenshotfor visual verification - Check
get_renderer_debug_logsfor runtime errors - Fix issues and repeat from step 1
Inline test example:
extension_test_run({
script: `
const editor = page.locator('[data-extension-id="com.nimbalyst.my-ext"]');
await expect(editor).toBeVisible();
await editor.locator('.save-btn').click();
await expect(editor.locator('.status')).toHaveText('Saved');
`
})
Test file example:
extension_test_run({ testFile: "/path/to/extension/tests/basics.spec.ts" })
Debugging
- Check extension status with
extension_get_status - Read logs with
mcp__nimbalyst-extension-dev__get_main_process_logs(filter by component: "EXTENSION") - Check renderer logs with
mcp__nimbalyst-extension-dev__get_renderer_debug_logs
Important Notes
- Always build before install -
extension_installrequires a pre-built extension - Use
extension_reloadfor iteration - It combines build + reinstall in one step - Check manifest validation - Build and install tools validate manifest.json and report warnings
- Extensions load on app start - For full reload, user may need to restart Nimbalyst
- Never restart without permission - Only use
restart_nimbalystwhen the user explicitly asks
Common Issues
"Extension not found" after install
- Check that the extension ID in manifest.json matches what you're querying
- Verify the build output exists in
dist/index.js
Build fails
- Check that
npm installwas run in the extension directory - Verify vite.config.ts is properly configured
- Check for TypeScript errors in the output
Extension doesn't appear
- Use
extension_get_statusto check if it's loaded - Check the release channel - some extensions require "alpha" channel
- Verify the extension is enabled in Settings > Extensions