Go-based CLI wrapper for Datadog APIs. Provides OAuth2 + API key authentication for 28 command groups with 200+ subcommands across 33 API domains.
- COMMANDS.md - Complete command reference with all 33 domains
- CONTRIBUTING.md - Git workflow, PR process, commit format
- TESTING.md - Test strategy, coverage requirements, CI/CD
- DATADOG_CI.md - Datadog CI products integration (Test Visibility, Code Coverage, SAST)
- OAUTH2.md - OAuth2 implementation details (DCR, PKCE, token storage)
- EXAMPLES.md - Usage examples and common workflows
- ARCHITECTURE.md - Design decisions and technical details
- TROUBLESHOOTING.md - Common issues and debugging
# Install via Homebrew (recommended)
brew tap datadog/pack
brew install pup
# Or clone and build from source
git clone https://github.com/DataDog/pup.git && cd pup
go build -o pup .
# Authenticate (OAuth2 recommended)
pup auth login
# Or use API keys (legacy)
export DD_API_KEY="key" DD_APP_KEY="key" DD_SITE="datadoghq.com"
# Run a command
pup monitors list --tag="env:production"
pup metrics query --query="avg:system.cpu.user{*}" --from="1h"pup/
├── cmd/ # 28 command files (metrics, logs, monitors, etc.)
│ ├── root.go # Root command + global flags
│ └── auth.go # OAuth2 authentication
├── pkg/
│ ├── auth/ # OAuth2 + DCR + token storage
│ ├── client/ # Datadog API client wrapper
│ ├── config/ # Configuration management
│ ├── formatter/ # Output formatting (JSON, YAML, table)
│ └── util/ # Time parsing, validation
└── docs/ # Extended documentation
All commands follow consistent patterns:
pup <domain> <action> [options]
pup <domain> <subgroup> <action> [options]
# Examples
pup monitors list --tag="env:prod"
pup logs search --query="status:error" --from="1h"
pup rum apps list
pup security rules listSee COMMANDS.md for complete reference.
git checkout -b <type>/<description>
# Types: feat, fix, refactor, docs, test, chore, perf
# Example: feat/add-metrics-filteringCode Style:
- Follow Go conventions and idioms
- Use
gofmtandgolangci-lint - Keep functions small and focused
- Write clear, self-documenting code
Error Handling:
- Use standard Go error patterns
- Wrap errors with context:
fmt.Errorf("context: %w", err) - Never expose API keys in errors
Testing:
- Write unit tests for public functions
- Use table-driven tests
- Mock external dependencies
- Maintain >80% coverage (CI enforced)
Stage specific files and commit with conventional format:
git add pkg/specific/files.go
git commit -m "$(cat <<'EOF'
<type>(<scope>): <subject>
<body describing what and why>
- Key change 1
- Key change 2
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
EOF
)"Commit types: feat, fix, docs, style, refactor, test, chore
gh pr create \
--title "<type>(<scope>): <clear title>" \
--body "$(cat <<'EOF'
## Summary
1-2 sentences describing what and why.
## Changes
- Change 1 with file reference (file.go:123)
- Change 2 with file reference
## Testing
- How changes were tested
- Test coverage details
## Related Issues
Closes #N
---
🤖 Generated with [Claude Code](https://claude.com/claude-code)
EOF
)"See CONTRIBUTING.md for detailed workflow and examples.
Authentication:
- OAuth2 with PKCE (recommended):
pup auth login - API keys (legacy):
DD_API_KEY+DD_APP_KEY+DD_SITE - Token storage: OS keychain (primary), encrypted file (fallback)
Security Rules:
- Never commit credentials (API keys, tokens, secrets)
- Never log or print access/refresh tokens
- Validate all user inputs to prevent injection
- Use PKCE S256 for OAuth2 flows
- Encrypt fallback token storage with AES-256-GCM
- Command-line flags (highest priority)
- Environment variables
- Config file (
~/.config/pup/config.yaml) - Default values (lowest priority)
All PRs must pass:
- Tests with race detection
- Code coverage ≥80% (enforced)
golangci-lintchecks- Build verification
Coverage badge auto-updates on main branch.
See TESTING.md for details.
- Go 1.25+
- datadog-api-client-go - Official API client
- cobra - CLI framework
- viper - Configuration
- keyring - OS keychain integration
- 28 command files implemented
- 200+ subcommands across 33 domains
- 93.9% test coverage in pkg/
- 23/33 commands fully working
- 7/33 commands blocked by API client library issues
- 3/33 commands placeholder (API endpoints pending)
See COMMANDS.md for detailed status.
Apache 2.0 - Copyright 2024-present Datadog, Inc.
- Issues: GitHub Issues
- Community: Datadog Community