{"id":45108326,"url":"https://github.com/datadog-labs/pup","last_synced_at":"2026-04-24T19:02:53.263Z","repository":{"id":337545608,"uuid":"1149169439","full_name":"datadog-labs/pup","owner":"datadog-labs","description":"Give your AI agent a Pup — a CLI companion with 200+ commands across 33+ Datadog products.","archived":false,"fork":false,"pushed_at":"2026-04-22T00:43:09.000Z","size":15488,"stargazers_count":675,"open_issues_count":10,"forks_count":60,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-04-22T01:36:40.708Z","etag":null,"topics":["cli","client","datadog","observability"],"latest_commit_sha":null,"homepage":"https://www.datadoghq.com","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/datadog-labs.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"docs/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-02-03T19:56:25.000Z","updated_at":"2026-04-21T23:31:02.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/datadog-labs/pup","commit_stats":null,"previous_names":["datadog/pup","datadog-labs/pup"],"tags_count":87,"template":false,"template_full_name":null,"purl":"pkg:github/datadog-labs/pup","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datadog-labs%2Fpup","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datadog-labs%2Fpup/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datadog-labs%2Fpup/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datadog-labs%2Fpup/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/datadog-labs","download_url":"https://codeload.github.com/datadog-labs/pup/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datadog-labs%2Fpup/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32236744,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-24T13:21:15.438Z","status":"ssl_error","status_checked_at":"2026-04-24T13:21:15.005Z","response_time":64,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","client","datadog","observability"],"created_at":"2026-02-19T22:11:21.047Z","updated_at":"2026-04-24T19:02:53.239Z","avatar_url":"https://github.com/datadog-labs.png","language":"Rust","readme":"# :dog2: Give Your Agent a Puppy: Introducing Pup CLI\n\n**NOTICE: This is in Preview mode, we are fine tuning the interactions and bugs that arise. Please file issues or submit PRs. Thank you for your early interest!**\n\n[![CI](https://github.com/datadog-labs/pup/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/datadog-labs/pup/actions/workflows/ci.yml)\n[![Rust](https://img.shields.io/badge/rust-stable-orange?logo=rust)](https://www.rust-lang.org/)\n[![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE)\n\nEvery AI agent needs a loyal companion. Meet Pup — the CLI that gives your agents full access to Datadog's observability platform (because even autonomous agents need good tooling, not just tricks).\n\n## What is Pup?\n\nA comprehensive, AI-agent-ready CLI with 325+ commands across 57 Datadog product domains. We've unleashed the full power of Datadog's APIs so your agents can fetch metrics, sniff out errors, and track down issues without barking up the wrong API tree.\n\nAI agents are the fastest-growing interface for infrastructure management. Companies like Vercel and AWS are racing to make their platforms agent-accessible, but we're leading the pack. Pup makes Datadog the alpha choice for AI-native workflows with 100% documented API coverage while competitors are still learning basic commands.\n\n## Why Your Agent Will Love It\n\n- :paw_prints: **Well-trained**: Self-discoverable commands (no need to chase documentation)\n- :guide_dog: **Obedient**: Structured JSON/YAML output for easy parsing\n- :service_dog: **On a leash**: OAuth2 + PKCE for scoped access (no more long-lived keys running wild)\n- :dog: **Knows all the tricks**: Monitors, logs, metrics, RUM, security and more!\n\n## Try It (Humans Welcome Too!)\n\n```bash\n# Give your agent credentials (house-training, basically)\npup auth login\n\n# Now they can fetch data like a good pup\npup monitors list --tags=\"team:api-platform\"         # Fetch monitors\npup logs search --query=\"status:error\" --from=\"1h\"   # Sniff out errors\npup metrics query --query=\"avg:system.cpu.user{*}\"   # Track the metrics tail\n```\n\n:dog: **TL;DR**: We built a comprehensive CLI so AI agents can use Datadog like a pro. Give your agent a pup. They're housetrained, loyal, and know way more tricks than you'd expect.\n\n*P.S. No actual puppies were harmed in the making of this CLI. Just a lot of Rust code and API endpoints.*\n\n## API Coverage\n\n\u003c!-- Last updated: 2026-03-30 | API Client: datadog-api-client-rust v0.28 --\u003e\n\nPup implements **54 of 85+ available Datadog APIs** (63% coverage) with **325+ subcommands** across **58 command groups**.\n\nSee [docs/COMMANDS.md](docs/COMMANDS.md) for detailed command reference.\n\n💡 **Tip:** Use Ctrl/Cmd+F to search for specific APIs. [Request features via GitHub Issues](https://github.com/datadog-labs/pup/issues).\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e📊 Core Observability (5/9 implemented)\u003c/b\u003e\u003c/summary\u003e\n\n| API Domain | Status | Pup Commands | Notes |\n|------------|--------|--------------|-------|\n| Metrics | ✅ | `metrics search`, `metrics query`, `metrics list`, `metrics get` | V1 and V2 APIs supported |\n| Logs | ✅ | `logs search`, `logs list`, `logs aggregate` | V1 and V2 APIs supported |\n| Events | ✅ | `events list`, `events search`, `events get` | Infrastructure event management |\n| RUM | ✅ | `rum apps`, `rum sessions`, `rum metrics`, `rum retention-filters`, `rum playlists`, `rum heatmaps` | Apps, sessions, metrics, retention filters, replay playlists, heatmaps |\n| APM Services | ✅ | `apm services`, `apm entities`, `apm dependencies`, `apm flow-map` | Services stats, operations, resources; entity queries; dependencies; flow visualization |\n| Traces | ❌ | - | Not yet implemented |\n| Profiling | ❌ | - | Not yet implemented |\n| Session Replay | ❌ | - | Not yet implemented |\n| Spans Metrics | ❌ | - | Not yet implemented |\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e🔔 Monitoring \u0026 Alerting (8/10 implemented)\u003c/b\u003e\u003c/summary\u003e\n\n| API Domain | Status | Pup Commands | Notes |\n|------------|--------|--------------|-------|\n| Monitors | ✅ | `monitors list`, `monitors get`, `monitors delete`, `monitors search` | Full CRUD support with advanced search |\n| Dashboards | ✅ | `dashboards list`, `dashboards get`, `dashboards delete`, `dashboards url` | Full management capabilities |\n| SLOs | ✅ | `slos list`, `slos get`, `slos delete`, `slos status` | Full CRUD plus V2 status query |\n| Synthetics | ✅ | `synthetics tests`, `synthetics locations`, `synthetics suites` | Tests, locations, and V2 suites management |\n| Downtimes | ✅ | `downtime list`, `downtime get`, `downtime cancel` | Full downtime management |\n| Notebooks | ✅ | `notebooks list`, `notebooks get`, `notebooks delete` | Investigation notebooks supported |\n| Status Pages | ✅ | `status-pages pages`, `status-pages components`, `status-pages degradations` | **New** — Pages, components, and degradation management |\n| Dashboard Lists | ❌ | - | Not yet implemented |\n| Powerpacks | ❌ | - | Not yet implemented |\n| Workflow Automation | ✅ | `workflows get`, `workflows create`, `workflows update`, `workflows delete`, `workflows run`, `workflows instances` | Full CRUD plus run and instance management (list, get, cancel) |\n| Local Runbooks | ✅ | `runbooks list`, `runbooks describe`, `runbooks run`, `runbooks import`, `runbooks validate` | **New** — YAML-defined multi-step runbooks with pup/shell/http/workflow step types, variable interpolation, and reusable templates |\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e🔒 Security \u0026 Compliance (6/8 implemented)\u003c/b\u003e\u003c/summary\u003e\n\n| API Domain | Status | Pup Commands | Notes |\n|------------|--------|--------------|-------|\n| Security Monitoring | ✅ | `security rules`, `security signals`, `security findings`, `security content-packs`, `security risk-scores` | Rules, signals, findings, content packs, entity risk scores |\n| Cloud Security | ✅ | `security findings analyze`, `security findings schema` | DDSQL analytics for misconfigurations, identity risks, and all Cloud Security finding types |\n| Application Security | ✅ | `security findings analyze`, `security asm-custom-rules`, `security asm-exclusions` | API findings via DDSQL, WAF custom rules and exclusion filters |\n| Static Analysis | ✅ | `static-analysis ast`, `static-analysis custom-rulesets`, `static-analysis sca`, `static-analysis coverage` | Code security analysis |\n| Audit Logs | ✅ | `audit-logs list`, `audit-logs search` | Full audit log search and listing |\n| Data Governance | ✅ | `data-governance scanner-rules list` | Sensitive data scanner rules |\n| CSM Threats | ❌ | - | Not yet implemented |\n| Sensitive Data Scanner | ❌ | - | Not yet implemented |\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e☁️ Infrastructure \u0026 Cloud (8/9 implemented)\u003c/b\u003e\u003c/summary\u003e\n\n| API Domain | Status | Pup Commands | Notes |\n|------------|--------|--------------|-------|\n| Infrastructure | ✅ | `infrastructure hosts list`, `infrastructure hosts get` | Host inventory management |\n| Tags | ✅ | `tags list`, `tags get`, `tags add`, `tags update`, `tags delete` | Host tag operations |\n| Network | ⏳ | `network flows list`, `network devices list` | Placeholder — API endpoints pending |\n| Cloud (AWS) | ✅ | `cloud aws list`, `cloud aws cloud-auth persona-mappings` | AWS integration management with persona mapping CRUD |\n| Cloud (GCP) | ✅ | `cloud gcp list` | GCP integration management |\n| Cloud (Azure) | ✅ | `cloud azure list` | Azure integration management |\n| Cloud (OCI) | ✅ | `cloud oci` | **New** — Oracle Cloud tenancy configs and products |\n| Containers | ✅ | `containers list`, `containers images list` | Containers |\n| Processes | ❌ | - | Not yet implemented |\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e🚨 Incident \u0026 Operations (10/11 implemented)\u003c/b\u003e\u003c/summary\u003e\n\n| API Domain | Status | Pup Commands | Notes |\n|------------|--------|--------------|-------|\n| Incidents | ✅ | `incidents list`, `incidents get`, `incidents attachments`, `incidents settings`, `incidents handles`, `incidents postmortem-templates` | Incident management with settings, handles, and postmortem templates |\n| On-Call (Teams) | ✅ | `on-call teams` (CRUD, memberships with roles) | Full team management system with admin/member roles |\n| Case Management | ✅ | `cases` (create, search, assign, archive, projects, jira, servicenow, move) | Complete case management with Jira/ServiceNow linking |\n| Error Tracking | ✅ | `error-tracking issues search`, `error-tracking issues get` | Error issue search and details |\n| Service Catalog | ✅ | `service-catalog list`, `service-catalog get` | Service registry management |\n| Scorecards | ✅ | `scorecards list`, `scorecards get` | Service quality scores |\n| Fleet Automation | ✅ | `fleet agents`, `fleet deployments`, `fleet schedules` | Agent management, deployments, schedules (Preview) |\n| HAMR | ✅ | `hamr connections get`, `hamr connections create` | **New** — High Availability Multi-Region connections |\n| Investigations | ✅ | `investigations list`, `investigations get`, `investigations trigger` | Bits AI SRE investigation management |\n| Change Management | ✅ | `change-management create`, `change-management get`, `change-management update`, `change-management create-branch`, `change-management decisions` | Change request management with decisions and branching |\n| Incident Services/Teams | ❌ | - | Not yet implemented |\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e🔧 CI/CD \u0026 Development (4/4 implemented)\u003c/b\u003e\u003c/summary\u003e\n\n| API Domain | Status | Pup Commands | Notes |\n|------------|--------|--------------|-------|\n| CI Visibility | ✅ | `cicd pipelines list`, `cicd events list` | CI/CD pipeline visibility and events |\n| Test Optimization | ✅ | `cicd tests`, `cicd flaky-tests` | **New** — Test events and flaky test management |\n| DORA Metrics | ✅ | `cicd dora` | **New** — DORA deployment patching |\n| Code Coverage | ✅ | `code-coverage branch-summary`, `code-coverage commit-summary` | **New** — Branch and commit-level coverage summaries |\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e👥 Organization \u0026 Access (5/6 implemented)\u003c/b\u003e\u003c/summary\u003e\n\n| API Domain | Status | Pup Commands | Notes |\n|------------|--------|--------------|-------|\n| Users | ✅ | `users list`, `users get`, `users roles`, `users seats` | User and role management with seat assignment |\n| Organizations | ✅ | `organizations get`, `organizations list` | Organization settings management |\n| API Keys | ✅ | `api-keys list`, `api-keys get`, `api-keys create`, `api-keys delete` | Full API key CRUD |\n| App Keys | ✅ | `app-keys list`, `app-keys get`, `app-keys create`, `app-keys update`, `app-keys delete` | Full application key CRUD |\n| Service Accounts | ✅ | - | Managed via users commands |\n| Roles | ❌ | - | Only list via users |\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003cb\u003e⚙️ Platform \u0026 Configuration (9/11 implemented)\u003c/b\u003e\u003c/summary\u003e\n\n| API Domain | Status | Pup Commands | Notes |\n|------------|--------|--------------|-------|\n| Usage Metering | ✅ | `usage summary`, `usage hourly` | Usage and billing metrics |\n| Cost Management | ✅ | `cost projected`, `cost attribution`, `cost by-org`, `cost aws-config`, `cost azure-config`, `cost gcp-config` | Cost attribution plus AWS/Azure/GCP cloud cost config management |\n| Product Analytics | ✅ | `product-analytics events send`, `product-analytics query` | Server-side product analytics events and queries |\n| Integrations | ✅ | `integrations slack`, `integrations pagerduty`, `integrations webhooks`, `integrations jira`, `integrations servicenow`, `integrations google-chat` | Third-party integrations with Jira, ServiceNow, and Google Chat support |\n| Observability Pipelines | ✅ | `obs-pipelines list`, `obs-pipelines get`, `obs-pipelines create`, `obs-pipelines update`, `obs-pipelines delete`, `obs-pipelines validate` | Full pipeline CRUD and validation |\n| LLM Observability | ✅ | `llm-obs projects`, `llm-obs experiments`, `llm-obs datasets` | **New** — LLM Obs projects, experiments, and dataset management |\n| Reference Tables | ✅ | `reference-tables list`, `reference-tables get`, `reference-tables create`, `reference-tables batch-query` | **New** — Reference table management for log enrichment |\n| Miscellaneous | ✅ | `misc ip-ranges`, `misc status` | IP ranges and status |\n| App Builder | ✅ | `app-builder list`, `app-builder get`, `app-builder create`, `app-builder update`, `app-builder delete`, `app-builder publish` | Low-code app management with publish/unpublish and batch delete |\n| Key Management | ❌ | - | Not yet implemented |\n| IP Allowlist | ❌ | - | Not yet implemented |\n\n\u003c/details\u003e\n\n## Installation\n\n### Homebrew (macOS/Linux)\n\n```bash\nbrew tap datadog-labs/pack\nbrew install datadog-labs/pack/pup\n```\n\n### Build from Source\n\n```bash\ngit clone https://github.com/datadog-labs/pup.git \u0026\u0026 cd pup\ncargo build --release\ncp target/release/pup /usr/local/bin/pup\n```\n\n### Manual Download\n\nDownload pre-built binaries from the [latest release](https://github.com/datadog-labs/pup/releases/latest).\n\n## Authentication\n\nPup supports two authentication methods. **OAuth2 is preferred** and will be used automatically if you've logged in.\n\n### OAuth2 Authentication (Preferred)\n\nOAuth2 provides secure, browser-based authentication with automatic token refresh.\n\n```bash\n# Set your Datadog site (optional)\nexport DD_SITE=\"datadoghq.com\"  # Defaults to datadoghq.com\n\n# Login via browser\npup auth login\n\n# Use any command - OAuth tokens are used automatically\npup monitors list\n\n# Check status\npup auth status\n\n# Logout\npup auth logout\n```\n\n**Token Storage**: Tokens are stored securely in your system's keychain (macOS Keychain, Windows Credential Manager, Linux Secret Service). Set `DD_TOKEN_STORAGE=file` to use file-based storage instead.\n\n**Note**: OAuth2 requires Dynamic Client Registration (DCR) to be enabled on your Datadog site. If DCR is not available yet, use API key authentication.\n\nSee [docs/OAUTH2.md](docs/OAUTH2.md) for detailed OAuth2 documentation.\n\n### API Key Authentication (Fallback)\n\nIf OAuth2 tokens are not available, Pup automatically falls back to API key authentication.\n\n```bash\nexport DD_API_KEY=\"your-datadog-api-key\"\nexport DD_APP_KEY=\"your-datadog-application-key\"\nexport DD_SITE=\"datadoghq.com\"  # Optional, defaults to datadoghq.com\n\n# Use any command - API keys are used automatically\npup monitors list\n```\n\n### Bearer Token Authentication (WASM / Headless)\n\nFor WASM builds or environments without keychain access, use a pre-obtained bearer token:\n\n```bash\nexport DD_ACCESS_TOKEN=\"your-oauth-access-token\"\nexport DD_SITE=\"datadoghq.com\"\n\npup monitors list\n```\n\nAPI key authentication (`DD_API_KEY` + `DD_APP_KEY`) also works in WASM. See the [WASM](#wasm) section below.\n\n### Authentication Priority\n\nPup checks for authentication in this order:\n1. **`DD_ACCESS_TOKEN`** - Stateless bearer token (highest priority)\n2. **OAuth2 tokens** (from `pup auth login`) - Used if valid tokens exist\n3. **API keys** (from `DD_API_KEY` and `DD_APP_KEY`) - Used if OAuth tokens not available\n\n## Usage\n\n### Authentication\n\n```bash\n# OAuth2 login (recommended)\npup auth login\n\n# Check authentication status\npup auth status\n\n# Refresh access token\npup auth refresh\n\n# Logout\npup auth logout\n```\n\n### Test Connection\n\n```bash\npup test\n```\n\n### Monitors\n\n```bash\n# List all monitors\npup monitors list\n\n# Get specific monitor\npup monitors get 12345678\n\n# Delete monitor\npup monitors delete 12345678 --yes\n```\n\n### Metrics\n\n```bash\n# Search metrics using classic query syntax (v1 API)\npup metrics search --query=\"avg:system.cpu.user{*}\" --from=\"1h\"\n\n# Query time-series data (v2 API)\npup metrics query --query=\"avg:system.cpu.user{*}\" --from=\"1h\"\n\n# List available metrics\npup metrics list --filter=\"system.*\"\n```\n\n### Dashboards\n\n```bash\n# List all dashboards\npup dashboards list\n\n# Get dashboard details\npup dashboards get abc-123-def\n\n# Delete dashboard\npup dashboards delete abc-123-def --yes\n```\n\n### SLOs\n\n```bash\n# List all SLOs\npup slos list\n\n# Get SLO details\npup slos get abc-123\n\n# Delete SLO\npup slos delete abc-123 --yes\n```\n\n### Incidents\n\n```bash\n# List all incidents\npup incidents list\n\n# Get incident details\npup incidents get abc-123-def\n```\n\n## Global Flags\n\n- `-o, --output`: Output format (json, table, yaml) - default: json\n- `-y, --yes`: Skip confirmation prompts for destructive operations\n\n## Environment Variables\n\n- `DD_ACCESS_TOKEN`: Bearer token for stateless auth (highest priority)\n- `DD_API_KEY`: Datadog API key (optional if using OAuth2 or DD_ACCESS_TOKEN)\n- `DD_APP_KEY`: Datadog Application key (optional if using OAuth2 or DD_ACCESS_TOKEN)\n- `DD_SITE`: Datadog site (default: datadoghq.com)\n- `DD_AUTO_APPROVE`: Auto-approve destructive operations (true/false)\n- `DD_TOKEN_STORAGE`: Token storage backend (keychain or file, default: auto-detect)\n\n## Agent Mode\n\nWhen pup is invoked by an AI coding agent, it automatically switches to **agent mode** which returns structured JSON responses optimized for machine consumption (including metadata, error details, and hints). Agent mode also auto-approves confirmation prompts.\n\nAgent mode is **auto-detected** when any of these environment variables are set to `1` or `true`:\n\n| Variable | Agent |\n|----------|-------|\n| `CLAUDE_CODE` or `CLAUDECODE` | Claude Code |\n| `CURSOR_AGENT` | Cursor |\n| `CODEX` or `OPENAI_CODEX` | OpenAI Codex |\n| `AIDER` | Aider |\n| `CLINE` | Cline |\n| `WINDSURF_AGENT` | Windsurf |\n| `GITHUB_COPILOT` | GitHub Copilot |\n| `AMAZON_Q` or `AWS_Q_DEVELOPER` | Amazon Q |\n| `GEMINI_CODE_ASSIST` | Gemini Code Assist |\n| `SRC_CODY` | Sourcegraph Cody |\n| `FORCE_AGENT_MODE` | Any agent (manual override) |\n\nYou can also enable it explicitly with the `--agent` flag or by setting `FORCE_AGENT_MODE=1`:\n\n```bash\n# Auto-detected (e.g., running inside Claude Code)\npup monitors list\n\n# Explicit flag\npup monitors list --agent\n\n# Environment variable override\nFORCE_AGENT_MODE=1 pup monitors list\n```\n\nIf you are integrating pup into an AI agent workflow, make sure the appropriate environment variable is set so responses are optimized for your agent. Without it, pup defaults to human-friendly output.\n\n## WASM\n\nPup compiles to WebAssembly via the `wasm32-wasip2` target for use in WASI-compatible runtimes such as Wasmtime, Wasmer, and Cloudflare Workers.\n\n### Building\n\n```bash\n# Install the WASI target\nrustup target add wasm32-wasip2\n\n# Build for WASI\ncargo build --target wasm32-wasip2 --no-default-features --features wasi --release\n```\n\n### Authentication\n\nThe WASM build supports **stateless authentication** — keychain storage and browser-based OAuth login are not available. Use either `DD_ACCESS_TOKEN` or API keys:\n\n```bash\n# Option 1: Bearer token\nDD_ACCESS_TOKEN=\"your-token\" DD_SITE=\"datadoghq.com\" wasmtime run target/wasm32-wasip2/release/pup.wasm -- monitors list\n\n# Option 2: API keys\nDD_API_KEY=\"your-api-key\" DD_APP_KEY=\"your-app-key\" wasmtime run target/wasm32-wasip2/release/pup.wasm -- monitors list\n```\n\nThe `pup auth status` command works in WASM and reports which credentials are configured. The `login`, `logout`, and `refresh` subcommands return guidance to use `DD_ACCESS_TOKEN`.\n\n### Limitations\n\n- No local token storage (keychain/file) — use `DD_ACCESS_TOKEN` or API keys\n- No browser-based OAuth login flow\n- Networking relies on the host runtime's networking capabilities\n\n### Running with Wasmtime\n\n```bash\n# Run directly\nwasmtime run --env DD_ACCESS_TOKEN=\"your-token\" target/wasm32-wasip2/release/pup.wasm -- monitors list\n\n# Or with API keys\nwasmtime run --env DD_API_KEY=\"key\" --env DD_APP_KEY=\"key\" target/wasm32-wasip2/release/pup.wasm -- --help\n```\n\n## Runbooks\n\n`pup runbooks` is a local execution engine for YAML-defined operational procedures. Runbooks live in `~/.config/pup/runbooks/` and encode multi-step tasks — from deployment gates to incident triage — using `pup`, shell, HTTP, Datadog Workflow, and interactive confirmation steps.\n\n```bash\n# List available runbooks\npup runbooks list\n\n# Inspect a runbook's steps\npup runbooks describe incident-triage\n\n# Run a runbook, passing required variables\npup runbooks run deploy-service --arg SERVICE=payments --arg VERSION=1.2.3\n\n# Dry-run (show steps without executing)\npup runbooks run deploy-service --dry-run\n\n# Import a runbook from a file\npup runbooks import ./my-runbook.yaml\n\n# Validate a runbook file without running it\npup runbooks validate ./my-runbook.yaml\n```\n\n### Runbook Features\n\n- **Step types**: `pup` (Datadog commands), `shell`, `http`, `datadog-workflow`, `confirm`\n- **Variable interpolation**: `{{VAR_NAME}}` in any field, passed via `--arg KEY=VALUE`\n- **Reusable templates**: Store shared step definitions in `_templates/` and reference them with `template: \u003cname\u003e`\n- **HTTP steps**: Full method support (GET/POST/PUT/PATCH/DELETE) with `body`, `headers`, `content_type`, and `body_file`\n- **Failure handling**: `on_failure: fail|warn|ignore` and `optional: true` per step\n- **Conditional execution**: `when: on_success|on_failure|always`\n- **Polling**: `poll.interval`, `poll.timeout`, `poll.until` for long-running operations\n- **Output capture**: `capture: VAR_NAME` stores stdout for use in later steps\n- **Timestamped output**: Every step shows start time, elapsed duration, and labeled stdout/stderr\n\nSee `docs/examples/runbooks/` for ready-to-use examples and [docs/EXAMPLES.md](docs/EXAMPLES.md) for full reference.\n\n## Agent Skills\n\nPup ships 7 skills and 48 domain agents embedded in the binary, installable to any AI coding assistant.\n\n```bash\n# Install all skills and agents for your AI assistant\npup skills install\n\n# Install for a specific tool\npup skills install --target-agent=claude-code\npup skills install --target-agent=cursor\n\n# List available skills and agents\npup skills list\npup skills list --type=skill\npup skills list --type=agent\n\n# Install a specific skill\npup skills install dd-monitors\n```\n\nFor Claude Code, skills install to `.claude/skills/` and agents install to `.claude/agents/` (native subagent format). For other tools, everything installs as `SKILL.md` in the tool's skills directory.\n\nPup is also available as a **Claude Code plugin marketplace**:\n\n```\n/plugin marketplace add datadog-labs/pup\n```\n\n## ACP Server\n\n`pup acp serve` turns pup into a local AI agent server, letting coding tools talk directly to Datadog Bits AI. It supports two protocols:\n\n- **[ACP](https://agentcommunicationprotocol.dev/)** — Agent Communication Protocol for ACP-native clients\n- **OpenAI-compatible** — `POST /chat/completions` for [opencode](https://opencode.ai), Cursor, and any `@ai-sdk/openai-compatible` client\n\n```bash\n# Start the server (auto-discovers your first Datadog AI agent)\npup acp serve\n\n# Or target a specific agent\npup acp serve --agent-id \u003cuuid\u003e --port 9099\n```\n\nPoint any OpenAI-compatible client at `http://127.0.0.1:9099` to start asking questions about your Datadog environment.\n\n**opencode** (`~/Library/Application Support/opencode/opencode.jsonc`):\n```jsonc\n{\n  \"provider\": {\n    \"datadog\": {\n      \"name\": \"Datadog AI\",\n      \"npm\": \"@ai-sdk/openai-compatible\",\n      \"models\": { \"datadog-ai\": { \"name\": \"Datadog AI Agent\" } },\n      \"options\": { \"baseURL\": \"http://127.0.0.1:9099\" }\n    }\n  }\n}\n```\n\nSee [docs/EXAMPLES.md#acp-server](docs/EXAMPLES.md) for full usage details.\n\n## Development\n\n```bash\n# Run tests\ncargo test\n\n# Build\ncargo build --release\n\n# Lint\ncargo clippy -- -D warnings\n\n# Format check\ncargo fmt --check\n\n# Build WASM\nrustup target add wasm32-wasip2\ncargo build --target wasm32-wasip2 --no-default-features --features wasi\n\n# Run without building\ncargo run -- monitors list\n```\n\n## License\n\nApache License 2.0 - see LICENSE for details.\n\n## Documentation\n\nFor detailed documentation, see [CLAUDE.md](CLAUDE.md).\n","funding_links":[],"categories":["Rust"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdatadog-labs%2Fpup","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdatadog-labs%2Fpup","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdatadog-labs%2Fpup/lists"}