claude-plugins-official

Awesome List

anthropics/claude-plugins-official

Official Anthropic-managed directory of high quality Claude Code plugins.

Overview

A curated marketplace of high-quality plugins for Claude Code, including internal and third-party plugins. Each plugin can add MCP servers, commands, agents, or skills to extend Claude Code's capabilities. Plugins are installed via the Claude Code plugin system.

README Preview

# Claude Code Plugins Directory\n\nA curated directory of high-quality plugins for Claude Code.\n\n> **⚠️ Important:** Make sure you trust a plugin before installing, updating, or using it. Anthropic does not control what MCP servers, files, or other software are included in plugins and cannot verify that they will work as intended or that they won't change. See each plugin's homepage for more information.\n\n## Structure\n\n- **`/plugins`** - Internal plugins developed and maintained by Anthropic\n- **`/external_plugins`** - Third-party plugins from partners and the community\n\n## Installation\n\nPlugins can be installed directly from this marketplace via Claude Code's plugin system.\n\nTo install, run `/plugin install {plugin-name}@claude-plugins-official`\n\nor browse for the plugin in `/plugin > Discover`\n\n## Contributing\n\n### Internal Plugins\n\nInternal plugins are developed by Anthropic team members. See `/plugins/example-plugin` for a reference implementation.\n\n### External Plugins\n\nThird-party partners can submit plugins for inclusion in the marketplace. External plugins must meet quality and security standards for approval. To submit a new plugin, use the [plugin directory submission form](https://clau.de/plugin-directory-submission).\n\n## Plugin Structure\n\nEach plugin follows a standard structure:\n\n```\nplugin-name/\n├── .claude-plugin/\n│   └── plugin.json      # Plugin metadata (required)\n├── .mcp.json            # MCP server configuration (optional)\n├── commands/            # Slash commands (optional)\n├── agents/              # Agent definitions (optional)\n├── skills/              # Skill definitions (optional)\n└── README.md            # Documentation\n```\n\n## Skill-bundle plugins\n\nWhen a plugin's source repository ships skills (`SKILL.md` files) without a `.claude-plugin/plugin.json` manifest, the marketplace entry can declare the skills directly using `strict: false` and an explicit `skills` array.\n\n```json\n{\n  "name": "exa

FAQ (5)

Troubleshooting
How to stop the security-guidance plugin's python_subprocess_shell rule from flagging code in Markdown documentation?

This is a known false positive in security-guidance v2.0.0. The rule currently lacks a path filter to exclude documentation files. As a temporary workaround, you can either ignore these warnings in .md/.mdx/.rst files or manually edit hooks/patterns.py to add path_filter: lambda p: not p.endswith(_DOC_EXTS) to the rule. A proper fix is expected in a future update; track issue #2045 for status.

GitHub Issue #2045
Troubleshooting
How to fix 'output_format deprecated' HTTP 400 error in the security-guidance plugin?

Update plugins/security-guidance/hooks/llm.py to nest the schema under output_config.format instead of the deprecated top-level output_format. Specifically, replace "output_format": {"type": "json_schema", "schema": output_schema} with "output_config": {"format": {"type": "json_schema", "schema": output_schema}}. If you're on the adaptive-thinking branch, merge effort into the existing dict: change payload["output_config"] = {"effort": "high"} to payload["output_config"]["effort"] = "high". The patch is in issue #2097. This resolves the 400 error and prevents guardrail failing open.

GitHub Issue #2098
Troubleshooting
Why does Claude Code show 'Permission to use Edit has been denied' without any reason?

The security-guidance plugin hook is emitting a denial via sys.exit(2) without a JSON payload, causing a generic denial message. Upgrade the plugin to a version that prints a proper JSON denial with permissionDecisionReason. If an immediate upgrade isn't possible, manually patch the hook script (e.g., security_reminder_hook.py) to replace bare sys.exit(2) with:

import json
print(json.dumps({
    "hookSpecificOutput": {
        "hookEventName": "PreToolUse",
        "permissionDecision": "deny",
        "permissionDecisionReason": f"{rule_name}: {reminder[:120]}"
    }
}))
sys.exit(0)

This provides context (matched pattern, risk category) in the UI. Track the upstream fix to remove the need for local patches.

GitHub Issue #1783
Troubleshooting
Why does Claude Code's security-guidance hook show 'hook json output validation failed' error?

The hook outputs plain text instead of JSON. Edit hooks/security_reminder_hook.py line 272: replace print(reminder, file=sys.stderr); sys.exit(2) with print(json.dumps({"decision": "block", "reason": reminder})); sys.exit(2). This outputs valid JSON, resolving the validation error.

GitHub Issue #1375
Troubleshooting
Why does Microsoft Store Python fail with "can't open file ... [Errno 2] No such file or directory" even though the file exists on Windows, and how do I fix it?

Root cause: a Microsoft Store/MSIX Python (e.g. PythonSoftwareFoundation.Python.3.10, resolved from PATH as python3.10/python3 from WindowsApps) runs inside a Windows AppContainer sandbox. It passes python -c probes and reports a real version, but is denied read access to another app's data folder (e.g. %APPDATA%\Roaming\Claude\...), so it reports Errno 2 for files that demonstrably exist. sg-python.sh commits to this interpreter in Pass 1 and never falls through to the working python.org install, so every hook (UserPromptSubmit, PostToolUse, Stop) fails — and Stop with asyncRewake: true re-triggers the error on every turn.

Fix option A — remove the sandboxed interpreter from PATH: uninstall the Store Python (Settings > Apps) or disable it under Settings > Apps > Advanced app settings > App execution aliases, then install Python from python.org and verify with where python / where python3 that the real interpreter resolves first.

Fix option B — patch sg-python.sh so the probe verifies real script execution, not just -c. Write a throwaway script into the SAME directory as the target script (NOT /tmp — that is inside the sandbox's allowed set and won't reproduce the failure):

can_run_script() {
    local target_dir="$1"; shift
    target_dir="$(dirname -- "$target_dir")"
    local tmp="$target_dir/.sg-python-probe-$$.py"
    printf 'pass\n' > "$tmp" 2>/dev/null || return 1
    if command -v cygpath >/dev/null 2>&1; then
        "$@" "$(cygpath -w "$tmp")" >/dev/null 2>&1
    else
        "$@" "$tmp" >/dev/null 2>&1
    fi
    local rc=$?
    rm -f "$tmp" 2>/dev/null
    return $rc
}

Then gate each exec site in all three passes on is_sdk_compatible "$v" && can_run_script "$1" "$cmd" ($1 = the real target script path). The shim then skips the sandboxed Store python3.10/python3 and falls through to the python.org python (e.g. C:\PythonXXX\python.exe).

Verify with: bash sg-python.sh "$PLUGIN_ROOT/hooks/security_reminder_hook.py" — it should succeed instead of failing with Errno 2.

GitHub Issue #5904