nitinjain999/platform-skills/kingfisher
Claude Code and agent skill by nitinjain999/platform-skills
- community
- ext:[{"type":"hook","description":"Pre/post lifecycle hooks"}]
Checking that the SKILL.md file is still in the repository.
Find, live-validate, map the blast radius of, and revoke leaked secrets with Kingfisher (MongoDB) — across a local repo, Git history, a GitHub/GitLab/Bitbucket org, S3/GCS, Docker images, Slack, Jira, Confluence, Teams, or Postman. Covers local CLI scanning, direct validate/revoke without a scan, baseline management (track only new secrets), kingfisher.yaml policy, CI diff-scan gates, and pre-commit/Husky hooks. Use when asked to "scan for secrets", "is this key still live", "what can this credential reach", "revoke this token", "did we leak a secret", or "block new secrets in CI". Pattern-only secret scan bundled with a CVE pass → /platform-skills:trivy. Secrets-context safety in workflow YAML → /platform-skills:zizmor. Storing/rotating secrets inside the cluster → /platform-skills:secrets.
Install
npx vskill@latest install nitinjain999/platform-skills/kingfisherSemi-extensibleMentions customization, but needs skill-specific knowledge. Read the extensible skills standard
SKILL.md
Find a leaked secret, prove whether it's still alive, see what it can reach, and kill it — in that order.
Read references/kingfisher.md before responding. It contains bootstrap steps, the full CLI surface (scan, validate, revoke, baseline, config), the kingfisher.yaml schema, platform-target commands with their auth env vars, exit-code semantics, CI templates, and the pre-commit/Husky setup.
The bundled hook is scripts/pre-commit.sh, relative to this SKILL.md. Set skill_dir to the absolute directory containing this loaded skill before standalone setup. In a repository clone that is skills/kingfisher; a portable install carries the script inside platform-skills-kingfisher/scripts/.
This command is interactive by default. With no arguments, run the three-layer wizard below. Never dump a raw kingfisher scan invocation and stop — the useful output is a validated, triaged verdict, not a wall of candidate strings.
Ownership boundary (enforced at the menu)
| Question | Authoritative command | |
|---|---|---|
| "Is there a hardcoded-looking secret in this repo?" (fast, offline, bundled with a CVE scan) | /platform-skills:trivy secrets mode | |
| "Is that secret still live? What can it reach? Kill it." | this command | |
| "Did a secret leak into Slack, Jira, Confluence, S3, or a whole GitHub org — not just one repo?" | this command | |
| "How should secrets be stored/rotated inside my cluster?" | /platform-skills:secrets | |
"Is my workflow's secrets: context usage safe?" | /platform-skills:zizmor | |
| "Is there a CVE in my image or dependencies?" | /platform-skills:trivy | |
| "How do I sign images / generate an SBOM?" | /platform-skills:supply-chain |
Trivy's secrets scanner and Kingfisher are not the same depth of tool: Trivy tells you a string matches a pattern, offline, as part of a broader vuln/license scan. Kingfisher live-validates the candidate against the real provider, tells you if it's actually dangerous, and can map or kill it. Run both if you want a cheap first pass and a specialist second pass — they are not redundant.
Mode dispatch
Parse the first word of $ARGUMENTS as the mode. When $ARGUMENTS is empty, run the three-layer interactive wizard.
| Mode | What it does | |
|---|---|---|
scan | Default local/repo run, live validation on — the everyday check | |
audit | Deep sweep for a security review: low confidence, full history, blast-radius, all outcomes | |
validate | Check whether one known secret string is still live — no scan | |
revoke | Kill one known secret directly through its provider — destructive, confirm first | |
baseline | Create or update a baseline so future scans report only new secrets | |
triage | Walk existing findings one at a time → validate / revoke / rotate / accept-in-baseline / false-positive | |
config | Generate or repair kingfisher.yaml | |
ci | Emit a CI gate: hard-fail, SARIF alerts, or Docker-based | |
precommit | Add the kingfisher pre-commit hook, which runs the installed binary (or Husky), and state the caveat | |
explain | Explain a rule id, an exit code, or a validation outcome | |
| _(empty)_ | Three-layer interactive wizard |
Three-layer interactive wizard
Layer 1 — Developer question (intent in their language)
Layer 2 — Scope and target (decides what actually gets scanned, and how invasively)
Ask only what the chosen mode needs.
Before touching a platform target, Slack/Jira/Confluence/Teams/Postman search, or `--blast-radius`, confirm authorization out loud. These are not passive reads: platform-target scans pull private organizational content, and blast-radius mapping authenticates as the discovered credential against a live provider. State plainly that you're only proceeding because the user confirmed access is authorized.
Detect and resolve silently where possible:
- Run
kingfisher --version. Not installed → offerbrew install kingfisher,uv tool install kingfisher-bin==2.13.0, or a pinned version fromreferences/kingfisher.md→ Bootstrap. Do not ask permission to check the version. - Check for
kingfisher.yamlat the target root. It is never auto-loaded — if found, ask whether to pass--config kingfisher.yamlexplicitly; if not found, say defaults apply. - Check for a baseline file (
baseline-file.yml,baseline.json, or similar committed near the repo root). Found → ask whether to pass--baseline-file; a scan without it re-reports the entire existing backlog as if it were new.
Layer 3 — Trade-offs (surface where a wrong default causes real harm)
Ask these only when the situation triggers them:
| Trigger | Question | |
|---|---|---|
revoke requested | "This kills a live credential with no undo. Confirm: validated as still live, owner identified, replacement ready to redeploy? (y/N)" | |
audit or platform-target scan requested | "This may authenticate against a live provider or pull private organizational content (Slack/Jira/Confluence/Teams). Confirm you're authorized to scan this target. (y/N)" | |
ci mode, repo has never run kingfisher | "First run on this repo typically surfaces a long tail of test fixtures. Gate on 205 (confirmed-live) and build a baseline, or gate on 200 immediately?" | |
baseline mode, --manage-baseline about to run with a narrower --rule/--exclude/path scope than a prior baseline run | "This baseline run's scope is narrower than usual. --manage-baseline replaces this repository's section with exactly what this run finds — narrower scope can prune real, still-valid entries. Proceed, or widen scope to match the original baseline run?" | |
config mode about to write a file | "Write kingfisher.yaml? (y/N)" — show the full proposed file first | |
| Repo already has a kingfisher CI workflow | "A kingfisher workflow already exists at <path>. Update it in place, or add a second one?" | |
Finding is assumed (not verified_active) and the user is treating it as confirmed | State plainly: assumed is high-confidence but not network-checked. Offer to re-run with validation on, or kingfisher validate directly on that string. |
Never ask about: output format for a quick local check (default pretty; ask only for ci/automation, where sarif/json/toon matter), whether to install kingfisher (just do it via brew or a pinned uv tool install, per Bootstrap), or whether to check for a kingfisher.yaml/baseline file (always check silently).
Mode: scan
The everyday run. Live validation on, default rule set, working tree + history for local targets.
Report in this order:
- Verdict — one line: clean, candidates only (no live secrets), or confirmed-live secrets present.
- Counts by outcome —
verified_active(network-confirmed),assumed(high-confidence, not checked), everything else grouped as "other" — this distinction is the whole point of running Kingfisher instead of a pattern scanner. - Findings, live-confirmed first, each with
file:line, rule id (betterleaks.*/veles.*), and outcome. - History note — if this was a local path scan, mention that filesystem + history means a tracked-file secret can appear twice; if that inflates the count, offer
--git-history=nonefor a cleaner working-tree-only view. - Next step — one concrete command:
validate/revokefor a live secret,triageif there are several,baselineif this is the first run on an established repo.
Mode: audit
Deep sweep for a human security review. Not a CI gate.
State up front, before running: blast-radius mapping authenticates against each validated credential's provider — confirm authorization (Layer 2 gate). Low confidence surfaces more candidates, including likely false positives; this mode is for a human to triage, not a pass/fail signal.
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/kingfisher/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Extension points
hookPre/post lifecycle hooks
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/nitinjain999/platform-skills/kingfisher)