Daemion docs

How do I use extensions?

~3 minutes
Prerequisites: Running gateway

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:

text

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

GET /extensions Auth required

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
bash

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

POST /extensions/:id/toggle Auth required

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.
bash

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

PATCH /extensions/:id Auth required

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).
bash

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

DELETE /extensions/:id Auth required

Permanently delete an extension. Essential built-in extensions cannot be deleted.

Parameter Type Description
id REQUIRED string (path) Extension ID.
bash

curl -X DELETE http://localhost:3001/extensions/ext_09def789
-H “Authorization: Bearer $DAEMION_TOKEN”


Common questions

Q What are essential extensions?
The built-in command and action extensions (builtin-cmd-new, builtin-action-copy, builtin-action-retry, builtin-action-delete) cannot be disabled or deleted. All others are fair game.
Q How do I reseed built-in extensions after an upgrade?
POST /reseed re-syncs built-in extensions from disk without restarting the gateway process. Use this after pulling a new version.
Q Can an agent create extensions at runtime?
Yes — agents use POST /extensions to create new extensions during a conversation. This is how Daemion creates jobs, apps, and commands when you ask for them.
Q What's the difference between source values?
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

Extension errors

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?