Bring your own providers.
Twelve named provider slugs, custom OpenAI-compatible endpoints through base_url, ACP, and optional OTLP export. The MCP client is not wired into pipeline runs.
Per-agent provider mixing.
[agents.planner]
provider = "anthropic"
model = "claude-sonnet-4-20250514"
[agents.coder]
provider = "anthropic"
model = "claude-sonnet-4-20250514"
[agents.tester]
provider = "openai"
model = "gpt-4o-mini" # cheap model for test generation
[agents.reviewer]
provider = "anthropic"
model = "claude-sonnet-4-20250514"Keys & overrides
- Keys from
niki.tomlor the provider environment variables; supported environment values take precedence - Provider-specific
*_BASE_URL/*_MODELenvironment overrides where supported - OpenAI-compatible endpoints via
base_urlon a named provider niki providers checkchecks configured providersniki recommenduses static provider/model pairings, not observed spend
MCP client configuration.
Niki includes an MCP client, but the pipeline currently constructs an empty McpManager::new(); configured servers are not connected or exposed as executable tools in a run. The config shape is an array of tables under [[mcp.servers]].
[mcp]
enabled = true
[[mcp.servers]]
name = "search"
url = "https://mcp.example.com/mcp"
enabled = true
[[mcp.servers]]
name = "repo-tools"
command = "npx"
args = ["-y", "@example/repo-tools"]
enabled = trueWherever you work.
Terminal
niki chat: rich TUI with live agent state, sessions, checkpoints and undo. niki run "<description>" --tui for full-run streaming.
IDE via ACP
niki acp runs an Agent Client Protocol server: drive the pipeline from Zed and other ACP-compatible editors.
CI / headless
niki run "<description>" --bare --output-format json: a stable envelope with pipe-pure stdout, configurable permissions and optional OTLP trace export (--otel-endpoint).
Traces without a vendor.
Runs write trace.jsonl under the task directory, locally and unconditionally.
Exporting spans over OTLP is optional and makes an outbound request to the endpoint you configure.