Skip to main content
praisonai daemon keeps provider clients and MCP connections hot in memory so repeated praisonai run calls skip cold-start entirely. The user runs repeated praisonai run commands; the warm daemon forwards work to hot provider and MCP connections.

Quick Start

1

Start the daemon in the background

The daemon writes a project-local lockfile and binds to a free loopback port. All subsequent praisonai run calls in the same project directory automatically detect and attach to it.
2

Run prompts — no extra flags needed

Each call transparently attaches to the warm runtime. Provider and MCP clients are already initialised — only the prompt is forwarded.
3

Check status and stop


How It Works


Configuration Options

praisonai daemon start

praisonai daemon status

praisonai daemon stop

No flags. Sends SIGTERM after a health-check ping to guard against PID reuse. Cleans up the lockfile.

When to Use Foreground vs Background


When run Stays In-Process

praisonai run skips the daemon and runs locally whenever you pass any of these flags: In all these cases, praisonai run behaves exactly as it did before the daemon feature. No flags are needed to opt out — it happens automatically.

Common Patterns

Only the first call pays setup cost. The loop body is fast — just HTTP over loopback.
The default is 1800 seconds (30 minutes). The daemon shuts itself down silently when the idle timer expires.
The --json flag returns {running, host, port, pid, base_url} — safe for jq or any JSON parser.

Security

The daemon is local-only and should never be exposed beyond loopback.
  • Loopback only: The CLI rejects any --host that is not a loopback address (e.g. 127.0.0.1, ::1). There is no way to bind to an externally reachable interface.
  • Per-process bearer token: Generated via secrets.token_urlsafe(32) at startup. A new token is generated every time the daemon starts. The token is accepted only via Authorization: Bearer <token> — never via query parameters.
  • File-permissioned lockfile: runtime.json is written with mode 0600 (owner read/write only) using an atomic O_CREAT|O_TRUNC open with mode bits set up-front — the token is never written with loose permissions even briefly.
  • Idle timeout: The daemon auto-shuts down after --idle-timeout seconds (default 30 minutes), limiting its exposure window.
  • PID liveness check: daemon stop pings the runtime before sending SIGTERM to guard against signalling an unrelated process that inherited the same PID.

Best Practices

Foreground mode is useful for debugging (you can see log output). For all other use cases, --background is simpler: it returns immediately and the daemon persists across terminal sessions.
The default 30-minute timeout is a good balance between warmth and resource usage. Setting --idle-timeout 0 means the daemon never shuts down automatically — only use this if you understand it will consume memory indefinitely.
The lockfile is stored under the project data directory, scoped to the current project. Running two daemons in the same project will print a warning and exit. Each project directory gets its own independent daemon.
Starting a daemon when one is already running prints a warning and exits cleanly — there is no risk of running two daemons accidentally.

Run Command

The praisonai run command — automatically attaches to a warm daemon when one is running.

MCP Integration

MCP server connections benefit most from the warm runtime — they stay connected across run calls.