OTO
reference · oto curate --help at v0.6.1

oto curate

propose, review and apply changes to the curated graph

oto curate [-h] [--from SOURCE] [--text TEXT] [--by BY] [--at AT] [--about ABOUT]
                  [--dry-run] [--term TERM] [--note NOTE] [--project PROJECT] [--show SHOW]
                  [--force] [--allow-personal-data]
                  [{start,add,diff,check,apply,abort,undo,assert,assertions,log,resolve}]

Verbs

  • start a candidate
  • add merges proposal files into it
  • diff shows what it changes
  • check validates it
  • apply promotes it (with --by and --note for the ledger)
  • abort discards it
  • undo restores the previous graph
  • log reads the ledger
  • assert records something a person said
  • assertions lists them

Options

OptionWhat it does
--from SOURCEa proposal file of nodes and edges, for `add` (repeatable)
--text TEXTthe statement, for `assert`
--by BYwho said it (assert), or who applied it (apply): an unattributed change cannot be followed up
--at ATthe date it refers to, as YYYY-MM-DD. Never defaulted: a correction usually refers to when something became true, not when it was typed
--about ABOUTcomma-separated node ids this is about
--dry-runfor add: report what the merge would do, and refuse what it would refuse, without writing the candidate
--term TERMfor resolve: a label, alias or id to look up in the candidate
--note NOTEfor apply: what this change made answerable, what it left open; kept in the ledger
--project PROJECTproject root (default: current directory)
--show SHOWhow many items to list per section
--forceoverwrite an existing candidate, or apply despite blocking problems
--allow-personal-dataapply even when the privacy scan finds blocking items

Where to use it

Edits go in a candidate, never the live graph.

oto curate start --project claims

creates graph.candidate.json; the live graph is untouched until apply

Merge one document's proposal, safely first.

oto curate add --project claims --from claims/proposals/total-loss-procedure.json --dry-run
oto curate add --project claims --from claims/proposals/total-loss-procedure.json

the dry run reports what would be added, merged, updated or refused; then the merge

Before applying: what does the candidate change, and is it clean?

oto curate check --project claims
oto curate diff --project claims

blocking problems, contradictions, gaps, personal data; then the diff

Promote it, by name.

oto curate apply --project claims --by "A. Reader, claims operations" --note "Total loss settlement, from the February procedure"

the live graph changes, the previous one is kept, the ledger records who and why

That was wrong.

oto curate undo --project claims

restores the previous graph; the ledger says so

A curator records a spoken correction locally.

oto curate assert --project claims --text "The deductible is 750 since April" --by "R. Osei, claims lead" --at 2026-04-01

an entry in the assertions log that a fact can cite as assertion:a-0001

Does the candidate already hold an entity for this label?

oto curate resolve --project claims --term "salvage coordinator"

the id to reuse, or nothing

As the terminal prints it
usage: oto curate [-h] [--from SOURCE] [--text TEXT] [--by BY] [--at AT] [--about ABOUT]
                  [--dry-run] [--term TERM] [--note NOTE] [--project PROJECT] [--show SHOW]
                  [--force] [--allow-personal-data]
                  [{start,add,diff,check,apply,abort,undo,assert,assertions,log,resolve}]

positional arguments:
  {start,add,diff,check,apply,abort,undo,assert,assertions,log,resolve}
                        start a candidate; add merges proposal files into it; diff shows what it
                        changes; check validates it; apply promotes it (with --by and --note for
                        the ledger); abort discards it; undo restores the previous graph; log
                        reads the ledger; assert records something a person said; assertions lists
                        them

options:
  -h, --help            show this help message and exit
  --from SOURCE         a proposal file of nodes and edges, for `add` (repeatable)
  --text TEXT           the statement, for `assert`
  --by BY               who said it (assert), or who applied it (apply): an unattributed change
                        cannot be followed up
  --at AT               the date it refers to, as YYYY-MM-DD. Never defaulted: a correction
                        usually refers to when something became true, not when it was typed
  --about ABOUT         comma-separated node ids this is about
  --dry-run             for add: report what the merge would do, and refuse what it would refuse,
                        without writing the candidate
  --term TERM           for resolve: a label, alias or id to look up in the candidate
  --note NOTE           for apply: what this change made answerable, what it left open; kept in
                        the ledger
  --project PROJECT     project root (default: current directory)
  --show SHOW           how many items to list per section
  --force               overwrite an existing candidate, or apply despite blocking problems
  --allow-personal-data
                        apply even when the privacy scan finds blocking items