ZacharyZhang-NY bb5cbff62d Add /graph G3: dynamic replan from DISCOVERED work items
Workers, verifiers, and serial node goals can now surface out-of-scope work
as line-anchored 'DISCOVERED: <text>' markers (fence-stripped and
placeholder-filtered — the templates' own examples are fenced so verbatim
echoes never parse; worker summaries embedded in verifier prompts get the
marker neutralized alongside NODE_RESULT/NODE_VERDICT). Discoveries queue on
the orchestration as persisted state and fold into the graph at dispatch
boundaries: a replanner subagent produces a strictly APPEND-ONLY appendix,
validated against the live graph (existing-id deps allowed; edges onto
gn-final rejected — they would cycle the moment the final-gating extension
lands; Blocks deps on Failed/Blocked nodes rejected as DeadDep so the
attempt-2 feedback loop repairs the artifact). Installing an appendix bumps
plan_version, freezes an immutable graph.baseline.v{N}.json next to the
prior versions, extends gn-final's gate (demoting a Ready final back to
Waiting), and recomputes readiness.

DiscoveredFrom edges are audit metadata, never scheduling gates: an origin
is always terminal at replan time, so gating on it is either a no-op or a
permanent wedge — and a failed node's discoveries are still real work.
Replanning is bounded by KIGI_GRAPH_REPLAN_CAP (default 3; 0 disables it
quietly): past the cap, after the final node has achieved, or on replan
failure, discoveries drain to history only — a working graph is never
paused for a failed enhancement pass, and it always converges. The budget
gate now precedes the replan boundary (a budget-dead graph keeps its
discoveries queued for a later --budget top-up instead of spending two
replanner runs first), and both planner runners delete stale artifacts
before spawning so a child that responds without writing can never get a
previous pass's file validated as its own output.

Tests: validate_replan unit coverage (existing-id resolution,
DiscoveredFrom dedup, collisions, dead deps vs dead origins, terminal-node
edges, combined-graph cycles), tracker appendix/regate/audit-edge tests,
and two e2e flows — discovery → replan → appended node runs to Achieved
with both baselines frozen, and cap-0 draining to history while the graph
still converges. kigi-shell 4935 lib tests green; workspace clippy clean.
2026-07-20 19:17:24 -04:00
2026-07-18 20:25:51 -04:00
2026-07-18 20:25:51 -04:00
2026-07-18 12:33:48 -04:00

Kigi (kigi) 🌘

Kigi is an unofficial Kimi Code CLI community build — a terminal-based AI coding agent re-targeted at the Kimi Code subscription API and the Moonshot open platform, built on the Apache-2.0 sources of xai-org/grok-build.

It runs as a full-screen TUI that understands your codebase, edits files, executes shell commands, searches the web, and manages long-running tasks — interactively, headlessly for scripting/CI, or embedded in editors via the Agent Client Protocol (ACP).

Installation · Providers and API keys · Building from source · Coexistence with the official CLI · License

Kigi demo

Full-quality recording (mp4)


Installation

Prebuilt single-file binaries for macOS (arm64/x86_64), Linux (arm64/x86_64), and Windows (x86_64) are published on GitHub Releases:

# macOS / Linux
curl -fsSL https://raw.githubusercontent.com/ZacharyZhang-NY/Kigi-CLI/main/install.sh | bash
# Windows PowerShell
irm https://raw.githubusercontent.com/ZacharyZhang-NY/Kigi-CLI/main/install.ps1 | iex
kigi --version   # kigi 0.1.1 … unofficial Kimi Code CLI community build
kigi login       # sign in with your Kimi Code subscription (device-code flow)
kigi             # start the TUI

The installer verifies every download against the release's SHA256SUMS, installs into ~/.kigi/bin/kigi (%USERPROFILE%\.kigi\bin\kigi.exe on Windows), and prints the PATH line to add. Later releases arrive through the built-in self-updater (kigi update, gated by KIGI_AUTO_UPDATE), which pulls from the same GitHub Releases feed.

Providers and API keys

Kigi talks to a fixed three-platform registry:

Platform id Base URL Auth
kimi-code https://api.kimi.com/coding/v1 Kimi Code subscription OAuth (kigi login)
moonshot-cn https://api.moonshot.cn/v1 Moonshot open-platform API key
moonshot-ai https://api.moonshot.ai/v1 Moonshot open-platform API key

Moonshot API keys come from the environment or ~/.kigi/config.toml (environment wins; values are never logged):

export KIGI_MOONSHOT_API_KEY=sk-...     # applies to both open platforms
export KIGI_MOONSHOT_CN_API_KEY=sk-...  # platform-scoped, beats the generic name
export KIGI_MOONSHOT_AI_API_KEY=sk-...
# ~/.kigi/config.toml
[platforms.moonshot-cn]
api_key = "sk-..."

[platforms.moonshot-ai]
api_key = "sk-..."

On login and on startup Kigi syncs each configured platform's model list from GET {base}/models and shows the merged catalog in the model picker (catalog keys are {platform_id}/{model_id}). Models that advertise selectable thinking levels (e.g. K3's low/high/max) expose them in /model and /effort. If the sync fails, the last cached catalog is used; with no cache, a small built-in fallback list applies. Model selection resolves as --model CLI flag > KIGI_DEFAULT_MODEL > [models] default in config.toml > server-delivered list > built-in fallback.

KIGI_CODE_BASE_URL re-points the subscription platform (useful for testing); KIGI_MOONSHOT_CN_BASE_URL / KIGI_MOONSHOT_AI_BASE_URL are the equivalent dev/test overrides for the open platforms.

The web search/fetch tools ride the Kimi Code subscription services and are present only on OAuth sessions — API-key-only sessions run without them, matching the official client.

Building from source

rustup toolchain install 1.97.0
cargo build --profile release-dist -p kigi-bin
./target/release-dist/kigi --version

protoc is invoked through the vendored dotslash launcher at bin/protoc; install dotslash (brew install dotslash or cargo install dotslash) if it is not already on your PATH.

Coexistence with the official Kimi CLI

Kigi is not affiliated with Moonshot AI or xAI, and it coexists with the official kimi CLI on the same machine: independent binary name, independent config directory (~/.kigi), independent keyring credentials (service kigi), and a KIGI_* environment-variable namespace. Nothing the official client installs or stores is ever read at runtime or written. On first launch Kigi offers a one-time, strictly read-only import of your existing ~/.kimi configuration (MCP servers, custom providers, default model) via kigi import-kimi — file contents and mtimes under ~/.kimi are left untouched, verified by tests.

Kigi is zero-telemetry: the only outbound connections are the inference/auth APIs you configure, GitHub Releases for updates, and MCP servers you add.

License

Apache-2.0. See LICENSE, NOTICE, and THIRD-PARTY-NOTICES. Code ported from openai/codex and sst/opencode is documented in crates/codegen/kigi-tools/THIRD_PARTY_NOTICES.md. Kigi is based on Grok Build Open Source; the --version output carries the attribution.

S
Description
Migrated from GitHub
Readme Apache-2.0
30 MiB
Languages
Rust 99.7%
Python 0.3%