Skip to main content
The CLI installs from the qiforge-cli npm package and runs as the qiforge-cli binary (source). It scaffolds new oracles, scaffolds new plugins inside an existing oracle, provisions on-chain identity + Matrix bots, and gives you an SSE chat client for testing.

Installation

pnpm users: after install, approve build scripts for protobufjs:
Verify:
Requires Node 22+. Authentication needs either the IXO Mobile App (SignX QR) or a 12/24-word mnemonic (offline mode).

Commands at a glance

Authentication

Two modes:
Uses the IXO Mobile App for QR-code-based authentication. Keep the app open during the session.
Uses a local mnemonic. No mobile app needed. Credentials are stored in ~/.wallet.json.Interactive:
Non-interactive:
Flags:

qiforge-cli new

Scaffolds a new oracle from the bundled starter template — no git clone. Interactive by default: it walks you through auth, network, the oracle profile, and entity creation, then writes the project.
Non-interactive (for CI) — --name is required:
Flags: The command optionally runs the install step and can also create the oracle entity + Matrix account in the same flow.

qiforge-cli plugin new

Scaffolds a new plugin into an existing oracle project. Run it from inside the project; the CLI walks up to find a package.json that depends on @ixo/oracle-runtime and writes the plugin there.
Flag: --cwd — the directory to resolve the oracle project from (defaults to the current directory). Generated layout (under src/plugins/<name>/):
Name validation: kebab-case, must not collide with bundled plugin names.

qiforge-cli create-entity

Creates the on-chain entity record and Matrix bot, and writes oracle.config.json + .env. Used both standalone (e.g. when re-provisioning) and as part of new.
create-entity registers --api-url http://localhost:4000 by default, but the runtime’s own default PORT is 3000. If you take the default URL, make your running oracle reachable at it: either set PORT=4000 in your .env to match, or update the registered URL later with qiforge-cli update-oracle-api-url.
Flags: Supported model identifiers (from the interactive menu):
Or pass any custom identifier as --model.

qiforge-cli update-entity

Updates an existing entity. Used to add controllers, rotate keys, or modify metadata after the initial create-entity.
Accepts account DIDs as controllers (in addition to entity DIDs).

qiforge-cli update-oracle-api-url

Updates the URL the oracle entity advertises. Default is http://localhost:4000; switch to your deployed URL before going live.

qiforge-cli setup-encryption-key

Provisions the oracle’s encryption/signing key into its Matrix account room — the P-256 keyAgreement key used to decrypt per-room secrets, plus the signing material the runtime uses to mint downstream UCAN invocations. Until it’s provisioned, authenticated routes return 401 and the boot log warns about the missing key.
Run it once per oracle (and again after rotating the key).

qiforge-cli create-composio-key

Mints a Composio API key tied to your oracle’s DID. Required if your oracle uses the bundled composio plugin.
Prompts for the oracle DID and a key label, then writes the key to your Composio account.

qiforge-cli create-user

Creates a new user account (DID + Matrix account) — useful for testing your oracle against multiple identities.

—chat

Starts a chat session with a running oracle over SSE — renders tool calls, assistant messages, and errors in the terminal. It’s a flag, not a subcommand:
Interactive — prompts for the oracle URL (or uses the saved one from new).

qiforge-cli logout

Clears stored authentication. Future commands prompt for auth again.

What qiforge-cli new writes

The CLI also scaffolds a qiforge-oracle Claude Code skill at .claude/skills/qiforge-oracle/ so any AI agent you point at the project (Claude Code, Cursor, etc.) immediately has dense, scenario-specific guidance on the framework — adding plugins, adding tools, wiring env, writing tests with createTestRuntime, debugging boot. The skill is project-local: it ships inside every scaffolded oracle, no separate install needed. See the skill source in the CLI repo. Generated .env skeleton:
Fill in the plugin-specific vars before booting.