Public
Star 历史趋势
数据来源: GitHub API · 生成自 Stargazers.cn
README.md

:dog2: Give Your Agent a Puppy: Introducing Pup CLI

CI Rust License

Every 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).

What is Pup?

A comprehensive, AI-agent-ready CLI covering a wide range of 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.

AI 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 a great choice for AI-native workflows by exposing the API surface in a way agents can navigate without barking up the wrong tree.

Why Your Agent Will Love It

  • :paw_prints: Well-trained: Self-discoverable commands (no need to chase documentation)
  • :guide_dog: Obedient: Structured JSON/YAML output for easy parsing
  • :service_dog: On a leash: OAuth2 + PKCE for scoped access (no more long-lived keys running wild)
  • :dog: Knows all the tricks: Monitors, logs, metrics, RUM, security and more!

Try It (Humans Welcome Too!)

# Give your agent credentials (house-training, basically)
pup auth login

# Now they can fetch data like a good pup
pup monitors list --tags="team:api-platform"         # Fetch monitors
pup logs search --query="status:error" --from="1h"   # Sniff out errors
pup metrics query --query="avg:system.cpu.user{*}"   # Track the metrics tail

: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.

P.S. No actual puppies were harmed in the making of this CLI. Just a lot of Rust code and API endpoints.

API Coverage

Pup covers most major Datadog product surfaces. See docs/COMMANDS.md for the canonical command reference, or run pup --help (or pup agent schema for machine-readable output) for the live list of commands as built.

💡 Tip: Use Ctrl/Cmd+F to search for specific APIs. Request features via GitHub Issues.


📊 Core Observability
API DomainStatusPup CommandsNotes
Metricsmetrics search, metrics query, metrics list, metrics getV1 and V2 APIs supported
Logslogs search, logs list, logs aggregateV1 and V2 APIs supported
Eventsevents list, events search, events getInfrastructure event management
RUMrum apps, rum sessions, rum events, rum aggregate, rum metrics, rum retention-filters, rum playlists, rum replay, rum viewership, rum heatmapsApps, sessions, events, metrics, retention filters, replay playlists/segments/viewership, heatmaps
APM Servicesapm services, apm entities, apm dependencies, apm flow-mapServices stats, operations, resources; entity queries; dependencies; flow visualization
Tracestraces search, traces aggregate, traces metricsSpan search/aggregation and span-based metric definitions
ProfilingprofilingNot supported in pup yet. Use the Datadog MCP server: https://docs.datadoghq.com/bits_ai/mcp_server. Enable with: https://mcp.datadoghq.com/api/unstable/mcp-server/mcp?toolsets=core,profiling
Database Monitoringdbm samples searchDBM query sample search
Session Replayrum replay segments, rum playlists, rum viewership, rum sessions searchSegments, playlist CRUD, viewership; discover sessions via RUM (not logs)
🔔 Monitoring & Alerting
API DomainStatusPup CommandsNotes
Monitorsmonitors list, monitors get, monitors delete, monitors searchFull CRUD support with advanced search
Dashboardsdashboards list, dashboards get, dashboards delete, dashboards urlFull management capabilities
SLOsslos list, slos get, slos delete, slos statusFull CRUD plus V2 status query
Syntheticssynthetics tests, synthetics locations, synthetics suitesTests, locations, and V2 suites management
Downtimesdowntime list, downtime get, downtime cancelFull downtime management
Notebooksnotebooks list, notebooks get, notebooks deleteInvestigation notebooks supported
Status Pagesstatus-pages pages, status-pages components, status-pages degradationsNew — Pages, components, and degradation management
Powerpacks-Not yet implemented
Workflow Automationworkflows get, workflows create, workflows update, workflows delete, workflows run, workflows instancesFull CRUD plus run and instance management (list, get, cancel)
Local Runbooksrunbooks list, runbooks describe, runbooks run, runbooks import, runbooks validateNew — YAML-defined multi-step runbooks with pup/shell/http/workflow step types, variable interpolation, and reusable templates
🔒 Security & Compliance
API DomainStatusPup CommandsNotes
Security Monitoringsecurity rules, security signals, security findings, security content-packs, security risk-scoresRules, signals, findings, content packs, entity risk scores
Cloud Securitysecurity findings analyze, security findings schemaDDSQL analytics for misconfigurations, identity risks, and all Cloud Security finding types
Application Securitysecurity findings analyze, security asm-custom-rules, security asm-exclusionsAPI findings via DDSQL, WAF custom rules and exclusion filters
Static Analysisstatic-analysis ast, static-analysis custom-rulesets, static-analysis sca, static-analysis coverageCode security analysis
Audit Logsaudit-logs list, audit-logs searchFull audit log search and listing
Data Governancedata-governance scanner-rules listSensitive data scanner rules
Tag Governancegovernance tag-rules list, governance tag-rules get, governance tag-rules scoreTag rules and compliance scoring (/api/v2/governance/tag_rules)
CSM Threatscsm-threatsCloud Security Management threat rules and agent rules
Sensitive Data Scannerdata-governance scanner-rules listListed via Data Governance row above
Agentless Scanningagentless-scanning aws list/get/create/update/delete, agentless-scanning gcp list, agentless-scanning azure listCloud agentless scanning configuration for AWS, GCP, and Azure
Logs Restrictionlogs-restriction list, logs-restriction get, logs-restriction create, logs-restriction update, logs-restriction deleteLog restriction queries for fine-grained log access control
Data Deletiondata-deletion requests list, data-deletion requests create, data-deletion requests cancelGDPR/compliance data deletion request management
☁️ Infrastructure & Cloud
API DomainStatusPup CommandsNotes
Infrastructureinfrastructure hosts list, infrastructure hosts getHost inventory management
Tagstags list, tags get, tags add, tags update, tags deleteHost tag operations
Networknetwork flows list, network devices, network interfacesNetwork flows, device inventory, interface tags
Cloud (AWS)cloud aws list, cloud aws cloud-auth persona-mappingsAWS integration management with persona mapping CRUD
Cloud (GCP)cloud gcp listGCP integration management
Cloud (Azure)cloud azure listAzure integration management
Cloud (OCI)cloud ociOracle Cloud tenancy configs and products
Containerscontainers list, containers images listContainers
Processesprocesses listProcess inventory query
🚨 Incident & Operations
API DomainStatusPup CommandsNotes
Incidentsincidents list, incidents get, incidents attachments, incidents settings, incidents handles, incidents postmortem-templatesIncident management with settings, handles, and postmortem templates
On-Callon-call teams (CRUD, memberships with roles), on-call pages (list, get, create)Team management and newest-first on-call page access
Case Managementcases (create, search, assign, archive, projects, jira, servicenow, move)Complete case management with Jira/ServiceNow linking
Error Trackingerror-tracking issues search, error-tracking issues getError issue search and details
Service Catalogservice-catalog list, service-catalog getService registry management
Scorecardsscorecards list, scorecards getService quality scores
Fleet Automationfleet agents, fleet deployments, fleet schedulesAgent management, deployments, schedules (Preview)
HAMRhamr connections get, hamr connections createNew — High Availability Multi-Region connections
Investigationsinvestigations list, investigations get, investigations triggerBits AI SRE investigation management
Change Managementchange-management create, change-management get, change-management update, change-management create-branch, change-management decisionsChange request management with decisions and branching
Change Storieschange-stories listChange events for a service (deployments, feature flags, config, k8s, watchdog) over a time window
Incident Services/Teamsincidents services, incidents teamsService and team CRUD scoped to incident management
Live Debuggerdebugger probes list, debugger probes get, debugger probes create, debugger probes delete, debugger probes watchRemote log probe management for Live Debugger
Software Catalogsoftware-catalog entities list, software-catalog entities upsert, software-catalog kinds list, software-catalog relations listSoftware Catalog entity and kind management (next-gen catalog)
🔧 CI/CD & Development
API DomainStatusPup CommandsNotes
CI Visibilitycicd pipelines list, cicd events listCI/CD pipeline visibility and events
Test Optimizationcicd tests, cicd flaky-tests, test-optimizationTest events, flaky test management, and Test Optimization API
DORA Metricscicd doraDORA deployment patching
Code Coveragecode-coverage branch-summary, code-coverage commit-summaryBranch and commit-level coverage summaries
Deployment Gatesdeployment-gates gates, deployment-gates evaluations, deployment-gates rulesDeployment gate CRUD, evaluation triggers, and rule management
👥 Organization & Access
API DomainStatusPup CommandsNotes
Usersusers list, users get, users roles, users seatsUser and role management with seat assignment
Organizationsorganizations get, organizations listOrganization settings management
API Keysapi-keys list, api-keys get, api-keys create, api-keys deleteFull API key CRUD
App Keysapp-keys list, app-keys get, app-keys create, app-keys update, app-keys deleteFull application key CRUD
Service Accounts-Managed via users commands
Roles-Only list via users
AuthN Mappingsauthn-mappings list, authn-mappings get, authn-mappings create, authn-mappings update, authn-mappings deleteSAML/IdP attribute-to-role authentication mappings
⚙️ Platform & Configuration
API DomainStatusPup CommandsNotes
Usage Meteringusage summary, usage hourlyUsage and billing metrics
Cost Managementcosts datadog projected, costs datadog attribution, costs datadog by-org, costs datadog aws-config, costs datadog azure-config, costs datadog gcp-config, costs ccm custom-costs, costs ccm tag-descriptions, costs ccm tag-metadata, costs ccm tags, costs ccm tag-keys, costs ccm budgets, costs ccm commitmentsCost attribution, cloud cost configs (AWS/Azure/GCP), and Cloud Cost Management (custom costs, tag descriptions, budgets, commitment programs)
Product Analyticsproduct-analytics events send, product-analytics queryServer-side product analytics events and queries
Integrationsintegrations slack, integrations pagerduty, integrations webhooks, integrations jira, integrations servicenow, integrations google-chat, integrations ms-teamsThird-party integrations including Jira, ServiceNow, Google Chat, and Microsoft Teams
Feature Flagsfeature-flags flags, feature-flags environments, feature-flags allocations, feature-flags exposure, feature-flags enable, feature-flags disableFeature flag management with environment, allocation, and exposure control
Data Streams (Kafka)kafka topic-configs, kafka broker-configs, kafka client-configs, kafka read-messagesExperimental — Kafka cluster inspection via Datadog
Restricted Datasetsdatasets list, datasets get, datasets create, datasets update, datasets deleteRestricted dataset management for data access control
Observability Pipelinesobs-pipelines list, obs-pipelines get, obs-pipelines create, obs-pipelines update, obs-pipelines delete, obs-pipelines validateFull pipeline CRUD and validation
LLM Observabilityllm-obs projects, llm-obs experiments, llm-obs datasetsNew — LLM Obs projects, experiments (incl. events submit), and dataset management (incl. datasets records / records-full)
Reference Tablesreference-tables list, reference-tables get, reference-tables create, reference-tables batch-queryNew — Reference table management for log enrichment
Miscellaneousmisc ip-ranges, misc statusIP ranges and status
App Builderapp-builder list, app-builder get, app-builder create, app-builder update, app-builder delete, app-builder publishLow-code app management with publish/unpublish and batch delete
Key Managementapi-keys, app-keysAPI key and application key CRUD (listed in Organization & Access above)
IP Allowlist-Not yet implemented

Installation

Homebrew (macOS/Linux)

brew tap datadog-labs/pack
brew install datadog-labs/pack/pup

Build from Source

git clone https://github.com/DataDog/pup.git && cd pup
cargo build --release
cp target/release/pup /usr/local/bin/pup

Manual Download

Download pre-built binaries from the latest release.

Authentication

Pup supports two authentication methods. OAuth2 is preferred and will be used automatically if you've logged in.

OAuth2 Authentication (Preferred)

OAuth2 provides secure, browser-based authentication with automatic token refresh.

# Set your Datadog site (optional, defaults to datadoghq.com).
# Common values: datadoghq.com, datadoghq.eu, us3.datadoghq.com,
# us5.datadoghq.com, ap1.datadoghq.com, ap2.datadoghq.com, ddog-gov.com.
# Other Datadog sites are also accepted.
export DD_SITE="datadoghq.com"

# Login via browser
pup auth login

# Use any command - OAuth tokens are used automatically
pup monitors list

# Check status
pup auth status

# Export the current access token to a credential-command integration
pup auth token

# Logout
pup auth logout

Multiple sites and orgs

Pup persists each login as a separate session, so you can authenticate against multiple Datadog sites and orgs and switch between them with --org <name> (or DD_ORG=<name>) on any subcommand.

# Login to a non-default site. --site is only accepted by `pup auth login`
# and `pup auth status`. For other commands, select the site via DD_SITE
# (or use a named session and pass --org on every subsequent command; see
# the Named session examples below).
pup auth login --site datadoghq.eu
DD_SITE=datadoghq.eu pup monitors list

# Named session for a parent/child sub-org on the same site.
pup auth login --org staging-child
pup monitors list --org staging-child     # site recalled from the session, no DD_SITE needed

# Named session on another site. DD_SITE / --site is only needed at login.
pup auth login --site ap2.datadoghq.com --org ap2-prod
pup monitors list --org ap2-prod          # site recalled

# SAML/SSO org with a vanity login page (e.g. acme.datadoghq.com). Pass the
# full host via --site; it routes the consent page to the right tenant and is
# also used for subsequent API calls, not just the login/consent flow.
pup auth login --org acme-prod --site acme.datadoghq.com

# Pre-target a specific org by UUID (sent as dd_oid). Skips the org switcher
# when the browser session already matches and pre-routes SAML/SSO. The UUID
# is persisted and re-emitted on subsequent `pup auth login` invocations for
# the same named session.
pup auth login --org acme-prod --org-uuid 11111111-2222-3333-4444-555555555555

# List all stored sessions (site, org, org_uuid, scopes, expiry, status).
pup auth list

# Refresh or log out a specific named session.
pup auth refresh --org staging-child
pup auth logout --org staging-child       # clears only that named session

Note: pup auth logout (default session) also deletes the shared DCR client credentials for that site. Named-org sessions on the same site keep their access tokens but will fail to refresh until the shared credentials are re-registered, which happens automatically on the next pup auth login on that site (any org, named or default). Logging out a named session (--org <name>) does not touch the shared client credentials.

Site selection rules (when pup resolves a site for a non-auth command):

  1. DD_SITE env var (or site: in ~/.config/pup/config.yaml), if set.
  2. The site recorded in ~/.config/pup/sessions.json for the named --org / DD_ORG.
  3. Default: datadoghq.com.

pup auth login and pup auth status additionally accept --site, which wins over the above for those two commands.

Each org name maps to exactly one session, so step 2 is always unambiguous. An unnamed (default) session can't be selected by --org at all -- it has no name to look up.

Token Storage: By default, OAuth tokens and DCR client credentials are stored in your platform's secure store: macOS Keychain (via Apple's Security framework), Linux Secret Service (via the keyring crate), or Windows Credential Manager (via the keyring crate; sharded across multiple WinCred entries to stay within WinCred's per-record size limit). When no secure store is available, pup falls back to JSON files under ~/.config/pup/ with 0600 permissions; in file mode tokens and client credentials are kept in separate files (tokens_<site>.json, client_<site>.json). In either mode, all tokens for a given site share one tokens entry, keyed internally by org name.

Within a single command, the per-site entry is read at most once (reads are memoized for the process), so the OS keychain prompts at most once per site even when a command touches credentials several times.

The storage backend can be overridden with DD_TOKEN_STORAGE (env var) or token_storage in the config file (env var takes precedence):

ValuemacOSLinuxWindowsPrompts
keychain (default)Keychain via Security frameworkSecret Service (GNOME Keyring / KWallet); falls back to file if unavailableWinCred (chunked)macOS may prompt once per stable app identity (signed Homebrew release); unsigned/dev builds may prompt on each new build
filePlaintext JSON under ~/.config/pup/, 0600 permsSameSameNever

Note: OAuth2 requires Dynamic Client Registration (DCR) to be enabled on your Datadog site. If DCR is not available yet, use API key authentication.

See docs/OAUTH2.md for detailed OAuth2 documentation.

pup auth token prints the current OAuth access token for command-backed integrations, refreshing a stored token when needed. It writes only the token to stdout, is native-only, and is omitted from AI-agent schemas. Treat its output as a secret.

API Key Authentication (Fallback)

If OAuth2 tokens are not available, Pup automatically falls back to API key authentication.

export DD_API_KEY="your-datadog-api-key"
export DD_APP_KEY="your-datadog-application-key"
export DD_SITE="datadoghq.com"  # Optional, defaults to datadoghq.com

# Use any command - API keys are used automatically
pup monitors list

Bearer Token Authentication (WASM / Headless)

For WASM builds or environments without keychain access, use a pre-obtained bearer token:

export DD_ACCESS_TOKEN="your-oauth-access-token"
export DD_SITE="datadoghq.com"

pup monitors list

API key authentication (DD_API_KEY + DD_APP_KEY) also works in WASM. See the WASM section below.

Authentication Priority

Pup checks for authentication in this order:

  1. DD_ACCESS_TOKEN - Stateless bearer token (highest priority)
  2. OAuth2 tokens (from pup auth login) - Used if valid tokens exist
  3. API keys (from DD_API_KEY and DD_APP_KEY) - Used if OAuth tokens not available

Usage

Authentication

# OAuth2 login (recommended)
pup auth login

# Check authentication status
pup auth status

# Refresh access token
pup auth refresh

# Logout
pup auth logout

Test Connection

pup auth test

Monitors

# List all monitors
pup monitors list

# Get specific monitor
pup monitors get 12345678

# Delete monitor
pup monitors delete 12345678 --yes

Metrics

# Search metrics using classic query syntax (v1 API)
pup metrics search --query="avg:system.cpu.user{*}" --from="1h"

# Query time-series data (v2 API)
pup metrics query --query="avg:system.cpu.user{*}" --from="1h"

# List available metrics
pup metrics list --filter="system.*"

Dashboards

# List all dashboards
pup dashboards list

# Get dashboard details
pup dashboards get abc-123-def

# Print a live 1 week dashboard URL
pup dashboards url abc-123-def --from=now-1w --to=now --live=true

# Delete dashboard
pup dashboards delete abc-123-def --yes

SLOs

# List all SLOs
pup slos list

# Get SLO details
pup slos get abc-123

# Delete SLO
pup slos delete abc-123 --yes

Incidents

# List all incidents
pup incidents list

# Get incident details
pup incidents get abc-123-def

IDP Entity Graph

# Discover available entity kinds and their query schema
pup idp kinds list
pup idp kinds describe service

# Query services and walk ownership and system relations
pup idp entities query 'kind:service AND owner:payments' \
  --field name,owner,contacts \
  --include owner_teams,systems

Global Flags

  • -o, --output: Output format (json, table, yaml) - default: json
  • -y, --yes: Skip confirmation prompts for destructive operations

Environment Variables

  • DD_ACCESS_TOKEN: Bearer token for stateless auth (highest priority)
  • DD_API_KEY: Datadog API key (optional if using OAuth2 or DD_ACCESS_TOKEN)
  • DD_APP_KEY: Datadog Application key (optional if using OAuth2 or DD_ACCESS_TOKEN)
  • DD_SITE: Datadog site (default: datadoghq.com)
  • PUP_TRUST_SITE: Trust a non-Datadog --site/DD_SITE host for this invocation without a prompt (true/1). For durable trust, add the host to trusted_sites in the config file. See docs/TROUBLESHOOTING.md.
  • DD_AUTO_APPROVE: Auto-approve destructive operations (true/false)
  • DD_TOKEN_STORAGE: Token storage backend (keychain (default) or file). Can also be set as token_storage in the config file.

Agent Mode

When 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.

Agent mode is auto-detected when any of these environment variables are set to 1 or true:

VariableAgent
CLAUDE_CODE or CLAUDECODEClaude Code
CURSOR_AGENTCursor
CODEX or OPENAI_CODEXOpenAI Codex
AIDERAider
CLINECline
WINDSURF_AGENTWindsurf
GITHUB_COPILOTGitHub Copilot
AMAZON_Q or AWS_Q_DEVELOPERAmazon Q
GEMINI_CODE_ASSISTGemini Code Assist
SRC_CODYSourcegraph Cody
PI_CODING_AGENTpi.dev
FORCE_AGENT_MODEAny agent (manual override)

You can also enable it explicitly with the --agent flag or by setting FORCE_AGENT_MODE=1:

# Auto-detected (e.g., running inside Claude Code)
pup monitors list

# Explicit flag
pup monitors list --agent

# Environment variable override
FORCE_AGENT_MODE=1 pup monitors list

If 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.

WASM

Pup compiles to WebAssembly via the wasm32-wasip2 target for use in WASI-compatible runtimes such as Wasmtime, Wasmer, and Cloudflare Workers.

Building

# Install the WASI target
rustup target add wasm32-wasip2

# Build for WASI
cargo build --target wasm32-wasip2 --no-default-features --features wasi --release

Authentication

The WASM build supports stateless authentication — keychain storage and browser-based OAuth login are not available. Use either DD_ACCESS_TOKEN or API keys:

# Option 1: Bearer token
DD_ACCESS_TOKEN="your-token" DD_SITE="datadoghq.com" wasmtime run target/wasm32-wasip2/release/pup.wasm -- monitors list

# Option 2: API keys
DD_API_KEY="your-api-key" DD_APP_KEY="your-app-key" wasmtime run target/wasm32-wasip2/release/pup.wasm -- monitors list

The 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.

Limitations

  • No local token storage (keychain/file) — use DD_ACCESS_TOKEN or API keys
  • No browser-based OAuth login flow
  • Extensions are not included in WASM builds; pup extension ... and installed extension dispatch are native-only
  • Networking relies on the host runtime's networking capabilities

Running with Wasmtime

# Run directly
wasmtime run --env DD_ACCESS_TOKEN="your-token" target/wasm32-wasip2/release/pup.wasm -- monitors list

# Or with API keys
wasmtime run --env DD_API_KEY="key" --env DD_APP_KEY="key" target/wasm32-wasip2/release/pup.wasm -- --help

Runbooks

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.

# List available runbooks
pup runbooks list

# Inspect a runbook's steps
pup runbooks describe incident-triage

# Run a runbook, passing required variables
pup runbooks run deploy-service --arg SERVICE=payments --arg VERSION=1.2.3

# Dry-run (show steps without executing)
pup runbooks run deploy-service --dry-run

# Import a runbook from a file
pup runbooks import ./my-runbook.yaml

# Validate a runbook file without running it
pup runbooks validate ./my-runbook.yaml

Runbook Features

  • Step types: pup (Datadog commands), shell, http, datadog-workflow, confirm
  • Variable interpolation: {{VAR_NAME}} in any field, passed via --arg KEY=VALUE
  • Reusable templates: Store shared step definitions in _templates/ and reference them with template: <name>
  • HTTP steps: Full method support (GET/POST/PUT/PATCH/DELETE) with body, headers, content_type, and body_file
  • Failure handling: on_failure: fail|warn|ignore and optional: true per step
  • Conditional execution: when: on_success|on_failure|always
  • Polling: poll.interval, poll.timeout, poll.until for long-running operations
  • Output capture: capture: VAR_NAME stores stdout for use in later steps
  • Timestamped output: Every step shows start time, elapsed duration, and labeled stdout/stderr

See docs/examples/runbooks/ for ready-to-use examples and docs/EXAMPLES.md for full reference.

Agent Skills

Pup ships a set of skills and domain agents embedded in the binary, installable to any AI coding assistant. Run pup skills list to see what's available in the version you have installed.

# Install all skills and agents for the auto-detected platform
pup skills install

# Install for a specific platform (positional arg)
pup skills install claude
pup skills install cursor
pup skills install codex
pup skills install opencode
pup skills install pi
pup skills install devin

# Install for every supported platform at once
pup skills install all

# By default installs go to the user-global directory; --project keeps them local
pup skills install claude --project

# List available skills and agents
pup skills list
pup skills list --type=skill
pup skills list --type=agent

# Install a specific skill by name
pup skills install claude --name dd-monitors

For Claude Code, skills install to ~/.claude/skills/ (or .claude/skills/ with --project) and agents install to ~/.claude/agents/ (native subagent format). If the CLAUDE_CONFIG_DIR environment variable is set, user-scope installs go to $CLAUDE_CONFIG_DIR/skills/ and $CLAUDE_CONFIG_DIR/agents/ instead of ~/.claude/. For Cursor, Codex, opencode, and Devin, everything installs as SKILL.md under that tool's skills directory (e.g. ~/.cursor/skills/, ~/.codex/skills/, ~/.config/opencode/skills/, and Devin's ~/.agents/skills/ — or .agents/skills/ with --project).

Pup ships plugin manifest files for several AI coding assistants:

# Claude Code
/plugin marketplace add DataDog/pup

# Codex (reads .codex-plugin/plugin.json from the repo, or marketplace.json from ~/.agents/plugins/)

# Cursor (reads .cursor-plugin/plugin.json from the repo)

ACP Server

pup acp serve turns pup into a local AI agent server, letting coding tools talk directly to Datadog Bits AI. It supports two protocols:

  • ACP — Agent Communication Protocol for ACP-native clients
  • OpenAI-compatiblePOST /chat/completions for opencode, Cursor, and any @ai-sdk/openai-compatible client
# Start the server (auto-discovers your first Datadog AI agent)
pup acp serve

# Or target a specific agent
pup acp serve --agent-id <uuid> --port 9099

Point any OpenAI-compatible client at http://127.0.0.1:9099 to start asking questions about your Datadog environment.

opencode (~/Library/Application Support/opencode/opencode.jsonc):

{
  "provider": {
    "datadog": {
      "name": "Datadog AI",
      "npm": "@ai-sdk/openai-compatible",
      "models": { "datadog-ai": { "name": "Datadog AI Agent" } },
      "options": { "baseURL": "http://127.0.0.1:9099" }
    }
  }
}

See docs/EXAMPLES.md#acp-server for full usage details.

Development

# Run tests
cargo test

# Build
cargo build --release

# Lint
cargo clippy -- -D warnings

# Format check
cargo fmt --check

# Build WASM
rustup target add wasm32-wasip2
cargo build --target wasm32-wasip2 --no-default-features --features wasi

# Run without building
cargo run -- monitors list

License

Apache License 2.0 - see LICENSE for details.

Documentation

For detailed documentation, see CLAUDE.md.

关于 About

Give your AI agent a Pup — a CLI companion with 200+ commands across 33+ Datadog products.
cliclientdatadogobservability

语言 Languages

Rust95.1%
Python4.1%
TypeScript0.6%
Shell0.2%

提交活跃度 Commit Activity

代码提交热力图
过去 52 周的开发活跃度
1879
Total Commits
峰值: 158次/周
Less
More

核心贡献者 Contributors