Enterprise Readiness
What regulated teams get today (policy controls, audit trail, observability) and what is explicitly missing (SSO, SCIM, VPC).
Honest accounting first: NIKI has no SSO/SAML, no SCIM provisioning, no VPC/on-prem control plane, and no role-based seats. Those are major builds with external infrastructure, not configuration flags, and this page will say so until they exist. What follows is what regulated teams can rely on today.
What exists
Policy controls ([permissions])
- Modes (
manualdefault,auto,dontask,bypass) plus per-run override:niki run "<description>" --permission-mode <mode>. Unknown mode strings fail closed tomanual. disable_worktree = truerefuses the unisolated worktree backend outright, the governance kill-switch for fleets where local-process execution is unacceptable.fail_closed_headless = trueturns headless Ask into Deny instead of Allow-with-warning, for unattended runs where silent auto-approval is unacceptable. Defaultfalse(behavior-preserving); enable it in CI.- Command deny-lists cover the narrow global defaults (force-push forms, root-filesystem
rm,mkfs,dd, pipe-to-shell patterns, and--no-verify) plus role-specific Git/filesystem denies. They do not generally blockgit reset --hard,rm -rf ~,fdisk, orgit branch -D main.
Audit trail (per run, no extra setup)
Task output is stored under .niki/tasks/<id>/: report.md, changes.patch, per-agent artifacts/*.json, trace.jsonl, and manifest.json when snapshots are enabled. safety_proof.json appears only for a non-empty eligible branch, while artifacts/test_execution.json appears only when a test command resolves. Eval runs write eval-manifest.json under the eval output directory, not the task directory.
niki audit <task-id>emits partial or complete JSON bundles. Itscompleteflag checks only for a task record,report.md, andsafety_proof.json; it does not require test execution, a trace, or a patch. Default snapshot retention is 14 days, after which old task directories are pruned.niki run "<description>" --output-format jsongives scripts the verdict/branch/cost contract;--barestrips ambient inputs (memory, MCP discovery, knowledge URLs) for reproducible runs.
Observability
--otel-endpoint(orOTEL_EXPORTER_OTLP_ENDPOINT) exports run spans as OTLP/HTTP to any collector (Jaeger, Grafana Tempo, Honeycomb). Every span carriesniki.timeline = "derived"; offsets come from recorded latencies, never fabricated wall-clock.- Nightly eval gate (
.github/workflows/nightly-eval.yml): keyless replay + disclosure manifest on every schedule, so regressions page you instead of your customers.
Supply chain
Tight deny.toml license allow-list, golangci-lint in CI, checksum-verified
installers, and release channels via goreleaser. Outbound traffic depends on
features: provider APIs, niki research, knowledge URLs, optional OTLP export,
and remote MCP client traffic can all leave the machine. The current pipeline
does not connect configured MCP servers.
What is missing (roadmap, not features)
| Need | Status | Workaround today |
|---|---|---|
| SSO/SAML login | Not built | BYOK keys via supported env vars or niki.toml; short-lived tokens rotated externally |
| SCIM provisioning | Not built | niki.toml is a file; manage it with your existing config management |
| VPC / private runners | Not built | DOCKER_HOST=ssh://… runs containers on your own hosts (see Remote Daemon) |
| RBAC seats | Not built | OS users + file permissions on niki.toml and .niki/ |
| Data residency | Provider-dependent | Use region-pinned base_urls; Ollama for fully local runs |
Recommended enterprise posture today
- Ship a managed
niki.tomlwithdisable_worktree = true,fail_closed_headless = true, a spend cap, and pinned models. - Collect
niki auditbundles per release branch into your artifact store. - Point
--otel-endpointat your collector; alert oncomplete: false. - Run the nightly eval workflow; treat red as a release blocker.