OXYGENOxygen/ Docs
Execution

Modes

Every paid or external action runs in `smoke_test`, `dry_run`, or `live`.

ModeValidates inputsReads real dataCalls paid providersWrites externallyCredits
smoke_testYesYesNoNo0
dry_runYesYesNoNo0
liveYesYesYesYesBounded by the approved cap

smoke_test and dry_run have the same execution boundary; the distinct mode label is retained in the run record. Both spend 0 credits, skip paid provider calls, and prevent external writes. Oxygen internal reads still execute against current workspace data. One explicit exception to “no external calls” is the internal oxygen.http_json_request read tool, which may make a real outbound GET to the configured URL. Only live may spend credits, call paid providers, or write externally.

Workflow runs

--mode is required on workflows call and workflows events emit; all three values are accepted. A live call additionally requires both --approved and --max-credits — unconditionally, whether or not the graph spends anything. Omitting them fails with approval_required (409) or spend_cap_required (400) and enqueues nothing.

Every successful call returns a safety receipt beside the run. It states the mode, maximum managed credits, provider/write posture, whether internal reads execute, and that an inspectable Workflow run record is created.

oxygen workflows call <id> --input-json '{...}' --mode smoke_test --json
oxygen workflows call <id> --input-json '{...}' --mode dry_run --json
oxygen workflows call <id> --input-json '{...}' --mode live --approved --max-credits 50 --json

Provider tool runs

tools run takes dry_run or live only — there is no smoke_test for a single tool call. The live gate applies to paid tools (anything with a side effect or a billing mode): those require --approved and --max-credits, and refuse with spend_cap_too_low when the ceiling is under the pre-call estimate. A free, no-bill tool runs live without either flag.

oxygen tools run <tool-id> --input-json '{...}' --mode dry_run --json
oxygen tools run <tool-id> --input-json '{...}' --mode live --approved --max-credits 20 --json

MCP splits the two into separate tools: oxygen_tools_run_dry and oxygen_tools_run_live.

Column runs

columns run has no --mode. It takes a --dry-run flag — which returns the resolved model, the credit estimate, and the prompt rendered against one real row — and paid runs then need --approved with --max-credits.

On this page