Skip to main content

CLI Reference

okto-pulse is the single entry point for installing, starting, and maintaining a Pulse instance. All commands run locally — nothing is sent to a remote server.

Installing the CLI

Requires Python 3.11+. See Install for Docker and source options. Verify the install:

Global flags

These flags are accepted by every command.
boolean
Print usage and exit. Works on the root command and on any subcommand: okto-pulse init --help.
boolean
Print the versions of both okto-pulse and okto-pulse-core and exit. Source: cli.py:164.
To increase log verbosity, set the DEBUG environment variable:

okto-pulse init

Source: cli.py:314–440 Initialize ~/.okto-pulse/, seed the database, bootstrap the knowledge graph schema for the first board, and optionally write .mcp.json for your agent.
string[]
Generate .mcp.json in the current directory. Pass with no argument to include all registered agents. Pass one or more agent names to include only that subset. Omit the flag entirely to skip .mcp.json generation.
What init creates:
.mcp.json is written in the current working directory (not ~/.okto-pulse/). Run init from your project root so your agent picks it up.
.mcp.json contains a per-agent API key. Add it to .gitignore before your first commit.
Exit codes: 0 on success. Non-zero if the data directory cannot be created or the database cannot be seeded.

okto-pulse serve

Source: cli.py:500–563 Start the API server, web board, and MCP server as a single Python process with two uvicorn listeners.
number
default:"8100"
Port for the web board and REST API. Sets OKTO_PULSE_PORT before the app module is imported. Source: cli.py:20.
number
default:"8101"
Port for the MCP server (216 tools). Sets OKTO_PULSE_MCP_PORT before the app module is imported. Source: cli.py:21.
boolean
Pre-accept the Terms of Use and skip the interactive prompt. Equivalent to setting OKTO_PULSE_TERMS_ACCEPTED=1. Required in CI and containerized environments. Source: cli.py:537.
Both port environment variables are set before the app module is imported, because okto_pulse.community.main reads them at import time to generate /config.js. If you use a non-default MCP port, update the generated .mcp.json URL so it matches the port passed to okto-pulse serve --mcp-port.
Exit codes: 0 on clean shutdown (Ctrl+C). Non-zero if either port is already in use.

okto-pulse status

Source: cli.py:567–614 Show service status and board metrics without starting the server.
number
default:"8100"
Port to probe for the API server. Must match the port used in serve.
number
default:"8101"
Port to probe for the MCP server.
Exit codes: 0 always. Port connectivity failures are reported in the output, not via exit code.

okto-pulse api-key

Source: cli.py:620–680 Print the bootstrap API key directly from the SQLite database. Use this in CI/CD pipelines to extract the seeded key without parsing log output.
No flags. Output: The API key value on a single line to stdout. The startup banner goes to stderr so the key can be captured cleanly:
Exit codes: 0 if the key is found and printed. 1 if the database is missing or no key exists (run okto-pulse init first).

okto-pulse verify-pipeline

Source: cli.py:683–744, kg/health.py Run five KG pipeline health checks against a board and report results.
string
required
The board UUID to inspect. Find it in the web board URL or via okto-pulse status.
boolean
Emit a structured JSON object instead of a human-readable table. Useful for scripted health monitoring.
Checks run: Exit codes: 0 if all five checks pass. 1 if any check fails. Use exit code in CI to gate deployments.

okto-pulse kg backfill

Source: cli.py:747–902 Run the Layer 1 deterministic KG worker against a board to (re-)populate the knowledge graph from existing artifacts. Dry-run by default — pass --apply to write.
string
required
The board UUID to backfill.
boolean
Enqueue all artifacts and drain the consolidation queue, writing to LadybugDB. Without this flag the command reports what would be emitted without making any changes.
string
Restrict backfill to one artifact type. Accepts: spec, sprint, or card. Omit to backfill all types.
boolean
Emit structured JSON output. Useful for scripting and log parsing.
Run kg backfill after a schema migration, after importing data from another instance, or when the KG health check reports a check_kuzu_node_refs delta greater than zero. For ongoing consolidation, the background worker handles new artifacts automatically. See KG backfill operations for guidance on expected runtime.
Exit codes: 0 on success. 1 if the board is not found or the graph file cannot be opened.

okto-pulse kg dedup-entities

Source: cli.py:908–936 Consolidate duplicate LadybugDB nodes that share the same (node_type, source_artifact_ref). Writes by default — pass --dry-run to preview.
string
required
The board UUID to deduplicate.
boolean
Report duplicates without merging them. Always run this first to review what will be merged before committing.
boolean
Emit structured JSON output.
kg dedup-entities writes to the LadybugDB graph by default (without --dry-run). Merging nodes is not automatically reversible. Run the dry-run first, then verify-pipeline after applying to confirm the graph is consistent.
Exit codes: 0 on success (including zero duplicates found). 1 if the board or graph file is not found.

okto-pulse reset

Source: cli.py:939–960 Delete all local Pulse data and re-seed from scratch. Equivalent to uninstalling and reinstalling the data directory.
boolean
Skip the confirmation prompt. Required for non-interactive environments (CI, scripts). Without this flag, the command prints a warning and asks for confirmation before proceeding.
reset permanently deletes pulse.db, all WAL files, and everything in the uploads directory. All boards, specs, cards, knowledge graph data, and file attachments are lost. There is no undo.If you need to start over on a single board without losing others, use archive_tree via the MCP API instead.
What reset does:
  1. Deletes ~/.okto-pulse/data/pulse.db* (database and WAL files)
  2. Clears ~/.okto-pulse/uploads/
  3. Runs okto-pulse init to re-seed defaults
Exit codes: 0 on success. 1 if the user declines the confirmation prompt.

Environment variables

Key variables that affect CLI behavior. Set in your shell or in a .env file in the working directory. Full environment variable reference: Local operations.

Quick reference

Last modified on May 17, 2026