Skip to main content
nika serve is the released resident firer. It reads the arm: registry from nika.yaml, waits on the wall clock and ends each due beat at the same firing law as nika arm fire.
nika serve is not an HTTP API. It accepts no SDK job request and exposes no SSE endpoint. Do not point the root Nika client at it.

Rehearse each operating mode

--dry is intentionally narrower than a real fire. It does not take the beat lock or apply the complete missed-run, overlap, cost and execution policy.

Reload without losing the last good registry

HOT RELOAD Β· INVALID EDITS DO NOT REPLACE VALID POLICY
The server retries a refused edit on a later tick. This keeps a typo visible without silently replacing valid policy with an empty schedule.

Read process and beat outcomes separately

Each beat prints one decision line and appends project state. A completed --once sweep exits clean even when an individual workflow failed or paused, so supervision must read the beat lines and ledgers, not only the outer process exit.

Delivery and shutdown

Ctrl-C and SIGTERM stop the resident loop at its signal boundaries. The ledger uses durable claims and receipts, which yields at-least-once delivery:
Exactly-once is never promised. Make the workflow’s external effects idempotent when replay would otherwise duplicate harm.

Deployment checklist

  • Set a stable project cwd containing nika.yaml.
  • Install an explicit nika binary path.
  • Protect provider keys outside project source.
  • Persist .nika/traces/ and .nika/arm/ according to policy.
  • Capture stdout decision lines.
  • Send SIGTERM and allow the active firing boundary to settle.

Continue

Arm registry

The schedule and policy this process consumes.

OS schedulers

Let launchd or systemd own wakeups instead.

Runtime state

Persist the evidence behind each decision line.

Production runbook

Boot, supervise, probe and investigate the process.

Deployment topologies

Choose the right process boundary.