Skip to main content
This is the CLI for working with Mzizi’s components and doctrine in a project. The language’s own command-line tool is mz; see the compiler.
The CLI is free, with no gate. That is the owner’s decision of 29 September 2026: gating starts only at Fundi, which ties into the console.

Install

The package is @nyuchi/mzizi-cli. It installs two names for the same program, mzizi and fundi. The latest published version is 0.6.3, read from npm on 30 September 2026. It needs Node 20 or later.
Use 0.6.1 or later, not 0.6.0. In 0.6.0 both binaries printed nothing and exited 0, because the entry-point check compared a symlinked path with the resolved file. 0.6.1 fixes it.
What changed since 0.6.1:

Commands

Every command works under either name: fundi add and mzizi add are the same.

mzizi add: the registry installer

It resolves a component and its registry dependencies from api.mzizi.dev and needs no account and no API key. It does not touch the MCP server. Rust first. For a Rust project, mzizi add does not copy .rs sources in. It names the crate that holds the component and prints the cargo add to run, because the crates are on crates.io (see Mzizi Roots). In a project with only a Cargo.toml:
The crate name comes from the crate field of the API’s /v1/rs/{name} response, which names each component’s own crate: mzizi add mzizi-alert-banner records mzizi-brand, and mzizi add mzizi-footer records mzizi-shell. The Roots crate list says what each crate holds, and mzizi-roots brings the UI crates in one dependency. For a React project, it writes the .tsx files and lists the npm packages they need, as the shadcn CLI would. The target is inferred from the project, and --target rust, --target tsx or --target astro overrides it. A project with both a Cargo.toml and a package.json is ambiguous, so mzizi add refuses and asks for --target rather than guess. An Astro project (even one with React islands) infers astro (from @nyuchi/mzizi-cli 0.7.0): it installs a component’s pure .astro from api.mzizi.dev/v1/astro/<name>, with every registry file it imports and any brand asset, into src/components/mzizi/, and refuses by name a component that has no .astro rather than install its .tsx.

Model access

ANTHROPIC_API_KEY is optional. Like tsc, the CLI is usually run by a coding agent that already has model access. Without a key, plan prints a deterministic context bundle, the project snapshot plus the Mzizi skills that match your goal, for that agent to plan from, and chat points you back at the agent. With a key, plan and chat run Fundi’s own agent loop.

Registry access

plan and chat read the registry through the MCP server, which serves every tool but the Fundi tools without sign-in. So explore, plan, chat and add need no account. fundi login exists only for the Fundi tools, which act as a Mzizi console user.

Safety

  • Planning is read-only. Writing a file and running a shell command are blocked while planning, and reachable only through an explicit non-dry-run apply.
  • Everything is sandboxed to the project root. A path that escapes it is rejected, in planning and in apply.
  • mzizi add does not overwrite by default. A file that already exists is not replaced unless you pass --overwrite.
  • The CLI never holds a machine credential. It reaches Fundi only through the MCP server, which acts for a signed-in user.

As a library

The SDK reads no environment variables itself; the CLI wires them in. As a library, createFundi() still takes a key.

Two things called fundi

The name appears twice, and they are different things.

Fundi, the agent behind the console

The self-healing agent and issue desk, run under Nyuchi and tied into the console. Its architecture counterpart is the N9 fundi rung of the helix. It runs as a service, not as something you install.

fundi, the CLI binary

The binary in @nyuchi/mzizi-cli, described on this page. You install it in your own project and it helps you set Mzizi up there. It does not run the self-healing loop.