Skip to main content

CLI Reference

The kindling binary is the CLI, the daemon, and the Claude Code hook runner in one artefact. This page documents every command, flag, and default.

Global options

OptionDescription
--via-daemonRoute the daemon-backed verbs (log, capsule, search, pin, unpin, forget) through the running daemon instead of opening the database in-process.
--helpShow help.
--versionShow the version.

Most verbs also accept these shared options:

OptionDescription
--db <path>Database path. Overrides KINDLING_DB_PATH and the per-project default.
--jsonEmit machine-readable JSON instead of human-readable output.

In-process vs daemon-backed verbs

This table covers data-path verbs. Lifecycle hooks (hook) are documented separately — they always shell out from the binary and do not use the daemon routing table.

In-process onlyDaemon-backed (or --via-daemon)
init, status, list, export, import, demo, browse, servelog, capsule, search, pin, unpin, forget

init

Initialise kindling: create the database (running migrations) and optionally check for Claude Code.

kindling init [--db <path>] [--claude-code] [--skip-db] [--json]
FlagDescription
--db <path>Use an explicit database path instead of the per-project default.
--claude-codeDetect ~/.claude/ and print next steps for the plugin. Does not install or configure the plugin automatically.
--skip-dbSkip database creation (integration check only).
--jsonJSON output ({ directory, database, claudeCode }).

demo

Load bundled sample memory so you can try search and browse without capturing anything first. Writes to ~/.kindling/demo/kindling.db by default.

kindling demo [--reset] [--db <path>] [--json]
FlagDescription
--resetReplace an existing demo database before importing.
--db <path>Use a custom database path instead of the demo default.
--jsonEmit machine-readable JSON with suggested next commands.

See Quickstart without Claude Code.

log

Log an observation to memory.

kindling log <content> [--kind <kind>] [--session <id>] [--repo <id>] [--capsule <id>]
Argument / flagDescription
<content>The observation content (positional, required).
--kind <kind>Observation kind. Default message. One of tool_call, command, file_diff, error, message, node_start, node_end, node_output, node_error.
--session <id>Session scope ID.
--repo <id>Repository scope ID.
--capsule <id>Attach to an existing capsule.
kindling log "JWT tokens expire after 15 minutes, not 1 hour"
kindling log --kind error "segfault in auth middleware after the upgrade"

capsule

Manage capsules. Two subcommands: open and close.

capsule open

kindling capsule open --intent <text> [--type <type>] [--session <id>] [--repo <id>]
FlagDescription
--intent <text>Purpose of the capsule (required).
--type <type>Capsule type. Default session.
--session <id>Session scope ID.
--repo <id>Repository scope ID.

capsule close

kindling capsule close <id> [--summary <text>]
Argument / flagDescription
<id>Capsule ID to close (positional, required).
--summary <text>Summary text attached to the capsule.

status

Show database status and statistics (path, size, and counts of capsules, observations, summaries, pins, redacted items, and open capsules).

kindling status [--db <path>] [--json]

Search for relevant context. Returns the three retrieval tiers — pins, current summary, and ranked candidates. See Retrieval.

kindling search <query> [--session <id>] [--repo <id>] [--max <n>]
Argument / flagDescription
<query>Query string (positional, required).
--session <id>Filter by session ID.
--repo <id>Filter by repository ID.
--max <n>Maximum candidates to return. Default 10.

Candidate scores are normalised to the range 0.0–1.0.

list

List entities.

kindling list <entity> [--session <id>] [--repo <id>] [--limit <n>]
Argument / flagDescription
<entity>One of capsules, pins, observations.
--session <id>Filter by session ID.
--repo <id>Filter by repository ID.
--limit <n>Maximum results. Default 20.

There is no --status or --kind filter on list today — filter results in your shell or use search for ranked retrieval.

browse

Export the database to a self-contained offline HTML viewer and optionally open it in your default browser.

kindling browse [--output <path>] [--no-open] [--db <path>] [--json]
FlagDescription
--output <path>Output HTML path. Default: temp file kindling-browse-<timestamp>.html.
--no-openPrint the output path only; do not launch a browser.
--db <path>Database to export. Default: per-project resolution.
--jsonEmit { path } as JSON.

pin

Pin an observation or a summary so it is always returned first and never evicted.

kindling pin <type> <id> [--note <text>] [--ttl <ms>]
Argument / flagDescription
<type>Target type: observation or summary.
<id>Target ID.
--note <text>Note describing why this is pinned (stored as reason in JSON).
--ttl <ms>Time-to-live in milliseconds, after which the pin expires.

unpin

Remove a pin by ID.

kindling unpin <id>

forget

Redact (forget) an observation by its exact ID. Masks the content; the record is retained.

kindling forget <id>

export

Export memory to a JSON file.

kindling export [output] [--session <id>] [--repo <id>] [--pretty]
Argument / flagDescription
[output]Output file. Default kindling-export-<timestamp>.json.
--session <id>Export only a specific session.
--repo <id>Export only a specific repository.
--prettyPretty-print the JSON.

See Formats for the bundle shape.

import

Import memory from an export file. Conflicting IDs are skipped (INSERT OR IGNORE).

kindling import <file> [--dry-run]
Argument / flagDescription
<file>Bundle file to import.
--dry-runValidate without importing.

serve

Start the kindling daemon (HTTP/1 over a Unix domain socket on Linux/macOS; TCP loopback on Windows).

kindling serve [--socket <path>] [--idle-timeout <secs>] [--kindling-home <path>] [--daemonize]
FlagDescription
--socket <path>Unix domain socket to bind. Default ~/.kindling/kindling.sock.
--idle-timeout <secs>Seconds idle before the daemon shuts itself down. Default 1800.
--kindling-home <path>Root of per-project databases. Default ~/.kindling (or the parent of --socket).
--daemonizeSuppress the human-readable startup banner (used when auto-spawned).

hook

Run a Claude Code lifecycle hook. Reads the hook context as JSON on stdin and always exits 0. You normally don't call this directly — the Claude Code plugin wires it up.

kindling hook <type>

<type> is one of: session-start, post-tool-use, post-tool-use-failure, user-prompt-submit, subagent-stop, stop, pre-compact. The binary also responds to <type> when invoked under the program name kindling-hook.

Next