Documentation/09 · Reference

Reference

Quick lookups for everything the journey covered. Live, exhaustive docs ship inside the CLI: rote guidance [topic], rote grammar [topic], rote man <topic>, rote how.

Install & identity

ROTE/bash4 lines
curl -fsSL https://getrote.dev/install | bashrote login                    # browser-based sign-inrote whoami                   # ok: [email protected]rote pull powerpack --yes     # optional: curated adapters + plays in one command

Running plays

ROTE/bash7 lines
rote play run <target> [key=value …]        # target: URI | org/name[@ver] | local name | pathrote play run <target> … --output=summary   # one linerote play run <target> … --output=json      # canonical structured resultrote play run <target> … -y/--yes           # skip confirm prompts (CI / non-TTY)rote play run <target> … --resume <run_id>  # continue a failed/interrupted runrote play run <target> … --max-concurrency <N>rote play run <target> … --dry-run

URI forms

ROTE/text3 lines
https://play.modiqo.ai/<owner>/<name>            # floats to latest releasehttps://play.modiqo.ai/<owner>/<name>@1.2.3      # pinned, immutablehttps://play.modiqo.ai/install?play=<owner>/<name>@1.2.3    # bootstrap/install URI

Finding & vetting

ROTE/bash4 lines
rote play search "<query>"                  # local + registryrote play inspect <uri> [--json]            # the play card: params, ACCESS block, versionrote explore "<intent>"                     # cross-adapter capability discoveryrote play run https://play.modiqo.ai/modiqo/play-dag play=<uri-or-path>   # x-ray any DAG

Workspace (explore → crystallize)

ROTE/bash9 lines
rote init <name> --seq                      # open a workspace (flight recorder)rote proc run <program> [args…]             # shell reach — capture as @Nrote browse <url>                           # browser reach — navigate → wait → snapshot → slicerote query @N '<jq>' -r                     # read a field by referencerote query schema @N                        # inspect a response's shaperote query @N '<jq>' -s <var>               # save a scalar as $varrote play pending write <ws> --name … --description …   # anchor reusable workrote play pending list | show <ws> | discard <ws>rote workspace export <ws> [--params <NAMES>] [-f shell|steps|typescript] [--with-presentation]

Authoring & publishing

ROTE/bash7 lines
rote play lint <main.ts>                    # contract checks; fix what it namesrote play release <org/name> [--force] [--keep-local]rote registry play push <play-path> <slug> [--private] [--dry-run] [--allow-undeclared-endpoints]rote registry play pull <org/name> [--yes] [--no-deps]rote registry play visibility <org/name> <public|private>rote registry play list | search <q> | info <org/name> | delete | restorerote play share create --audience <organization|users> [--user <handle>] [--expires-in <dur>]

The chain: lint → test (happy + negative) → release → push → canonical readback (run the published URI). Versions are immutable; every change is a bump.

Adapters (API reach)

ROTE/bash5 lines
rote adapter new <id> [spec]                # from OpenAPI / Discovery / GraphQL / gRPC / catalog<id>_probe   "<intent>"                     # semantic search over the API's operations<id>_call    <method> key=value …           # execute one<id>_batch_call                             # parallel batchrote registry play find-by-adapter <adapter-id>

Step grammar cheat sheet

ROTE/yaml15 lines
steps:  my_step:    type: process.exec                      # or adapter/<id>, adapter.auth.ensure,    timeout_ms: 30000                       #    browser.navigate|wait|extract|click|type    depends_on: [other_step]                # ordering edge (barrier)    for_each: '$.items'                     # fan out per item → $item, $item_index    max_concurrency: 4    argv:    - python3    - -c    - |2       …script; stdout is data, exit status is the failure signal…    - $my_param                             # play parameter    - '@other_step{$.stdout.text | fromjson | .field}'   # value edge (must be scalar)

Rules that bite:

  • Value-edge jq must resolve to a scalar; the dialect has fromjson, field access, join, map/select, to_entries — no tojson. Pack collections into a delimited scalar field (chr(31)/chr(30) separators) and unpack in the consumer.
  • No literal */ anywhere inside the frontmatter comment.
  • parameters: use param_type; quote non-string defaults (default: '20').
  • Steps have no TTY — pass --yes-style flags to any subcommand that might prompt.
  • Presentation: stepName("literal") only; call all three of out.human / out.summary / out.result; out.result takes an object literal.

The failure model

SituationStep behaviorUser sees
Expected absence (endpoint down, feature off, none found){"ok":true,"warning":"…"}, exit 0degraded/skipped ledger row, play completes
Hard fault (bad input, missing required tool)message → stderr, exit ≠ 0step FAILED, dependents BLOCKED, --resume offered
Destructive workown step, gated by apply=truedry-run by default, labeled skipped stage

Representation parity

human, summary, json are views of one run. No semantic fact may silently disappear from a view that claims completeness. Truncate only with a declared count; make out.result the canonical superset; declare it:

ROTE/ts5 lines
representations: {  human:   "complete — …",  json:    "canonical — …",  summary: "intentionally lossy — …",}

Compare views from the same run when testing (--resume <run_id> --output=json re-renders recorded outcomes).

Troubleshooting

SymptomLikely cause → fix
interactive prompt required but stdin is not a terminalconfirm prompt in non-TTY → add --yes
must resolve to scalar valuesvalue edge returns object/array → pipe to a field / join(",") / packed scalar
JSONPath '…' returned no resultsunsupported jq filter (e.g. tojson) or wrong path → rote query schema @N during exploration
frontmatter is closed early by a */literal */ inside the JSDoc frontmatter → remove/reword it
data did not match any variant of untagged enum ParameterFormatunquoted non-string default → default: '20'
push rejected: visibility mismatchplay record is private, push assumed public → --private or flip with registry play visibility
push rejected: undeclared endpointssteps call an adapter missing from requires_endpoints → declare it (escape hatch: --allow-undeclared-endpoints)
FLOW_OUTPUT_BARE_CONSOLE_LOGconsole.log in a step/presentation → process.stdout.write(JSON.stringify(x) + "n")
run failed midwayfix the cause, then rote play run … --resume <run_id> — completed steps restore

Exemplars to copy from

PlayWhy it's worth reading
modiqo/hello9 steps · 2 layers; self-probing roots, value-edge fan-out, glyph stage ledger
modiqo/play-dag4 steps · 3 layers; identity-gated URI pull; representation-parity contract
modiqo/dns-propagation-checkthe canonical validate → parallel probes → verdict-join shape
modiqo/dependency-vulnerability-check10 steps · 5 layers; per-ecosystem fan-out, staged resume points
modiqo/cleanup-merged-git-branchesdestructive work done right: gated apply=true deletion stage