Compare commits

..

1 Commits

Author SHA1 Message Date
Claude
13530b1747 docs: Add skills frontmatter field documentation
Document the `skills` frontmatter field added in v2.0.43 for declaring
skills to auto-load for subagents and commands. This helps ensure skills
persist across context compaction by explicitly declaring required skills.

- Add skills field to agent-development SKILL.md frontmatter fields section
- Add skills field to command-development frontmatter-reference.md
- Update examples, validation checklists, and best practices
2025-12-11 10:39:03 +00:00
9 changed files with 94 additions and 277 deletions

View File

@@ -102,17 +102,6 @@
"source": "./plugins/learning-output-style",
"category": "learning"
},
{
"name": "mcp-context-warning",
"description": "Warns users when MCP servers are consuming significant context (>20k tokens), helping prevent unexpected context exhaustion",
"version": "1.0.0",
"author": {
"name": "Anthropic",
"email": "support@anthropic.com"
},
"source": "./plugins/mcp-context-warning",
"category": "productivity"
},
{
"name": "plugin-dev",
"description": "Comprehensive toolkit for developing Claude Code plugins. Includes 7 expert skills covering hooks, MCP integration, commands, agents, and best practices. AI-assisted plugin creation and validation.",

View File

@@ -1,58 +1,5 @@
# Changelog
## 2.0.71
- Added /config toggle to enable/disable prompt suggestions
- Added `/settings` as an alias for the `/config` command
- Fixed @ file reference suggestions incorrectly triggering when cursor is in the middle of a path
- Fixed MCP servers from `.mcp.json` not loading when using `--dangerously-skip-permissions`
- Fixed permission rules incorrectly rejecting valid bash commands containing shell glob patterns (e.g., `ls *.txt`, `for f in *.png`)
- Bedrock: Environment variable `ANTHROPIC_BEDROCK_BASE_URL` is now respected for token counting and inference profile listing
- New syntax highlighting engine for native build
## 2.0.70
- Added Enter key to accept and submit prompt suggestions immediately (tab still accepts for editing)
- Added wildcard syntax `mcp__server__*` for MCP tool permissions to allow or deny all tools from a server
- Added auto-update toggle for plugin marketplaces, allowing per-marketplace control over automatic updates
- Added `plan_mode_required` spawn parameter for teammates to require plan approval before implementing changes
- Added `current_usage` field to status line input, enabling accurate context window percentage calculations
- Fixed input being cleared when processing queued commands while the user was typing
- Fixed prompt suggestions replacing typed input when pressing Tab
- Fixed diff view not updating when terminal is resized
- Improved memory usage by 3x for large conversations
- Improved resolution of stats screenshots copied to clipboard (Ctrl+S) for crisper images
- Removed # shortcut for quick memory entry (tell Claude to edit your CLAUDE.md instead)
- Fix thinking mode toggle in /config not persisting correctly
- Improve UI for file creation permission dialog
## 2.0.69
- Minor bugfixes
## 2.0.68
- Fixed IME (Input Method Editor) support for languages like Chinese, Japanese, and Korean by correctly positioning the composition window at the cursor
- Fixed a bug where disallowed MCP tools were visible to the model
- Fixed an issue where steering messages could be lost while a subagent is working
- Fixed Option+Arrow word navigation treating entire CJK (Chinese, Japanese, Korean) text sequences as a single word instead of navigating by word boundaries
- Improved plan mode exit UX: show simplified yes/no dialog when exiting with empty or missing plan instead of throwing an error
- Add support for enterprise managed settings. Contact your Anthropic account team to enable this feature.
## 2.0.67
- Thinking mode is now enabled by default for Opus 4.5
- Thinking mode configuration has moved to /config
- Added search functionality to `/permissions` command with `/` keyboard shortcut for filtering rules by tool name
- Show reason why autoupdater is disabled in `/doctor`
- Fixed false "Another process is currently updating Claude" error when running `claude update` while another instance is already on the latest version
- Fixed MCP servers from `.mcp.json` being stuck in pending state when running in non-interactive mode (`-p` flag or piped input)
- Fixed scroll position resetting after deleting a permission rule in `/permissions`
- Fixed word deletion (opt+delete) and word navigation (opt+arrow) not working correctly with non-Latin text such as Cyrillic, Greek, Arabic, Hebrew, Thai, and Chinese
- Fixed `claude install --force` not bypassing stale lock files
- Fixed consecutive @~/ file references in CLAUDE.md being incorrectly parsed due to markdown strikethrough interference
- Windows: Fixed plugin MCP servers failing due to colons in log directory paths
## 2.0.65
- Added ability to switch models while writing a prompt using alt+p (linux, windows), option+p (macos).
@@ -76,7 +23,6 @@
- VSCode: Added copy-to-clipboard button on code blocks and bash tool inputs
- VSCode: Fixed extension not working on Windows ARM64 by falling back to x64 binary via emulation
- Bedrock: Improve efficiency of token counting
- Bedrock: Add support for `aws login` AWS Management Console credentials
- Unshipped AgentOutputTool and BashOutputTool, in favor of a new unified TaskOutputTool
## 2.0.62

View File

@@ -22,29 +22,23 @@ Performs automated code review on a pull request using multiple specialized agen
- **Agent #4**: Analyze git blame/history for context-based issues
5. Scores each issue 0-100 for confidence level
6. Filters out issues below 80 confidence threshold
7. Outputs review (to terminal by default, or as PR comment with `--comment` flag)
7. Posts review comment with high-confidence issues only
**Usage:**
```bash
/code-review [--comment]
/code-review
```
**Options:**
- `--comment`: Post the review as a comment on the pull request (default: outputs to terminal only)
**Example workflow:**
```bash
# On a PR branch, run locally (outputs to terminal):
# On a PR branch, run:
/code-review
# Post review as PR comment:
/code-review --comment
# Claude will:
# - Launch 4 review agents in parallel
# - Score each issue for confidence
# - Output issues ≥80 confidence (to terminal or PR depending on flag)
# - Skip if no high-confidence issues found
# - Post comment with issues ≥80 confidence
# - Skip posting if no high-confidence issues found
```
**Features:**
@@ -120,23 +114,17 @@ This plugin is included in the Claude Code repository. The command is automatica
### Standard PR review workflow:
```bash
# Create PR with changes
# Run local review (outputs to terminal)
/code-review
# Review the automated feedback
# Make any necessary fixes
# Optionally post as PR comment
/code-review --comment
# Merge when ready
```
### As part of CI/CD:
```bash
# Trigger on PR creation or update
# Use --comment flag to post review comments
/code-review --comment
# Automatically posts review comments
# Skip if review already exists
```

View File

@@ -52,9 +52,7 @@ Note: Still review Claude generated PR's.
6. Filter out any issues that were not validated in step 5. This step will give us our list of high signal issues for our review.
7. Finally, output the review.
- If the `--comment` argument is provided, post the review as a comment on the pull request using `gh pr comment`
- Otherwise (default), output the review directly to the terminal for local viewing
7. Finally, comment on the pull request.
When writing your comment, follow these guidelines:
a. Keep your output brief
b. Avoid emojis
@@ -95,6 +93,11 @@ Found 3 issues:
<link to file and line with full sha1 + line range for context>
🤖 Generated with [Claude Code](https://claude.ai/code)
<sub>- If this code review was useful, please react with 👍. Otherwise, react with 👎.</sub>
---
- Or, if you found no issues:
@@ -105,6 +108,8 @@ Found 3 issues:
No issues found. Checked for bugs and CLAUDE.md compliance.
🤖 Generated with [Claude Code](https://claude.ai/code)
---
- When linking to code, follow the following format precisely, otherwise the Markdown preview won't render correctly: https://github.com/anthropics/claude-code/blob/c21d3c10bc8e898b7ac1a2d745bdc9bc4e423afe/package.json#L10-L15

View File

@@ -1,9 +0,0 @@
{
"name": "mcp-context-warning",
"version": "1.0.0",
"description": "Warns users when MCP servers are consuming significant context (>20k tokens), helping prevent unexpected context exhaustion",
"author": {
"name": "Anthropic",
"email": "support@anthropic.com"
}
}

View File

@@ -1,164 +0,0 @@
#!/usr/bin/env python3
"""
MCP Context Warning Hook for Claude Code
This hook runs at session start and warns users when their MCP servers
are consuming significant context (>20k tokens). This helps users understand
why they might be burning through context quickly.
"""
import json
import os
import sys
from pathlib import Path
# Threshold in tokens for showing a warning
TOKEN_WARNING_THRESHOLD = 20000
# Estimated tokens per MCP tool (based on real-world data:
# Asana: ~836/tool, Gmail: ~833/tool, Google Calendar: ~1867/tool, Google Drive: ~1260/tool)
# Using 1000 as a conservative average
TOKENS_PER_TOOL_ESTIMATE = 1000
# Base overhead per MCP server (connection info, auth, etc.)
BASE_TOKENS_PER_SERVER = 500
def find_mcp_configs(cwd: str) -> list[tuple[str, dict]]:
"""
Find all MCP configuration files that might be loaded.
Returns list of (path, config) tuples.
"""
configs = []
# Check project-level .mcp.json
project_mcp = Path(cwd) / ".mcp.json"
if project_mcp.exists():
try:
with open(project_mcp) as f:
configs.append((str(project_mcp), json.load(f)))
except (json.JSONDecodeError, IOError):
pass
# Check user-level MCP config (~/.claude/.mcp.json)
user_mcp = Path.home() / ".claude" / ".mcp.json"
if user_mcp.exists():
try:
with open(user_mcp) as f:
configs.append((str(user_mcp), json.load(f)))
except (json.JSONDecodeError, IOError):
pass
return configs
def count_servers_and_estimate_tools(configs: list[tuple[str, dict]]) -> tuple[dict, int]:
"""
Count MCP servers and estimate their tool counts.
Returns (server_info dict, total_estimated_tokens).
"""
server_info = {}
for path, config in configs:
# MCP config format: {"mcpServers": {"server-name": {...}}}
mcp_servers = config.get("mcpServers", {})
for server_name, server_config in mcp_servers.items():
if server_name in server_info:
continue # Skip duplicates
# Try to get tool count from config if available
# Otherwise use a default estimate
tool_count = server_config.get("toolCount", 10) # Default 10 tools
server_info[server_name] = {
"source": path,
"estimated_tools": tool_count,
}
# Calculate total estimated tokens
total_tokens = 0
for server_name, info in server_info.items():
server_tokens = BASE_TOKENS_PER_SERVER + (info["estimated_tools"] * TOKENS_PER_TOOL_ESTIMATE)
info["estimated_tokens"] = server_tokens
total_tokens += server_tokens
return server_info, total_tokens
def format_warning_message(server_info: dict, total_tokens: int) -> str:
"""Format a warning message about MCP context usage."""
# Build server breakdown table
lines = [
f"Your MCP servers are using an estimated ~{total_tokens:,} tokens of context.",
"",
"Server breakdown:",
]
# Sort servers by token usage (highest first)
sorted_servers = sorted(
server_info.items(),
key=lambda x: x[1]["estimated_tokens"],
reverse=True
)
for server_name, info in sorted_servers:
tokens = info["estimated_tokens"]
tools = info["estimated_tools"]
lines.append(f" - {server_name}: ~{tokens:,} tokens ({tools} tools)")
lines.extend([
"",
"Consider disabling MCP servers you're not actively using to conserve context.",
"You can manage MCP servers with `/mcp disable <server-name>` or by editing .mcp.json.",
])
return "\n".join(lines)
def main():
"""Main hook function."""
# Read input from stdin
try:
raw_input = sys.stdin.read()
input_data = json.loads(raw_input) if raw_input.strip() else {}
except json.JSONDecodeError:
# If we can't parse input, exit silently
sys.exit(0)
# Get current working directory from hook input or environment
cwd = input_data.get("cwd", os.environ.get("CLAUDE_PROJECT_DIR", os.getcwd()))
# Find MCP configurations
configs = find_mcp_configs(cwd)
if not configs:
# No MCP configs found, nothing to warn about
sys.exit(0)
# Count servers and estimate tokens
server_info, total_tokens = count_servers_and_estimate_tools(configs)
if not server_info:
# No servers configured
sys.exit(0)
# Check if we're over the warning threshold
if total_tokens >= TOKEN_WARNING_THRESHOLD:
warning_message = format_warning_message(server_info, total_tokens)
# Output JSON with systemMessage for Claude to see
output = {
"continue": True,
"systemMessage": warning_message
}
print(json.dumps(output))
sys.exit(0)
if __name__ == "__main__":
main()

View File

@@ -1,17 +0,0 @@
{
"description": "Warns users when MCP servers consume significant context (>20k tokens)",
"hooks": {
"SessionStart": [
{
"matcher": "*",
"hooks": [
{
"type": "command",
"command": "python3 ${CLAUDE_PLUGIN_ROOT}/hooks/check_mcp_context.py",
"timeout": 10
}
]
}
]
}
}

View File

@@ -42,6 +42,7 @@ assistant: "[How assistant should respond and use this agent]"
model: inherit
color: blue
tools: ["Read", "Write", "Grep"]
skills: skill-name-1, skill-name-2
---
You are [agent role description]...
@@ -159,6 +160,35 @@ tools: ["Read", "Write", "Grep", "Bash"]
- Testing: `["Read", "Bash", "Grep"]`
- Full access: Omit field or use `["*"]`
### skills (optional)
Declare skills to auto-load when this agent is invoked.
**Format:** Comma-separated list of skill names
```yaml
skills: database-migration, postgres-ops
```
**Purpose:** Ensures specific skills are always available to the agent, regardless of context matching. This is especially useful for:
- Skills that should persist across context compaction
- Specialized agents that always need certain domain knowledge
- Ensuring consistent agent behavior with required skills
**Example:**
```yaml
---
name: db-admin
description: Use this agent for database administration tasks...
model: inherit
color: cyan
tools: ["Bash", "Read", "Write"]
skills: database-migration, sql-optimization
---
```
**Best practice:** Only declare skills essential to the agent's core function. Let context-triggered skills load naturally for optional capabilities.
## System Prompt Design
The markdown body becomes the agent's system prompt. Write in second person, addressing the agent directly.
@@ -355,6 +385,7 @@ Output: [What to provide]
| model | Yes | inherit/sonnet/opus/haiku | inherit |
| color | Yes | Color name | blue |
| tools | No | Array of tool names | ["Read", "Grep"] |
| skills | No | Comma-separated names | skill-a, skill-b |
### Best Practices

View File

@@ -12,6 +12,7 @@ description: Brief description
allowed-tools: Read, Write
model: sonnet
argument-hint: [arg1] [arg2]
skills: skill-a, skill-b
---
Command prompt content here...
@@ -321,6 +322,51 @@ disable-model-invocation: true
- Document why in command comments
- Consider if command should exist if always manual
### skills
**Type:** String (comma-separated list)
**Required:** No
**Default:** None
**Purpose:** Declare skills to auto-load when this command executes. Ensures specific skills are always available regardless of context matching.
**Examples:**
```yaml
skills: database-migration, sql-optimization
```
**When to use:**
1. **Commands requiring domain knowledge:** Ensure relevant skills load
```yaml
---
description: Run database migration
skills: database-migration, postgres-ops
---
```
2. **Skills that should persist across compaction:** Force-load skills that might otherwise be lost
```yaml
---
description: Complex multi-step workflow
skills: workflow-skill, validation-skill
---
```
3. **Specialized commands:** Commands that always need specific expertise
```yaml
---
description: Generate API documentation
skills: api-documentation, openapi-spec
---
```
**Best practices:**
- Only declare skills essential to the command's function
- Use skill names exactly as defined in SKILL.md frontmatter
- Keep the list focused (2-4 skills max)
- Let context-triggered skills load naturally for optional capabilities
## Complete Examples
### Minimal Command
@@ -451,6 +497,7 @@ Before committing command:
- [ ] model is valid value if specified
- [ ] argument-hint matches positional arguments
- [ ] disable-model-invocation used appropriately
- [ ] skills references valid skill names if specified
## Best Practices Summary
@@ -460,4 +507,5 @@ Before committing command:
4. **Choose right model:** Use haiku for speed, opus for complexity
5. **Manual-only sparingly:** Only use disable-model-invocation when necessary
6. **Clear descriptions:** Make commands discoverable in `/help`
7. **Test thoroughly:** Verify frontmatter works as expected
7. **Declare essential skills:** Use skills field for domain knowledge that must persist
8. **Test thoroughly:** Verify frontmatter works as expected