OXYGENOxygen/ Docs
Safety & cost

Approvals

A required gate before any `live` action that consumes credits or writes externally.

An approval is explicit human confirmation before live work spends credits or writes to an external system.

What requires approval

ActionApproval required
Paid provider call (oxygen_tools_run_live)Yes
Column run on an AI/tool column with credits_used > 0Yes
Enrichment run (oxygen enrich-column run)Yes — every run; preview first (free)
CRM write, outbound enrollment, LinkedIn action, or campaign syncYes
Workflow fire in live mode touching either of the aboveYes
Immediate permanent purge (tables delete --now, columns delete --now)Yes — free but irreversible: refuses with a preview until re-run with --yes
Workflow fire in live mode that only readsNo
dry_run / smoke_test anythingNo
Read-only commands (tables query, cells inspect, etc.)No

Approval gates are not only about money: a free action that irreversibly destroys workspace data (like an immediate purge) sits behind the same preview-then-approve pattern as paid spend. The default tables delete path needs no approval because it is reversible — the table stays restorable until its scheduled purge.

What to review

Before approving live work, check:

FieldWhat to confirm
ScopeTable, column, workflow, filters, row ids, and row count
Provider or integrationWhich tool, CRM, outbound system, or social action will run
Modelive, not dry_run or smoke_test
Credit ceilingThe --max-credits value you are about to authorize
PreviewSample inputs/outputs or a preflight result
DestinationExternal account, campaign, list, CRM object, or table column

CLI and MCP responses include structured JSON and often a web_url; use the web view or widget to inspect the same run before continuing.

CLI patterns

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

oxygen table-runs create <table-id> --column <column-key> --limit 100 --approved --max-credits 100 --json

oxygen enrich-column preview <table-id> --capability work_email --limit 100 --json
oxygen enrich-column run <table-id> --capability work_email --limit 100 --approved --max-credits 100 --json

oxygen workflows call <workflow> --input-json '{...}' --mode dry_run --json
oxygen workflows call <workflow> --input-json '{...}' --mode live --approved --max-credits 100 --json

--mode is required on every workflows call; a live call also requires both --approved and --max-credits.

Without --approved, oxygen enrich-column run fails with approval_required (exit 7) and spends nothing.

For generated-message review queues, use:

oxygen reviews next --json
oxygen reviews accept <review-id> --json
oxygen reviews reject <review-id> --auto-rerun --json

Review queues are for human-in-the-loop content such as AI-generated outreach, not a replacement for preflighting paid provider runs.

Standing permissions

Three paths let work run later without a per-delivery approval. Each is armed once, explicitly, and each carries its own credit ceiling.

Standing grantHow it is armedBound to
Autonomous workflow trigger (cron, webhook, event) on a tool-calling workflowoxygen workflows enable <workflow> --approved --max-credits <n>That workflow revision — republishing re-arms
Table auto-runoxygen tables auto-run set <table> --columns <csv> --max-credits <n>The saved column set; rows written by import, insert, upsert, or webhook queue those columns
CRM record enrichmentoxygen crm enrichment list, then oxygen crm enrichment enable <preset> --object <object>The saved enrichment set on that CRM object; every record written to it enriches, bounded per batch

Omitting --max-credits falls back to your plan tier's default per-delivery ceiling — binding for table and CRM auto-runs, monitored only for workflow triggers. See Spend caps.

  • Modes — which modes require approval.
  • Spend caps — the credit limit attached to every approved run.
  • Runs — inspecting what an approved run actually did.

On this page