Zum Hauptinhalt springen
Markdown anzeigen

Commands Reference

Complete reference for every CLI command, with options and examples.

Global Options​

These options work with any command:

OptionDescription
--jsonOutput as formatted JSON
--yamlOutput as YAML
--profile <name>Use a named credential profile for this command
--dry-runPrint the request route and body without sending it
--timeout <seconds>Per-request timeout (default 30)
--no-validateSkip schema validation of fields and filters
--no-colorDisable ANSI color output
-h, --helpShow help for a command
-v, --versionPrint the CLI version

This table is maintained by hand. For the authoritative, always-current list — including which flags each individual command accepts — run zeyos commands --json.

Global options may be placed before or after the command name:

Bash
zeyos --profile dev whoami
zeyos whoami --profile dev

login​

Authenticate with a ZeyOS instance via OAuth 2.0 authorization code flow.

Text
zeyos login [options]
OptionDescription
--base-url <url>ZeyOS platform URL
--client-id <id>OAuth application ID
--secret <secret>OAuth application secret
--scope <scope>OAuth scope
--port <port>Local callback port (default: 9005)
--globalSave credentials to global config
--forceOverwrite existing credentials
--cleanDiscard saved config and re-prompt for everything
--manualDon't open browser; paste code manually

Examples:

Bash
# Interactive login (prompts for missing values)
zeyos login

# Pre-fill connection values; the OAuth browser/code step still runs
zeyos login --base-url https://cloud.zeyos.com/demo \
--client-id myapp --secret "$ZEYOS_CLIENT_SECRET"

# Start fresh, ignore any saved credentials
zeyos login --clean

# Manual mode (useful in SSH / headless environments)
zeyos login --manual
info

When values are not provided as flags, the CLI prompts interactively for the ZeyOS URL, application ID, and application secret. The secret prompt does not echo input. For CI or fully unattended agents, provide ZEYOS_BASE_URL, ZEYOS_TOKEN, and optionally ZEYOS_REFRESH_TOKEN, ZEYOS_CLIENT_ID, and ZEYOS_CLIENT_SECRET through the environment instead of running zeyos login.


logout​

Revoke the stored token and clear saved credentials.

Text
zeyos logout [--global]
OptionDescription
--globalClear global credentials instead of local

Examples:

Bash
zeyos logout # Clear local .zeyos/auth.json credentials
zeyos logout --global # Clear ~/.config/zeyos/credentials.json tokens

whoami​

Show information about the currently authenticated user.

Text
zeyos whoami [--json|--yaml]

Examples:

Bash
zeyos whoami # Table output
zeyos whoami --json
zeyos whoami --show-token --json # explicitly include the current access token

If the stored refresh token is invalid or expired, interactive text-mode whoami prints the credential source and asks whether to re-authenticate immediately. In --json, --yaml, or non-interactive runs, it exits with the same diagnostic and prints the matching zeyos login --force command instead of prompting.


profile​

Manage named credential profiles and switch between ZeyOS instances. See Configuration → Profiles for the full model.

Text
zeyos profile <list|current|use|add|remove> [options]
CommandDescription
profile listList all profiles; the active one is marked *, with token status
profile currentShow which profile resolves right now, and why (flag/env/pin/active)
profile use <name>Make <name> the active profile (global)
profile use <name> --localPin <name> to the current project (.zeyos/profile)
profile add [<name>] [opts]Create/update a profile; prompts for missing values when run without options
profile remove <name>Delete a profile

Examples:

Bash
zeyos profile add # prompt for name, URL, app ID, secret
zeyos profile add dev --base-url https://zeyos.example.com/dev
zeyos profile add prod --from-current # snapshot current credentials
zeyos login --profile prod # authenticate into & activate a profile
zeyos profile use dev # switch active profile
zeyos profile use prod --local # pin to this project
zeyos list tickets --profile dev # one-off override on any command

list​

Query and list records for a resource with filtering, sorting, and pagination.

Text
zeyos list <entity> [options]

Run zeyos list with no entity to see everything you can query, grouped by business area:

Bash
zeyos list # grouped overview
zeyos resources # the same overview
zeyos resources --json # flat array, with group / description / transactionType
OptionDescription
--fields <fields>Field selection — comma-separated, JSON object, or JSON array (see below)
--filter <json>Filter criteria — JSON object
--filter-file <path>Read filter criteria from a JSON file
--search <text>Full-text search (sent as the API query parameter)
--preset <name>Apply a resource business preset; an explicit --filter is merged on top
--sort <fields>Sort fields, comma-separated (prefix + asc, - desc)
--limit <n>Maximum records to return (default: 50)
--offset <n>Skip the first n records
--expand <fields>Expand JSON/binary columns (e.g. binfile, items)
--extdataInclude extended data fields
--jsonJSON output
--yamlYAML output
--dry-runPrint the request without sending it
--no-validateSkip the CLI's default schema validation

Fields format:

The --fields option supports three formats:

FormatExample
Comma-separated--fields ID,name,status
JSON object (with aliases)--fields '{"Name":"lastname","City":"contact.city"}'
JSON array--fields '["ID","name","status"]'

Filter compatibility:

The CLI normalizes common agent- and ORM-generated filter forms before sending the request:

  • arrays become IN — {"status":[1,3]}
  • Mongo style — $lt $lte $gt $gte $ne $in $nin $like $ilike $regex $eq $between
  • suffix keys — lastname__startswith, lastname__endswith, lastname__contains, lastname__like, ID__gt, status__in, status__nin, duedate__between
  • the single-underscore form where unambiguous — status_neq, ID_gt (a field that genuinely contains an underscore, like sender_email, is never split)
  • composite — {"$or":[…]} and {"$and":[…]} become ZeyOS numbered logical groups ({"0":["OR",…]})

On accounts, name in filters or --fields resolves to lastname.

startswith / endswith / contains take literal text, so % and _ in your value are escaped. like / ilike take a pattern where % is a wildcard.

An operator the CLI cannot translate is rejected before the request with the supported set in the error (exit 2), rather than being forwarded for the server to refuse opaquely. ZeyOS has no IS NULL filter, so field__isnull is refused with the client-side alternative.

Run zeyos describe <entity> for the authoritative operator list — it is printed in a filter operators section, and carried under filterOperators in --json.

Before sending, data commands validate filter, selected, sorted, and written fields against the generated schema. Unknown fields fail fast with a suggestion and the valid-field list; every join hop and terminal field must exist. Individual extdata.* keys require the instance-specific snapshot; missing metadata fails explicitly. Use --no-validate only for a separately reviewed unsupported contract, never merely to silence a guessed field. If a filtered or searched list is empty, the CLI prints a stderr hint pointing to describe and find, including in JSON and YAML modes.

Transaction entities:

transactions is a single table holding twelve different business documents, separated only by the type column. Each type is exposed as its own entity, so you never filter on type by hand:

Entitytransactions.typeMeaning
billing_quotes0Quotes issued to customers
billing_orders1Sales orders
billing_deliveries2Delivery notes to customers
billing_invoices3Invoices issued to customers
billing_credits4Credit notes issued to customers
procurement_requests5Purchase requisitions
procurement_orders6Purchase orders to suppliers
procurement_deliveries7Goods received from suppliers
procurement_invoices8Supplier invoices (bills)
procurement_credits9Credit notes from suppliers
production_fabrications10Production/assembly runs
production_disassemblies11Disassembly runs

Singular, plural and hyphenated spellings all resolve (billing_invoice, billing_invoices, billing-invoices). Unqualified sales vocabulary maps to the billing side — invoices, orders, quotes, credits, deliveries — while bills, po and purchase_orders map to procurement. Use transactions to query every type at once.

The type binding is applied beneath any --preset and any --filter, and is set automatically on create:

Bash
zeyos list billing_invoices --preset overdue
zeyos create billing_invoices --account 42 --currency EUR # sends type: 3

Invoice and credit entities accept these presets:

PresetFilter
openExcludes cancelled, closed, paid, overpaid and processed status variants
overdueOpen, with duedate before now
paidStatus 20 or 21
draft / booked / cancelledStatus 0 / 1 / 3

The older presets on the transactions entity itself (quotes, orders, invoices, credits, open-invoices, overdue-invoices, paid-invoices) still work.

Examples:

Bash
# List tickets with default configured fields
zeyos list tickets

# Custom filters
zeyos list tickets --filter '{"status":1,"priority":3}'

# Custom filters from a file
zeyos list tickets --filter-file ./filters/open-tickets.json

# Specify fields with aliases
zeyos list accounts --fields '{"Name":"lastname","City":"contact.city"}'

# Comma-separated fields
zeyos list tickets --fields ID,name,status,priority

# Sort by multiple columns
zeyos list tickets --sort "+name,-lastmodified"

# Pagination
zeyos list tickets --limit 10 --offset 20

# Include extended data
zeyos list tickets --extdata

# JSON output for scripting
zeyos list tickets --json | jq length
Pagination Info

When results fill the page limit, the CLI makes a second API call to get the total count and displays:

Text
Showing 1–10 of 47 (--offset 10 for next page)

find​

Resolve a human label to records before filtering another resource by foreign-key ID.

Bash
zeyos find accounts "Zfx Lyon"
zeyos find projects "Website" --limit 5 --json

find sends the text through the API's full-text query parameter and returns ID plus the resource's display fields. No matches is a successful result reported on stderr.


count​

Count records for a resource, with optional filtering. Returns a plain number by default.

Text
zeyos count <resource> [options]
OptionDescription
--filter <json>Filter criteria — JSON object
--filter-file <path>Read filter criteria from a JSON file
--search <text>Full-text search
--preset <name>Apply a resource business preset before the explicit filter
--jsonOutput as {"count": N}
--yamlYAML output
--dry-runPrint the request without sending it
--no-validateSkip schema validation

Examples:

Bash
# Total tickets
zeyos count tickets
# → 47

# Filtered count
zeyos count tickets --filter '{"status":1}'
# → 12

# Filtered count using a JSON file
zeyos count tickets --filter-file ./filters/open-tickets.json

# JSON output for scripting
zeyos count accounts --json
# → {"count": 156}

sum​

Sum a numeric field across matching records. The CLI pages internally, so this is the short path for simple totals that would otherwise require list plus a script.

Text
zeyos sum <resource> <field> [options]
OptionDescription
--filter <json>Filter criteria — JSON object. Arrays normalize to IN, e.g. {"status":[1,3]}
--filter-file <path>Read filter criteria from a JSON file
--preset <name>Apply a resource business preset before the explicit filter
--page-size <n>Records per API page (default: 50)
--limit <n>Maximum records to inspect
--offset <n>Initial offset
--jsonOutput as {"sum": N, "count": N, "field": "..."}
--yamlYAML output
--dry-runPrint the first request without sending it
--no-validateSkip schema validation

Examples:

Bash
# Completed or booked effort minutes
zeyos sum actionsteps effort --filter '{"status":[1,3]}'

# Invoice net amount as JSON
zeyos sum transactions netamount --filter '{"type":3}' --json

get​

Fetch a single record by ID.

Text
zeyos get <resource> <id> [options]
OptionDescription
--fields <fields>Field selection — comma-separated, JSON object, or JSON array
--extdataInclude extended data fields
--tagsInclude tags
--allFetch all data (extdata + tags + all fields)
--jsonJSON output
--yamlYAML output

Aliases: show

Examples:

Bash
# Get a ticket with configured fields
zeyos get ticket 42

# Include extended data
zeyos get ticket 42 --extdata

# Include tags
zeyos get ticket 42 --tags

# Include both extdata and tags
zeyos get ticket 42 --extdata --tags

# Get everything — all fields, extdata, and tags
zeyos get ticket 42 --all

# JSON output
zeyos get account 15 --json

# Using the alias
zeyos show ticket 42
Date Formatting

Date fields like duedate, lastmodified, and creationdate are automatically formatted as YYYY-MM-DD in table/record output. Raw Unix timestamps are preserved in JSON and YAML output. The format is configurable via dateFormat in your auth config file.


create​

Create a new record. Fields can be provided as a JSON blob or as individual flags.

Text
zeyos create <resource> [--data <json>] [--field value ...]
OptionDescription
--data <json>Complete record as a JSON string
--data-file <path>Read the complete record from a JSON file
--<field> <value>Set individual field (any unknown flag becomes a field)

Examples:

Bash
# Using --data JSON
zeyos create ticket --data '{"name":"Fix login bug","status":0,"priority":3}'

# Using a JSON file
zeyos create ticket --data-file ./ticket.json

# Using individual field flags
zeyos create ticket --name "Fix login bug" --status 0 --priority 3

# Create an account (accounts use --lastname, not --name)
zeyos create account --lastname "ACME Corp" --currency EUR --visibility 0

# JSON output (returns the created record)
zeyos create ticket --name "New feature" --json
Type Coercion

Field values are coerced using the column's type from the schema, not from how the value looks:

  • Numeric columns (smallint, integer, numeric, …) take numbers, so --status 0 sends the integer 0, not "0".
  • Boolean columns accept true / false.
  • Text columns keep their string value, so --customernum 00123 sends "00123" and --phone "+4930123456" keeps its +. Identifiers that merely look numeric are not damaged.
  • --<field> null always sends JSON null.

For a field the schema doesn't know (a custom column, or with --no-validate), the value is converted only when it is a plain decimal number that round-trips exactly — a leading zero, a leading +, an exponent, hex, or a value beyond the safe integer range all stay text.

tip

To control types exactly, pass --data with explicit JSON: --data '{"zip":"01067","amount":19.99}'.

:::


update​

Update an existing record by ID. Same input modes as create.

Text
zeyos update <resource> <id> [--data <json>] [--field value ...]

Aliases: edit

Examples:

Bash
# Using --data JSON
zeyos update ticket 42 --data '{"status":4}'

# Using a JSON file
zeyos update ticket 42 --data-file ./ticket-update.json

# Using field flags
zeyos update ticket 42 --status 4 --priority 2

# Update account name (accounts use --lastname, not --name)
zeyos update account 15 --lastname "ACME Corporation"

delete​

Delete a record by ID. Prompts for confirmation by default.

Text
zeyos delete <resource> <id> [--force]
OptionDescription
--forceSkip confirmation prompt
warning

--force is a flag and takes no value — --force=false is a usage error, not a way to turn it off. Omit the flag to keep the confirmation.

In a script or CI, stdin is usually closed, so the confirmation cannot be answered: the delete is aborted and the command exits 5. Pass --force for non-interactive deletes.

Aliases: rm, remove

Examples:

Bash
# Interactive confirmation
zeyos delete ticket 42

# Skip confirmation
zeyos delete ticket 42 --force

# Using aliases
zeyos rm ticket 42
zeyos remove ticket 42

resources​

List all curated CLI resources and their operations. This is the authoritative boundary for what the CLI supports directly.

Text
zeyos resources

Shows a table of all CLI-supported resource types and available operations. Operational workflows can use actionstep / actionsteps / time-entries for follow-ups and effort records. Read-only platform schema definitions are available as customfield / customfields with list, get, and therefore count support.


describe​

Show a resource's schema — fields, types, foreign keys and enum values — from the generated schema. Runs offline (no login required), so an agent can discover the data model before making any call.

Text
# Field/type/enum/foreign-key listing for a resource
zeyos describe tickets

# Machine-readable schema
zeyos describe accounts --json

Foreign keys are shown as → <table>, and enum fields list their valid values (e.g. status → 0=NOTSTARTED 1=AWAITINGACCEPTANCE …). The operations available for the resource are listed at the bottom.


doctor​

Check local readiness for coding agents. This runs offline and never prints tokens or client secrets. It proves that configuration is in place, not that a server accepts it.

Bash
zeyos doctor agent
zeyos doctor agent --json

The report covers:

SectionChecksAffects ok and exit code
cli, connection, auth, resourcesCLI version, base URL and instance, whether credentials are present and usable, and whether the resource registry loadsYes
customFieldsWhether ZEYOS_CUSTOM_FIELDS_FILE is set, absolute, readable and valid, which instance it is bound to compared with the configured one, and the file's ageYes, when set and broken or mismatched, because that blocks every request. Unset is fine
skillsInstalled skill bundles in the local and global skills directories of each agentNo, advisory
projectzeyos.app.json in the current directory, and the zeysdk version if the binary is installedNo, informational
verificationWhat was checked offline, and what was not checked liveReports offlineConfiguration.ok

verification.liveServer.performed is always false. Doctor does not check that the instance is reachable, that tokens are accepted, what the user may do, or whether a custom-field snapshot still matches the instance. Use zeyos whoami for a read-only authenticated check.

customFields.status is one of not_set, ok, unbound (no usable configured instance to compare), relative_path, unreadable, invalid or instance_mismatch. ageDays comes from the file's modification time, because a snapshot cannot record its own review date. It is a hint, not proof of freshness.

For skills, doctor reads the .zeyos-skills.json lockfile in each directory and hashes every tracked file. Each entry in skills.roots has one of these statuses:

StatusMeaning
okFiles match the lockfile, and the bundle matches the installed @zeyos/client
outdatedFiles match, but the bundle version differs from the installed client
driftTracked files are missing, modified or cannot be verified. files gives the counts
legacyZeyOS skill folders exist with no lockfile, so they cannot be verified
invalidThe lockfile is unreadable, malformed, an unsupported version, or lists a path outside the skills root
absentNo ZeyOS skills here. Human output hides these

Skills from other vendors in the same directory are ignored. Skill problems appear in nextSteps but do not fail the check, so a CI job that does not use skills is not blocked. The only zeysdk command doctor runs is zeysdk version.


skills​

Discover, install and verify the bundled ZeyOS agent skill packs for any coding agent (Claude Code, Codex, opencode, Factory Droid, pi, …). The zeyos skill is the router that classifies each task.

Text
# List the bundled skills
zeyos skills list

# Print a skill's instructions
zeyos skills show zeyos-work-management

# Install — interactive: pick a coding agent, then local vs. global
zeyos skills install

# Install non-interactively with flags
zeyos skills install --target claude --global # all projects
zeyos skills install --target opencode --local # this project only
zeyos skills install zeyos-billing-insights -y # one skill, defaults
zeyos skills install --dir ./vendor/skills # any directory

# Preview an install or upgrade without writing anything
zeyos skills install --target claude --global --preview

# Compare an installed tree with its lockfile
zeyos skills verify --target claude --global

Run bare, install prints the ZeyOS banner and prompts for (a) which coding agent to target and (b) whether to install for this project or globally for every project. Pass --target and/or --global/--local to skip the matching prompt; pass -y/--yes (or pipe non-interactively) to skip all prompts and use flags plus sensible defaults.

Options for install:

OptionDescription
--target <agent>Coding agent: claude, codex, opencode, droid, pi, agents (prompted when omitted; otherwise auto-detected)
--globalInstall into the agent's home directory (all projects)
--localInstall into the current project (default)
--dir <path>Install into an explicit directory (overrides --target)
--dry-run, --previewPrint the plan and the bundle version change; write nothing
--forceOverwrite locally modified files and existing files missing from the lockfile. It never deletes a modified file, changes a symlink, or touches paths outside the bundle's own directories
-y, --yesSkip prompts and use flags / sensible defaults
--no-logoDon't print the ZeyOS banner
--json / --yamlPrint a machine-readable install summary (also silences the banner)

Per-agent skill directories:

Agent--local--global
claude.claude/skills/~/.claude/skills/
codex.codex/skills/~/.codex/skills/
opencode.opencode/skills/~/.config/opencode/skills/
droid.factory/skills/~/.factory/skills/
pi.pi/skills/~/.pi/agent/skills/
agents.agents/skills/~/.agents/skills/

Skills are installed into <dir>/<name>/ with everything they require. install zeyos includes zeyos-dev and all domain skills; a single domain skill brings shared/ and the OKF bundle (shared/okf/). Links are rewritten so the tree needs no source checkout.

<dir>/.zeyos-skills.json records the bundle version, target, skills and a SHA-256 of each installed file. Installing again upgrades every skill it lists:

Plan statusMeaning
added, updated, unchangedNormal install and upgrade results
removedAn unmodified tracked file the bundle no longer ships, inside its own directories
locally-modified-keptChanged since installation; not overwritten
locally-modified-overwritten-with-forceChanged since installation; replaced by --force. A modified file the bundle dropped is kept, even with --force
unknown-keptDiffers from the bundle and is not in the lockfile, as after an older install; not overwritten
unknown-overwritten-with-forceThe same, replaced by --force
symlink-skippedThe path or a directory above it is a symlink. It is reported and left untouched, even with --force. Remove the link to install there
outside-bundle-keptThe lockfile lists a path outside the bundle's own directories. It stays on disk and is no longer tracked
conflictA file where a directory belongs, the reverse, or an unreadable file. The install stops before writing anything; --preview exits 1

Files you add yourself are never touched.

zeyos skills verify accepts --dir, --target, --global and --local, and never prompts:

ExitMeaning
0Every file is present. Modified files and symlinks are listed, and ok is then false in --json output
1Files are missing, files from an older install were kept, or the lockfile is damaged or tracks nothing
4No lockfile in that directory

okf​

Work with the Open Knowledge Format bundle that ships with the client — a portable Markdown description of the ZeyOS data model (one concept per API-backed entity) plus curated metrics, playbooks, and query concepts.

Bash
zeyos okf list # list concepts (type, id, title); --json for automation
zeyos okf show tickets # print a concept (bare resource name, or entities/tickets)
zeyos okf check # validate OKF v0.1 conformance (exit non-zero on error)
zeyos okf export --out ./okf # copy the shipped bundle into a directory
zeyos okf build --out ./okf # synthesize a bundle from the client's schema
SubcommandWhat it does
listList the concepts in the bundle (--json/--yaml supported).
show <concept>Print one concept doc. Accepts a bare resource (tickets) or full id (entities/tickets).
checkValidate the bundle for OKF v0.1 conformance; exits non-zero on any error (CI-friendly).
exportCopy the shipped okf/ bundle into --out (default ./okf); --force to overwrite.
buildSynthesize a structural bundle from the client's schema into --out (default ./okf).

Options: --dir <path> reads from an explicit bundle directory (list/show/check); --out <path> is the write target (build/export); --force overwrites an existing target. export ships the rich curated bundle; build is the lighter runtime projection.


Command Aliases​

AliasEquivalent
showget
editupdate
rmdelete
removedelete
resourceresources
skillskills

Exit Codes​

Every command reports its outcome through the exit code, so scripts and agents can tell failure modes apart without parsing stderr.

CodeMeaningTypical cause
0Success—
1Runtime or API failureThe request reached the server and failed
2Usage errorUnknown command, unknown flag, missing argument, a value passed to a boolean flag
3Auth errorNo credentials, an unknown --profile, HTTP 401/403
4Not foundThe requested record does not exist
5AbortedA confirmation prompt was declined, or could not be answered because stdin was closed

Machine-readable failures​

In --json or --yaml mode a failure writes a structured envelope to stdout, so a command that is piped to jq still tells you what went wrong. The human message goes to stderr as usual.

Bash
$ zeyos list billing_invoces --json
JSON
{
"ok": false,
"error": {
"code": "unknown_entity",
"exitCode": 2,
"message": "Unknown entity: \"billing_invoces\". Did you mean \"billing_invoices\"?",
"field": "billing_invoces",
"suggestion": "billing_invoices",
"actions": ["Run 'zeyos list' to see every entity."]
}
}

Successful output is unchanged — a list is still a bare array. Tell the two apart by shape: a failure is an object carrying ok: false.

error.code is a stable slug. Current values include unknown_entity, unknown_command, unknown_option, invalid_option_value, invalid_filter, unexpected_argument, flag_takes_no_value, missing_argument, auth_required, auth_failed, not_found, timeout, network, and api_<status> for a server error.

Bash
zeyos get ticket 999999 --json
case $? in
0) echo "found" ;;
4) echo "no such ticket" ;;
3) echo "run: zeyos login" ;;
*) echo "failed" ;;
esac
note

zeyos doctor agent exits 3 when the local configuration is not ready, including a broken or mismatched custom-field snapshot, which makes it usable directly as a CI readiness check. It stays offline, so passing does not prove the server is reachable.


Timeouts​

Requests time out after 30 seconds by default. Override per command with --timeout <seconds>, or globally with the ZEYOS_TIMEOUT_MS environment variable.

Bash
zeyos list transactions --preset open-invoices --timeout 120

Read operations (list, count, get, find, sum) are retried automatically on timeouts and transient network errors. Writes are never retried on a timeout or a 503, so a create cannot be duplicated by a retry. A 429 is retried for reads and writes, because it means the request was not processed.


Number Formatting​

Columns the schema types as floating point (double precision, numeric, decimal, real, money) are rendered with grouped thousands and two decimal places in table and record views, and right-aligned:

Text
ID TRANSACTIONNUM DATE STATUS ACCOUNT NETAMOUNT
───── ────────────── ────────── ────── ─────── ────────────
10932 N.2210.0654-01 2022-11-06 8 8840 17.009,00
99999 R.2401.0001-01 2024-01-01 1 1234 1.234.567,89

Integer columns are deliberately left untouched — IDs, foreign keys, enum codes and Unix timestamps are all integers, and grouping them would be misleading.

The separators follow a locale, resolved in this order:

  1. ZEYOS_LOCALE environment variable
  2. locale in the resource config file
  3. the host's default locale
Bash
ZEYOS_LOCALE=de-DE zeyos list billing_invoices # 17.009,00
ZEYOS_LOCALE=en-US zeyos list billing_invoices # 17,009.00
info

Formatting applies to human-readable output only. --json and --yaml always emit the raw number, so scripts and agents are unaffected by the terminal's locale.


commands​

Publish the command graph — every command, its aliases, and the flags it accepts — as data.

Text
zeyos commands [--json|--yaml]

zeyos describe exposes the data model; zeyos commands exposes the command model, so an agent can discover which flags exist without parsing prose help. Runs offline.

Bash
zeyos commands --json | jq '.commands[] | select(.name=="list") | .flags'

Each entry carries name, aliases, flags (global flags folded in), and acceptsArbitraryFields — true for create/update, which take --<field> <value> for any column. A top-level options map gives each flag's type, so a caller knows which take a value.