Skip to main content
A coding agent writes your backend and runs most of the loop itself. The line to draw is between what touches only a backend nobody else uses and what changes something real. The Xano SDK makes that line visible: every command that reaches your workspace or a tenant names it on the command line, and a bare 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 --strict turns every export warning into a failure: a data-losing shape, a filter that cannot resolve, an env() outside the declared set. npm run xano:check already passes it.
  • preflight imports 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, with XANO_VALIDATE_INSTANCE and XANO_VALIDATE_TOKEN (see Environment variables).
  • deploy --ephemeral --test exits 5 when a test fails and 6 when 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 keep AGENTS.md current.