/name shortcuts for users or AI assistants to invoke.skills/ or commands/ directory in the plugin root directorySKILL.md. A command is a simple Markdown file.skills/├── pdf-processor/│ ├── SKILL.md│ ├── reference.md (Optional)│ └── scripts/ (Optional)└── code-reviewer/└── SKILL.md
agents/ directory in the plugin root directory---name: agent-namedescription: The agent's expertise and when it should be invokedmodel: sonneteffort: mediummaxTurns: 20disallowedTools: Write, Edit---The detailed system prompt for the agent, describing its role, expertise, and behavior.
name, description, model, effort, maxTurns, tools, disallowedTools, skills, memory, background, and isolation. The only valid value for isolation is "worktree". For security reasons, plugin agents do not support the hooks, mcpServers, and permissionMode fields./agents page.hooks/hooks.json file, or inline configuration in plugin.json{"hooks": {"PostToolUse": [{"matcher": "Write|Edit","hooks": [{"type": "command","command": "${CODEBUDDY_PLUGIN_ROOT}/scripts/format-code.sh"}]}]}}
Event | Trigger Timing |
SessionStart | When a session starts or resumes |
UserPromptSubmit | When a user submits a prompt and before AI processes it |
PreToolUse | Before a tool call is executed, it can be blocked. |
PermissionRequest | When a permission dialog appears |
PermissionDenied | When a tool call is rejected by the automatic mode classifier, return {retry: true} to inform the model that it can retry. |
PostToolUse | After the tool is successfully called |
PostToolUseFailure | After tool call failure |
Notification | When CodeBuddy sends a notification |
SubagentStart | When a subagent starts |
SubagentStop | When a subagent completes |
TaskCreated | When a task is created through TaskCreate |
TaskCompleted | When a task is marked as completed |
Stop | When AI completes a response |
StopFailure | When a turn ends due to an API error, output and exit code are ignored. |
TeammateIdle | When a teammate is about to become idle |
InstructionsLoaded | When CODEBUDDY.md or .codebuddy/rules/*.md files are loaded into the context |
ConfigChange | When a configuration file changes during a session |
CwdChanged | When the working directory changes (for example, when AI runs the cd command) |
FileChanged | When a monitored file changes on disk. The matcher field specifies the file name to monitor. |
WorktreeCreate | When a worktree is created through --worktree or isolation: "worktree" |
WorktreeRemove | When a worktree is removed (when a session exits or a subagent completes) |
PreCompact | Before context compression |
PostCompact | After context compression is completed |
Elicitation | When an MCP server requests user input during a tool call |
ElicitationResult | After the user responds to the MCP elicitation and before the response is sent back to the server |
SessionEnd | When a session terminates |
command: Executes a shell command or script.http: Sends the event JSON as a POST request to a URL.prompt: Uses an LLM to evaluate the prompt (use the $ARGUMENTS placeholder to obtain context).agent: Runs an agent validator with tools for complex validation tasks.Path | Scope | Security Gate |
hooks/hooks.json (described in this section) | Entire session (when the plugin is enabled) | Not restricted by allowUntrustedFrontmatterHooks; takes effect once the plugin is enabled. |
agents/*.md or hooks frontmatter in skills/SKILL.md | Only within the lifecycle of the subagent / fork skill | Restricted by the allowUntrustedFrontmatterHooks gate and denied by default. Users need to explicitly enable it in settings.json. |
allowUntrustedFrontmatterHooks setting. For details, see Hook Reference Guide - Frontmatter Hooks..mcp.json file, or inline configuration in plugin.json{"mcpServers": {"plugin-database": {"command": "${CODEBUDDY_PLUGIN_ROOT}/servers/db-server","args": ["--config", "${CODEBUDDY_PLUGIN_ROOT}/config.json"],"env": {"DB_PATH": "${CODEBUDDY_PLUGIN_ROOT}/data"}},"plugin-api-client": {"command": "npx","args": ["@company/mcp-server", "--plugin-mode"],"cwd": "${CODEBUDDY_PLUGIN_ROOT}"}}}
/plugin Discover tab. This section describes how to create an LSP plugin for a language that is not covered by the official marketplace..lsp.json file, or inline configuration in plugin.json.lsp.json File Format:{"go": {"command": "gopls","args": ["serve"],"extensionToLanguage": {".go": "go"}}}
plugin.json:{"name": "my-plugin","lspServers": {"go": {"command": "gopls","args": ["serve"],"extensionToLanguage": {".go": "go"}}}}
Field | Description |
command | LSP binary file to be executed (must be in PATH) |
extensionToLanguage | Map file extensions to language identifiers. |
Field | Description |
args | Command-line arguments for the LSP server |
transport | Transport mode: stdio (default) or socket |
env | Environment variables set when the server is started |
initializationOptions | Options passed to the server during initialization |
settings | Settings passed through workspace/didChangeConfiguration |
workspaceFolder | Workspace folder path of the server |
startupTimeout | Maximum time to wait for the server to start in milliseconds |
shutdownTimeout | Maximum time to wait for graceful shutdown in milliseconds |
restartOnCrash | Restart automatically or not when the server crashes |
maxRestarts | Maximum restart attempts before the system gives up |
Executable not found in $PATH error in the /plugin Errors tag, install the required binary for your language.Plugins | Language Server | Installation Command |
pyright-lsp | Pyright (Python) | pip install pyright or npm install -g pyright |
typescript-lsp | TypeScript Language Server | npm install -g typescript-language-server typescript |
rust-lsp | rust-analyzer |
Scope | Settings File | Scenario |
user | ~/.codebuddy/settings.json | Personal plugin, available in all projects (default) |
project | .codebuddy/settings.json | Team plugin, shared through version control |
local | .codebuddy/settings.local.json | Project-specific plugin, ignored by gitignore. |
managed | Managed settings | Managed plugin (read-only, update only) |
.codebuddy-plugin/plugin.json file (or .workbuddy-plugin/plugin.json, .claude-plugin/plugin.json) defines the plugin's metadata and configuration. This section documents all supported fields and options.{"name": "plugin-name","version": "1.2.0","description": "A brief description of the plugin","author": {"name": "Author name","email": "[email protected]","url": "https://github.com/author"},"homepage": "https://docs.example.com/plugin","repository": "https://github.com/author/plugin","license": "MIT","keywords": ["keyword1", "keyword2"],"commands": ["./custom/commands/special.md"],"agents": "./custom/agents/","skills": "./custom/skills/","hooks": "./config/hooks.json","mcpServers": "./mcp-config.json","outputStyles": "./styles/","lspServers": "./.lsp.json","defaultEnabled": false,"dependencies": ["audit-logger",{ "name": "secrets-vault", "version": "~2.1.0" }],"experimental": {"themes": "./themes/","monitors": "./monitors/monitors.json"}}
name is the only required field.Field | Type | Description | Example |
name | string | Unique identifier (kebab-case, no spaces) | "deployment-tools" |
agent-creator of the plugin plugin-dev is displayed as plugin-dev:agent-creator.Field | Type | Description | Example |
version | string | Semantic version. If it is also set in the marketplace entry, plugin.json takes precedence. Set it in only one place. | "2.1.0" |
description | string | Brief description of the plugin's purpose | "Deployment automation tool" |
author | object | Author information | {"name": "Dev team", "email": "[email protected]"} |
homepage | string | Documentation URL | "https://docs.example.com" |
repository | string | Source code URL | "https://github.com/user/plugin" |
license | string | License identifier | "MIT", "Apache-2.0" |
keywords | array | Discovery tags | ["deployment", "ci-cd"] |
defaultEnabled | boolean | Whether to enable when not explicitly set. Default: true. | false |
dependencies | array | Other plugins that the current plugin depends on. You can declare semver ranges and marketplace. | [{"name":"helper","version":"^2.0.0"}] |
Field | Type | Description | Example |
commands | string | array | Custom command file or directory (replaces the default commands/) | "./custom/cmd.md" or ["./cmd1.md"] |
agents | string | array | Custom agent file (replaces the default agents/) | "./custom/agents/reviewer.md" |
skills | string | array | Custom skill directory (replaces the default skills/) | "./custom/skills/" |
hooks | string | array | object | Hook configuration path or inline configuration | "./my-extra-hooks.json" |
mcpServers | string | array | object | MCP configuration path or inline configuration | "./my-extra-mcp-config.json" |
outputStyles | string | array | Custom output style file or directory (replaces the default output-styles/) | "./styles/" |
experimental.themes | string | array | Claude experimental field; CodeBuddy currently only recognizes it and does not load it into the runtime. | "./themes/" |
experimental.monitors | string | array | Claude experimental field; CodeBuddy currently only recognizes it and does not start the background monitor. | "./monitors/monitors.json" |
lspServers | string | array | object | LSP configuration path or inline configuration | "./.lsp.json" |
userConfig | object | Prompts users to configure the value when enabled. For details, see User Configuration. | experimental.themes. |
channels | array | Channel declaration for message injection. For details, see Channels. | experimental.themes. |
defaultEnabled: false keeps newly installed plugins disabled. Existing enabledPlugins settings take precedence over this default value, so upgrading or reinstalling does not change the state that users have explicitly selected. If a plugin is a dependency of an enabled plugin, the dependency relationship takes precedence, and CodeBuddy enables it explicitly.dependencies can be declared in both plugin.json and marketplace plugin entries, and the declarations are merged. String dependencies are resolved to the marketplace where they are declared. Objects support the following fields:Field | Required | Description |
name | Yes | Plugin name |
version | No | Node semver range, for example, ~2.1.0, ^2.0, >=1.4 |
marketplace | No | marketplace where the dependency resides. If it is omitted, the declarer's marketplace is used. |
marketplace.json file of the marketplace to which the root plugin belongs:{"name": "acme-tools","allowCrossMarketplaceDependenciesOn": ["acme-shared"],"plugins": []}
{plugin-name}--v{version}, for example secrets-vault--v2.1.3. CodeBuddy merges the ranges of all enabled plugins for the same dependency and selects the highest version that satisfies the intersection. The tag semver is recorded in resolvedVersion. The cache directory uses the declared version plus a 12-character commit SHA suffix to prevent forcibly moved tags from reusing stale content.auto: true in installed_plugins.json. A regular uninstall retains these dependencies. Only plugin prune or plugin uninstall --prune removes auto dependencies that are no longer required by any manually installed plugin. Explicitly installing an auto dependency promotes it to a manual installation, after which it is not pruned.userConfig field declares values that CodeBuddy prompts users to enter when the plugin is enabled. Use this instead of requiring users to manually edit settings.json.{"userConfig": {"api_endpoint": {"description": "Your team's API endpoint""sensitive": false},"api_token": {"description": "API authentication token""sensitive": true}}}
${user_config.KEY} in MCP and LSP server configurations and hook commands, and (for non-sensitive values only) in skills, commands, and agent content. Values are also exported to plugin subprocesses as the CLAUDE_PLUGIN_OPTION_<KEY> and CODEBUDDY_PLUGIN_OPTION_<KEY> environment variables. Non-alphabetic, non-numeric, or non-underscore characters in environment variable names are replaced with _ and then converted to uppercase.pluginConfigs[<plugin-id>].options in settings.json. Sensitive values are stored in the system keychain, or in ~/.codebuddy/.credentials.json if the keychain is unavailable. Keychain storage is shared with OAuth tokens and has a total limit of approximately 2 KB, so sensitive values should be kept small.channels field allows a plugin to declare one or more message channels for injecting content into conversations. Each channel is bound to an MCP server provided by the plugin.{"channels": [{"server": "telegram","userConfig": {"bot_token": { "description": "Telegram bot token", "sensitive": true },"owner_id": { "description": "Your Telegram user ID", "sensitive": false }}}]}
server field is required and must match a key in the plugin's mcpServers. The optional per-channel userConfig uses the same schema as the top level, allowing prompts for a bot token or owner ID when the plugin is enabled.commands, agents, skills, and outputStyles, custom paths replace the default directories. If the manifest specifies commands, the default commands/ directory is not scanned. Hooks, MCP servers, and LSP servers have different semantics for handling multiple sources../."commands": ["./commands/", "./extras/deploy.md"]{"commands": ["./specialized/deploy.md","./utilities/batch-process.md"],"agents": ["./custom-agents/reviewer.md","./custom-agents/tester.md"]}
CLAUDE_* name has a corresponding CODEBUDDY_* alias.${CODEBUDDY_PLUGIN_ROOT}: The absolute path to the plugin installation directory. It is used to reference scripts, binaries, and configuration files bundled with the plugin. This path changes when the plugin is updated, so files written here are not preserved after updates.${CLAUDE_PLUGIN_ROOT} variable name is also supported for compatibility with Claude Code plugins.${CODEBUDDY_PLUGIN_DATA}: The persistent directory for plugin state, which is preserved after updates. It is used for installed dependencies (such as node_modules or Python virtual environments), generated code, caches, and any files that need to persist across plugin versions. The directory is automatically created when the placeholder is first referenced or exported to a plugin subprocess.${CLAUDE_PLUGIN_DATA} variable name is also supported.${CODEBUDDY_PROJECT_DIR}: The root directory of the current workspace. It is used by plugin scripts to locate the user's project and should not be used to write the plugin's own persistent state.${CLAUDE_PROJECT_DIR} variable name is also supported.CLAUDE_PLUGIN_OPTION_<KEY>: The standard Claude Code nameCODEBUDDY_PLUGIN_OPTION_<KEY>: The CodeBuddy aliasPLUGIN_OPT_<KEY>: A compatibility name reserved for existing CodeBuddy plugins{"hooks": {"PostToolUse": [{"hooks": [{"type": "command","command": "${CODEBUDDY_PLUGIN_ROOT}/scripts/process.sh"}]}]}}
${CODEBUDDY_PLUGIN_DATA} directory resolves to ~/.codebuddy/plugins/data/{id}/, where {id} is the plugin identifier with any characters other than a-z, A-Z, 0-9, _, and - replaced by -. For example, a plugin installed as formatter@my-marketplace has the directory ~/.codebuddy/plugins/data/formatter-my-marketplace/.SessionStart hook installs node_modules on first run and reinstalls them when a plugin update includes changes to package.json:{"hooks": {"SessionStart": [{"hooks": [{"type": "command","command": "diff -q \\"${CODEBUDDY_PLUGIN_ROOT}/package.json\\" \\"${CODEBUDDY_PLUGIN_DATA}/package.json\\" >/dev/null 2>&1 || (cd \\"${CODEBUDDY_PLUGIN_DATA}\\" && cp \\"${CODEBUDDY_PLUGIN_ROOT}/package.json\\" . && npm install) || rm -f \\"${CODEBUDDY_PLUGIN_DATA}/package.json\\""}]}]}}
diff exits with a non-zero status when the stored copy is missing or differs from the bundled copy, covering both first runs and updates with dependency changes. If npm install fails, the trailing rm removes the copied manifest so that the next session can retry.${CODEBUDDY_PLUGIN_ROOT} can run against the persisted node_modules:{"mcpServers": {"routines": {"command": "node","args": ["${CODEBUDDY_PLUGIN_ROOT}/server.js"],"env": {"NODE_PATH": "${CODEBUDDY_PLUGIN_DATA}/node_modules"}}}}
--keep-data retains it. plugin prune deletes the data directories of orphaned automatic dependencies.codebuddy --plugin-dir~/.codebuddy/plugins/cache/<marketplace>/<plugin>/<version>) instead of using them in place. Marketplace source code remains in ~/.codebuddy/plugins/marketplaces/<marketplace>, and understanding this behavior is important for developing plugins that reference external files.../shared-utils, will not work after installation because those external files are not copied to the cache.# Inside the plugin directoryln -s ../../shared-plugin/skills/foo ./skills/foo
enterprise-plugin/├── .codebuddy-plugin/ # Metadata directory (optional)│ └── plugin.json # Plugin manifest├── commands/ # Default command location│ ├── status.md│ └── logs.md├── agents/ # Default agent location│ ├── security-reviewer.md│ ├── performance-tester.md│ └── compliance-checker.md├── skills/ # Agent skills│ ├── code-reviewer/│ │ └── SKILL.md│ └── pdf-processor/│ ├── SKILL.md│ └── scripts/├── output-styles/ # Output style definitions│ └── terse.md├── themes/ # Claude standard theme definitions; currently recognized but not loaded│ └── dracula.json├── monitors/ # Claude standard background monitors; currently recognized but not started│ └── monitors.json├── hooks/ # Hook configuration│ ├── hooks.json # Main hook configuration│ └── security-hooks.json # Additional hooks├── bin/ # Plugin executables, added to PATH│ └── my-tool # Can be invoked as a bare command in the Bash tool├── settings.json # Default plugin settings├── .mcp.json # MCP server definition├── .lsp.json # LSP server configuration├── scripts/ # Hooks and utility scripts│ ├── security-scan.sh│ ├── format-code.py│ └── deploy.js├── LICENSE # License file└── CHANGELOG.md # Version history
.codebuddy-plugin/ directory contains the plugin.json file. All other directories (commands/, agents/, skills/, output-styles/, themes/, monitors/, hooks/) must be located at the plugin root, not inside .codebuddy-plugin/. The .workbuddy-plugin/ and .claude-plugin/ directories are also supported.Component | Default Location | Purpose |
Manifest | .codebuddy-plugin/plugin.json | Plugin metadata and configuration (optional) |
Commands | commands/ | Skill Markdown files (legacy; new skills use skills/) |
Agents | agents/ | Subagent Markdown files |
Skills | skills/ | Skills with the <name>/SKILL.md structure |
Output styles | output-styles/ | Output style definitions |
Themes | themes/ | Claude standard field; CodeBuddy currently only recognizes it and does not load it into the runtime. |
Monitors | monitors/monitors.json | Claude standard field; CodeBuddy currently only recognizes it and does not start the background monitor. |
Hooks | hooks/hooks.json | Hook configuration |
MCP servers | .mcp.json | MCP server definitions |
LSP servers | .lsp.json | Language server configuration |
Executables | bin/ | Executable files added to the Bash tool PATH. When the plugin is enabled, files in this directory can be invoked as bare commands in any Bash tool call. |
Settings | settings.json | Default plugin configuration. The current runtime applies agent; subagentStatusLine is only recognized and retained. |
codebuddy plugin install <plugin> [options]
<plugin>: The plugin name or plugin-name@marketplace-name (specifies a specific marketplace)Option | Description | Default Value |
-s, --scope <scope> | Installation scope: user, project, or local | user |
-h, --help | Display command help | - |
--scope project writes to enabledPlugins in .codebuddy/settings.json, making the plugin available to anyone who clones the project repository.# Install to user scope (default)codebuddy plugin install formatter@my-marketplace# Install to project scope (shared with the team)codebuddy plugin install formatter@my-marketplace --scope project# Install to local scope (gitignored)codebuddy plugin install formatter@my-marketplace --scope local
codebuddy plugin uninstall <plugin> [options]
<plugin>: The plugin name or plugin-name@marketplace-nameOption | Description | Default Value |
-s, --scope <scope> | Uninstall from the specified scope: user, project, or local | user |
--keep-data | - | |
--prune | Also clean up auto dependencies that are no longer needed in this scope. | - |
-y, --yes | Skip --prune confirmation; must be specified when stdin or stdout is not a TTY. | - |
-h, --help | Display command help. | - |
remove, rm${CODEBUDDY_PLUGIN_DATA} directory is also deleted when the plugin is uninstalled from the last remaining scope. Use --keep-data to retain it, for example when reinstalling after testing a new version.codebuddy plugin prune [options]
Option | Description | Default Value |
-s, --scope <scope> | Cleanup scope: user, project, or local | user |
--dry-run | List only the plugins to be cleaned up without modifying settings or the registry. | - |
-y, --yes | Skip confirmation; list only candidates when stdin or stdout is not a TTY and no option is specified. | - |
-h, --help | Display command help. | - |
codebuddy plugin enable <plugin> [options]
<plugin>: The plugin name or plugin-name@marketplace-nameOption | Description | Default Value |
-s, --scope <scope> | Enabled scope: user, project, or local | Automatically detect the current installation scope. |
-h, --help | Display command help. | - |
codebuddy plugin disable <plugin> [options]
<plugin>: The plugin name or plugin-name@marketplace-nameOption | Description | Default Value |
-s, --scope <scope> | Disabled scope: user, project, or local | Automatically detect the current installation scope. |
-h, --help | Display command help. | - |
codebuddy plugin update <plugin> [options]
<plugin>: The plugin name or plugin-name@marketplace-nameOption | Description | Default Value |
-s, --scope <scope> | Update scope: user, project, local, or managed | user |
-h, --help | Display command help. | - |
--json can be used for script-based reading of dependencyErrors.codebuddy plugin list --json
# Add a marketplace.codebuddy plugin marketplace add <source> [--name <name>]# List marketplaces.codebuddy plugin marketplace list# Update a marketplace.codebuddy plugin marketplace update <name># Delete a marketplace.codebuddy plugin marketplace remove <name>
# Local directory.codebuddy plugin marketplace add /path/to/marketplace# GitHub shorthandcodebuddy plugin marketplace add owner/repo# Git URLcodebuddy plugin marketplace add https://github.com/owner/repo.git# HTTP URL (marketplace.json)codebuddy plugin marketplace add https://example.com/marketplace.json
codebuddy --debug to view plugin loading details:Issue | Reason | Solution |
Plugin not loaded. | Invalid plugin.json | Run codebuddy plugin validate or /plugin validate to check plugin.json, skill/agent/command frontmatter, and hooks/hooks.json for syntax and schema errors. |
Command not displayed. | Incorrect directory structure | Ensure commands/ is in the plugin root directory, not inside .codebuddy-plugin/ |
Hook not triggered. | Script is not executable. | Run chmod +x script.sh |
MCP server failure. | Missing ${CODEBUDDY_PLUGIN_ROOT} | Use this variable for all plugin paths. |
Path error | Used an absolute path. | All paths must be relative and start with ./. |
LSP Executable not found in $PATH | Language server not installed. | Install the binary file (for example, npm install -g typescript-language-server typescript). |
Invalid JSON syntax: Unexpected token } in JSON at position 142: Check for missing commas, extra commas, or unquoted strings.Plugin has an invalid manifest file at .codebuddy-plugin/plugin.json. Validation errors: name: Required: Missing required field.Plugin has a corrupt manifest file at .codebuddy-plugin/plugin.json. JSON parse error: ...: JSON syntax error.Warning: No commands found in plugin my-plugin custom directory: ./cmds. Expected .md files or SKILL.md in subdirectories.: The command path exists but contains no valid command files.Plugin directory not found at path: ./plugins/my-plugin. Check that the marketplace entry has the correct path.: The source path in marketplace.json points to a directory that does not exist.Plugin my-plugin has conflicting manifests: both plugin.json and marketplace entry specify components.: Remove duplicate component definitions or remove strict: false from the marketplace entry.chmod +x ./scripts/your-script.sh#!/bin/bash or #!/usr/bin/env bash.${CODEBUDDY_PLUGIN_ROOT}: "command": "${CODEBUDDY_PLUGIN_ROOT}/scripts/your-script.sh"./scripts/your-script.shPostToolUse, not postToolUse."matcher": "Write|Edit" is used for file operations.command, http, prompt, or agent.${CODEBUDDY_PLUGIN_ROOT} variable.codebuddy --debug shows initialization errors..mcp.json or plugin.json..codebuddy-plugin/. Only plugin.json belongs in .codebuddy-plugin/.my-plugin/├── .codebuddy-plugin/│ └── plugin.json <- Only the manifest goes here.├── commands/ <- At the root level├── agents/ <- At the root level└── hooks/ <- At the root level
.codebuddy-plugin/, move them to the plugin root directory.codebuddy --debug and look for the "loading plugin" message.{"name": "my-plugin","version": "2.1.0"}
MAJOR.MINOR.PATCH1.0.0.plugin.json before distributing changes.CHANGELOG.md file.2.0.0-beta.1) for testing.plugin.json, existing users will not see the changes due to the caching mechanism.marketplace.json and omit the version field from plugin.json.version in plugin.jsonversion of the marketplace plugin entrygit-subdir also includes the subdirectory path hash.unknown when the version cannot be determined.resolvedVersion and does not rely on the manifest version, which may be outdated.unknown are automatically migrated at startup. CodeBuddy resolves the commit SHA from the current marketplace checkout, materializes the source code into the corresponding SHA cache directory, and then atomically updates installed_plugins.json. The old unknown directory is only marked as orphan. It is retained for at least 14 days and will not be deleted while the .in_use marker indicates an active session. Plugins from non-Git sources without an explicit version continue to use unknown.Concept | Claude Code | CodeBuddy |
Metadata Directory | .claude-plugin/ | .codebuddy-plugin/ (preferred), .workbuddy-plugin/, or .claude-plugin/ (compatible) |
Environment Variable | ${CLAUDE_PLUGIN_ROOT} | ${CODEBUDDY_PLUGIN_ROOT} (preferred) or ${CLAUDE_PLUGIN_ROOT} (compatible) |
Data Directory Variable | ${CLAUDE_PLUGIN_DATA} | ${CODEBUDDY_PLUGIN_DATA} (preferred) or ${CLAUDE_PLUGIN_DATA} (compatible) |
.claude-plugin/ to .codebuddy-plugin/.${CLAUDE_PLUGIN_ROOT} in the script with ${CODEBUDDY_PLUGIN_ROOT}.${CLAUDE_PLUGIN_DATA} with ${CODEBUDDY_PLUGIN_DATA}.Was this page helpful?
You can also Contact sales or Submit a Ticket for help.
Help us improve! Rate your documentation experience in 5 mins.
Feedback