dd-pup

Datadog CLI (Go). OAuth2 auth with token refresh.

15 stars

Best use case

dd-pup is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Datadog CLI (Go). OAuth2 auth with token refresh.

Teams using dd-pup should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/dd-pup/SKILL.md --create-dirs "https://raw.githubusercontent.com/sushichan044/dotfiles/main/.agents/skills/dd-pup/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/dd-pup/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How dd-pup Compares

Feature / Agentdd-pupStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Datadog CLI (Go). OAuth2 auth with token refresh.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# pup (Datadog CLI)

Pup CLI for Datadog API operations. Supports OAuth2 and API key auth.

## Quick Reference

| Task                  | Command                                                  |
| --------------------- | -------------------------------------------------------- |
| Search error logs     | `pup logs search --query "status:error" --duration 1h`   |
| List monitors         | `pup monitors list`                                      |
| Mute a monitor        | `pup monitors mute --id 123 --duration 1h`               |
| Find slow traces      | `pup apm traces list --service api --min-duration 500ms` |
| List active incidents | `pup incidents list --status active`                     |
| Create incident       | `pup incidents create --title "Issue" --severity SEV-2`  |
| Query metrics         | `pup metrics query --query "avg:system.cpu.user{*}"`     |
| List hosts            | `pup hosts list`                                         |
| Check SLOs            | `pup slos list`                                          |
| Who's on call         | `pup on-call who --team my-team`                         |
| Security signals      | `pup security signals list --severity critical`          |
| Check auth            | `pup auth status`                                        |
| Refresh token         | `pup auth refresh`                                       |

## Prerequisites

```bash
# Install pup
go install github.com/datadog-labs/pup@latest
export PATH="$HOME/go/bin:$PATH"
```

## Auth

```bash
pup auth login          # OAuth2 browser flow (recommended)
pup auth status         # Check token validity
pup auth refresh        # Refresh expired token (no browser)
pup auth logout         # Clear credentials
```

**⚠️ Tokens expire (~1 hour)**. If a command fails with 401/403 mid-conversation:

```bash
pup auth refresh        # Try refresh first
pup auth login          # If refresh fails, full re-auth
```

### Headless/CI (no browser)

```bash
# Use env vars or:
export DD_API_KEY=your-api-key
export DD_APP_KEY=your-app-key
export DD_SITE=datadoghq.com    # or datadoghq.eu, etc.
```

## Command Reference

### Monitors

```bash
pup monitors list --limit 10
pup monitors list --tags "env:prod"
pup monitors get --id 12345
pup monitors mute --id 12345 --duration 1h
pup monitors unmute --id 12345
pup monitors create --name "High CPU" --type "metric alert" \
  --query "avg(last_5m):avg:system.cpu.user{*} > 80" \
  --message "CPU high @slack-ops"
```

### Logs

```bash
pup logs search --query "status:error" --duration 1h
pup logs search --query "service:payment-api" --duration 1h --limit 100
pup logs search --query "@http.status_code:5*" --duration 24h
pup logs search --query "env:prod level:error" --duration 1h --json
```

### Metrics

```bash
pup metrics query --query "avg:system.cpu.user{*}" --duration 1h
pup metrics query --query "sum:trace.express.request.hits{service:api}" --duration 1h
pup metrics list --filter "system.*"
```

### APM / Traces

```bash
pup apm services list
pup apm traces list --service my-service --duration 1h
pup apm traces list --service api --min-duration 500ms --duration 1h
pup apm traces list --service api --status error --duration 1h
pup apm traces get abc123def456
```

### Incidents

```bash
pup incidents list --status active
pup incidents list --status resolved --duration 7d
pup incidents create --title "API Degradation" --severity SEV-2
pup incidents update --id abc-123 --status stable
pup incidents resolve --id abc-123
```

### Dashboards

```bash
pup dashboards list
pup dashboards list --tags "team:platform"
pup dashboards get --id abc-123
pup dashboards create --title "My Dashboard" --description "..." --widgets '[...]'
```

### SLOs

```bash
pup slos list
pup slos get --id slo-123
pup slos history --id slo-123 --duration 30d
```

### Synthetics

```bash
pup synthetics list
pup synthetics results --test-id abc-123
pup synthetics trigger --test-id abc-123
```

### On-Call

```bash
pup on-call teams list
pup on-call schedules list
pup on-call who --team platform-team
```

### Hosts / Infrastructure

```bash
pup hosts list --limit 50
pup hosts list --filter "env:prod"
pup hosts mute --hostname web-01 --duration 1h
pup hosts get --hostname web-01
```

### Events

```bash
pup events list --duration 24h
pup events list --tags "source:deploy"
pup events post --title "Deploy started" --text "v1.2.3" --tags "env:prod"
```

### Downtimes

```bash
pup downtime list
pup downtime create --scope "env:staging" --duration 2h --message "Maintenance"
pup downtime cancel --id 12345
```

### Users / Teams

```bash
pup users list
pup teams list
```

### Security

```bash
pup security signals list --duration 24h
pup security signals list --severity critical
```

### Service Catalog

```bash
pup services list
pup services get --name payment-api
```

### Notebooks

```bash
pup notebooks list
pup notebooks get --id 12345
```

### Workflows

```bash
pup workflows list
pup workflows trigger --id workflow-123 --input '{"key": "value"}'
```

## Subcommand Discovery

```bash
pup --help              # List all commands
pup <command> --help    # Command-specific help
```

## Error Handling

| Error            | Cause             | Fix                       |
| ---------------- | ----------------- | ------------------------- |
| 401 Unauthorized | Token expired     | `pup auth refresh`        |
| 403 Forbidden    | Missing scope     | Check app key permissions |
| 404 Not Found    | Wrong ID/resource | Verify resource exists    |
| Rate limited     | Too many requests | Add delays between calls  |

## Install

```bash
go install github.com/DataDog/pup@latest
```

### Verify Installation

```bash
# Check if pup is in PATH
which pup

# If not found, check if it was installed
ls ~/go/bin/pup
```

### PATH Troubleshooting

If `pup` is installed but `which pup` returns nothing, Go's bin directory isn't in your PATH.

**Check where pup is:**

```bash
ls ~/go/bin/pup           # Standard location
ls $GOPATH/bin/pup        # If GOPATH is set
ls $GOBIN/pup             # If GOBIN is set
```

**Add to PATH (pick your shell):**

For **zsh** (macOS default):

```bash
# Add this line to ~/.zshrc
export PATH="$HOME/go/bin:$PATH"

# Then reload
source ~/.zshrc
```

For **bash**:

```bash
# Add this line to ~/.bashrc or ~/.bash_profile
export PATH="$HOME/go/bin:$PATH"

# Then reload
source ~/.bashrc
```

For **fish**:

```fish
# Add this line to ~/.config/fish/config.fish
fish_add_path $HOME/go/bin

# Or set permanently
set -Ux fish_user_paths $HOME/go/bin $fish_user_paths

# Then reload
source ~/.config/fish/config.fish
```

**Verify:**

```bash
which pup        # Should show path
pup --version    # Should show version
```

### Alternative: Full Path

If you don't want to modify PATH, use the full path:

```bash
~/go/bin/pup auth login
~/go/bin/pup monitors list
```

Or create an alias:

```bash
alias pup="$HOME/go/bin/pup"
```

## Sites

| Site          | `DD_SITE` value     |
| ------------- | ------------------- |
| US1 (default) | `datadoghq.com`     |
| US3           | `us3.datadoghq.com` |
| US5           | `us5.datadoghq.com` |
| EU1           | `datadoghq.eu`      |
| AP1           | `ap1.datadoghq.com` |
| US1-FED       | `ddog-gov.com`      |

Related Skills

We are still matching the closest adjacent skills for this page. In the meantime, continue through the full directory.