CLI
Inspect, change, validate, and render Inkfinite documents from a terminal.
Command overview
Run inkfinite --help or inkfinite <command> --help for the complete option reference. The main
commands are:
| Command | Purpose |
|---|---|
new | Create a blank canonical document |
inspect | Print a document summary or materialized snapshot |
query | Find records by semantic, structural, kind, or bounds filters |
validate | Load and validate a canonical document |
shape, connect, layout | Build a structured file or live desktop edit |
apply | Validate and apply a transaction draft from JSON |
import svg | Import static SVG content into native shapes |
render | Write an SVG or PNG of a document or filtered view |
app | Inspect or work with a running desktop session |
completions | Print a Bash, Fish, or Zsh completion script |
schema, capabilities | Print machine-readable contracts for integrations |
During development, build the binary with:
cargo build -p inkfinite-cli --bin inkfinite Install the CLI
Download the archive for your operating system and architecture from GitHub Releases. Verify it against the
release’s SHA256SUMS file before extraction. The archive contains the binary, man page, and Bash,
Fish, and Zsh completions in an installable directory tree.
Rust users can install the same version from crates.io:
cargo install inkfinite-cli --locked --bin inkfinite To build an archive from a source checkout, run:
cargo xtask man
cargo xtask completions
cargo xtask dist The first two commands write to target/man/inkfinite.1 and target/completions/. The distribution
command writes target-named CLI and MCP archives plus SHA256SUMS to dist/.
After extracting the CLI archive on a Unix system, install its files with:
sudo mkdir -p /usr/local/bin /usr/local/share/man/man1 \
/usr/local/share/bash-completion/completions \
/usr/local/share/fish/vendor_completions.d \
/usr/local/share/zsh/site-functions
sudo install -m 755 bin/inkfinite /usr/local/bin/inkfinite
sudo install -m 644 share/man/man1/inkfinite.1 /usr/local/share/man/man1/inkfinite.1
sudo install -m 644 share/bash-completion/completions/inkfinite \
/usr/local/share/bash-completion/completions/inkfinite
sudo install -m 644 share/fish/vendor_completions.d/inkfinite.fish \
/usr/local/share/fish/vendor_completions.d/inkfinite.fish
sudo install -m 644 share/zsh/site-functions/_inkfinite \
/usr/local/share/zsh/site-functions/_inkfinite Use inkfinite completions bash, inkfinite completions fish, or inkfinite completions zsh to
print one script directly. comp is an alias for completions.
File mode
File-mode commands operate on a closed .inkfinite file. Start by inspecting its heads and querying
only the records you need:
inkfinite inspect architecture.inkfinite --summary --json
inkfinite query architecture.inkfinite \
--role architecture.service --detail --limit 20 --json Prefer shape create, shape patch, shape delete, connect, and layout when one of them
expresses the edit. Use apply for a transaction with operations that the structured commands do
not cover. Test mutations with --dry-run before saving:
inkfinite shape patch architecture.inkfinite \
--role architecture.service \
--patch '@service-patch.json' \
--dry-run --json
inkfinite apply architecture.inkfinite \
--transaction transaction.json \
--dry-run --json
inkfinite import svg architecture.inkfinite \
--input icon.svg --dry-run --json layout supports align, distribute, stack, grid, tidy, and graph. Select
shapes with repeated --shape flags or one --role selector. Stack accepts --axis and --gap, grid accepts --columns, --column-gap, and --row-gap, tidy accepts --gap, and graph accepts --algorithm flow|tree|radial, --direction top-to-bottom|left-to-right, --node-gap, and --rank-gap.
Graph edges come from selected-to-selected relation bindings or the two endpoints
of a selected connector. Proximity and unselected endpoints are ignored.
import svg creates the retained source asset, native group containers, and
supported shapes in one validated transaction. Use --page or --layer to
choose a target. Otherwise the first page and layer receive the import.
File commands never prompt. Close the desktop editor before changing its file. A lock or stale-head error is a signal to inspect current state, not a reason to overwrite the file.
To hand the edit to another process without changing the document, add --transaction-out transaction.json to a structured mutation. The CLI validates the transaction
and refuses to overwrite an existing output file. Run shape kinds or shape describe KIND to
discover shape contracts.
Use connect --kind relation --relation-type TYPE for a semantic connection that does not
participate in arrow routing. Query its direction or type with --outgoing-from, --incoming-to,
and --relation-type:
inkfinite connect architecture.inkfinite \
--source shape:service --target shape:database \
--kind relation --relation-type depends_on --json
inkfinite query architecture.inkfinite \
--outgoing-from shape:service --relation-type depends_on --detail --json Live mode
With the desktop app running, use app status, app context, app inspect, and app query for
read-only access. Context reports the active page, selection, viewport, actor, and current heads.
Add --app to apply a structured mutation to the open document:
inkfinite app status --json
inkfinite app context --json
inkfinite app query --role architecture.service --detail --limit 20 --json
inkfinite shape patch --app --role architecture.service \
--patch '@service-patch.json' --json
inkfinite app apply --transaction transaction.json --json Structured --app mutations and app apply validate and commit immediately. They enforce current
heads, record versions, transaction validation, and document locks. Reviewed, permissioned model
access belongs to the MCP interface rather than the general CLI.
Rendering
The output extension selects SVG or PNG. The same options work for a closed file and a live desktop session:
inkfinite render architecture.inkfinite --output architecture.svg
inkfinite render architecture.inkfinite --output architecture.png
inkfinite app render --output current.png Use --region x,y,width,height for an exact world-space crop. Live rendering can also write a
proposed result with --transaction and --proposed-output without changing the open document.
Output format
Pass --json for deterministic machine-readable output. Successful mutations report the previous
and current heads, transaction ID, created, updated, and deleted records, repairs, and warnings.
Failures go to standard error as JSON with code, message, details, retryable, and suggestion, so agents can respond without parsing prose.
capabilities --json reports supported commands and stable exit codes. Current exit codes are:
| Code | Meaning |
|---|---|
0 | Success |
2 | Invalid command usage |
3 | File or input error |
4 | Invalid document or data |
5 | Existing file, lock, or state conflict |
Use schema document, schema transaction, and schema protocol instead of inferring JSON shapes
from examples. Global --json and --non-interactive options may appear before or after a
subcommand.