agents
Built to be driven by a coding agent
Most build tools assume a person is watching. This one assumes nobody is. Every command has a distinct exit code per kind of failure, a written contract, and no prompt that can ever block a pipeline.
Point your agent at this
Drop this into CLAUDE.md, AGENTS.md, or whatever file your
agent reads. It is the whole contract in a form an agent can act on.
## Building iOS apps with xos
Never parse our output. Branch on the exit code:
0 worked
2 the APP crashed - the tool worked, collect the crash report
10 this machine is not ready - install what the message names, do NOT retry
11 the build failed - a code or configuration problem
12 signing failed - certificates, profiles, entitlements
13 a device operation failed - worth ONE retry
14 the licence does not permit this - do NOT retry
Codes may be added. An existing one never changes meaning.
xos app --project App.xcodeproj --target App --build-dir build
xos ship --project App.xcodeproj --target App --sign-dir signing
xos install --udid $UDID build/App.app
xos debug --udid $UDID --tunnel $IP --bundle-id com.example.app
No command waits for input. Every setting has a flag and an
environment variable. Message wording is NOT stable; the codes are.
Why this matters for an agent
It never asks a question
Nothing prompts, so nothing hangs waiting for a human who is not there.
Failures are distinguishable
"Your app crashed" and "the build tool fell over" are different codes, so an agent can act on the difference instead of guessing.
The phone can be elsewhere
An agent in the cloud can install, launch, screenshot and read crash reports from a device on your desk, over an encrypted link.
What we do not promise
Message wording changes as we find clearer ways to say things, and the order of progress lines is not fixed. If you find yourself needing to read a message to make a decision, that is a gap in our contract rather than something to work around. Tell us and we will add the code or the field.