APM - traces, services, dependencies, performance analysis.
npx skills add https://github.com/DataDog/pup --skill dd-apm
Distributed tracing, service maps, and performance analysis.
Datadog Labs Pup should be installed via:
brew tap datadog-labs/pack
brew install pup
pup auth login
pup apm services list --env production
pup traces search --query="service:api-gateway" --from="1h"
--env is required for all apm services commands.
pup apm services list --env production
pup apm services list --env staging
pup apm services stats --env production
pup apm services stats --env production --from 4h
# List operations for a service
pup apm services operations --env production --service api-gateway
# List resources (endpoints) for an operation
pup apm services resources --env production --service api-gateway --name http.request
pup apm dependencies list --env production
# View service flow map (--query and --env required)
pup apm flow-map --query "service:api-gateway" --env production
Traces are searched via the top-level traces command (not under apm).
Important: APM durations are in nanoseconds: 1 second = 1,000,000,000 ns.
# By service
pup traces search --query="service:api-gateway" --from="1h"
# Errors only
pup traces search --query="service:api-gateway status:error" --from="1h"
# Slow traces (>1 second = 1000000000 ns)
pup traces search --query="service:api-gateway @duration:>1000000000" --from="1h"
# With specific tag
pup traces search --query="service:api @http.url:/api/users" --from="1h"
# Average duration by resource
pup traces aggregate \
--query="service:api-gateway" \
--compute="avg(@duration)" \
--group-by="resource_name" \
--from="1h"
# Error count by service
pup traces aggregate \
--query="status:error" \
--compute="count" \
--group-by="service" \
--from="1h"
# p99 latency
pup traces aggregate \
--query="service:api-gateway" \
--compute="percentile(@duration, 99)" \
--from="1h"
| Metric | What It Measures |
|--------|------------------|
| trace.http.request.hits | Request count |
| trace.http.request.duration | Latency |
| trace.http.request.errors | Error count |
| trace.http.request.apdex | User satisfaction |
Not all traces are kept. Understand sampling:
| Mode | What's Kept |
|------|-------------|
| Head-based | Random % at start |
| Error/Slow | All errors, slow traces |
| Retention | What's indexed (billed) |
| Retention | Cost |
|-----------|------|
| Indexed spans | $$$ per million |
| Ingested spans | $ per million |
Best practice: Only index what you need for search.
Link APM to SLOs:
pup slos create --file slo.json
| Goal | Query |
|------|-------|
| Slowest endpoints | pup traces aggregate --query="service:api" --compute="avg(@duration)" --group-by="resource_name" --from="1h" |
| Error rate by service | pup traces aggregate --query="status:error" --compute="count" --group-by="service" --from="1h" |
| Throughput | pup traces aggregate --query="service:api" --compute="count" --group-by="resource_name" --from="1h" |
Query service instance metadata — instance IDs, hostnames, and config IDs for all
running instances of a service. Returns up to 100 instances.
# Get instance metadata for a service
pup apm service-config get --service-name my-service
# Filter by environment
pup apm service-config get --service-name my-service --env prod
# Filter by specific instance IDs
pup apm service-config get --service-name my-service --service-instance-ids "id-1,id-2"
> Note on service identity: service_name and env come from the SDK telemetry
> pipeline and may differ from values in the Service Catalog.
Query the APM tracer configuration deployed across all running instances of a service.
Useful for auditing config drift — finding instances where tracing, profiling, or AppSec
is misconfigured relative to the rest of the fleet.
# Get tracer config for a service
pup apm service-library-config get --service-name my-service
# Filter by environment
pup apm service-library-config get --service-name my-service --env prod
# Filter by language
pup apm service-library-config get --service-name my-service --env prod --language python
# Only show configs where instances disagree (config drift)
pup apm service-library-config get --service-name my-service --mixed
> Note on service identity: service_name, env, and language_name come from the
> SDK telemetry pipeline and reflect what the tracer reports at runtime. These may differ
> from values in the Service Catalog, which aggregates data from multiple sources (APM
> spans, USM, infrastructure tags, manual definitions).
| Problem | Fix |
|---------|-----|
| No traces | Check ddtrace installed, DD_TRACE_ENABLED=true |
| Missing service | Verify DD_SERVICE env var |
| Traces not linked | Check trace headers propagated |
| High cardinality | Don't tag with user_id/request_id |
| --env required error | Always pass --env to apm services commands |
Integration with protocols.io API for managing scientific protocols. This skill should be used when working with protocols.io to search, create, update, or publish protocols; manage protocol steps and materials; handle discussions and comments; organize workspaces; upload and manage files; or integrate protocols.io functionality into workflows. Applicable for protocol discovery, collaborative protocol development, experiment tracking, lab protocol management, and scientific documentation.
Analyzes job descriptions and generates tailored resumes that highlight relevant experience, skills, and achievements to maximize interview chances
Generate Excalidraw diagrams from natural language descriptions. Use when asked to "create a diagram", "make a flowchart", "visualize a process", "draw a system architecture", "create a mind map", or "generate an Excalidraw file". Supports flowcharts, relationship diagrams, mind maps, and system architecture diagrams. Outputs .excalidraw JSON files that can be opened directly in Excalidraw.
Build and distribute Expo development clients locally or via TestFlight
Use when you have a written implementation plan to execute in a separate session with review checkpoints
Data structure for annotated matrices in single-cell analysis. Use when working with .h5ad files or integrating with the scverse ecosystem. This is the data format skill—for analysis workflows use scanpy; for probabilistic models use scvi-tools; for population-scale queries use cellxgene-census.
Benchling R&D platform integration. Access registry (DNA, proteins), inventory, ELN entries, workflows via API, build Benchling Apps, query Data Warehouse, for lab data management automation.
Comprehensive molecular biology toolkit. Use for sequence manipulation, file parsing (FASTA/GenBank/PDB), phylogenetics, and programmatic NCBI/PubMed access (Bio.Entrez). Best for batch processing, custom bioinformatics pipelines, BLAST automation. For quick lookups use gget; for multi-service integration use bioservices.
Take datadog/dd-apm from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.
The instructions reference brew.
Without those the skill loads but fails at the first command.