AGPL-3.0-or-later · forever.

operations · live

Bridge the project clock to the OS.

Emit launchd or systemd user units that invoke the same nika arm fire path as the resident server.

Use the host scheduler when it already owns process lifetime, wakeups and restart policy. Nika emits the unit, but firing law, spend limits and receipts remain inside the engine.

Inspect generated units before they touch the host.

Without --write, the emitter prints the exact launchd or systemd unit. Review the binary path, working directory, calendar and environment file before installation.

nika arm --emit launchd
nika arm --emit systemd

Write the user-scoped bridge deliberately.

The user scope is the live posture. Give the emitted service an explicit binary and environment file in production so a shell profile never becomes hidden deployment state.

nika arm --emit systemd --write \
  --mode user \
  --nika-bin /usr/local/bin/nika \
  --env-file /srv/nika/project.env

Keep provider keys out of generated units.

The env file path belongs in the unit. Secret values stay in the protected file or host secret mechanism. The emitted bytes can be reviewed without leaking provider authority.

  • Generated unit: path, calendar, cwd and command.
  • Protected env file: provider keys and deployment-only values.
  • nika.yaml: arm-ready project controls and declarations, never secret bytes.

Leave an auditable suspension.

Removing an arm row does not narrate why it stopped. Mark the beat inactive with a reason and expiry. The disarm command teaches the unload gesture and can remove generated unit files without pretending it edited project intent.

nika: my-project

ceiling: 0.50

arm:
  - workflow: workflows/daily-brief.nika.yaml
    cadence: "TZ=Europe/Paris 30 7 * * 1-5"
    où: local
    plafond: 0.20
    manqué: rattraper-une-fois
    chevauchement: sauter
    actif: false
    raison: maintenance fournisseur
    jusqu_au: 2026-09-01