35 Commits

Author SHA1 Message Date
Dan Guido 022fa09488 Update humanizer plugin to upstream v2.2.0 (#21)
Sync with blader/humanizer v2.2.0. Adds anti-AI self-audit pass,
enhanced personality/soul guidance, 9-step process, output format spec,
and a comprehensive full example showing draft-to-final workflow.
Fixes author attribution from Trail of Bits to blader. Fixes curly
quote example to use actual Unicode characters.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 14:44:03 -08:00
David Maynor 11c23bb4a6 fix: use >- folded scalar for SKILL.md descriptions (#20)
The literal block scalar (description: |) preserves newlines, causing
multi-line descriptions to render poorly in the Claude Code /skills
menu. This converts all 5 affected SKILL.md files to use the folded
strip scalar (>-), which collapses to a single line at parse time.

Also updates the skill-template reference to recommend >- so future
skills don't reintroduce the issue.

Affected plugins:
- skill-extractor
- ffuf-web-fuzzing
- humanizer
- planning-with-files
- wooyun-legacy
2026-02-22 22:09:49 -08:00
Dan Guido 0130bc30c6 Add security-awareness plugin imported from 1Password/SCAM (#19)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 03:16:39 -07:00
Dan Guido 49775a1e15 Add ghostsecurity/skills to approved marketplaces (#16)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 13:09:00 -05:00
Dan Guido 5e3e83226a Add python-code-simplifier plugin (#15)
* Add python-code-simplifier plugin imported from anthropics/claude-plugins-official

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Use agent format instead of skill format to match original

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 13:11:44 -05:00
Dan Guido e9a51befa1 Add react-pdf plugin (#14)
* Add react-pdf plugin imported from molefrog/skills

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Add Why React-PDF section to README from source repo

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 11:39:11 -05:00
dependabot[bot] 7afba6d328 Bump astral-sh/ruff-action from 3.5.1 to 3.6.1 in the all group (#12)
Bumps the all group with 1 update: [astral-sh/ruff-action](https://github.com/astral-sh/ruff-action).


Updates `astral-sh/ruff-action` from 3.5.1 to 3.6.1
- [Release notes](https://github.com/astral-sh/ruff-action/releases)
- [Commits](https://github.com/astral-sh/ruff-action/compare/57714a7c8a2e59f32539362ba31877a1957dded1...4919ec5cf1f49eff0871dbcea0da843445b837e6)

---
updated-dependencies:
- dependency-name: astral-sh/ruff-action
  dependency-version: 3.6.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: all
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-13 11:30:20 -05:00
Dan Guido 98eed4e025 Add scv-scan plugin imported from kadenzipfel/scv-scan (#13)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 11:30:10 -05:00
Dan Guido 3caf637054 Add uv.lock to .gitignore
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 18:16:53 -05:00
Dan Guido ab4965044b Add x-research plugin imported from rohunvora/x-research-skill (#11)
Converts the original TypeScript/Bun CLI to Python with uv for dependency
management. Supports two backends: direct X API v2 (X_BEARER_TOKEN) and
xAI Responses API with Grok's x_search tool (XAI_API_KEY).

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 18:14:36 -05:00
Dan Guido 15759b7bf7 Add last30days plugin (#10)
* Add last30days plugin imported from mvanhorn/last30days-skill

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix ruff linter failures in last30days plugin

Apply SIM108/SIM105/SIM102/SIM110/SIM116/E501 fixes and add missing
contextlib imports.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 02:49:07 -05:00
Dan Guido 840e16a681 Add review-plugin command and make import-skill autonomous (#9)
* Add review-plugin command and make import-skill autonomous

Add /review-plugin command for deep quality review across five
categories: script correctness, documentation accuracy, CLAUDE.md
conformance, code consistency, and security. Finds issues, fixes
them, and reports a summary.

Update /import-skill to run the review as Step 18, choose plugin
names autonomously, handle existing plugins without prompting, and
include review findings in PR descriptions.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix .gitignore to allow new files in .claude/commands/

Change .claude/ to .claude/* so git descends into the directory and
evaluates the !.claude/commands/ negation for new files. Previously
new commands required git add -f because git ignored the entire
directory without looking inside.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 02:12:19 -05:00
Dan Guido 07277a6b5b Add ghidra-headless plugin (#8)
* Add ghidra-headless plugin imported from mitsuhiko/agent-stuff

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix review findings in ghidra-headless plugin

- Fix unbound GHIDRA_HOME variable crash in find-ghidra.sh (set -u)
- Set executable bits on shell scripts (lost during API fetch)
- Standardize escapeJson across all Java scripts to handle \b, \f,
  and non-ASCII characters consistently
- Fix SKILL.md: clarify ExportAll scope (excludes calls/symbols),
  note strings output format difference
- Add -maxdepth 5 to fallback find to bound search time

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix empty SCRIPT_ARGS array crash on macOS Bash 3.2

Bash 3.2 (shipped as /bin/bash on macOS) treats "${EMPTY_ARRAY[@]}"
as an unbound variable under set -u. Use the ${arr[@]+"${arr[@]}"}
idiom to safely expand empty arrays.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 01:56:26 -05:00
Dan Guido fd6f68a1b2 Move import-skill from plugin to project-level command
The import-skill command doesn't belong in the marketplace — it's a
repo maintenance tool. Move it to .claude/commands/ so it's available
to anyone cloning the repo as /import-skill, no plugin install needed.

- Move command to .claude/commands/import-skill.md
- Move fetch script to scripts/fetch_github_tree.py
- Remove plugin from marketplace.json and README
- Unignore .claude/commands/ in .gitignore

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 01:32:12 -05:00
Dan Guido d6181041a2 Rename trailofbits plugin to trailofbits-skill-importer
Avoids confusion with the org name. Command becomes
/trailofbits-skill-importer:import-skill.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 01:28:47 -05:00
Dan Guido 2a6f519f28 Scope security scanner to changed plugins and rename skill-importer to trailofbits (#7)
Scanner changes:
- Accept multiple target paths (nargs='+')
- Workflow extracts changed plugin dirs from PR via gh API
- Only scans plugins modified in the PR, not the entire repo
- Label fallback scans all plugins if no plugin files changed

Plugin rename:
- Rename skill-importer -> trailofbits so command becomes
  /trailofbits:import-skill
- Update marketplace.json, README, plugin.json references

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 01:19:29 -05:00
Dan Guido 86b054f3e9 Add deterministic security scanner for imported plugins (#6)
* Add deterministic security scanner for imported plugins

Scans plugin directories for external network access (URLs, curl, Python
network imports), unicode tricks (bidi overrides, zero-width chars,
homoglyphs in code, punycode domains), and destructive operations (rm -rf,
force push, chmod 777). BLOCK findings fail CI; WARN findings surface for
human review.

- scripts/scan_plugin.py: zero-dependency stdlib scanner (~440 lines)
- .github/workflows/security-scan.yml: CI workflow running on push/PR
- plugins/skill-importer/commands/import-skill.md: insert scan as Step 17

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: resolve code review findings for PR #6

- Fix fence marker length bug: store full fence length so 4-backtick
  fences aren't closed by 3-backtick lines
- Fix CI always failing: use distinct exit codes (0=clean, 1=usage,
  2=BLOCK, 3=WARN) and allow WARN to pass in CI
- Fix double PUNYCODE_RE.search: capture match once, remove type: ignore
- Fix silent error swallowing: warn on stderr for unreadable files
- Use Literal type for Finding.level instead of bare str
- Add line.isascii() fast-path to skip unicode checks on ASCII lines
- Precompute frozenset of code lines for O(1) lookup instead of O(R)
- Detect rm -Rf (capital R) and rm --recursive --force
- Extract _discover_plugins and _read_file_text helpers from main
- Pass precomputed suffix string instead of Path objects to check fns
- Add docstrings to all public and non-trivial functions
- Add summary line to stderr output

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Add 7 security check categories to plugin scanner

New detections: code execution (pipe-to-shell, eval/exec, subprocess),
credential access, encoded payloads, privilege escalation, and compiled
bytecode (.pyc/__pycache__).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Convert security scanner from CI gate to PR comment

Surface findings as an idempotent PR comment instead of failing CI,
so reviewers can see them inline and merge at their discretion.

- Add --format=markdown output mode to scan_plugin.py (argparse CLI)
- Post/update a single comment using <!-- security-scan --> marker
- Auto-trigger only when plugins/ files change (gh API path check)
- Manual trigger via 'security-scan' label on any PR

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 01:08:09 -05:00
Dan Guido b3578141f4 Add skill-importer plugin (#5)
* Add skill-importer plugin for importing GitHub skills

Adds /import-skill command that takes a GitHub URL, fetches the skill
source tree, transforms it to meet plugin standards, validates, and
creates a PR — all in one flow.

- Command file (import-skill.md): 5-phase workflow with platform
  detection table, idempotency handling, and quality self-review
- Helper script (fetch_github_tree.py): zero-dependency GitHub tree
  fetcher using gh CLI, outputs JSON manifest
- Registered in marketplace.json and README.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: resolve code review findings for PR #5

Python script (fetch_github_tree.py):
- Add path traversal protection in write_tree (resolve + startswith)
- Add input validation (_validate_component) for shell metacharacters and ..
- Narrow exception handling: specific catches instead of bare Exception
- Merge get_default_branch + get_repo_license into get_repo_metadata (1 API call)
- Add resource limits: MAX_FILES=200, MAX_DEPTH=10, SUBPROCESS_TIMEOUT=30
- Add rate-limit detection in fetch_file_content
- Add subprocess timeout to all subprocess.run calls
- Remove unused --list and --output-dir flags (YAGNI + security)
- Fix binascii.Error import (was base64.binascii.Error)
- Document branch-slash limitation in docstring

Command file (import-skill.md):
- Add untrusted-content warning after Step 4
- Add temp directory cleanup step (Step 19)
- Handle branch name collision with timestamp fallback
- Simplify Idempotency section

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 23:25:15 -05:00
Dan Guido ed9c0b71a0 Add OpenAI skills converter and 16 converted plugins (#4)
* Add OpenAI skills converter and 16 converted plugins

Add scripts/convert_openai_skills.py, a PEP 723 script that fetches
curated skills from openai/skills and converts them to Claude Code
plugin format. The script rewrites Codex-specific paths, frontmatter,
sandbox instructions, and branch naming conventions.

16 portable skills converted. Skipped 14 (MCP-dependent, OpenAI API,
or Codex-hosted infrastructure like vercel-deploy's deploy endpoint).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Fix CI lint failures in imported OpenAI scripts

- Add --unsafe-fixes to ruff in lint_plugin() for auto-fixable errors
- Add per-file ruff ignores for unfixable vendor code issues (B023,
  B904, E501, SIM105, SIM117)
- Regenerate all plugins with lint fixes applied

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 22:39:02 -05:00
Dan Guido e19ea6d536 Add wooyun-legacy plugin for web vulnerability testing (#3)
* Add wooyun-legacy plugin for web vulnerability testing methodology

Web vulnerability testing methodology distilled from 88,636 real-world
cases from the WooYun vulnerability database (2010-2016). Covers SQL
injection, XSS, command execution, file upload, path traversal,
unauthorized access, information disclosure, and business logic flaws.

Content translated from Chinese to English, anonymized (vendor names,
IP addresses, and domains replaced with generic descriptions), and
restructured into Claude Code plugin format.

Includes 8 full reference files, 14 testing checklists extracted from
category data, and 2 anonymized methodology case studies (banking and
telecom penetration).

Licensed under CC BY-NC-SA 4.0 (differs from repo license).
Attribution: tanweai / wooyun-legacy contributors.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Fix CI: adjust paths that trigger hardcoded-path check

Change `/Users/AssociationManage/` to `/users/AssociationManage/` and
`/home/www/` to `/home/[webuser]/` to avoid false positives from the
CI grep pattern while preserving the security payload examples.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Address review findings: trim bloat, normalize formatting, fix references

- Cut ~3,000 lines of redundant content from sql-injection.md,
  command-execution.md, and file-upload.md while preserving all
  WooYun case IDs, vendor-specific payloads, and unique methodology
- Normalize all reference titles to "Analysis Methodology" suffix
- Standardize blockquote attribution format across all references
- Add table of contents to sql-injection, command-execution,
  file-upload, and path-traversal references
- Convert all SKILL.md links to use {baseDir} placeholder
- Add authorization language to SKILL.md "When to Use" section
- Add RCE vs Command Execution clarification note
- Fix cross-references in bank-penetration.md and telecom-penetration.md
- Replace t.cn/dnslog.cn domains with .example placeholders
- Fix date typo (2025 → 2026) in command-execution.md

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 19:10:00 -05:00
Dan Guido 3658e8b8cd Merge pull request #2 from trailofbits/add-ffuf-web-fuzzing
Add ffuf-web-fuzzing plugin
2026-02-11 18:50:56 -05:00
Dan Guido 10a30e340e Add ffuf-web-fuzzing plugin for authorized penetration testing
Import and restructure jthack/ffuf_claude_skill as a curated plugin.
Provides expert guidance for ffuf web fuzzing: directory discovery,
subdomain enumeration, authenticated fuzzing with raw requests,
auto-calibration, wordlist selection, and result analysis.

Restructured from the original:
- Rewrote SKILL.md with behavioral guidance over reference dumps
- Added Rationalizations to Reject, Prerequisites, agent workflow
  for authenticated fuzzing, authorization confirmation gate
- Split references into wordlists.md and request-templates.md
- Removed Python helper script (Claude does this natively)
- Deduplicated request templates, trimmed out-of-scope wordlists
- Added MIT LICENSE matching upstream

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 18:49:54 -05:00
Dan Guido 2aa43776d1 Merge pull request #1 from trailofbits/add-planning-with-files
Add planning-with-files plugin
2026-02-11 18:48:38 -05:00
Dan Guido 853fd4ebe0 Add planning-with-files plugin
Curated port of OthmanAdi/planning-with-files, which implements
Manus-style context engineering: using persistent markdown files
(task_plan.md, findings.md, progress.md) as working memory to
prevent context drift during complex multi-step tasks.

Includes skill, /plan and /status commands, Stop hook for phase
completion reporting, and check-complete.sh script. Multi-IDE bloat
removed, expensive PreToolUse/PostToolUse hooks dropped, templates
cleaned up.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 18:47:40 -05:00
Dan Guido e767c0f66a Add openai/skills to approved marketplaces
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-10 18:17:22 -05:00
Dan Guido 8233cf21e3 Add skills-curated to approved marketplaces, clarify ToB repo roles
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 15:04:51 -05:00
Dan Guido 4db56f180a Add anthropics/claude-plugins-official to approved marketplaces
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 11:44:45 -05:00
Dan Guido b9c07c9d48 Add skills-internal to approved list, require attribution for external skills
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 11:42:36 -05:00
Dan Guido b955de4499 Rewrite README to reflect internal governance + community benefit
Reframes the repo as Trail of Bits' approved skills list with three
paths: use an approved marketplace, request approval of a new one,
or submit an individual skill via PR.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 11:39:29 -05:00
Dan Guido 3957dbcc40 Remove trophy case section from README
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 11:24:34 -05:00
Dan Guido 75e2f22c29 Remove ask-questions-if-underspecified seed plugin
Humanizer and skill-extractor now serve as the reference examples
in CLAUDE.md.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 11:24:15 -05:00
Dan Guido c9e2172121 Add humanizer and skill-extractor plugins
Ported from trailofbits/skills PRs #19 and #16. Humanizer identifies
and removes AI writing patterns; skill-extractor captures reusable
knowledge from work sessions.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 11:22:35 -05:00
Dan Guido a3a98879e8 Add official Anthropic plugins and agent-browser to marketplace links
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 11:05:26 -05:00
Dan Guido 564876242a Add links to other curated skills marketplaces
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 11:04:12 -05:00
Dan Guido 5988966e3a Initial skills-curated marketplace infrastructure
Curated, community-vetted Claude Code plugin marketplace with CI checks
mirroring trailofbits/skills: ruff, shellcheck, shfmt, bats linting plus
JSON validation, marketplace consistency, frontmatter, hardcoded path,
and personal email checks. Includes ask-questions-if-underspecified as
seed plugin.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 10:59:09 -05:00