71 Commits

Author SHA1 Message Date
Mohamed Hegazy
6a63e35e75
security-guidance: lenient UTF-8 decode in 6 git-subprocess helpers (#2056)
Fixes anthropics/claude-plugins-official#2056 — on Windows, when the
worktree contains an untracked file whose name has a character undefined
in cp1252 (accented capitals like Á Í Ï Ð Ý, most CJK, emoji), the
UserPromptSubmit hook crashes:

  Exception in thread Thread-5 (_readerthread):
    UnicodeDecodeError: 'charmap' codec can't decode byte 0x81
  Traceback (most recent call last):
    File diffstate.py, line 338, in _list_untracked
      for p in r.stdout.split('\\0'):
  AttributeError: 'NoneType' object has no attribute 'split'

Non-blocking (UPS failures still let the prompt through) but the
baseline-untracked snapshot is silently lost, so the Stop-hook review
mis-handles pre-existing untracked files.

Root cause (reporter's diagnosis, verified):

1. core.quotePath=false makes git emit raw UTF-8 for non-ASCII filenames.
2. subprocess.run(..., text=True) decodes via
   locale.getpreferredencoding(False) in strict mode — on Windows that
   is cp1252, in which 0x81 / 0x8D / 0x8F / 0x90 / 0x9D are undefined.
   Those bytes appear in the UTF-8 encodings of Á (C3 81), Í (C3 8D),
   Ï (C3 8F), Ð (C3 90), Ý (C3 9D), and a large fraction of CJK / emoji
   codepoints.
3. The decode runs in the subprocess reader thread. The thread raises
   UnicodeDecodeError, threading prints 'Exception in thread Thread-N',
   subprocess.run returns with stdout=None. The handler then does
   None.split('\\0') -> AttributeError, which is NOT in the narrow
   except (TimeoutExpired, FileNotFoundError, OSError) tuple, so it
   escapes the helper, propagates out of UserPromptSubmit's
   ThreadPoolExecutor.result(), and exits the hook non-zero.

This is internally inconsistent: gitutil._git_diff_range,
security_reminder_hook._reflog_amend_lookup (line ~540), and the commit
diff loop (line ~1115) already do bytes + decode utf-8/replace, with
comments explicitly noting that text=True would crash. The fix below
extends that established pattern to the helpers that were holdouts.

Affected helpers (6 total):

  - diffstate._list_untracked            <- reporter, hot path, CRITICAL
  - diffstate.capture_git_baseline       <- reporter, latent
  - diffstate.get_baseline_file_content  <- audit, file content read, HIGH
  - gitutil._git_name_only                <- reporter, latent
  - gitutil._git_status_porcelain         <- reporter, latent
  - gitutil._git_reflog_recent_commits    <- audit, embeds %gs commit msg, HIGH

For each one:

  - Drop text=True from subprocess.run.
  - Decode r.stdout / r.stderr as .decode('utf-8', errors='replace').
  - Add ValueError to the except tuple as defense against any future
    strict-decode regression (UnicodeDecodeError is a ValueError
    subclass; including it explicitly degrades the helper to its
    empty/None return instead of escaping out of the hook).

Verified locally on macOS Python 3.13:

  - py_compile clean on both files.
  - 45 existing smoke + extensibility tests still pass.
  - 21 new internal tests (not in this PR — added to the team's local
    test suite at staging/tests/test_unicode_decode.py):
      * 18 static-shape parametrized: each of the 6 fixed helpers has
        no text=True in its subprocess calls, contains errors='replace',
        and lists ValueError in its except.
      * Deterministic end-to-end: create real git repo + Ávila_report.txt
        untracked, call _list_untracked, verify it returns
        {'Ávila_report.txt': <mtime>} without crashing.
      * Deterministic end-to-end: same for capture_git_baseline (verifies
        the latent stderr-warning case stays valid).
      * Deterministic end-to-end: get_baseline_file_content on a file
        whose content has 山田太郎 + 🎉; verify the bytes round-trip
        through the decode.
  - 66/66 tests pass total (45 existing + 21 new).

NOT verified end-to-end on Windows — would need actual cp1252 strict
decode to fire. Reporter has the deterministic repro and will
re-verify on their Win11 / Python 3.14.x setup before merge.

Not in this PR (defense-in-depth, lower risk):

  - 3 git rev-parse calls returning path output (gitutil._find_git_index,
    _git_toplevel, _git_dir) could fail on Windows if cwd is in a
    non-ASCII install directory. Same fix shape but unreported and
    much lower probability — worth a separate follow-up if anyone
    actually hits it.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 23:15:16 -07:00
Bryan Thompson
fc49e6815f
recommender: add Convex to database/backend MCP coverage (#1981)
Picked up from sethconvex's PR #1966 (auto-closed by membership gate),
split off from #1980 (Convex plugin entry refresh) so the editorial
addition to claude-automation-recommender gets its own review.

Changes:

- SKILL.md: add `convex` to the package.json dep-detection grep, update
  the Database row in the indicator table to name Convex, and add a
  Convex MCP row to the MCP recommendation table.

- references/mcp-servers.md: new "Convex MCP" section in the Databases
  group (Supabase / Convex / PostgreSQL / Neon / Turso), and a row in
  the Detection Patterns quick reference.

Convex publishes its MCP server via the `convex` npm package
(`npx convex mcp start`), exposing tables, function-spec, data,
run-once-query, logs, env list/set/get. Same row pattern as the
existing database/backend MCP entries.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-28 07:59:33 -05:00
Mohamed Hegazy
c11244778d
Address Windows verification: --prefer-binary + pywin32 bootstrap
The first round of this PR removed SKIP_WIN32, fixed venv_py to use
Scripts/python.exe, and added Lib/site-packages to the consumer glob —
all necessary. Windows verification (Win11 ARM64, Py 3.13, Git Bash)
showed two more blockers, both addressed here.

1. Pip dependency resolver picks unbuildable cryptography on ARM64.

   Without --prefer-binary, pip picks a cryptography version with no
   published ARM64 wheel and tries to build it from source. That needs
   Rust/Cargo, almost never present on user machines → BUILD_FAILED
   with err_kind=other:cryptography. A binary wheel exists for an
   adjacent version (cryptography-46.0.3-cp311-abi3-win_arm64.whl);
   --prefer-binary tells pip to pick it. Cross-platform safe (no-op
   where the latest version already has a wheel).

2. pywin32 .pth files aren't processed by sys.path.insert().

   With the venv built, ensure_agent_sdk.py's post-build probe passes
   (it runs from venv_py, where Python's site.py at startup processes
   pywin32.pth and registers win32/, win32/lib/ plus runs
   pywin32_bootstrap.py to set the DLL search dir). But llm.py runs in
   the hook's SYSTEM Python and adds the venv via sys.path.insert(),
   which doesn't trigger site.py at all. Without the bootstrap, the
   SDK's mcp.client.stdio → mcp.os.win32.utilities chain raises
   ModuleNotFoundError: pywintypes and the agentic reviewer falls back
   to single-shot silently — exactly the symptom this PR is trying to
   fix. The probe says NOOP_VENV; the actual consumer fails. Probe and
   consumer use different Pythons.

   Replicate what site.py would do: after inserting site-packages,
   also insert win32/ and win32/lib/, then exec pywin32_bootstrap.py.
   Pulled into a shared helper _inject_agent_sdk_venv_into_syspath()
   so both consumer sites (3P SDK fallback, agentic_review fallback)
   call the same code — Windows handling stays in one place.

Verified on macOS (POSIX path unchanged):
- Helper end-to-end test: POSIX-layout venv detected + fake package
  imports successfully via the injected path
- Windows-layout venv also detected; win32 branch correctly skipped
  via sys.platform check
- Both files pass py_compile

Credit: @mhegazy verified the previous commit on Win11 ARM64 / Py 3.13
/ Git Bash, surfaced both issues end-to-end, and provided the exact
fix patterns. This commit applies them with the pywin32 part factored
into a shared helper (vs. inlining at both consumer sites).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 15:07:33 -07:00
Mohamed Hegazy
4decd2e3b2
Enable agentic commit reviewer on Windows
The agentic reviewer is silently no-op on Windows today. SessionStart
bootstrap (ensure_agent_sdk.py) short-circuits with SKIP_WIN32 because
the consumer glob in llm.py only matches POSIX venv layout
(lib/pythonX.Y/site-packages). On Windows, venvs use Lib/site-packages
(capital L, no pythonX.Y subdir), so even if a venv got built the
glob wouldn't find its contents.

Result: Windows users on default installs (no system-wide
claude_agent_sdk) get layer 1 (pattern warnings) and layer 2 (single-
shot LLM diff review) but not layer 3 — the cross-file agentic review
that catches IDOR, auth-bypass, cross-file SSRF, and other things that
need to read related files. Plugin description claims layer 3 but it
silently doesn't run.

Three changes:

1. llm.py — extend the consumer glob (2 sites: 3P SDK fallback at
   ~L297, agentic_review fallback at ~L1090) to also match the Windows
   Lib/site-packages layout, so a venv built on Windows is actually
   discoverable.

2. ensure_agent_sdk.py — remove the sys.platform == 'win32' early-exit
   so the SessionStart bootstrap builds the venv on Windows too.
   Outcome code 4 (formerly SKIP_WIN32) is retired but not reused so
   pre-fix telemetry rows still decode correctly.

3. ensure_agent_sdk.py — venv_py path now branches on sys.platform:
   Windows venvs put the interpreter at Scripts\python.exe; POSIX
   uses bin/python. Previously assumed POSIX, so even with the glob
   fix, the post-build SDK-importability probe would fail on Windows.

Verified locally on macOS:
- glob test: both layouts now match (POSIX venv detected, simulated
  Windows venv also detected via the new Lib/site-packages branch)
- both files pass py_compile
- POSIX path unchanged (sys.platform != 'win32' so old branch runs)

Not verified on Windows in this commit — needs an actual Windows
runner to confirm the venv build + SDK import + subprocess plumbing
all work end-to-end. The SDK spawns a child claude.exe; Windows
process plumbing has its own quirks (shell semantics, path escaping)
that may surface separately. Worth a controlled rollout (one-week
soak under env-var opt-in before flipping default).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 14:50:51 -07:00
Mohamed Hegazy
390c2fe785
Convert POSIX script paths to Windows form before exec on Git Bash
Fixes #2043. On Git Bash for Windows, Claude Code hands script paths to
the shim in POSIX form (`/c/Users/...`). We exec a Windows `python.exe`
(the `python3` Microsoft Store stub fails the probe), and Windows Python
interprets the leading `/` as the root of the current drive — `/c/...`
becomes `C:\c\Users\...` or `D:\c\Users\...` depending on which
drive the shell happens to be on, fails with ENOENT, and every
Edit/Write/MultiEdit blocks until the session restarts.

Convert absolute path args via `cygpath -w` (a Git Bash builtin) before
exec. Guarded by `command -v cygpath` so macOS/Linux fall straight
through unchanged; `cygpath -w` is idempotent on already-Windows paths
so the rare mixed-form case is safe. Only `/*` paths are converted —
Windows-form paths reaching the shim are already openable by python.exe.

Verified locally:
- cygpath absent on macOS → guard skips → POSIX behavior unchanged
- end-to-end shim invocation with a POSIX path on macOS exits 0
- stubbed cygpath -w on /c/Users/test/hook.py produces C:\Users\test\hook.py

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 14:04:09 -07:00
Mohamed Hegazy
0bde168648
Update security-guidance plugin 2026-05-26 14:06:52 -07:00
Den Delimarsky
529d105a78
Rename mcp-gateway -> mcp-proxy throughout
Aligns the compose service name, local config filename, and all
log/restart commands with the image and binary name. Adds an explicit
-config arg since the image CMD still defaults to the legacy
/etc/mcp-gateway path.

🏠 Remote-Dev: homespace
2026-05-21 06:06:15 +00:00
Den Delimarsky
12482fd9e2
Link to public MCP tunnels docs and use public mcp-proxy image
- Replace doc references with platform.claude.com URLs (overview,
  quickstart, security, deploy-compose, deploy-helm, console,
  troubleshooting, reference, WIF)
- Swap the POC mcp-proxy image for the public registry digest used in
  the published quickstart

🏠 Remote-Dev: homespace
2026-05-21 05:39:34 +00:00
Den Delimarsky
0a6ff87909
Add mcp-tunnels plugin
Adds the /create-docker-mcp-tunnel command, which drives the MCP tunnels
Docker Compose quickstart end to end: preflight checks, certificate
generation, proxy config, cloudflared, an optional sample FastMCP server,
and verification from Managed Agents and the Messages API.

Migrated from anthropic-experimental/mcp-tunnel-skills.

🏠 Remote-Dev: homespace
2026-05-21 05:24:44 +00:00
Mohamed Hegazy
b58bdbf551
fix: quote \${CLAUDE_PLUGIN_ROOT} in hookify and security-guidance hook commands
Paths containing spaces (common on Windows, e.g. C:\Users\Some User\...)
cause shell word-splitting when CLAUDE_PLUGIN_ROOT is unquoted, resulting
in hooks erroring with "No such file or directory" on every tool call.

Wraps the path in double quotes for all five affected hook commands.
Fixes the pattern reported in issue #57946. Closes the fix surfaced in PR #1921.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-19 17:53:52 -07:00
Morgan Lunt
573ecf32cd
Merge pull request #1820 from anthropics/morganl/code-modernization-plugin
code-modernization: fix pipeline gaps, redesign harden, dry-run hardening
2026-05-12 09:58:41 -07:00
Morgan Lunt
5e4a45001d
code-modernization: harden writes a patch instead of editing legacy; make map/security guidance language-agnostic
- modernize-harden: never edits legacy/ anymore. Writes findings plus a
  reviewed unified diff to analysis/<system>/security_remediation.patch.
  A second security-auditor pass reviews each hunk (RESOLVES / PARTIAL /
  INTRODUCES-RISK) before presenting. The user reviews and applies the
  patch deliberately, then re-runs to verify. This makes every command
  consistent with the recommended deny Edit(legacy/**) workspace setting,
  so the README's exception note is gone.
- modernize-map: restructure the parse-target list around three stack-
  agnostic principles (dispatcher targets are variables; code-storage
  joins live in config; entry points live in deployment descriptors), with
  COBOL/Java/web/CLI examples on equal footing rather than COBOL-dominant.
  Same protections against false dead-code findings, less stack-specific.
- security-auditor agent: rephrase coverage items in stack-neutral terms
  (record layouts/temp datasets, resource ACLs, deployment scripts/job
  definitions, batch input records) so the checklist reads naturally for
  COBOL, Java EE, .NET, and web targets alike.
- README: drop the harden exception note; describe the patch workflow.
2026-05-11 16:46:03 -07:00
Morgan Lunt
22a1b25977
Harden code-modernization plugin from a real CardDemo dry run
Fixes found by running the discovery workflow against the AWS CardDemo
mainframe sample (~50 KLOC of COBOL/CICS/JCL/BMS/VSAM):

- modernize-assess: add scc -> cloc -> find/wc fallback chain with the
  COCOMO-II formula so Step 1 works when scc isn't installed; same for
  portfolio-mode cloc/lizard. Drop the reference to a specific
  agent-spawning tool name (just "in parallel"). Sharpen the structural-
  map subagent prompt: 5-12 domains, subgraph clustering, ~40-edge cap,
  repo-relative paths, dangling-reference check.
- modernize-map: expand the parse-target list with the things a
  literal-minded reader would miss on a real mainframe codebase — CICS
  CSD DEFINE TRANSACTION/FILE for entry points and online file I/O,
  EXEC CICS file ops, SELECT...ASSIGN TO joined with JCL DD,
  EXEC SQL table refs (not JCL DD), SEND/RECEIVE MAP, dynamic
  data-name XCTL resolution, COBOL fixed-format column slicing. Without
  these the dead-code list is wrong (most CICS programs look unreachable).
  Also write a machine-readable topology.json alongside the summary.
- modernize-extract-rules: add a Priority (P0/P1/P2) field with a
  heuristic, and an optional Suspected-defect field. modernize-brief
  reads P0 rules to build the behavior contract, but the Rule Card had
  no priority slot — the chain was broken.
- modernize-brief: read the new P0 tags; flag low-confidence P0 rules as
  SME blockers.
- modernize-reimagine: drop "for the demo" wording.
- security-auditor agent: add mainframe/COBOL coverage items (RACF,
  JCL/PROC creds, BMS field validation, DB2 dynamic SQL, copybook PII)
  and mark web-only items as such so it adapts to the target stack.
- README: add Optional Tooling section and a symlink example for the
  expected layout.
2026-05-11 16:28:27 -07:00
Morgan Lunt
718818146e
Fix code-modernization plugin: align README with commands, fix pipeline gaps
- modernize-brief: read TOPOLOGY.html (what modernize-map actually
  produces) instead of nonexistent TOPOLOGY.md, and tell the user which
  command produces each missing input.
- README: rewrite the Commands section to match actual command behavior —
  correct output filenames, ordering (brief is the synthesis/approval gate
  after discovery, not the first step), agent attributions, and required
  args. Add a workspace-layout note and an explicit callout that
  modernize-harden edits legacy/, which conflicts with the recommended
  deny rule. Reconcile the Overview and Typical Workflow sequences.
- modernize-assess: generalize the production-runtime overlay step so it
  no longer assumes a specific MCP server/tool; mark it optional. Fix
  app/jcl/ -> legacy/$1/jcl/ for layout consistency.
- modernize-map: make TOPOLOGY.html self-contained (load Mermaid from a
  CDN) so it renders in any browser; drop assumptions about an external
  artifact renderer. Generalize the telemetry annotation note.
- business-rules-extractor agent: fix command cross-reference to the
  actual command name.
- plugin.json: include the brief step in the workflow description.
2026-05-11 16:17:59 -07:00
Daisy S. Hollman
06f52cd3ac
cwc-makers: curl+tar fallback when git is missing (#1731)
/maker-setup now falls back to GitHub's tarball endpoint when git isn't
on PATH, instead of detouring through a package-manager git install.
curl and tar ship with macOS, Linux, and Windows 10 1803+ out of the
box, so this is zero-install on every target platform — and a CwC
attendee just needs the files once to flash a device, not git history.

- maker-setup.md: git-clone fast path, curl|tar (Unix) / curl+tar+
  Rename-Item (PowerShell) fallback, normalizes the -main suffix
- m5-onboard/SKILL.md: drop git from required deps + per-OS git
  bootstrap block; keep Python bootstrap
- README: git now listed as optional

Linear: CC-1975

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

🏠 Remote-Dev: homespace
2026-05-05 18:04:20 -07:00
Daisy S. Hollman
574a879067
Add cwc-makers plugin: /maker-setup Cardputer onboarding (#1730)
* Add cwc-makers plugin: /keep-thinking Cardputer onboarding

Packages the Code-with-Claude Makers (claude.com/cwc-makers) Cardputer
experience as a one-command flow for event attendees:

- commands/keep-thinking.md: user entry point — clones
  moremas/build-with-claude and runs the m5-onboard provisioning flow
- skills/m5-onboard/SKILL.md: vendored from upstream onboard/SKILL.md;
  Installation section replaced with clone-location note; explicit
  'relay physical button steps to user' directive added
- skills/cardputer-buddy/SKILL.md: post-onboarding app iteration

All three are user-invocable; /keep-thinking is the intended entry
point. Skill content is Apache-2.0 from the upstream repo.

Linear: CC-1975

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

🏠 Remote-Dev: homespace

* Rename /keep-thinking → /start-making

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

🏠 Remote-Dev: homespace

* Rename /start-making → /maker-setup

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

🏠 Remote-Dev: homespace
2026-05-05 17:16:30 -07:00
Pete Blois
ce721c1f1d
Replace transcript-style agent examples with prose trigger descriptions
Several agent files used <example> blocks containing user: "..." /
assistant: "..." turn markers, embedded as \n-escaped strings inside
the YAML frontmatter description: field. Replace those with flat prose
trigger descriptions in description: and a 'When to invoke' section
in the agent body containing prose-bullet scenarios.

Affected files:
- 5 agent definitions:
  - plugins/hookify/agents/conversation-analyzer.md
  - plugins/pr-review-toolkit/agents/code-reviewer.md
  - plugins/pr-review-toolkit/agents/pr-test-analyzer.md
  - plugins/pr-review-toolkit/agents/type-design-analyzer.md
  - plugins/pr-review-toolkit/agents/comment-analyzer.md
- 5 agent-development skill files updated to teach the new format:
  - plugins/plugin-dev/skills/agent-development/SKILL.md
  - .../references/triggering-examples.md
  - .../references/agent-creation-system-prompt.md
  - .../examples/complete-agent-examples.md
  - .../examples/agent-creation-prompt.md

Routing is unaffected: each description: still names the trigger
surface in plain English.
2026-04-28 13:56:22 -07:00
Morgan Lunt
38b5056c44
Merge pull request #1582 from anthropics/morganl/code-modernization-plugin
Add code-modernization plugin
2026-04-28 10:02:28 -07:00
Tobin South
f4b5494fb4
mcp-server-dev: hosting, payload-cap, lifecycle, and directory guidance (#1566) 2026-04-28 04:46:23 +01:00
Morgan Westlee Lunt
bdca23e8e4
Add code-modernization plugin
Structured workflow (assess → map → extract-rules → reimagine → transform →
harden) and specialist agents (legacy-analyst, business-rules-extractor,
architecture-critic, security-auditor, test-engineer) for modernizing legacy
codebases into current stacks.
2026-04-24 19:52:02 +00:00
jschwar2552
2a40fd2e7c
skill-creator: sync from anthropics/skills (drop ANTHROPIC_API_KEY requirement) (#1523)
Ports anthropics/skills#547 (b0cbd3d) so this repo matches the upstream
skills repo.

improve_description.py and run_loop.py now shell out to `claude -p` instead
of using the Anthropic SDK directly, so the description optimizer uses the
session's existing Claude Code auth and no longer requires a separate
ANTHROPIC_API_KEY. SKILL.md drops the stale extended-thinking reference and
adds guidance for updating an existing skill.

Several enterprise customers sync exclusively from this repo (not
anthropics/skills, whose README disclaims production use), so they have been
stuck on the old SDK-based path.
2026-04-23 12:02:26 -07:00
Tobin South
b00abee24e
Align mcp-server-dev skills with claude.com/docs connector guidance (#1418)
- build-mcp-server: load llms-full.txt for Claude-specific context;
  add Phase 6 (test in Claude, review checklist, submit, ship plugin)
- references/auth.md: add Claude auth-type table, callback URL,
  not-supported list
- references/tool-design.md: add Anthropic Directory hard requirements
  (annotations, name length, read/write split, prompt-injection rule)
- build-mcp-app: add Claude host specifics (prefersBorder,
  safeAreaInsets, CSP) and submission asset specs; testing via
  custom connector
- build-mcpb: note remote servers are the recommended directory path
2026-04-17 17:02:48 +01:00
Noah Zweben
d19dab67e8
Add Apache 2.0 LICENSE to session-report plugin (#1306)
Co-authored-by: Claude <noreply@anthropic.com>
2026-04-10 20:46:37 +01:00
Thariq Shihipar
9dc3809e74
Add per-day session timeline and collapse cache-breaks list
- analyze-sessions.mjs: track per-session start/end/tokens and emit
  by_day[] in JSON output (date, dow, tokens, peak concurrency,
  per-session spans). Hoist shared token-sum in commit loop.
- template.html: new "session timeline by day" section — horizontal
  day pills (% of total + session count) drive a lane-packed gantt of
  concurrent sessions, colored by project, with hover details and
  ←/→ keyboard nav. Extract drillList() helper and use it for both
  top-prompts and cache-breaks (5 visible + "show more" toggle).
2026-04-09 21:32:34 -07:00
Thariq Shihipar
147ddf8ee3
Add session-report plugin
Generates an explorable HTML report of Claude Code session usage from
local ~/.claude/projects transcripts: total tokens, cache efficiency,
per-project/subagent/skill breakdowns, most expensive prompts with
transcript context, and cache breaks. Terminal-styled, single-file
output with sortable tables and expandable drill-downs.
2026-04-07 17:40:13 -07:00
Tobin South
9d468adfb8
math-olympiad: housekeeping (#1172)
* math-olympiad: add LICENSE, marketplace entry, and prettier formatting

- Add Apache 2.0 LICENSE file
- Register plugin in marketplace.json
- Run prettier (prose-wrap=always, 80 cols) over all plugin markdown
- Simplify model tier naming in reference docs

🏠 Remote-Dev: homespace

* Update .claude-plugin/marketplace.json
2026-03-30 20:56:21 +01:00
Dickson Tsai
986deab6a1
fix: invoke .sh hooks via bash prefix; add version for cache invalidation
Fixes #993 (Permission denied on hook scripts) without relying on
client-side +x preservation.

The hook executor spawns commands via /bin/sh -c, which requires +x
to execute a script directly. Prefixing with bash reads the script
as data — mode bits are irrelevant. This works on all Claude Code
versions, whereas the client-side chmod fix (claude-cli #24666) only
shipped in v2.1.86.

All 3 scripts declare #!/bin/bash and use bashisms ([[ ]], =~), so
bash (not sh) is the correct interpreter.

The version field forces a fresh cache path (1.0.0/ instead of
unknown/), ensuring the new hooks.json reaches users with stale
caches.
2026-03-28 08:40:34 -07:00
Ralph Furman
d56d7b61f0
Merge pull request #755 from anthropics/ralph/add-math-olympiad
Add math-olympiad skill
2026-03-20 13:31:34 -07:00
Tobin South
90accf6fd2
add(plugin): mcp-server-dev — skills for building MCP servers (#731) 2026-03-20 17:51:32 +00:00
Ralph Furman
c3f6d9e9fa
Fix YAML frontmatter — quote description, replace colon with em-dash
Unquoted colon in 'calibrated confidence: will say' broke strict YAML parsing.
CC's parser is lenient but fix for robustness.
2026-03-20 02:07:27 +00:00
Ralph Furman
9720278412
math-olympiad: forbid web access in deep mode
Deep-mode allows bounded local computation but must NOT use WebFetch
or WebSearch. Finding the solution on AoPS is not solving the problem.
Adds explicit NO WEB prompt block and orchestrator self-restraint note.

Found by Ralph's test run (skill solved 5/6 then started fetching
dgrozev.wordpress.com and artofproblemsolving.com for P6).
2026-03-20 00:39:08 +00:00
Ralph Furman
3c9bf4ff5d
Add math-olympiad skill — adversarial verification for competition math
The skill that addresses the Proof-or-Bluff gap: self-verified 85.7% IMO
becomes <5% under human grading. Uses fresh-context verifiers armed with
specific failure patterns (not generic 'check logic').

Validated: 17/18 IMO+Putnam 2025 solved, 0 false positives, 2 novel proofs.
See eval data in anthropic monorepo sandbox/sandbox/ralph/math_skills/.
2026-03-19 23:17:36 +00:00
Tobin South
6b70f99f76
docs(plugin-dev): deprecate commands/ in favor of skills/<name>/SKILL.md (#717)
P0 follow-up for EA-471. Updates plugin-dev teaching materials to stop
recommending the commands/ directory layout for new plugins:

- command-development/SKILL.md: add legacy banner at top pointing to
  skills/ format
- create-plugin.md: update scaffolding to create skills/<name>/SKILL.md
  instead of commands/; mark commands/ as acceptable legacy alternative;
  update all examples, tables, and testing instructions
- example-plugin: migrate example-command to skills/example-command/SKILL.md;
  keep commands/example-command.md with a legacy-format note; update README
  to reflect new preferred structure

Both formats remain loaded identically — this is a documentation change only.

Refs: anthropics/apps#26827

Co-authored-by: Henry Shi <henrys@anthropic.com>
2026-03-17 22:45:25 +00:00
Tobin South
78497c524d
updates(staging): merge staging additions into main (#677)
* fix readme typo

* fix(plugin-dev): add missing .claude-plugin/plugin.json

The plugin-dev plugin was missing its required plugin.json manifest file,
causing the plugin to fail loading. This adds the missing configuration
file following the same format as other official plugins.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

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

* Add README and setup documentation for Greptile plugin

- Add README.md with setup instructions for getting API key
- Document the GREPTILE_API_KEY environment variable requirement
- Add homepage, author URL, and keywords to plugin.json
- Update description to reflect Greptile as AI code review agent

🤖 Generated with [Claude Code](https://claude.com/claude-code)

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

* feat: add c7 agent

* Update Context7 plugin for v2 API

- Update skill/agent/command to use new query-docs tool (replaces get-library-docs)
- Add query parameter usage for intelligent reranking
- Add version pinning support (e.g., /vercel/next.js/v15.1.8)
- Add tools and model metadata to agent
- Simplify docs to focus on workflow, not parameter details
- Add README.md with usage examples

* Switch Context7 MCP to remote HTTP server

* feat: update tools with better skill/agent format prompt

* fmt

* fix: installation guide

* Change Notion name to lowercase in marketplace.json

According to the SKILLS spec (see https://agentskills.io/specification#:~:text=Max%2064%20characters.%20Lowercase%20letters%2C%20numbers%2C%20and%20hyphens%20only.%20Must%20not%20start%20or%20end%20with%20a%20hyphen.) names should not contain uppercase letters. This prevents loading the marketplace in spec-compliant agents.

Update the name to be in lowercase.

* Fix empty array crash on bash 3.2 in setup-ralph-loop.sh

* Update Vercel plugin to point to vercel-labs/vercel-plugin

Replace the marketplace pointer for the Vercel plugin from
vercel/vercel-deploy-claude-code-plugin to vercel-labs/vercel-plugin.

* vercel-labs to vercel

* docs(ralph-loop): add Windows compatibility section

Retargeted from PR #124 (originally against plugins/ralph-wiggum/,
since renamed). Documents the Git Bash workaround for Windows users
hitting WSL bash resolution issues in the stop hook.

Original author: @stefanzvonar

* add(plugin): terraform — HashiCorp infrastructure-as-code

Adapted from PR #14 by @gautambaghel (HashiCorp).
Original: https://github.com/anthropics/claude-plugins-official/pull/14

* add(plugin): autofix-bot — DeepSource automated code review

Adapted from PR #23 by @jai-deepsource (DeepSource).
Original: https://github.com/anthropics/claude-plugins-official/pull/23

* add(plugin): stagehand — Browserbase browser automation

Adapted from PR #43 by @Kylejeong2 (Browserbase). PR's marketplace.json
had a syntax error (missing '},' before adjacent entry); entry
reconstructed from the diff.
Original: https://github.com/anthropics/claude-plugins-official/pull/43

* add(plugin): atomic-agents — BrainBlend-AI framework

Adapted from PR #46 by @KennyVaneetvelde (BrainBlend-AI).
Original: https://github.com/anthropics/claude-plugins-official/pull/46

* add(plugin): microsoft-docs — official Microsoft documentation MCP

Adapted from PR #55 by @TianqiZhang (Microsoft).
Original: https://github.com/anthropics/claude-plugins-official/pull/55

* add(plugin): bonfire — session-context workflow tooling

Adapted from PR #108 by @vieko (Vercel).
Original: https://github.com/anthropics/claude-plugins-official/pull/108

* Add intercom to marketplace

* Add neon to marketplace

* Remove qodo SHA

* Merge staging into add-plugin/intercom to resolve conflict

* Merge latest staging to resolve conflict

* Remove external_plugins changes from staging

Moved to external-plugins-staging branch for separate review.

---------

Co-authored-by: Han T. <han.tan@shopify.com>
Co-authored-by: Julien Tavernier <jtavernier@Juliens-MacBook-Pro.local>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Daksh Gupta <daksh510@gmail.com>
Co-authored-by: Fahreddin Özcan <ozcanfahrettinn@gmail.com>
Co-authored-by: Matt Kotsenas <Matt.Kotsenas@gmail.com>
Co-authored-by: LuciferDono <pranavj821@gmail.com>
2026-03-17 02:00:28 +00:00
Claude
c96abc73df
Add Apache 2.0 LICENSE to ruby-lsp plugin 2026-03-13 17:06:01 +00:00
Daisy S. Hollman
00f13a5f46
Merge pull request #106 from obahareth/main
Add Ruby LSP plugin with inline lspServers configuration
2026-03-10 13:21:32 -07:00
sfishman
028eccf544
address review: bound grep to tail -n 100; restore explicit error paths
- Split pipeline into two steps (extract lines, then parse) mirroring the
  original structure.
- set +e around the jq call so failures reach the $? check instead of
  aborting under set -e.
- The "no text content" branch remains removed (that was the original bug —
  all-tool-use turns now correctly yield empty text and the loop continues).
2026-03-04 00:25:42 +00:00
sfishman
8644df9ad5
fix(ralph-loop): isolate loop state to the session that started it
The state file lives at .claude/ralph-loop.local.md — project-scoped,
not session-scoped. The plugin's Stop hook fires in every Claude Code
session open in that project directory. So if session A starts a loop,
session B's Stop events also find the state file and block, feeding A's
prompt into B and consuming A's iteration budget.

This was masked by the transcript-parsing bug fixed in the previous
commit: that bug deleted the state file on the first Stop in any
session, so neither session looped. Fixing it exposed the leak.

Fix: setup writes CLAUDE_CODE_SESSION_ID into the frontmatter; the hook
compares against .session_id from its stdin JSON and exits silently on
mismatch. State files without session_id (written by old setup scripts)
fall through to preserve existing behavior.
2026-03-02 22:52:00 +00:00
sfishman
adfc379663
fix(ralph-loop): stop hook fails when last assistant block is tool_use
Claude Code writes each assistant content block (text/tool_use/thinking)
as its own JSONL line. The hook's `grep role:assistant | tail -1` would
grab whichever block happened to be last — often tool_use — then jq's
text filter returned empty string, triggering the 'no text content' path
which deletes the state file and exits without blocking.

Net effect: the loop silently never fires. In one observed session, 62%
of assistant lines were tool_use-only; the hook deleted state on the
very first Stop event every time.

Fix: slurp all assistant lines with jq -rs, flatten to text blocks only,
take the last. Empty result is now non-fatal — no text means no <promise>
tag, so the loop continues. Also absorbs jq parse errors (control chars
in text) via || fallback instead of aborting under set -e.
2026-03-02 20:39:50 +00:00
Kenshiro Nakagawa
e05013d229
chore(skill-creator): update to latest skill-creator 2026-02-24 17:14:53 -08:00
Claude
aecd4c852f
Add Apache 2.0 LICENSE files to all internal plugins
- Added Apache 2.0 license to the root of each plugin directory
- Ensures compliance with open-source licensing requirements
2026-02-20 01:06:49 +00:00
Kenshiro Nakagawa
30975e61e3
Add skill-creator plugin 2026-02-17 17:07:09 -08:00
Dickson Tsai
236752ad9a
Merge pull request #339 from anthropics/dickson/kebab-case-skill-names
Use lower-kebab-case for SKILL.md names in hookify and plugin-dev
2026-02-05 13:57:52 -08:00
Dickson Tsai
2438937b32
Use lower-kebab-case for SKILL.md names in hookify and plugin-dev
Skills and commands are now merged, so SKILL.md name fields surface
in the UI as slash commands. Upper Space names like 'Hook Development'
become '/Hook Development', which doesn't work since user-invoked
commands don't support spaces.

Rename all affected SKILL.md name fields to lower-kebab-case:
- hookify: Writing Hookify Rules -> writing-hookify-rules
- plugin-dev: Agent Development -> agent-development
- plugin-dev: Command Development -> command-development
- plugin-dev: Hook Development -> hook-development
- plugin-dev: MCP Integration -> mcp-integration
- plugin-dev: Plugin Settings -> plugin-settings
- plugin-dev: Plugin Structure -> plugin-structure
- plugin-dev: Skill Development -> skill-development

Also update references in plugin-dev/README.md.
2026-02-05 09:21:57 -08:00
Dickson Tsai
82d041227f
Fix YAML frontmatter parsing errors in agent description fields
Use YAML block scalars (|) for multi-line description fields that contain
<example> blocks with colons and special characters. Without block scalars,
the YAML parser fails because it interprets lines like 'user:' and
'assistant:' as new key-value pairs.

Affected files:
- plugins/plugin-dev/agents/agent-creator.md
- plugins/plugin-dev/agents/skill-reviewer.md
- plugins/plugin-dev/agents/plugin-validator.md
- plugins/pr-review-toolkit/agents/code-simplifier.md
2026-02-04 15:59:39 -08:00
Thariq Shihipar
4e459fbe74
Rename artifact plugin to playground 2026-01-29 15:24:01 -08:00
Thariq Shihipar
14aa27503d
Add instruction to open artifact in browser after creation 2026-01-29 12:42:21 -08:00
Thariq Shihipar
54402a7c90
Replace writing-tool template with document-critique template
- Add document-critique.md template for review artifacts with
  approve/reject/comment workflow
- Remove writing-tool.md template
- Update SKILL.md to reference new template
2026-01-29 01:16:26 -08:00
Thariq Shihipar
09e3d78e31
Add code-map template to artifact skill 2026-01-29 01:01:59 -08:00
Thariq Shihipar
b7d10513cd
Add diff-review template to artifact skill 2026-01-29 01:00:36 -08:00