Skip to content
Niki

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.

choose a provider and model per stage, or use a local Ollama model
niki.toml, mix freely
[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.toml or the provider environment variables; supported environment values take precedence
  • Provider-specific *_BASE_URL / *_MODEL environment overrides where supported
  • OpenAI-compatible endpoints via base_url on a named provider
  • niki providers check checks configured providers
  • niki recommend uses static provider/model pairings, not observed spend
anthropicopenaiopenrouternvidiatogethergroqdeepseekzenkimikilogoogleollama

MCP client configuration.

client implemented · not executed by a run

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 configuration

niki.toml, [[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 = true

Wherever you work.

one pipeline, three surfaces: interactive, in-editor, and headless automation

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.

local JSONL · OTLP export is opt-in

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.