deploy never reaches either.
What an agent runs unattended
These write only to the Xano Engine on your machine or to this project’s own ephemeral, or write nothing at all:What waits for your approval
These change your workspace, a tenant, or the stored releases your team ships from. Have the agent propose the command and stop:
The scaffolded
AGENTS.md already tells the agent to leave pull, promote,
deploy --to workspace, tenant deploy and local update to you unless you ask. Add the rest
of this table to your own notes in that file, outside the managed block, so every agent that
opens the project reads the same rules. Coding agents
covers the file.
The strongest guardrail is credentials. An agent session signed in only for ephemerals still
reaches your workspace, because an ephemeral lives under it. Keep the release commands in
CI, behind a GitHub environment with required reviewers, and the approval is a
button rather than a promise.
Checks that fail loudly
An agent reads a failure far more reliably than a warning, so give it checks that fail:export --strictturns every export warning into a failure: a data-losing shape, a filter that cannot resolve, anenv()outside the declared set.npm run xano:checkalready passes it.preflightimports the backend into a throwaway environment on a live instance and diffs each object back, so a shape that compiles but does not round-trip fails before any release. It signs in separately, withXANO_VALIDATE_INSTANCEandXANO_VALIDATE_TOKEN(see Environment variables).deploy --ephemeral --testexits5when a test fails and6when the tests cannot be reached. The deploy stays in place either way, so the agent checks the code before it reports success.
Read JSON and exit codes, not text
Every command prints a JSON document when stdout is not a terminal, and--json forces it.
A failure carries ok: false and an error with a stable code, such as
SDK_SHARED_SCHEMA_CHANGE. Tell the agent to branch on the exit code and on error.code, never
on the wording of a message.
--yes waives a confirmation, never a refusal. An agent that adds --yes to get past an exit
2 gets the same exit 2. Exit codes and outcomes lists every
code.
Next
Coding agents: install the agent skill and keepAGENTS.md current.