client-bot-security — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited client-bot-security (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Activate this skill when:
Bot avatars in the workspace reveal which Telegram bots exist:
ls -la ~/clawd/assets/agent-avatars/
# Pattern: <name>-<handle>.jpg
# e.g. priva-Privanotifybot.jpg → @PrivanotifybotSearch the workspace for bot-related projects:
ls ~/clawd/projects/ | grep -iE '(bot|telegram|notify|agent)'Three layers of secret storage:
<secrets-vault>/ — central secrets vault (primary admin host only).env files — per-node (<node>: $HERMES_HOME/.env)$OPENCLAW_CONFIG)# Central vault
ls -la ~/<secrets-vault>/
# → bot-provisioning-ledger.json (token_ref map)
# → bot-provisioning-pool.env (raw tokens for free pool)
# → telegram-bot.env (current bot token for this agent)
# → .env (all other API keys)
# Fleet node Hermes
ssh <user>@<tailscale_ip> "cat $HERMES_HOME/.env | grep -iE 'BOT|TOKEN'"
# Fleet node OpenClaw
ssh <user>@<tailscale_ip> "cat $OPENCLAW_CONFIG"Document per bot:
| Field | Example |
|---|---|
| name | <bot-role> |
| handle | @examplebot |
| token_ref | TELEGRAM_BOT_TOKEN (in telegram-bot.env) |
| host | appie-1 (this Mac Mini) |
| gateway | Hermes |
| status | active / assigned / free / retired |
The bot-provisioning-ledger.json tracks:
{
"name": "<bot-name>",
"handle": "@examplebot",
"token_ref": "APPIE_DOCTOR_BOT_TOKEN",
"status": "assigned",
"box": "<host>",
"sale": null,
"assigned_at": "2026-06-11",
"notes": "..."
}Check what's running on each fleet node:
# Hermes gateway detection
ssh <host> "ps aux | grep -iE '(gateway|hermes)' | grep -v grep"
# → /usr/local/lib/hermes-agent/venv/bin/python -m hermes_cli.main gateway run --replace
# OpenClaw gateway detection
ssh <host> "ps aux | grep -iE '(openclaw|openclaw-gateway)' | grep -v grep"
# → openclaw-gateway
# Open ports
ssh <host> "ss -tlnp" # Linux
# Hermes: varies (gateway port in config)
# OpenClaw: typically 18789 (HTTP API) + 18791 (internal)for host in "<user>@<ip1>" "<user>@<ip2>"; do
echo "=== $host ==="
ssh -o ConnectTimeout=5 -o BatchMode=yes -o StrictHostKeyChecking=no \
-i "$HOME/.ssh/<key>" "$host" \
"cat ~/.ssh/authorized_keys | awk '{print \$3}'"
doneThis reveals:
ssh <host> "ls -la ~/.ssh/ | grep -v authorized_keys | grep -v known_hosts"Deploy keys (for CI/CD or service accounts) should be in separate files with clear filenames.
ssh <host> "cat ~/.ssh/config"Check for:
PasswordAuthentication noPubkeyAuthentication yesHost * that exposes sensitive hostsDetermine if the node allows direct root SSH. If so, document and flag for hardening:
ssh <host> "grep -i 'permitrootlogin\|passwordauthentication' /etc/ssh/sshd_config"| Location | Risk | Mitigation |
|---|---|---|
~/<secrets-vault>/ (appie-1) | Medium (local machine compromise) | chmod 600, no git track |
$HERMES_HOME/.env (<node>) | Medium (VPS compromise) | chmod 600, root-only read |
| OpenClaw config (<legacy-node>) | Medium (VPS compromise) | chmod 600 on config dir |
| Bot provisioning pool | High (bulk token leak) | Never echo to chat/logs |
package.json, bot.py, or any tracked filetoken_ref in the ledger, not raw tokens# Scan all project dirs for leaked tokens
gitleaks detect --source ~/clawd/projects --no-git --config ~/.gitleaks.toml --verbosefree → assigned → active → retiredMaintain a secrets map that documents:
Format:
| Secret | Location | Access | Scope |
|--------|----------|--------|-------|
| TELEGRAM_BOT_TOKEN (<bot-role>) | `~/<secrets-vault>/telegram-bot.env` | <remote-user>@<node> | <bot-role> |
| TELEGRAM_BOT_TOKEN (<bot-gateway>) | `$HERMES_HOME/.env` | <remote-user>@<node> | <bot-gateway> |Run this checklist for each new client bot deployment:
<secrets-vault>/bot-provisioning-pool.env (not tracked)bot-provisioning-ledger.json with token_refassigned (with box, sale, assigned_at)<ssh-key-name> for <user>@<spark-tailscale-ip> returns Permission denied. May need a different user/key. Don't assume all fleet nodes are reachable.openclaw.json (JSON), not .env. Know which gateway runs on which node before looking.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.