Gas City intentionally runs operator-configured commands. Those commands are a
feature, not a sandbox. Treat city config, imported packs, exec provider
scripts, and agent startup commands as trusted code with the same review
expectations as shell scripts committed to the repository.
Trust Model
Execution Surfaces
Secret Propagation
Orchestrator-side shell helpers remove inherited environment variables whose keys
look secret-bearing, including names containing TOKEN, PASSWORD, SECRET,
PRIVATE_KEY, API_KEY, ACCESS_KEY, CREDENTIAL, OAUTH, or AUTH_JSON.
This prevents ambient CI or maintainer shell secrets from reaching work_query,
scale_check, hooks, order checks, order exec commands, and sling helpers by
accident.
If a command truly needs a secret, pass it explicitly through the relevant city,
rig, provider, or workflow configuration. Explicit values are preserved because
they represent an operator decision, and failure logs redact known secret values
before writing order exec errors or events.
Rules For Authors
- Do not put secrets directly in command strings. Use env variables or provider
credential files.
- Do not interpolate bead content, PR text, mail, formula vars, branch names, or
other user-controlled values into
sh -c commands.
- When showing a command for a human to copy, build it from argv and quote each
argument with Gas City’s shell quoting helper.
- Keep
pull_request_target workflows metadata-only. They may label or comment
but must not checkout or run contributor code with privileged tokens.
- Prefer direct
exec.Command(..., args...) style boundaries for new provider
contracts. Use sh -c only for explicitly operator-authored shell snippets.
Last modified on June 15, 2026