Skip to main content
Nora has two causal-graph surfaces, and the causal CLI covers both:
  • Folder-based (paper-ver6 flow) attach a graph to a document folder, extract triples into a staged area, approve them to live. Optimised for authoritative graphs curated from a document corpus.
  • Instance-based (canvas-shaped model) pipelines with an out_kg / out_causal_graph block auto-mint graph instances; use the CLI to inspect, rewire, and audit them, or edit edges atomically.
Both stay honest to a Pearl DAG (spec v3.1): variables, causes edges, backdoor / adjustment-set analysis.

Command groups

  • Folder extraction: causal get, causal settings show/set, causal bootstrap, causal refresh, causal approve, causal reject
  • Instance CRUD: causal graphs list/get/upsert/delete
  • Wire-ups: causal bindings list/add/remove
  • Provenance: causal evidence node/graph
  • Edges (atomic): causal edges add/remove/update
  • Auto-proposals: causal staged-proposals <graph-id>
Folder identifiers are the document folder tag (e.g. billing, product-docs). Graph instance ids are kg_<uuid>.

causal get

Prints the whole graph:
  • live_nodes and live_edges: used in verification and reasoning.
  • staged_nodes and staged_edges: waiting for review.
Add --json for structured output. Common quick check:

causal settings show / set

Shows settings + stage counts.
Only flags passed change.
  • --connection <kind:id>: link the graph to a specific data source (e.g. documents_folder:billing).
  • --retrieval-preset <preset-id>: the preset extraction uses to pull context.
  • --dedup-policy <policy>: how duplicates are handled (merge, keep_newer, keep_older, keep_all).
  • --auto-restage true|false: automatically re-bootstrap when the linked source changes.

causal bootstrap

Extracts causal triples from every document in the folder into STAGED. Nothing goes to LIVE until you approve.
  • --model <m>: model used for extraction. Defaults to workspace default.
Bootstrap is idempotent: re-running on an already-populated folder doesn’t lose LIVE data. Re-extraction produces new STAGED rows; existing LIVE stays as-is. For a fresh folder: bootstrap → review the STAGED area in the app → approve the good ones. For an existing folder: refresh is usually what you want.

causal refresh

Recomputes only the deltas: new documents added, existing documents changed since the last bootstrap. Cheaper than a full bootstrap. Refresh output lands in STAGED. Existing LIVE stays intact. Run on a schedule (or triggered by document changes) if --auto-restage isn’t your fit.

causal approve / reject

  • --ids <id,…>: the specific staged row IDs. Omit to act on all STAGED.
After approve:
  • The rows move to LIVE.
  • Verification starts using them immediately.
  • STAGED still contains anything not touched by this command.
reject drops the rows without promoting. They can be re-created by the next bootstrap or refresh.

Recipes

Bootstrap a folder end-to-end from CLI

CI: fail if STAGED is too large

Prevents unbounded backlog:

Selective approve after human review

Suppose your review workflow marks approvals in an external system with the row IDs. Bulk-approve them:

Snapshot the LIVE graph for audit

Instance CRUD (graphs)

Pipelines with an out_kg / out_causal_graph block auto-mint graph instances. Use these verbs to inspect, rename, and delete them.
Deleting is permanent. Attached chunks keep their kg_instance_id reference (become orphans). Clean them up first if you don’t want the reference dangling. --lifecycle is JSON and optional; omit to keep the server-side default.

Bindings (bindings)

Which pipelines land in which graph instance. Auto-written when a pipeline with an out_kg block executes; use these verbs for manual wire-ups.

Evidence trails (evidence)

Reader view over which chunks back a node (or the whole graph).
Great for audit (“why did the graph decide this?”) and for spotting orphan chunks (attached to a deleted node) that should be re-linked or dropped.

Atomic edge CRUD (edges)

Read/modify/write one edge at a time without shipping the whole surfaces blob. See spec docs/mcp/temporal-retrieval-setup.md §G4 for the precedence-predicate family (defers_to / overrides / …).
Unknown predicates are accepted but flagged with predicateWarning: true in the response so custom vocabulary works while you migrate to the whitelist.

Auto-proposals (staged-proposals)

Lists the STAGED (unreviewed) nodes + edges in an instance. These are typically auto-proposals from Foundry out_causal_graph runs with propose_hierarchy=true.
Approve or reject with the folder-scoped causal approve / reject verbs above.

The STAGED / LIVE model

The two-stage model exists because causal extraction is best-effort: the model proposes, you dispose. Folder-based approve / reject handle bulk decisions; edges handles single-edge surgical fixes; the app’s graph canvas handles free-form hand editing.