/extension-development
Build, install, and hot-reload Nimbalyst extensions using MCP tools. Use when developing, testing, or iterating on Nimbalyst extensions.
$ npx -y skills add nimbalyst/nimbalyst --skill extension-development --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/extension-development
Context preview
The summary Claude sees to decide when to auto-load this skill.
Build, install, and hot-reload Nimbalyst extensions using MCP tools. Use when developing, testing, or iterating on Nimbalyst extensions.
SKILL.md
extension-development.SKILL.mdname: 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 with `page` connected to Nimbalyst)
- `testFile`: Absolute path to a `.spec.ts` file
- `timeout`: 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 open
- `waitForExtension`: 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 ID
- `toolName`: Tool name without extension prefix (e.g., "get_elements")
- `args`: Arguments object to pass to the handler
- `filePath`: For editor-scoped tools: file path for context
Development Workflow
Initial Setup
1. Create extension project with `/new-extension <path> <name> [file-patterns]` 2. Implement the extension code 3. Build with `extension_build` 4. Install with `extension_install` 5. Test in Nimbalyst
Iteration Loop with Testing
1. Make code changes 2. Run `extension_reload` to rebuild and reinstall 3. Run `extension_get_status` to verify it loaded 4. Run `extension_test_open_file` to open a sample file 5. Run `extension_test_run` with Playwright scripts to verify behavior 6. Use `capture_editor_screenshot` for visual verification 7. Check `get_renderer_debug_logs` for runtime errors 8. 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
1. Check extension status with `extension_get_status` 2. Read logs with `mcp__nimbalyst-extension-dev__get_main_process_logs` (filter by component: "EXTENSION") 3. Check renderer logs with `mcp__nimbalyst-extension-dev__get_renderer_debug_logs`
Important Notes
- **Always build before install** - `extension_install` requires a pre-built extension
- **Use `extension_reload` for 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_nimbalyst` when 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 install` was 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_status`
Read more
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 with `page` connected to Nimbalyst)
- `testFile`: Absolute path to a `.spec.ts` file
- `timeout`: 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 open
- `waitForExtension`: 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 ID
- `toolName`: Tool name without extension prefix (e.g., "get_elements")
- `args`: Arguments object to pass to the handler
- `filePath`: For editor-scoped tools: file path for context
Development Workflow
Initial Setup
1. Create extension project with `/new-extension <path> <name> [file-patterns]` 2. Implement the extension code 3. Build with `extension_build` 4. Install with `extension_install` 5. Test in Nimbalyst
Iteration Loop with Testing
1. Make code changes 2. Run `extension_reload` to rebuild and reinstall 3. Run `extension_get_status` to verify it loaded 4. Run `extension_test_open_file` to open a sample file 5. Run `extension_test_run` with Playwright scripts to verify behavior 6. Use `capture_editor_screenshot` for visual verification 7. Check `get_renderer_debug_logs` for runtime errors 8. 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
1. Check extension status with `extension_get_status` 2. Read logs with `mcp__nimbalyst-extension-dev__get_main_process_logs` (filter by component: "EXTENSION") 3. Check renderer logs with `mcp__nimbalyst-extension-dev__get_renderer_debug_logs`
Important Notes
- **Always build before install** - `extension_install` requires a pre-built extension
- **Use `extension_reload` for 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_nimbalyst` when 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 install` was 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_status`
Nimbalyst is a free, open-source, local, interactive visual editor & session/task manager for developers, product managers, designers, builders.
Repo: nimbalyst/nimbalyst
Other skills on nimbalyst.
- /datamodellm
Create visual data models for database schemas using Nimbalyst's DataModelLM editor. Use when the user wants to design a data model, database schema, entity relationship diagram, or Prisma schema.
Open skill - /git-commit
Create git commits using Nimbalyst's interactive commit proposal widget. ONLY use when the user explicitly clicks "Commit with AI" button or asks for "smart commit". For regular commit requests, use standard git commands instead.
Open skill - /excalidraw
Create diagrams and visual drawings using Excalidraw (.excalidraw files). Use when the user wants flowcharts, architecture diagrams, system diagrams, sketches, or any visual diagram. For database schemas and entity relationship diagrams, use the DataModelLM extension instead.
Open skill - /feedback-intake
Help the user file a bug report or feature request for Nimbalyst. Activates when the user opens the in-app feedback flow or runs /feedback:bug-report or /feedback:feature-request. Coordinates evidence gathering, anonymization, and posting to GitHub Issues.
Open skill - /mockuplm
Create visual UX mockups using HTML/CSS files (.mockup.html). Use when the user wants to design UI, wireframes, visual layouts, or plan features visually.
Open skill - /planning
Create structured plan documents and track work items using YAML frontmatter. Use when the user wants to plan a feature, track progress, log bugs/tasks/ideas, or organize project work.
Open skill

