# .tirith/policy.yaml (repo root)
fail_mode: closed
allow_bypass_env: false
severity_overrides:
shortened_url: HIGH
plain_http_to_sink: CRITICALAll findings block execution. No bypass mechanism. Shortened URLs and plain HTTP are escalated.
# ~/.config/tirith/policy.yaml
fail_mode: open
allow_bypass_env: trueWith allowlist at ~/.config/tirith/allowlist:
raw.githubusercontent.com
homebrew.bintray.com
get.docker.com
Default severity mappings. Allowlisted URLs skip analysis.
# In CI pipeline
tirith check --non-interactive --format json -- curl https://example.com/setup.sh | bash
EXIT=$?
if [ $EXIT -eq 1 ]; then
echo "BLOCKED by tirith" >&2
exit 1
fiNon-interactive mode never prompts. JSON output for machine parsing.
# .tirith/policy.yaml
severity_overrides:
docker_untrusted_registry: CRITICAL
docker_tag_latest: HIGHAll Docker-related findings are escalated. Other rules use default severity.
# ~/.config/tirith/policy.yaml
fail_mode: open
allow_bypass_env: true
severity_overrides:
curl_pipe_shell: LOW
wget_pipe_shell: LOW
pipe_to_interpreter: LOW
punycode_domain: LOW
confusable_domain: LOWEverything becomes a LOW-severity warning. Nothing blocks. Useful for onboarding.
tirith detects when cargo install or cargo add is run in a project that
hasn't configured cargo-vet. The
vet_not_configured rule fires at LOW severity by default. To escalate:
# .tirith/policy.yaml
severity_overrides:
vet_not_configured: HIGHTo suppress it (e.g. for non-Rust repos):
# ~/.config/tirith/allowlist
# or .tirith/allowlist
vet_not_configured
When tirith blocks a curl | bash pattern, the safest alternatives are:
tirith run downloads, inspects, and prompts before executing:
# Instead of: curl -fsSL https://example.com/install.sh | bash
tirith run https://example.com/install.shDownload and inspect only (no execution):
tirith run --no-exec https://example.com/install.shPin to a known hash:
tirith run --sha256 abc123... https://example.com/install.shvet is an external tool for safer remote-script workflows (see getvet.sh for details):
# Instead of: curl -fsSL https://example.com/install.sh | bash
vet https://example.com/install.shBoth approaches ensure you can inspect the script before it runs.
If you routinely install from trusted URLs, allowlist them instead of bypassing:
# .tirith/policy.yaml
allowlist:
- "get.docker.com"
- "raw.githubusercontent.com/org/repo"