Skip to content

Use these endpoints to list, retrieve, create, update, and remove daemon programs. The daemon manages long-running processes through supervisord. Endpoints are split into two groups:

  • Programs — permanent definitions stored in programs.json and registered with supervisord. Use these for programs that must survive container reboots.
  • Quick Start — ephemeral (temporary) programs tracked in ephemeral.json. They never auto-start on boot and are removed on stop, exit, or TTL expiry. Use these for one-off scripts, temporary test servers, debug tasks, or CI/CD jobs.

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 statistics for each program.

NameInTypeRequiredDescription
hoody_kitquerystringNoFilter by hoody_kit status. Literal values: "true", "false".
lazy_loadquerystringNoFilter by lazy_load status. Literal values: "true", "false".
enabledquerystringNoFilter by enabled status. Literal values: "true", "false".
bootquerystringNoFilter by boot status. Literal values: "true", "false".
portqueryintegerNoFilter programs by single port number. Returns programs whose port_range includes this specific port (e.g. ?port=8042).
port_fromqueryintegerNoFilter by port range start. Must be used with port_to.
port_toqueryintegerNoFilter by port range end. Must be used with port_from.
include_statusquerystringNoInclude runtime status. Literal values: "true", "false".
include_statsquerystringNoInclude resource stats (CPU, memory, process tree). Implies include_status=true. Literal values: "true", "false".

200 — Successfully retrieved list of all programs

{
"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
}
]
}
await client.daemon.programs.listIterator({
enabled: "true",
include_status: "true"
});

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

NameInTypeRequiredDescription
idpathintegerYesUnique numeric identifier of the program.
{
"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
}
}
const program = await client.daemon.programs.get(1);

Creates a new daemon program from a JSON request body. The program is validated, added to the configuration, and registered with supervisord if enabled. Use for custom programs only — not system services.

Correct examples: node app.js, python my_script.py, ruby custom_server.rb, ./my-binary Wrong examples: apache2, nginx, postgresql, mysql (use systemctl for these)

{
"name": "simple-app",
"command": "echo \"Hello World\"",
"user": "root"
}
{
"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
}
}
const result = await client.daemon.programs.add({
name: "nodejs-app",
command: "node server.js",
user: "nodejs",
enabled: true,
boot: true
});

Updates an existing program configuration. Only provided fields are updated — unspecified fields retain their current values.

NameInTypeRequiredDescription
idpathintegerYesUnique numeric identifier of the program.
{
"enabled": false
}
{
"success": true,
"program": {
"id": 1,
"name": "updated-app",
"description": "Completely updated application",
"enabled": true,
"command": "node app.js",
"boot": true,
"delay_seconds": 15,
"autorestart": "true",
"user": "nodejs",
"environment": {
"NODE_ENV": "production"
},
"directory": "/opt/newpath",
"priority": 50
}
}
const result = await client.daemon.programs.edit(1, {
description: "Updated description",
command: "node server.js --production",
environment: {
NODE_ENV: "production",
PORT: "8080"
}
});

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.
{
"success": true,
"id": 1
}
await client.daemon.programs.remove(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.

This endpoint takes no parameters and no request body.

{
"success": true
}
await client.daemon.programs.reset();

Quick Start manages ephemeral (temporary) programs. They are not saved to programs.json, are tracked in ephemeral.json for crash recovery, and are auto-cleaned on manual stop, program exit, container reboot, or TTL expiry.

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

This endpoint takes no parameters.

200 — Successfully retrieved list of 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"
}
]
}
await client.daemon.quickStart.listIterator();

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 features:

  • 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.)
{
"command": "python batch-job.py",
"user": "worker"
}
{
"success": true,
"temporary_id": "quick_1731605123",
"name": "quick_python_1731605123",
"status": "running",
"pid": 12345,
"uptime": "0:00:05",
"created_at": "2024-11-14T18:32:03Z"
}
const result = await client.daemon.quickStart.launch({
command: "python batch-job.py",
user: "worker",
ttl: 3600,
wait: true
});

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>).
{
"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"
}
const status = await client.daemon.quickStart.getStatus("quick_1731605123");

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

The program is completely removed from the system and cannot be restarted.

NameInTypeRequiredDescription
idpathstringYesTemporary ID of the ephemeral program to stop.
{
"success": true,
"temporary_id": "quick_1731605123",
"cleaned_up": true,
"message": "Program stopped and configuration removed"
}
await client.daemon.quickStart.stop("quick_1731605123");

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

NameInTypeRequiredDescription
idpathstringYesEphemeral program temporary ID.
typequerystringNoLog stream. Allowed values: stdout, stderr. Default: "stdout".
linesqueryintegerNoNumber of lines to return from end of file. Default: 100.
{
"success": true,
"logs": "[2024-11-14 18:32:03] Starting batch job...\n[2024-11-14 18:32:05] Processing 100 records\n[2024-11-14 18:32:08] Complete",
"type": "stdout",
"lines": 3,
"log_file": "/var/log/quick_python_1731605123.stdout.log"
}
const logs = await client.daemon.quickStart.getEphemeralLogs(
"quick_1731605123",
{ type: "stdout", lines: 50 }
);