Files
openworker/coworker/personas/builtin/security/skills/secret-scan/SKILL.md
T
Rohit C Prasad 62ad9dbdca tools: give coworkers the user's real toolchain, and stop silent skips
Sidecar inherits the login shell's env; toolchain resolves absolute paths with pinned
installs; request_tool replaces the 'tool missing -> STOP' instruction that hid a check.
2026-08-14 15:28:57 -07:00

2.6 KiB

name, description
name description
secret-scan Hunt committed secrets with gitleaks and drive safe rotation

Find committed credentials and get them rotated and removed — without ever exposing them further yourself.

ABSOLUTE RULE: never print a secret's value — not in output, notes, todo items, commits, or PRs. Refer to every hit as " in : (commit )".

  1. Check the tool: gitleaks version. If it's missing, do NOT skip this scan and do not stop the review — ask for it with request_tool("gitleaks", …). If the user declines, or no pinned build exists for their platform, fall back to step 2b and say in your report that the sweep was manual.
  2. Scan working tree AND history — history matters most: a secret deleted in HEAD is still live in every clone, and it is the hit users are most surprised by. a. With gitleaks: gitleaks detect --source . --report-format json --report-path /tmp/gitleaks.json b. Without it, do the same job by hand, and say so:
    • working tree: git grep -nIE '(api[_-]?key|secret|token|password|BEGIN [A-Z ]*PRIVATE KEY|AKIA[0-9A-Z]{16}|sk_(live|test)_[0-9a-zA-Z]{16,}|xox[baprs]-)'
    • history, including files deleted since: git log -p --all -S 'AKIA' --pickaxe-all and git log --diff-filter=D --name-only --pretty=format:%h -- '*.env*' '*credential*' '*secret*', then read the removed contents with git show <sha>^:<path>.
    • Pipe anything you read through a redactor rather than into your transcript, e.g. sed -E "s/[A-Za-z0-9_\\-]{16,}/[REDACTED]/g" — the no-printing rule still applies.
  3. Triage each hit by reading its context:
    • Real credential, test fixture, or example placeholder? Say which and why.
    • For real ones: what does it grant access to, and is it plausibly still valid?
  4. For every real secret, in this order: a. ROTATE first — tell the user exactly where to revoke/rotate it (the provider's console page or CLI command). Rotation beats removal: history rewrite without rotation is false comfort. b. Remove it from the code: move to env vars or the project's secret store, matching how this codebase already handles configuration. c. Prevent recurrence: add/extend .gitignore for local secret files and offer a .gitleaks.toml baseline plus a pre-commit hook. d. History purge (git filter-repo/BFG) is DESTRUCTIVE and rewrites shared history — describe the trade-off and only proceed if the user explicitly asks.
  5. Deliver: a hit list (kind · location · verdict · rotation status), the cleanup branch/PR, and the prevention setup you added or recommend.