--- 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//`, No → `cmd//subcommands//` ### 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//subcommands//command.go` following the reference patterns exactly. ### Step 4: Register Edit the agent's `subcommands.go`: add an import with the `cmd` alias convention and add `cmd.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 --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