Caveat verdict

sage-router

88
🟢 Trusted
No high-risk patterns surfaced by the deep scan — automated capability review, not behavioral proof.

A local HTTP server routing LLM requests to different providers; all routing is transparent, locally hosted, and serves the explicit purpose of multi-provider AI model routing.

⚠ Flagged for review — coarse, uncorroborated signal, not a confirmed exploit. Review the config yourself before installing.

Automated static analysis — not a human review. Caveat flags capabilities, not confirmed intent, and can produce false positives. Disagree with this verdict? Use Dispute below.

0
security
100
transparency
90
maintenance

Findings (14)

Pattern match critical

Possible hardcoded credential

docs/cloud-tunnel/README.md · code · TOKEN='<same secret>

Pattern match high

HTTP request to bare IP address — common in malicious payloads

deploy/tailnet-edge/README.md · code · http://127.0.0.1

Pattern match high

<script> tag in markdown — potential code injection

scripts/bootstrap_github_supabase_auth.sh · prose · downgraded · <script>

Coarse signal — prose, single-step high

Instruction-prose smuggling shape detected: collects a sensitive target (".env") and emits it outward ("include"). Phrased as prose with no trigger tokens — a semantic prompt-injection / data-exfil pattern the syntactic scanners can't see. Final tier capped at Caution; review the instructions before installing.

SKILL.md · - `openai-codex` is kept as an optional bridge, not a required first hop. - Anthropic compatibility is provided through Dario, so `anthropic` can stay in `openc

Pattern match medium

Accesses OpenClaw config/secrets directly

SKILL.md · prose · downgraded · ~/.openclaw/openclaw.json

Pattern match medium

Instructs covert action — may act without user awareness

docs/blog/local-first-routing-for-ai-agents.md · prose · downgraded · quietly

Pattern match medium

Opens WebSocket connection

docs/cloud-tunnel/README.md · code · WebSocket

Pattern match medium

Uses exec() — may execute shell commands

tests/test_tool_call_leak.py · prose · downgraded · exec(

Pattern match medium

References sudo — requests elevated privileges

umbrel/README.md · prose · downgraded · sudo

Pattern match medium

Long base64 string (100+ chars) — likely obfuscated payload

web/public/account.js · prose · downgraded · eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImF3dGFuZ3JscXFzZHBrc2FyaHdvIiwicm9sZSI6ImFub24i

Pattern match low

Python urllib.request — network access

cyber/docker-compose.yml · prose · downgraded · urllib.request

Pattern match low

Python os.environ.get — reads environment variable

deploy/gcp/cloudrun-deploy.sh · prose · downgraded · os.environ.get(

Pattern match low

References webhook/callback URL

scripts/bootstrap_github_supabase_auth.sh · prose · downgraded · callback_url

Pattern match low

Popular HTTP library — network access

tests/test_credential_failover.py · prose · downgraded · got

Why the tier is capped

Execution sink present in raw bytes (Hard Floor: class B/D/G). Final tier capped at Caution — cannot be lifted by any downgrade, example-payload opt-in, or allowlist.

Permissions & capabilities

No declared permissions — minimal attack surface.

Is this flag fair?

Check another skill Browse the registry Auditing your own skills or configs? Use the API