Add a new CLI subcommand to an agent binary (agent, cluster-agent, etc.)
Scanned 9/3/2026
Install to Claude Code
npx -y skills add DataDog/datadog-agent --skill create-subcommand --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Create Subcommand?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/datadog-create-subcommand)More formats (shields.io, HTML) on the badges page.
---
name: create-subcommand
description: Add a new CLI subcommand to an agent binary (agent, cluster-agent, etc.)
allowed-tools: Bash, Read, Write, Edit, Glob, Grep, AskUserQuestion
argument-hint: "[agent] [subcommand-name]"
model: sonnet
---
Add a new CLI subcommand to a Datadog Agent binary. Each agent binary uses Cobra commands registered via a central `subcommands.go` file.
## Agent Binaries
| Agent | Subcommands dir | Registration file |
|---|---|---|
| Core Agent | `cmd/agent/subcommands/` | `cmd/agent/subcommands/subcommands.go` |
| Cluster Agent | `cmd/cluster-agent/subcommands/` | `cmd/cluster-agent/subcommands/subcommands.go` |
| Process Agent | `cmd/process-agent/subcommands/` | `cmd/process-agent/subcommands/subcommands.go` |
| Security Agent | `cmd/security-agent/subcommands/` | `cmd/security-agent/subcommands/subcommands.go` |
| System Probe | `cmd/system-probe/subcommands/` | `cmd/system-probe/subcommands/subcommands.go` |
| DogStatsD | `cmd/dogstatsd/subcommands/` | `cmd/dogstatsd/subcommands/subcommands.go` |
## Instructions
### Step 1: Gather information from the user
Use `AskUserQuestion` to collect the following. If `$ARGUMENTS` provides values, skip those questions.
1. **Target agent**: Which agent binary? (Core Agent is most common)
2. **Subcommand name**: e.g. `health`, `hostname`, `flare`
3. **Description**: What does the subcommand do?
4. **Complexity**: Simple (no Fx, e.g. `version`) or with config/IPC (`fxutil.OneShot`, e.g. `hostname`)?
5. **Shared across agents?**: Yes → `pkg/cli/subcommands/<name>/`, No → `cmd/<agent>/subcommands/<name>/`
### Step 2: Read reference examples
Read the reference matching the chosen pattern, plus the target agent's registration file:
| Pattern | Reference file |
|---|---|
| Simple (no Fx) | `cmd/agent/subcommands/version/command.go` |
| With config/IPC | `cmd/agent/subcommands/hostname/command.go` |
| Shared across agents | `pkg/cli/subcommands/health/command.go` + `cmd/agent/subcommands/health/command.go` |
Also read the target agent's `command/command.go` for available `GlobalParams` fields.
### Step 3: Create the subcommand
Create `cmd/<agent>/subcommands/<name>/command.go` following the reference patterns exactly.
### Step 4: Register
Edit the agent's `subcommands.go`: add an import with the `cmd<Name>` alias convention and add `cmd<Name>.Commands` to the factory slice. Follow the existing entries.
### Step 5: Verify
1. Build: `dda inv agent.build --build-exclude=systemd`
2. Test: `./bin/agent/agent <name> --help`
3. Lint: `dda inv linter.go`
## Usage
- `/create-subcommand` — Interactive: prompts for all details
- `/create-subcommand agent my-command` — Pre-fills agent and name
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!