Octri

CLI

Overview

octri is the command line for your Octri project. It does what the dashboard does: push a spec, build SDKs, publish docs, upload symbols, and work through the errors your SDKs report from production.

Install

global
npm install -g @octri/cli
octri --help

Node 20 or newer.

Sign in

bash
octri auth login
octri projects use

auth login prompts for your email and password, and for your authenticator code if you have two-factor on. --email and --password work for scripted setups. projects use with no argument opens a picker; pass a project id to skip it.

The session lives in ~/.octri/config.json, mode 0600. Profiles keep separate environments side by side:

bash
octri config use prod --api-url api.octri.dev
octri config set defaultLanguages go,rust,swift

What it covers

GroupWhat you do with it
auth configSign in, switch profile, print a token for curl
projects specsCreate a project, push or import a spec, follow ingestion
sdkLanguage catalogue, settings, spec audit, preview, build, download, publish
docsPages, guides, navigation, versions, custom domain, changelog
monitoringIssues, logs, traces, releases, alerts, checks, symbol uploads
orgs keysMembers, invites, usage, billing, API keys
githubPoint a project at a spec file in a repo and sync it
jobsDepth and failures in the generation queue
mcpThe project's tool catalogue, and an MCP server over stdio

Run octri <group> --help for one group on its own.

A first run

bash
octri specs push ./openapi.yaml
octri sdk build --lang go,typescript --download
octri docs versions publish <specId>

specs push waits for the whole pipeline, not the upload: the spec parses in a second, then the doc pages, search index and changelog are written behind it. The spinner names the stage it is on.

Output

Three modes, chosen automatically.

ModeWhenWhat you get
InteractiveA terminalColour, spinners, live build lanes, tables
PlainPiped, or CI is setAppend-only lines, no escape sequences
--jsonYou ask for itOne JSON document on stdout, errors on stderr

--json is the one to script against. NO_COLOR and --plain are honoured.

Global flags

FlagEffect
--project <id>Act on a project other than the selected one
--profile <name>Use a different stored environment
--api-url <url>Point at another API
--jsonMachine-readable output
--quietDrop everything but the result
--plainNo animation
--no-colorNo colour

Values resolve flag first, then environment variable, then the stored profile. The environment variables are OCTRI_PROFILE, OCTRI_API_URL, OCTRI_TOKEN, OCTRI_API_KEY, OCTRI_PROJECT_ID and OCTRI_CONFIG_DIR.

Monitoring

Reads and triage use your session, so they need nothing but a login:

bash
octri monitoring summary
octri monitoring issues --status unresolved
octri monitoring issue <id>
octri monitoring resolve <id>

The two upload commands work differently. They talk to the monitoring service directly with an ingest token, because a CI job has one secret and no way to log in.

bash
octri monitoring sourcemaps upload ./dist
octri monitoring sources upload ./src

Signed in, the CLI resolves the connection for you. In CI you pass it. octri monitoring config prints the three values to store as secrets.

See Source maps, Source files and CI setup, or Monitoring for the full command set.

Driving it from an AI assistant

bash
octri mcp serve

That speaks MCP over stdio and exposes the same surface as typed tools, so an assistant can push a spec, wait for a build, read the generated source, and read the production errors that build caused.

jsonc
{
  "mcpServers": {
    "octri": {
      "command": "octri",
      "args": ["mcp", "serve"]
    }
  }
}

Credentials come from your stored profile. The assistant never sees them. Reads are open; publishing to package registries and deleting a spec are refused unless you start the server with --allow-publish or --allow-delete.

Not the CLI inside your SDK

This is Octri's own CLI. It is unrelated to the CLI generated inside your SDK, which is a command-line client for your API that your customers run.