CLI
any <cmd> builds a request, sends it to the running server, and prints the JSON reply. It never opens the database itself, so anything the CLI does, curl can do, and vice versa.
Global flags and exit codes
--addr <host:port> # default: the address the account's running server recorded, else 127.0.0.1:7001
--timeout <duration> # default 30s (ignored for streams)
--verbose # print the HTTP exchange to stderr
--control-token <tok> # managed servers only; prefer ANY_CONTROL_TOKEN
| Exit | Meaning |
|---|---|
0 |
success |
1 |
user error or a 4xx reply |
2 |
server error (5xx) |
3 |
cannot reach the server — start it with any run in another terminal |
Lifecycle
any init # create the account (prints the mnemonic once)
any run # start the server in this terminal
any status # GET /v1/health
any auth status # authorization state + local accounts
any stop # signal the server holding the account lock
any version # binary + server versions
Spaces
any space derived # well-known per-account spaces (name, spaceId, created)
any space get $SPACE # GET /v1/spaces/:id
any space update $SPACE --name "Notebook" --description "first space"
any space query --limit 20 # windowed snapshot of the account's space list
any space subscribe # live space-list stream, one JSON frame per line
any space sync $SPACE # force a head-sync round now
any space delete $SPACE --yes # irreversible
Creating a regular space has no dedicated subcommand — use the API directly (curl):
SPACE=$(curl -s -X POST http://127.0.0.1:7001/v1/spaces \
-H 'content-type: application/json' -d '{"name":"Notebook"}' | jq -r .id)
Objects and reads
any object create takes the one type (required) and any collections; the generic snapshot query is a curl call, and the CLI's read surface is the live one:
# a document: an object carrying the built-in page type
OBJ=$(any object create $SPACE --type page \
--properties '{"any":{"name":"Reading list"}}' | jq -r .objectId)
# cross-object live window: the space's objects storage collection
any query-subscribe $SPACE --properties \
--filter '{"any.type":"page"}' --sort='-modifiedAt' --limit 20 --total
# per-object dataset: the blocks of one document
any query-subscribe $SPACE $OBJ --dataset editor_blocks --sort nav.pos --limit 200
Output is one JSON object per SSE frame — {"event": "...", "data": ...} — so it pipes through jq:
any query-subscribe $SPACE --properties --sort='-modifiedAt' --limit 20 \
| jq -c 'select(.event=="changes") | .data[] | {added: [.added[]?.id], updated: [.updated[]?.id]}'
A changes batch omits the lists it has nothing for, hence the ?. Cancel with Ctrl-C; --timeout does not apply to streams.
Editor and chat
The editor and chat modules have full CLI coverage. any editor edit replaces text already in the rendered markdown, so the block goes in first. The space's one chat is the general-chat usecase's root, set up once per space:
any editor blocks create $SPACE $OBJ --type check_list_item --text 'Dune' # renders as "- [ ] Dune"
any editor edit $SPACE $OBJ --old '- [ ] Dune' --new '- [x] Dune' # PATCH …/editor/editor_blocks/markdown
CHAT=$(any catalog setup general-chat $SPACE | jq -r '.bundles[0].bundle.rootId')
MSG=$(any chat send $SPACE $CHAT --text 'hi there' | jq -r '.recordIds[0]')
any chat react $SPACE $CHAT $MSG 👍
any query-subscribe $SPACE $CHAT --dataset chat_messages --sort='-_ver.id' --limit 50
Everything else
| Group | Commands |
|---|---|
| Objects | any object create, any object type set, any object collection attach/detach |
| Types | any type create/list/update, any type property list/add/patch/remove/option, any type part list/add/patch/remove, any type part dataset … |
| Collections | any collection create/list/get/update, any collection property list/add/patch/remove |
| Apps | any catalog list/get/setup, any bundle ensure/list/get/resolve/child |
| Data | any aggregate, any upsert, any datasets, any search, any backlinks, any links, any local … |
| Sharing | any members …, any invite …, any join --token …, any acl …, any one-to-one … |
| Account | any auth login/logout/status, any account set-metadata/redeem, any identities …, any devices …, any push … |
| Files | any file attach/list/get/download/status/… |
| Live | any sync-status …, any events publish/subscribe, any process list/cancel |
| Diagnostics | any debug space/object/p2p |
The full surface is in the CLI reference.
Note. Endpoints without a CLI subcommand are deliberate, not missing: the CLI mirrors the API 1:1 where a flag surface makes sense, and defers to
curlfor bodies that are really JSON documents (ad-hoc snapshot queries,/modify).
Next: drive the same API from JavaScript or Python.