Skip to content

The Daemon Management API lets you list, inspect, create, update, and remove supervised programs running in your container. It also covers ephemeral (“Quick Start”) programs — short-lived processes that auto-clean when stopped or on container reboot. Use these endpoints to register custom applications (Node.js, Python, Ruby, custom binaries) and manage their lifecycle. System services (apache2, nginx, postgresql, mysql, etc.) are managed separately via systemctl.


Retrieves a complete list of all configured daemon programs with their full configuration details. Supports multiple filters that can be combined: hoody_kit, lazy_load, enabled, boot. Optionally include runtime status and resource stats for each program.

NameInTypeRequiredDescription
hoody_kitquerystringNoFilter by hoody_kit status. Use "true" for Hoody Kit programs only, "false" for official programs only.
lazy_loadquerystringNoFilter by lazy_load status. Use "true" for lazy-loaded programs only (started on-demand), "false" for programs that auto-start.
enabledquerystringNoFilter by enabled status. Use "true" for enabled programs only, "false" for disabled programs only.
bootquerystringNoFilter by boot status. Use "true" for programs that auto-start on system boot, "false" for manual-start programs.
portqueryintegerNoFilter programs by single port number. Returns only programs whose port_range includes this specific port.
port_fromqueryintegerNoFilter by port range start (must be used with port_to). Returns programs whose port ranges overlap with the specified range.
port_toqueryintegerNoFilter by port range end (must be used with port_from). Returns programs whose port ranges overlap with the specified range.
include_statusquerystringNoInclude runtime status for each program. When true, adds a status field to each program showing current running state, instances, and process details.
include_statsquerystringNoInclude resource stats (CPU, memory, process tree) for each running program. Implies include_status=true. Adds a stats field with pid, started_at, cpu_percent, memory_rss_bytes, process_count, and per-process breakdown. Only present for running programs.
Terminal window
curl "https://your-host/api/v1/daemon/programs?enabled=true&include_status=true"

Multiple programs configured

{
"programs": [
{
"id": 1,
"name": "web-server",
"description": "Nginx web server",
"enabled": true,
"command": "nginx -g \"daemon off;\"",
"boot": true,
"delay_seconds": 5,
"autorestart": "unexpected",
"user": "www-data",
"environment": {
"NGINX_PORT": "80"
},
"directory": "/var/www",
"priority": 999,
"stdout_logfile": "/var/log/nginx/access.log",
"stderr_logfile": "/var/log/nginx/error.log",
"hoody_kit": false
},
{
"id": 2,
"name": "nodejs-app",
"description": "Production Node.js application",
"enabled": true,
"command": "node server.js",
"boot": true,
"delay_seconds": 10,
"autorestart": "unexpected",
"user": "nodejs",
"environment": {
"NODE_ENV": "production",
"PORT": "3000"
},
"directory": "/opt/myapp",
"priority": 100,
"stdout_logfile": "/var/log/myapp/stdout.log",
"stderr_logfile": "/var/log/myapp/stderr.log",
"hoody_kit": false
}
]
}

No programs configured

{
"programs": []
}

Retrieves detailed configuration for a single program by its unique ID. Returns complete program configuration including all optional fields.

NameInTypeRequiredDescription
idpathintegerYesUnique numeric identifier of the program.
Terminal window
curl "https://your-host/api/v1/daemon/programs/1"
{
"success": true,
"program": {
"id": 1,
"name": "web-server",
"description": "Nginx web server",
"enabled": true,
"command": "nginx -g \"daemon off;\"",
"boot": true,
"delay_seconds": 5,
"autorestart": "unexpected",
"user": "www-data",
"environment": {},
"directory": "/var/www",
"priority": 999
}
}

Creates a new daemon program from a JSON request body. The program is validated, added to the configuration, and registered with supervisord if enabled.

FieldTypeRequiredDescription
namestringYesProgram name — must be unique, cannot contain quotes.
commandstringYesFull command to execute including all arguments. Use for custom programs only.
userstringYesSystem user account to run the program as (must exist on the system).
idintegerNoSpecific ID to assign (auto-assigned if not provided).
descriptionstringNoHuman-readable description (max 500 chars).
enabledbooleanNoEnable the program immediately. Default: true.
bootbooleanNoStart automatically on system boot. Default: false.
delay_secondsintegerNoStartup delay in seconds (0–3600). Default: 0.
autorestartstringNoRestart policy. One of "true", "false", "unexpected". Default: "unexpected".
directorystringNoWorking directory path.
priorityintegerNoStart priority (1–999, lower starts first). Default: 999.
stdout_logfilestringNoPath for standard output log.
stderr_logfilestringNoPath for standard error log.
logs_enabledbooleanNoWhether logging is enabled. Default: true.
log_max_bytesintegerNoMaximum size of each log file in bytes before rotation. Default: 5242880 (5MB).
log_backupsintegerNoNumber of rotated backup log files to keep. Default: 2.
environmentobjectNoEnvironment variables as key-value string pairs.
hoody_kitbooleanNoWhether this is a Hoody Kit program (auto-detected from directory path). Default: false.
port_rangeobjectNoPort range for multi-instance programs. Requires start and end.
port_paramstringNoParameter name for passing port (e.g. "--port"). Default: "--port".
lazy_loadbooleanNoEnable lazy loading (autostart=false). Cannot be combined with boot:true. Default: false.
displaystringNoX11 DISPLAY number for GUI programs (e.g. ":1").
terminal_idintegerNoHoody Terminal session ID (1–65535) for web-based terminal access.
terminal_shellstringNoShell for environment loading. One of "bash", "zsh", "fish", "sh", "tmux".
terminal_interactivebooleanNoOverride interactive vs service mode.
webhooksobjectNoWebhook notification configuration for lifecycle events.
Terminal window
curl -X POST "https://your-host/api/v1/daemon/programs/add" \
-H "Content-Type: application/json" \
-d '{
"name": "nodejs-app",
"description": "Production Node.js application",
"command": "node server.js",
"user": "nodejs",
"enabled": true,
"boot": true,
"delay_seconds": 10,
"autorestart": "unexpected",
"directory": "/opt/myapp",
"priority": 100,
"environment": {
"NODE_ENV": "production",
"PORT": "3000",
"DATABASE_URL": "postgresql://localhost/mydb"
},
"stdout_logfile": "/var/log/myapp/stdout.log",
"stderr_logfile": "/var/log/myapp/stderr.log"
}'
{
"success": true,
"id": 2,
"program": {
"id": 2,
"name": "nodejs-app",
"description": "Node.js application",
"enabled": true,
"command": "node app.js",
"boot": false,
"delay_seconds": 0,
"autorestart": "unexpected",
"user": "nodejs",
"environment": {
"NODE_ENV": "production"
},
"directory": "/opt/app",
"priority": 999
}
}

Updates an existing program configuration using JSON request body. Only provided fields will be updated — unspecified fields retain their current values.

NameInTypeRequiredDescription
idpathintegerYesUnique numeric identifier of the program.
FieldTypeRequiredDescription
namestringNoProgram name — must be unique, cannot contain quotes.
commandstringNoFull command to execute including all arguments.
userstringNoSystem user account to run the program as.
descriptionstringNoHuman-readable description (max 500 chars).
enabledbooleanNoWhether the program is currently enabled.
bootbooleanNoStart automatically on system boot.
delay_secondsintegerNoStartup delay in seconds (0–3600).
autorestartstringNoRestart policy. One of "true", "false", "unexpected".
directorystringNoWorking directory path.
priorityintegerNoStart priority (1–999).
environmentobjectNoEnvironment variables as key-value string pairs.
webhooksobjectNoWebhook notification configuration.
lazy_loadbooleanNoEnable lazy loading. Cannot be combined with boot:true.
displaystringNoX11 DISPLAY number for GUI programs.
terminal_idintegerNoHoody Terminal session ID (1–65535).
terminal_shellstringNoShell for environment loading.
stdout_logfilestringNoPath for standard output log.
stderr_logfilestringNoPath for standard error log.
Terminal window
curl -X POST "https://your-host/api/v1/daemon/programs/edit/1" \
-H "Content-Type: application/json" \
-d '{
"description": "Updated description",
"command": "node server.js --production",
"environment": {
"NODE_ENV": "production",
"PORT": "8080"
}
}'
{
"success": true,
"program": {
"id": 1,
"name": "nodejs-app",
"description": "Updated description",
"enabled": true,
"command": "node server.js --production",
"boot": true,
"delay_seconds": 5,
"autorestart": "unexpected",
"user": "nodejs",
"environment": {
"NODE_ENV": "production",
"PORT": "8080"
},
"directory": "/opt/app",
"priority": 999
}
}

Permanently deletes a program from the configuration. If the program is running, it will be stopped before removal. This is a destructive operation that cannot be undone.

NameInTypeRequiredDescription
idpathintegerYesUnique numeric identifier of the program.
Terminal window
curl -X POST "https://your-host/api/v1/daemon/programs/remove/1"
{
"success": true,
"id": 1
}

Replaces the current programs.json with the initial default snapshot (programs.default.json) created at container setup time. Stops all managed programs, removes their supervisord configs, and re-applies the default boot programs. Use this when programs have been misconfigured and a clean slate is needed.

Terminal window
curl -X POST "https://your-host/api/v1/daemon/programs/reset"
{
"success": true
}

Quick Start lets you run temporary custom programs that auto-clean when stopped or on container reboot. Programs are not saved to programs.json; they are tracked in ephemeral.json for crash recovery. Use them for one-off data migrations, temporary test servers, debug tasks, CI/CD ephemeral environments, and custom batch jobs. For permanent programs that must survive reboots, use POST /api/v1/daemon/programs/add.

Returns all currently tracked ephemeral programs with their current runtime status. Shows programs that are running or pending cleanup.

This endpoint takes no parameters.

Terminal window
curl "https://your-host/api/v1/daemon/quick-start"

Multiple ephemeral programs

{
"success": true,
"count": 2,
"ephemeral_programs": [
{
"temporary_id": "quick_1731605123",
"name": "quick_python_1731605123",
"command": "python batch-job.py",
"user": "worker",
"status": "running",
"created_at": "2024-11-14T18:32:03Z",
"uptime": "0:05:32"
},
{
"temporary_id": "quick_1731605456",
"name": "my-temp-server",
"command": "node server.js",
"user": "nodejs",
"status": "running",
"created_at": "2024-11-14T18:37:36Z",
"expires_at": "2024-11-14T19:37:36Z",
"uptime": "0:00:08"
}
]
}

No ephemeral programs

{
"success": true,
"count": 0,
"ephemeral_programs": []
}

GET /api/v1/daemon/quick-start/{id}/status

Section titled “GET /api/v1/daemon/quick-start/{id}/status”

Retrieves current runtime status for a specific ephemeral program by its temporary_id.

NameInTypeRequiredDescription
idpathstringYesTemporary ID of the ephemeral program (format: quick_<timestamp>).
Terminal window
curl "https://your-host/api/v1/daemon/quick-start/quick_1731605123/status"

Program is running

{
"success": true,
"temporary_id": "quick_1731605123",
"name": "quick_python_1731605123",
"status": "running",
"pid": 12345,
"uptime": "0:15:30",
"created_at": "2024-11-14T18:32:03Z"
}

Program is stopped

{
"success": true,
"temporary_id": "quick_1731605123",
"name": "quick_python_1731605123",
"status": "stopped",
"created_at": "2024-11-14T18:32:03Z"
}

Program with TTL expiry

{
"success": true,
"temporary_id": "quick_1731605456",
"name": "my-temp-server",
"status": "running",
"pid": 12350,
"uptime": "0:02:10",
"created_at": "2024-11-14T18:37:36Z",
"expires_at": "2024-11-14T19:37:36Z"
}

Retrieve the last N lines from an ephemeral program’s stdout or stderr log file.

NameInTypeRequiredDescription
idpathstringYesEphemeral program temporary ID.
typequerystringNoLog stream. One of "stdout", "stderr". Default: "stdout".
linesqueryintegerNoNumber of lines to return from end of file. Default: 100.
Terminal window
curl "https://your-host/api/v1/daemon/quick-start/quick_1731605123/logs?type=stdout&lines=50"
{
"success": true,
"logs": "2024-11-14 18:32:03 INFO Starting batch job\n2024-11-14 18:32:05 INFO Processing 100 records\n2024-11-14 18:32:10 INFO Job completed",
"type": "stdout",
"lines": 100,
"log_file": "/var/log/myapp/stdout.log"
}

Creates and starts a temporary custom program that auto-cleans when stopped or on container reboot. Custom programs only — system services (apache2, nginx, etc.) belong under systemctl.

Key behaviors:

  • Not saved to programs.json (temporary only)
  • Tracked in ephemeral.json for crash recovery
  • Always created with autostart=false (does not auto-start on reboot)
  • Auto-cleanup on: manual stop, program exit, container reboot, TTL expiry
  • Full supervisord configuration support (autorestart, environment, logs, etc.)
FieldTypeRequiredDescription
commandstringYesCommand to execute with full arguments for your custom program/script.
userstringYesSystem user to run as (must exist on the system).
namestringNoCustom name (auto-generated if not provided). Cannot contain quotes.
autorestartstringNoRestart policy. One of "true", "false", "unexpected". Default: "unexpected".
directorystringNoWorking directory (defaults to user home if not specified).
environmentobjectNoEnvironment variables as key-value string pairs.
priorityintegerNoStart priority (1–999, lower starts first). Default: 999.
delay_secondsintegerNoDelay before starting (seconds, 0–3600). Default: 0.
stdout_logfilestringNoPath for standard output log.
stderr_logfilestringNoPath for standard error log.
logs_enabledbooleanNoWhether logging is enabled. Default: true.
log_max_bytesintegerNoMaximum log file size in bytes before rotation. Default: 5242880 (5MB).
log_backupsintegerNoNumber of rotated backup log files to keep. Default: 2.
ttlintegerNoTime-to-live in seconds. Program auto-stops after this duration (1–86400).
waitbooleanNoWait for program to reach RUNNING state before returning. Default: false.
timeoutintegerNoTimeout in seconds when wait=true (1–300). Default: 30.
displaystringNoX11 DISPLAY number for GUI programs.
terminal_idintegerNoHoody Terminal session ID (1–65535).
terminal_shellstringNoShell for environment loading. One of "bash", "zsh", "fish", "sh", "tmux".
terminal_interactivebooleanNoOverride interactive vs service mode.
Terminal window
curl -X POST "https://your-host/api/v1/daemon/quick-start" \
-H "Content-Type: application/json" \
-d '{
"command": "node test-server.js",
"user": "nodejs",
"name": "temp-test-server",
"directory": "/opt/test",
"ttl": 1800,
"environment": {
"PORT": "9999",
"NODE_ENV": "test"
},
"wait": true
}'

Program started (without wait)

{
"success": true,
"temporary_id": "quick_1731605123",
"name": "quick_node_1731605123",
"status": "starting",
"created_at": "2024-11-14T18:32:03Z"
}

Program started (with wait=true)

{
"success": true,
"temporary_id": "quick_1731605123",
"name": "temp-test-server",
"status": "running",
"pid": 12345,
"uptime": "0:00:05",
"created_at": "2024-11-14T18:32:03Z"
}

Program with TTL (auto-stop)

{
"success": true,
"temporary_id": "quick_1731605456",
"name": "temp-test-server",
"status": "running",
"pid": 12350,
"uptime": "0:00:08",
"created_at": "2024-11-14T18:37:36Z",
"expires_at": "2024-11-14T19:37:36Z"
}

Stops the ephemeral program and removes its configuration completely.

Actions performed:

  1. Stop program via supervisorctl
  2. Delete supervisord config file
  3. Remove from ephemeral.json tracking
  4. Update supervisord

Result: program is completely removed from the system (cannot be restarted).

NameInTypeRequiredDescription
idpathstringYesTemporary ID of the ephemeral program to stop.
Terminal window
curl -X POST "https://your-host/api/v1/daemon/quick-start/quick_1731605123/stop"
{
"success": true,
"temporary_id": "quick_1731605123",
"cleaned_up": true,
"message": "Program stopped and configuration removed"
}