skills/plugin-settings/SKILL.md
This skill should be used when the user asks to "add plugin settings", "make a plugin configurable", "store per-project plugin configuration", "use settings.local.json", "create a plugin state file", "expose skill settings in Agent Master", or "add a skill interface". Distinguishes official Claude Code settings from project-owned configuration and documents bOpen Agent Master skill interface discovery.
npx skillsauth add b-open-io/prompts plugin-settingsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Design plugin configuration without confusing Claude Code settings, plugin-bundled defaults, application-owned data, and Agent Master discovery metadata.
Place each value in the narrowest mechanism that actually owns it:
| Need | Mechanism | Scope |
|---|---|---|
| Configure Claude Code behavior, permissions, environment, or plugin enablement | Official settings.json hierarchy | User, project, local, or managed |
| Ship a supported Claude Code default with a plugin | <plugin-root>/settings.json | Plugin default |
| Describe or distribute the plugin | .claude-plugin/plugin.json | Plugin metadata |
| Collect per-user plugin options | .claude-plugin/plugin.json userConfig | User, CLI-supplied, or managed |
| Store project-owned settings or state interpreted by custom code | Project-owned file with an explicit schema and reader | Whatever the plugin defines |
| Advertise a skill-owned UI in the bOpen desktop configurator | <plugin-root>/setup/manifest.json skillInterfaces | Agent Master discovery |
Do not present a project-owned file as an official Claude Code settings source. Claude Code does not automatically discover, merge, validate, or reload arbitrary files merely because they live under .claude/.
Use these official settings locations:
~/.claude/settings.json for personal settings across projects..claude/settings.json for team-shared project settings committed to source control..claude/settings.local.json for personal, project-specific overrides that stay out of source control.Apply precedence from highest to lowest: managed settings, command-line settings, local project settings, shared project settings, then user settings. Remember that some array-valued settings merge rather than replace lower-scope arrays.
Configure installed plugins through enabledPlugins and marketplaces through extraKnownMarketplaces in the official settings hierarchy. Select user, project, or local installation scope according to who should receive the plugin.
Add the official schema for editor validation when authoring settings:
{
"$schema": "https://json.schemastore.org/claude-code-settings.json",
"enabledPlugins": {
"example@team-marketplace": true
}
}
Verify loaded settings sources with /status. Do not infer the effective source of a value from a file's presence alone.
userConfig for Per-User Plugin OptionsDeclare supported user options under userConfig in .claude-plugin/plugin.json. Claude Code prompts for these values when the plugin is enabled, rather than requiring hand edits:
{
"userConfig": {
"api_endpoint": {
"type": "string",
"title": "API endpoint",
"description": "The service endpoint used by this plugin",
"required": true
},
"api_token": {
"type": "string",
"title": "API token",
"description": "Authentication token for the service",
"sensitive": true,
"required": true
}
}
}
Use the documented string, number, boolean, directory, and file types. Apply default, required, numeric min/max, or string multiple only where appropriate.
Reference values as ${user_config.KEY} in supported MCP, LSP, and hook fields. Substitute only non-sensitive values into skill and agent content. Read CLAUDE_PLUGIN_OPTION_<KEY> in hook processes where environment access is appropriate. Do not interpolate configured values into shell-form command fields; use exec-form arguments or read the exported environment variable so input cannot become shell syntax.
Let Claude Code manage persistence. Non-sensitive values live under pluginConfigs[<plugin-id>].options in user settings. Sensitive values use the macOS Keychain or Claude's credentials store on platforms without supported keychain integration. Do not ask users to edit pluginConfigs manually.
Treat pluginConfigs as user-level configuration. Current Claude Code reads it from user settings, --settings, and managed settings; project .claude/settings.json and .claude/settings.local.json entries are ignored. Use an explicitly project-owned format when configuration must vary by repository.
Use <plugin-root>/settings.json only for keys Claude Code documents as supported plugin defaults. At present, the supported keys are agent and subagentStatusLine; unknown keys are ignored. Do not invent a plugin-specific configuration schema in this file.
{
"agent": "security-reviewer"
}
Use .claude-plugin/plugin.json for plugin identity and supported manifest metadata. Keep hooks in hooks/hooks.json, MCP servers in .mcp.json, and other plugin components in their documented locations. Do not treat the plugin manifest as a general state store.
.claude/<plugin>.local.md as a Custom ConventionUse .claude/<plugin-name>.local.md only when a plugin deliberately owns a Markdown-plus-YAML configuration or state format. Label it as a project-owned convention, not a Claude Code feature.
This pattern remains useful when settings combine structured fields with substantial human-readable instructions:
---
enabled: true
mode: standard
max_retries: 3
---
# Project context
Prefer deterministic validation before retrying.
Implement all behavior explicitly:
.gitignore when it contains personal state.Do not claim that custom files always require a Claude Code restart. A hook or server that reads the file for each request sees changes immediately; a long-running process that caches it may not.
Prefer JSON for machine-only configuration. Use Markdown bodies only when prose is itself part of the contract. Separate durable configuration from transient runtime state when concurrent writers, migrations, or crash recovery matter.
Never store secrets in a Markdown state file or commit them to project settings. Prefer environment variables or the platform's secure credential mechanism, and expose only presence—not values—to diagnostic interfaces.
Store persistent generated data under ${CLAUDE_PLUGIN_DATA} when it must survive plugin updates. Treat ${CLAUDE_PLUGIN_ROOT} as versioned, read-only plugin content rather than a writable state directory.
Do not confuse .claude/<plugin>.local.md with the official CLAUDE.local.md memory file or .claude/settings.local.json. Those have different discovery rules and purposes.
Declare an optional skill UI in the owning plugin's setup/manifest.json:
{
"plugin": "bopen-tools",
"skillInterfaces": [
{
"skill": "visual-wayfinder",
"label": "Open Visual Wayfinder",
"description": "Explore the visual decision workbench and its interactive question formats."
}
]
}
Treat skillInterfaces as the bOpen discovery contract:
skill to the lowercase kebab-case skill slug.label short and action-oriented.description for one concise explanation of the settings or interface surface.A skillInterfaces entry advertises a destination; it does not persist configuration, grant capabilities, run a setup script, or imply that the skill needs a build step. Keep interface implementation and settings storage as separate decisions.
When adding the entry, validate setup/manifest.json against skills/setup/assets/manifest.schema.json and exercise the Agent Master plugin view. Confirm that the derived link targets the intended plugin and skill, opens safely in a new context, and remains useful when no local UI server is running.
userConfig, plugin defaults, application configuration, secrets, and runtime state.userConfig unless its type, scope, or lifecycle is insufficient.settings.json contains only supported default keys.skillInterfaces entries match the setup manifest schema and use no arbitrary URL..claude directoryFor the bOpen extension, inspect setup/manifest.json and skills/setup/assets/manifest.schema.json in the active plugin source rather than copying a stale schema into this skill.
tools
This skill should be used when a Claude Code session needs to keep working after Anthropic usage runs out, or when the user asks to run the Claude Code harness on GPT-5.6 Sol. Trigger phrases include "my Anthropic usage ran out", "I'm out of Claude usage", "usage limit reached, what now", "keep working on another model", "run Claude Code on GPT-5.6 Sol", "use GPT-5.6 Sol as the model", "set up claudex", "claudex isn't working", "route the harness through CLIProxyAPI", or "bill against my ChatGPT/Codex subscription". It stands up a local proxy so the Claude Code CLI runs on OpenAI's Codex backend as an escape hatch, and diagnoses that setup when it drifts. macOS + Homebrew.
testing
This skill should be used when the user asks to "open Visual Wayfinder", "answer a Wayfinder ticket visually", "turn this decision into a configurator", "show Wayfinder choices as a dashboard", "prototype the Wayfinder questionnaire", or wants interactive choice cards, tradeoff controls, rankings, ranges, toggles, and consequence previews for one active Wayfinder decision. It wraps the Wayfinder skill and JSON Render; it never replaces the tracker or resolves more than the active decision.
development
This skill should be used when the user asks to "make a visual proposal", "write this up so I can share it", "present these options visually", "diagram the trade-offs", "turn this plan into something reviewable", or requests a shareable design pitch, architecture proposal, RFC, options comparison, or visual roadmap for work that has not been built. It produces one self-contained, theme-aware HTML page led by grounded diagrams. Use visual-review instead for completed code changes; do not use this skill for internal task tracking.
content-media
This skill should be used when the user asks for "game UI", "app-to-game UI", "video game HUD", "controller navigation", "D-pad navigation", "TV app", "ten-foot interface", "game UI key bindings", "controller-first menu", "console-style menu", "TV remote focus", or "directional navigation".