Scan Report
20 /100
baton
Baton — AI orchestrator for OpenClaw. Routes every request to subagents. Never does work itself.
A legitimate OpenClaw AI orchestrator with no malicious behavior; the primary finding is that filesystem WRITE permissions are not declared in SKILL.md metadata despite the install script and task-manager performing file writes to ~/.openclaw.
Safe to install
Add filesystem:WRITE to the declared permissions in SKILL.md metadata to align with the install script and task-manager file write operations.
Findings 2 items
| Severity | Finding | Location |
|---|---|---|
| Low | Filesystem WRITE not declared in permissions | SKILL.md:1 |
| Info | execSync runs openclaw CLI commands | scripts/probe-limits.js:87 |
| Resource | Declared | Inferred | Status | Evidence |
|---|---|---|---|---|
| Filesystem | NONE | READ | ✓ Aligned | probe-limits.js reads openclaw.json, agents/<id>/agent/models.json; task-manager… |
| Filesystem | NONE | WRITE | ✗ Violation | install.sh writes BOOT.md and AGENTS.md; task-manager.js writes task/archive/tem… |
| Shell | NONE | WRITE | ✓ Aligned | probe-limits.js line 87: execSync('openclaw models list --json'); install.sh lin… |
| Network | NONE | READ | ✓ Aligned | probe-limits.js probeProvider() makes HTTP GET to provider rate-limit APIs using… |
| Environment | READ | READ | ✓ Aligned | resolveApiKey() reads env vars for API keys, used only for provider limit querie… |
File Tree
13 files · 79.2 KB · 1963 lines JavaScript 2f · 1103L
Markdown 8f · 701L
Shell 1f · 118L
JSON 2f · 41L
├─
▾
references
│ ├─
model-profiles.md
Markdown
│ ├─
onboarding-guide.md
Markdown
│ ├─
orchestration.md
Markdown
│ ├─
resilience.md
Markdown
│ ├─
task-schema.md
Markdown
│ └─
task-types.md
Markdown
├─
▾
scripts
│ ├─
install.sh
Shell
│ ├─
probe-limits.js
JavaScript
│ ├─
provider-probes.json
JSON
│ └─
task-manager.js
JavaScript
├─
BOOT.md
Markdown
├─
package.json
JSON
└─
SKILL.md
Markdown
Security Positives
✓ API keys are resolved from environment or config and used only for provider rate-limit API queries — never exfiltrated
✓ Comprehensive output sanitisation (sanitiseOutput) redacts apiKey, token, secret, password fields before any stdout output
✓ Consent flow in BOOT.md step 2 requires user approval before any config scanning or script execution
✓ No base64 decoding, no eval(), no reverse shells, no direct IP exfiltration
✓ All filesystem writes are scoped to ~/.openclaw/ which is the intended state directory for this orchestrator
✓ No access to ~/.ssh, ~/.aws, .env, or other sensitive credential paths
✓ No hidden functionality — all scripts are documented, readable, and their purposes are clear
✓ Data-driven probe configuration via provider-probes.json — no hardcoded API endpoints or values