Repository navigation
v0.8.0 — Machine-readable failures
Closes the two gaps a two-model review (Kimi K3, Grok 4.6) ranked first and second when comparing this CLI against SAP, Salesforce and Workday on agent usability: a failure a machine can read, and a command model a machine can discover.
Machine-readable failures
In --json/--yaml mode a failure now writes a structured envelope to stdout:
{ "ok": false, "error": { "code": "unknown_entity", "exitCode": 2, "message": "…", "field": "…", "suggestion": "…", "actions": ["…"] } }Previously stdout was empty and the reason was prose on stderr, which made the published exit-code contract unusable for its stated purpose. Success output is unchanged — a list is still a bare array, and the two are told apart by shape.
Every command emits it, including login, logout, profile, skills and okf, which until now exited 1 with a bare stderr line. A bad --port or --target is 2, a failed token exchange 3, a missing bundled directory 1 with a missing_bundle code.
zeyos commands
Publishes the command graph — every command, its aliases, the flags it accepts and each option's type — as data. zeyos describe exposes the data model; this exposes the command model, so an agent no longer infers flags from prose help. The equivalent of sf commands --json.
Entities
Five new (contract, supplier, stocktransaction, comment, ledger) and twelve transaction pseudo-entities (billing_invoice, procurement_delivery, …) bound to transactions.type.
stocktransaction, ledger and payment are an append-only record rather than a working document, so they now carry a historyBearing note that zeyos describe publishes and the delete confirmation states before asking. The capability is unchanged — --force still honours the caller.
Also fixed
- Error hints (
actions) reached--jsoncallers but not the terminal. They now go to stderr too. - A corrupt
.zeyos/api/<resource>.jsonno longer echoes its own contents; it reports the file, the position and aconfig_invalidcode. delete --yesworks (it was declared but never allow-listed).- JSON parse errors no longer leak the payload — Node embeds the input in its own message.
Full detail in CHANGELOG.md.