plugin-settings by anthropics/claude-plugins-official
npx skills add https://github.com/anthropics/claude-plugins-official --skill plugin-settings插件可以在项目目录的 .claude/plugin-name.local.md 文件中存储用户可配置的设置和状态。此模式使用 YAML frontmatter 进行结构化配置,并使用 markdown 内容存储提示或附加上下文。
主要特点:
.claude/plugin-name.local.md.gitignore 中)---
enabled: true
setting1: value1
setting2: value2
numeric_setting: 42
list_setting: ["item1", "item2"]
---
# 附加上下文
此 markdown 正文可以包含:
- 任务描述
- 附加说明
- 反馈给 Claude 的提示
- 文档或笔记
.claude/my-plugin.local.md:
---
enabled: true
strict_mode: false
max_retries: 3
notification_level: info
coordinator_session: team-leader
---
# 插件配置
此插件已配置为标准验证模式。
如有问题请联系 @team-lead。
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
模式:检查是否存在并解析 frontmatter
#!/bin/bash
set -euo pipefail
# 定义状态文件路径
STATE_FILE=".claude/my-plugin.local.md"
# 如果文件不存在则快速退出
if [[ ! -f "$STATE_FILE" ]]; then
exit 0 # 插件未配置,跳过
fi
# 解析 YAML frontmatter(在 --- 标记之间)
FRONTMATTER=$(sed -n '/^---$/,/^---$/{ /^---$/d; p; }' "$STATE_FILE")
# 提取单个字段
ENABLED=$(echo "$FRONTMATTER" | grep '^enabled:' | sed 's/enabled: *//' | sed 's/^"\(.*\)"$/\1/')
STRICT_MODE=$(echo "$FRONTMATTER" | grep '^strict_mode:' | sed 's/strict_mode: *//' | sed 's/^"\(.*\)"$/\1/')
# 检查是否启用
if [[ "$ENABLED" != "true" ]]; then
exit 0 # 已禁用
fi
# 在钩子逻辑中使用配置
if [[ "$STRICT_MODE" == "true" ]]; then
# 应用严格验证
# ...
fi
完整工作示例请参见 examples/read-settings-hook.sh。
命令可以读取设置文件以自定义行为:
---
description: 使用插件处理数据
allowed-tools: ["Read", "Bash"]
---
# 处理命令
步骤:
1. 检查 `.claude/my-plugin.local.md` 处是否存在设置
2. 使用 Read 工具读取配置
3. 解析 YAML frontmatter 以提取设置
4. 将设置应用于处理逻辑
5. 按配置的行为执行
智能体可以在其指令中引用设置:
---
name: configured-agent
description: 适应项目设置的智能体
---
检查 `.claude/my-plugin.local.md` 处的插件设置。
如果存在,解析 YAML frontmatter 并根据以下内容调整行为:
- enabled:插件是否激活
- mode:处理模式(严格、标准、宽松)
- 其他配置字段
# 提取 --- 标记之间的所有内容
FRONTMATTER=$(sed -n '/^---$/,/^---$/{ /^---$/d; p; }' "$FILE")
字符串字段:
VALUE=$(echo "$FRONTMATTER" | grep '^field_name:' | sed 's/field_name: *//' | sed 's/^"\(.*\)"$/\1/')
布尔字段:
ENABLED=$(echo "$FRONTMATTER" | grep '^enabled:' | sed 's/enabled: *//')
# 比较:if [[ "$ENABLED" == "true" ]]; then
数字字段:
MAX=$(echo "$FRONTMATTER" | grep '^max_value:' | sed 's/max_value: *//')
# 使用:if [[ $MAX -gt 100 ]]; then
提取第二个 --- 之后的内容:
# 获取关闭 --- 之后的所有内容
BODY=$(awk '/^---$/{i++; next} i>=2' "$FILE")
使用设置文件控制钩子激活:
#!/bin/bash
STATE_FILE=".claude/security-scan.local.md"
# 如果未配置则快速退出
if [[ ! -f "$STATE_FILE" ]]; then
exit 0
fi
# 读取启用标志
FRONTMATTER=$(sed -n '/^---$/,/^---$/{ /^---$/d; p; }' "$STATE_FILE")
ENABLED=$(echo "$FRONTMATTER" | grep '^enabled:' | sed 's/enabled: *//')
if [[ "$ENABLED" != "true" ]]; then
exit 0 # 已禁用
fi
# 运行钩子逻辑
# ...
使用场景: 无需编辑 hooks.json 即可启用/禁用钩子(需要重启)。
存储智能体特定的状态和配置:
.claude/multi-agent-swarm.local.md:
---
agent_name: auth-agent
task_number: 3.5
pr_number: 1234
coordinator_session: team-leader
enabled: true
dependencies: ["Task 3.4"]
---
# 任务分配
为 API 实现 JWT 身份验证。
**成功标准:**
- 创建身份验证端点
- 测试通过
- PR 创建且 CI 通过
从钩子读取以协调智能体:
AGENT_NAME=$(echo "$FRONTMATTER" | grep '^agent_name:' | sed 's/agent_name: *//')
COORDINATOR=$(echo "$FRONTMATTER" | grep '^coordinator_session:' | sed 's/coordinator_session: *//')
# 向协调者发送通知
tmux send-keys -t "$COORDINATOR" "Agent $AGENT_NAME completed task" Enter
.claude/my-plugin.local.md:
---
validation_level: strict
max_file_size: 1000000
allowed_extensions: [".js", ".ts", ".tsx"]
enable_logging: true
---
# 验证配置
此项目已启用严格模式。
所有写入都根据安全策略进行验证。
在钩子或命令中使用:
LEVEL=$(echo "$FRONTMATTER" | grep '^validation_level:' | sed 's/validation_level: *//')
case "$LEVEL" in
strict)
# 应用严格验证
;;
standard)
# 应用标准验证
;;
lenient)
# 应用宽松验证
;;
esac
命令可以创建设置文件:
# 设置命令
步骤:
1. 询问用户配置偏好
2. 创建带有 YAML frontmatter 的 `.claude/my-plugin.local.md`
3. 根据用户输入设置适当的值
4. 通知用户设置已保存
5. 提醒用户重启 Claude Code 以使钩子识别更改
在插件 README 中提供模板:
## 配置
在您的项目中创建 `.claude/my-plugin.local.md`:
\`\`\`markdown
---
enabled: true
mode: standard
max_retries: 3
---
# 插件配置
您的设置已生效。
\`\`\`
创建或编辑后,重启 Claude Code 以使更改生效。
✅ 应该:
.claude/plugin-name.local.md 格式.local.md 后缀❌ 不应该:
.claude/).local 的 .md(可能会被提交)始终添加到 .gitignore:
.claude/*.local.md
.claude/*.local.json
在插件 README 中记录这一点。
当设置文件不存在时提供合理的默认值:
if [[ ! -f "$STATE_FILE" ]]; then
# 使用默认值
ENABLED=true
MODE=standard
else
# 从文件读取
# ...
fi
验证设置值:
MAX=$(echo "$FRONTMATTER" | grep '^max_value:' | sed 's/max_value: *//')
# 验证数字范围
if ! [[ "$MAX" =~ ^[0-9]+$ ]] || [[ $MAX -lt 1 ]] || [[ $MAX -gt 100 ]]; then
echo "⚠️ 设置中的 max_value 无效(必须为 1-100)" >&2
MAX=10 # 使用默认值
fi
重要: 设置更改需要重启 Claude Code。
在您的 README 中记录:
## 更改设置
编辑 `.claude/my-plugin.local.md` 后:
1. 保存文件
2. 退出 Claude Code
3. 重启:`claude` 或 `cc`
4. 新设置将被加载
钩子不能在会话内热交换。
从用户输入写入设置文件时:
# 转义用户输入中的引号
SAFE_VALUE=$(echo "$USER_INPUT" | sed 's/"/\\"/g')
# 写入文件
cat > "$STATE_FILE" <<EOF
---
user_setting: "$SAFE_VALUE"
---
EOF
如果设置包含文件路径:
FILE_PATH=$(echo "$FRONTMATTER" | grep '^data_file:' | sed 's/data_file: *//')
# 检查路径遍历
if [[ "$FILE_PATH" == *".."* ]]; then
echo "⚠️ 设置中的路径无效(路径遍历)" >&2
exit 2
fi
设置文件应该:
chmod 600).claude/multi-agent-swarm.local.md:
---
agent_name: auth-implementation
task_number: 3.5
pr_number: 1234
coordinator_session: team-leader
enabled: true
dependencies: ["Task 3.4"]
additional_instructions: 使用 JWT 令牌,而非会话
---
# 任务:实现身份验证
为 REST API 构建基于 JWT 的身份验证。
与 auth-agent 协调共享类型。
钩子用法(agent-stop-notification.sh):
enabled: true/false 快速激活/停用.claude/ralph-loop.local.md:
---
iteration: 1
max_iterations: 10
completion_promise: "所有测试通过且构建成功"
---
修复项目中的所有 linting 错误。
确保每次修复后测试通过。
钩子用法(stop-hook.sh):
project-root/
└── .claude/
└── plugin-name.local.md
# 提取 frontmatter
FRONTMATTER=$(sed -n '/^---$/,/^---$/{ /^---$/d; p; }' "$FILE")
# 读取字段
VALUE=$(echo "$FRONTMATTER" | grep '^field:' | sed 's/field: *//' | sed 's/^"\(.*\)"$/\1/')
# 提取正文(第二个 --- 之后)
BODY=$(awk '/^---$/{i++; next} i>=2' "$FILE")
if [[ ! -f ".claude/my-plugin.local.md" ]]; then
exit 0 # 未配置
fi
详细实现模式:
references/parsing-techniques.md - 解析 YAML frontmatter 和 markdown 正文的完整指南references/real-world-examples.md - 深入探讨 multi-agent-swarm 和 ralph-loop 的实现examples/ 中的工作示例:
read-settings-hook.sh - 读取并使用设置的钩子create-settings-command.md - 创建设置文件的命令example-settings.md - 模板设置文件scripts/ 中的开发工具:
validate-settings.sh - 验证设置文件结构parse-frontmatter.sh - 提取 frontmatter 字段为插件添加设置:
.claude/*.local.md 添加 gitignore 条目专注于保持设置简单,并在设置文件不存在时提供良好的默认值。
每周安装次数
301
仓库
GitHub 星标
9.6K
首次出现
2026年2月5日
安全审计
安装于
opencode259
codex258
gemini-cli256
github-copilot249
claude-code241
amp240
Plugins can store user-configurable settings and state in .claude/plugin-name.local.md files within the project directory. This pattern uses YAML frontmatter for structured configuration and markdown content for prompts or additional context.
Key characteristics:
.claude/plugin-name.local.md in project root.gitignore)---
enabled: true
setting1: value1
setting2: value2
numeric_setting: 42
list_setting: ["item1", "item2"]
---
# Additional Context
This markdown body can contain:
- Task descriptions
- Additional instructions
- Prompts to feed back to Claude
- Documentation or notes
.claude/my-plugin.local.md:
---
enabled: true
strict_mode: false
max_retries: 3
notification_level: info
coordinator_session: team-leader
---
# Plugin Configuration
This plugin is configured for standard validation mode.
Contact @team-lead with questions.
Pattern: Check existence and parse frontmatter
#!/bin/bash
set -euo pipefail
# Define state file path
STATE_FILE=".claude/my-plugin.local.md"
# Quick exit if file doesn't exist
if [[ ! -f "$STATE_FILE" ]]; then
exit 0 # Plugin not configured, skip
fi
# Parse YAML frontmatter (between --- markers)
FRONTMATTER=$(sed -n '/^---$/,/^---$/{ /^---$/d; p; }' "$STATE_FILE")
# Extract individual fields
ENABLED=$(echo "$FRONTMATTER" | grep '^enabled:' | sed 's/enabled: *//' | sed 's/^"\(.*\)"$/\1/')
STRICT_MODE=$(echo "$FRONTMATTER" | grep '^strict_mode:' | sed 's/strict_mode: *//' | sed 's/^"\(.*\)"$/\1/')
# Check if enabled
if [[ "$ENABLED" != "true" ]]; then
exit 0 # Disabled
fi
# Use configuration in hook logic
if [[ "$STRICT_MODE" == "true" ]]; then
# Apply strict validation
# ...
fi
See examples/read-settings-hook.sh for complete working example.
Commands can read settings files to customize behavior:
---
description: Process data with plugin
allowed-tools: ["Read", "Bash"]
---
# Process Command
Steps:
1. Check if settings exist at `.claude/my-plugin.local.md`
2. Read configuration using Read tool
3. Parse YAML frontmatter to extract settings
4. Apply settings to processing logic
5. Execute with configured behavior
Agents can reference settings in their instructions:
---
name: configured-agent
description: Agent that adapts to project settings
---
Check for plugin settings at `.claude/my-plugin.local.md`.
If present, parse YAML frontmatter and adapt behavior according to:
- enabled: Whether plugin is active
- mode: Processing mode (strict, standard, lenient)
- Additional configuration fields
# Extract everything between --- markers
FRONTMATTER=$(sed -n '/^---$/,/^---$/{ /^---$/d; p; }' "$FILE")
String fields:
VALUE=$(echo "$FRONTMATTER" | grep '^field_name:' | sed 's/field_name: *//' | sed 's/^"\(.*\)"$/\1/')
Boolean fields:
ENABLED=$(echo "$FRONTMATTER" | grep '^enabled:' | sed 's/enabled: *//')
# Compare: if [[ "$ENABLED" == "true" ]]; then
Numeric fields:
MAX=$(echo "$FRONTMATTER" | grep '^max_value:' | sed 's/max_value: *//')
# Use: if [[ $MAX -gt 100 ]]; then
Extract content after second ---:
# Get everything after closing ---
BODY=$(awk '/^---$/{i++; next} i>=2' "$FILE")
Use settings file to control hook activation:
#!/bin/bash
STATE_FILE=".claude/security-scan.local.md"
# Quick exit if not configured
if [[ ! -f "$STATE_FILE" ]]; then
exit 0
fi
# Read enabled flag
FRONTMATTER=$(sed -n '/^---$/,/^---$/{ /^---$/d; p; }' "$STATE_FILE")
ENABLED=$(echo "$FRONTMATTER" | grep '^enabled:' | sed 's/enabled: *//')
if [[ "$ENABLED" != "true" ]]; then
exit 0 # Disabled
fi
# Run hook logic
# ...
Use case: Enable/disable hooks without editing hooks.json (requires restart).
Store agent-specific state and configuration:
.claude/multi-agent-swarm.local.md:
---
agent_name: auth-agent
task_number: 3.5
pr_number: 1234
coordinator_session: team-leader
enabled: true
dependencies: ["Task 3.4"]
---
# Task Assignment
Implement JWT authentication for the API.
**Success Criteria:**
- Authentication endpoints created
- Tests passing
- PR created and CI green
Read from hooks to coordinate agents:
AGENT_NAME=$(echo "$FRONTMATTER" | grep '^agent_name:' | sed 's/agent_name: *//')
COORDINATOR=$(echo "$FRONTMATTER" | grep '^coordinator_session:' | sed 's/coordinator_session: *//')
# Send notification to coordinator
tmux send-keys -t "$COORDINATOR" "Agent $AGENT_NAME completed task" Enter
.claude/my-plugin.local.md:
---
validation_level: strict
max_file_size: 1000000
allowed_extensions: [".js", ".ts", ".tsx"]
enable_logging: true
---
# Validation Configuration
Strict mode enabled for this project.
All writes validated against security policies.
Use in hooks or commands:
LEVEL=$(echo "$FRONTMATTER" | grep '^validation_level:' | sed 's/validation_level: *//')
case "$LEVEL" in
strict)
# Apply strict validation
;;
standard)
# Apply standard validation
;;
lenient)
# Apply lenient validation
;;
esac
Commands can create settings files:
# Setup Command
Steps:
1. Ask user for configuration preferences
2. Create `.claude/my-plugin.local.md` with YAML frontmatter
3. Set appropriate values based on user input
4. Inform user that settings are saved
5. Remind user to restart Claude Code for hooks to recognize changes
Provide template in plugin README:
## Configuration
Create `.claude/my-plugin.local.md` in your project:
\`\`\`markdown
---
enabled: true
mode: standard
max_retries: 3
---
# Plugin Configuration
Your settings are active.
\`\`\`
After creating or editing, restart Claude Code for changes to take effect.
✅ DO:
.claude/plugin-name.local.md format.local.md suffix for user-local files❌ DON'T:
.claude/).md without .local (might be committed)Always add to .gitignore:
.claude/*.local.md
.claude/*.local.json
Document this in plugin README.
Provide sensible defaults when settings file doesn't exist:
if [[ ! -f "$STATE_FILE" ]]; then
# Use defaults
ENABLED=true
MODE=standard
else
# Read from file
# ...
fi
Validate settings values:
MAX=$(echo "$FRONTMATTER" | grep '^max_value:' | sed 's/max_value: *//')
# Validate numeric range
if ! [[ "$MAX" =~ ^[0-9]+$ ]] || [[ $MAX -lt 1 ]] || [[ $MAX -gt 100 ]]; then
echo "⚠️ Invalid max_value in settings (must be 1-100)" >&2
MAX=10 # Use default
fi
Important: Settings changes require Claude Code restart.
Document in your README:
## Changing Settings
After editing `.claude/my-plugin.local.md`:
1. Save the file
2. Exit Claude Code
3. Restart: `claude` or `cc`
4. New settings will be loaded
Hooks cannot be hot-swapped within a session.
When writing settings files from user input:
# Escape quotes in user input
SAFE_VALUE=$(echo "$USER_INPUT" | sed 's/"/\\"/g')
# Write to file
cat > "$STATE_FILE" <<EOF
---
user_setting: "$SAFE_VALUE"
---
EOF
If settings contain file paths:
FILE_PATH=$(echo "$FRONTMATTER" | grep '^data_file:' | sed 's/data_file: *//')
# Check for path traversal
if [[ "$FILE_PATH" == *".."* ]]; then
echo "⚠️ Invalid path in settings (path traversal)" >&2
exit 2
fi
Settings files should be:
chmod 600).claude/multi-agent-swarm.local.md:
---
agent_name: auth-implementation
task_number: 3.5
pr_number: 1234
coordinator_session: team-leader
enabled: true
dependencies: ["Task 3.4"]
additional_instructions: Use JWT tokens, not sessions
---
# Task: Implement Authentication
Build JWT-based authentication for the REST API.
Coordinate with auth-agent on shared types.
Hook usage (agent-stop-notification.sh):
enabled: true/false.claude/ralph-loop.local.md:
---
iteration: 1
max_iterations: 10
completion_promise: "All tests passing and build successful"
---
Fix all the linting errors in the project.
Make sure tests pass after each fix.
Hook usage (stop-hook.sh):
project-root/
└── .claude/
└── plugin-name.local.md
# Extract frontmatter
FRONTMATTER=$(sed -n '/^---$/,/^---$/{ /^---$/d; p; }' "$FILE")
# Read field
VALUE=$(echo "$FRONTMATTER" | grep '^field:' | sed 's/field: *//' | sed 's/^"\(.*\)"$/\1/')
# Extract body (after second ---)
BODY=$(awk '/^---$/{i++; next} i>=2' "$FILE")
if [[ ! -f ".claude/my-plugin.local.md" ]]; then
exit 0 # Not configured
fi
For detailed implementation patterns:
references/parsing-techniques.md - Complete guide to parsing YAML frontmatter and markdown bodiesreferences/real-world-examples.md - Deep dive into multi-agent-swarm and ralph-loop implementationsWorking examples in examples/:
read-settings-hook.sh - Hook that reads and uses settingscreate-settings-command.md - Command that creates settings fileexample-settings.md - Template settings fileDevelopment tools in scripts/:
validate-settings.sh - Validate settings file structureparse-frontmatter.sh - Extract frontmatter fieldsTo add settings to a plugin:
.claude/*.local.mdFocus on keeping settings simple and providing good defaults when settings file doesn't exist.
Weekly Installs
301
Repository
GitHub Stars
9.6K
First Seen
Feb 5, 2026
Security Audits
Gen Agent Trust HubFailSocketPassSnykPass
Installed on
opencode259
codex258
gemini-cli256
github-copilot249
claude-code241
amp240
agent-browser 浏览器自动化工具 - Vercel Labs 命令行网页操作与测试
136,300 周安装