Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 32 additions & 8 deletions routine-prompt.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,17 @@ verdict β€” you don't need to know their internals, just surface what they find:
β€’ osv-scanner β€” known CVEs in project lockfiles across all ecosystems
β€’ govulncheck β€” Go vulnerabilities the code actually calls (reachable)
β€’ skillspectorβ€” malicious/risky patterns in installed AI agent skills
The vuln/skill scanners are optional "lenses" that only run if their tool is
installed; whichever are active contribute to the same verdict.
β€’ smuggle β€” scanner-EVASION in skill/instruction files: invisible-Unicode
(tag chars), bidi overrides (Trojan Source), zero-width chars,
and remote-include instructions β€” tricks the content scanners miss
β€’ mcp β€” MCP servers (.mcp.json + host configs, invisible to skillspector):
inventories every server and DIFFS its definition across runs to
catch RUG PULLS (a server that changed since you approved it);
flags fetch-and-exec launch commands
β€’ ocr β€” instructions HIDDEN INSIDE IMAGES bundled with skills (SkillCamo)
The vuln/skill/native scanners are optional "lenses" that only run if their tool
is installed; whichever are active contribute to the same verdict. (Two more β€”
mcp-scan and garak β€” are opt-in and OFF by default; ignore them unless present.)

STEP 1 β€” SCAN. Run:

Expand All @@ -38,9 +47,10 @@ STEP 2 β€” GET THE FACTS. Run the deterministic report generator:
HONEY_DIR/report.sh

THE VERDICT IS THE `OVERALL:` LINE THAT report.sh PRINTS β€” nothing else. It is
the worst status across bumblebee AND every active lens (osv-scanner,
govulncheck, skillspector). report.sh also exits 0 only when OVERALL is clean,
1 otherwise.
the worst status across bumblebee AND every active lens. The line may carry a
tally suffix (e.g. `OVERALL: EXPOSED β€” … (12 suppressed, 65 review, 2 mutated)`)
β€” see the SUPPRESSION BASELINE section below. report.sh exits 0 only when
OVERALL is clean, 1 otherwise.

CRITICAL β€” do not produce a false all-clear:
β€’ Use ONLY the OVERALL line for the verdict. Do NOT read the verdict from
Expand Down Expand Up @@ -92,6 +102,19 @@ STEP 3 β€” ENRICH. Add judgment a static report can't, per scanner:
β€’ skillspector (agent skills): explain the risk in plain terms (e.g. prompt
injection, data exfiltration, excessive agency) and which skill/file; an
untrusted or recently-installed skill flagged here deserves prompt review.
β€’ smuggle (evasion): invisible-Unicode / bidi / zero-width hits are HIGH signal
β€” there is no legitimate reason to hide text in a skill file, so treat one in
a skill you didn't author as urgent, and name the file:line. Remote-include
("fetch/read this URL") is dual-use: common in docs, flag it for untrusted skills.
β€’ mcp (rug pull): an MCP-DRIFT (server definition CHANGED since last run) is the
one that matters β€” a server you already approved altered its manifest; treat
as possible tampering, name the server + config file, say what to re-review.
A new server or a fetch-and-exec launch command also warrants a look. The very
first run only SEEDS the baseline (no drift expected) β€” say so if the note
mentions "FIRST RUN seeded".
β€’ ocr (image payload): instructions recovered from an image bundled with a skill
are almost never legitimate β€” treat as a high-signal hidden-instruction
("SkillCamo") attempt and name the image file.
β€’ If the run is `incomplete`, stress that absence of matches is NOT all-clear
and recommend re-running with a larger BUMBLEBEE_MAX_DURATION.
β€’ If any scanner is `scan_error`, give the most likely cause and the fix from
Expand All @@ -101,9 +124,10 @@ Keep remediation labeled "run manually" β€” never run state-changing commands.
STEP 4 β€” DELIVER. Send the result as a Slack DM to me, in Slack mrkdwn
(*bold*, `code`, β€’ bullets). Lead with the OVERALL status from STEP 2.
β€’ OVERALL: CLEAN β†’ a one-line all-clear is enough (and only then).
β€’ OVERALL: EXPOSED β†’ lead with which scanners fired and their counts, then
list findings worst-severity first, and end with a "do first" ordering by
severity then confidence. Never call an EXPOSED run "all clear".
β€’ OVERALL: EXPOSED β†’ lead with which scanners fired and their BLOCKING counts,
then list findings worst-severity first, and end with a "do first" ordering
by severity then confidence. Call out any πŸ” MUTATED item first β€” it's the
highest-signal event. Never call an EXPOSED run "all clear".
β€’ OVERALL: INCOMPLETE / SCAN_ERROR β†’ say so plainly and name the affected
scanner(s); partial coverage is not a clean result.
Cite the run dir path once. Do not modify files or run anything that changes
Expand Down
Loading