How do I use extensions?
Extensions are how you configure Daemion. Every command, theme, job, agent, app, and more is an extension stored in SQLite — 12 types in total. You can manage them through chat or directly via the API.
The 12 extension types
command, theme, job, renderer, integration, action, widget, app, artifact, capability, control, agent
All 12 share the same CRUD API and the same data shape — only the definition field differs per type.
List extensions via chat
The simplest way to see what’s installed:
You: List my extensions
Daemion: You have 14 extensions installed: • /new (command, built-in, enabled) • deploy (command, user, enabled) • dark-mode (theme, user, enabled) • server-health (job, user, enabled) • project-dashboard (app, agent, enabled) …
You: Disable the deploy command
Daemion: Disabled extension “deploy”. Re-enable it any time.
List extensions via API
List all extensions. Filter by type, enabled state, or source.
| Parameter | Type | Description |
|---|---|---|
type | string (query) | Filter by type: command | theme | job | renderer | integration | action | widget | app | artifact | capability | control | agent |
enabled | boolean (query) | Filter by enabled state. |
source | string (query) | Filter by source: built-in | user | agent | community |
All extensions
curl http://localhost:3001/extensions
-H “Authorization: Bearer $DAEMION_TOKEN”
Only jobs
curl “http://localhost:3001/extensions?type=job”
-H “Authorization: Bearer $DAEMION_TOKEN”
Only enabled user extensions
curl “http://localhost:3001/extensions?enabled=true&source=user”
-H “Authorization: Bearer $DAEMION_TOKEN”
Toggle an extension
Enable or disable an extension. Essential built-in extensions cannot be disabled.
| Parameter | Type | Description |
|---|---|---|
id REQUIRED | string (path) | Extension ID from the list response. |
enabled REQUIRED | boolean (body) | true to enable, false to disable. |
Disable
curl -X POST http://localhost:3001/extensions/ext_09def789/toggle
-H “Authorization: Bearer $DAEMION_TOKEN”
-H “Content-Type: application/json”
-d ’{“enabled”: false}‘
Re-enable
curl -X POST http://localhost:3001/extensions/ext_09def789/toggle
-H “Authorization: Bearer $DAEMION_TOKEN”
-H “Content-Type: application/json”
-d ’{“enabled”: true}’
The gateway broadcasts an extension-changed WebSocket event to all connected clients whenever an extension is toggled.
Update an extension
Update an extension's name, description, definition, or enabled state. Partial updates — omit fields you don't want to change.
| Parameter | Type | Description |
|---|---|---|
id REQUIRED | string (path) | Extension ID. |
name | string (body) | New name. |
description | string (body) | New description. |
definition | object (body) | New definition payload (type-specific). |
curl -X PATCH http://localhost:3001/extensions/ext_09def789
-H “Authorization: Bearer $DAEMION_TOKEN”
-H “Content-Type: application/json”
-d ’{“description”: “Updated description”}‘
Delete an extension
Permanently delete an extension. Essential built-in extensions cannot be deleted.
| Parameter | Type | Description |
|---|---|---|
id REQUIRED | string (path) | Extension ID. |
curl -X DELETE http://localhost:3001/extensions/ext_09def789
-H “Authorization: Bearer $DAEMION_TOKEN”
Common questions
builtin-cmd-new, builtin-action-copy, builtin-action-retry, builtin-action-delete) cannot be disabled or deleted. All others are fair game.POST /reseed re-syncs built-in extensions from disk without restarting the gateway process. Use this after pulling a new version.POST /extensions to create new extensions during a conversation. This is how Daemion creates jobs, apps, and commands when you ask for them.built-in ships with Daemion, user was created by you, agent was created by an agent at runtime, community was installed from an external source.What can go wrong
403 {"error": "cannot disable essential extensions"} — You tried to toggle or delete a built-in that Daemion depends on. These four extensions must stay enabled.
404 {"error": "extension not found"} — The ID doesn’t match any extension. Fetch the full list with GET /extensions to find the correct ID.
400 validation error — The definition field doesn’t match the expected shape for this extension type. Each type has a strict schema — check the extension type reference for the correct fields.
What’s next?
- Extensions API reference — full endpoint reference with all response shapes