{
  "markdown": "# Oodle Discovery Agent Skills\n\n<p align=\"center\"><strong>Runs entirely in your environment · Read-only operations only · No data shared externally</strong></p>\n\nAutomated tech stack and observability discovery for AI coding agents. Install the skill, run a single prompt, and get a verifiable HTML report of your infrastructure, observability tools, scale, observability costs, and pain points.\n\n## What It Does\n\nThe discovery agent systematically examines your environment to produce a tailored report covering:\n\n- **Environments** — Cloud accounts, Kubernetes clusters, regions, dev/staging/prod\n- **Tech Stack** — Languages, frameworks, databases, message queues, caches\n- **Infrastructure** — Compute scale and telemetry-relevant managed services (broad inventory only)\n- **Observability Stack** — Monitoring, logging, tracing, alerting tools\n- **Scale** — Telemetry volumes (metrics, log GB/day, trace ingestion) measured by deterministic collector scripts\n- **Costs** — Observability spend only (vendor usage/billing APIs); never your overall cloud bill\n- **Pain Points** — Observability-specific: alert fatigue, coverage gaps, tool sprawl, cost concerns\n\nThe agent presents a plan before proceeding, asks clarifying questions when it can't find information programmatically, and never performs destructive operations.\n\n## How figures stay accurate\n\nDetection is agent-driven, but **every volume and cost figure in the report is computed by a\ndeterministic collector script** (`collectors/<tool>/collect.py`) — not by the AI agent:\n\n- Collectors query the same authoritative APIs that back each vendor's own usage/billing pages\n  (e.g., the Datadog hourly usage and estimated-cost APIs).\n- Every raw API response is saved (with credentials redacted) under `discovery-output/<tool>/evidence/`,\n  and every figure records the endpoint, query, derivation method, and time window that produced it.\n- Anything that couldn't be collected appears in the report's **Coverage & Gaps** section with the\n  reason (e.g., `permission_denied`) and a remediation — never silently omitted, never guessed.\n- The report itself is rendered by `report/generate_report.py`; the agent cannot edit figures.\n\nCollector status: **Datadog**, **AWS CloudWatch**, **GCP Cloud Operations**, **Elasticsearch**, **OpenSearch**, **Grafana Mimir**, **Prometheus/Thanos/VictoriaMetrics** (with optional **Loki** and **Tempo**), and **Kubernetes inventory** (nodes/vCPU/memory/services via kubectl) are available today.\n\n## Install\n\n### Claude Code / Gemini CLI / Codex / Windsurf\n\n```bash\nnpx skills add -g oodle-ai/discovery-agent-skills -y\n```\n\n### Cursor\n\n```bash\nnpx skills add -g oodle-ai/discovery-agent-skills --agent cursor -y\n```\n\n### Manual\n\n```bash\ngit clone https://github.com/oodle-ai/discovery-agent-skills.git\ncp -r discovery-agent-skills/skills/* ~/.<agent>/skills/\n```\n\n## Usage\n\nAfter installing, tell your coding agent:\n\n```\nRun the oodle-discovery skill\n```\n\nOr simply:\n\n```\nDiscover my tech stack and observability setup and generate a report\n```\n\nThe agent will:\n1. Present a discovery plan for your approval\n2. Run read-only commands to discover your environment\n3. Run the matching collector script for each observability tool it finds (asking for read-only API credentials where needed)\n4. Ask clarifying questions for anything it can't measure automatically\n5. Generate a self-contained HTML report, walk you through any coverage gaps, and open it in your browser\n\n## Safety\n\n- **Read-only** — Never modifies, creates, or deletes any resources\n- **Rate-limited** — Throttles API calls to avoid overwhelming systems; collectors self-throttle with circuit breakers\n- **Credentials stay local** — Passed to collectors via environment variables, redacted from all saved output\n- **Transparent** — Shows you the plan before executing; every figure links to its raw API evidence\n- **Graceful** — Skips checks it can't perform (missing tools, no credentials) and reports gaps explicitly\n\n## Output\n\nThe report is a single self-contained HTML file (no external dependencies) saved to `./discovery-report.html` and opened in your default browser. It includes:\n\n- Executive summary with measured scale and observability-spend figures\n- Per-environment breakdown and tech-stack tags\n- **Coverage & Gaps** — what could not be measured and how to fix it\n- Collapsible per-tool deep dives\n- **Provenance appendix** — every figure mapped to its source API, query, and evidence file\n\nRaw evidence lives in `./discovery-output/` so any figure can be re-derived offline\n(`uv run collectors/<tool>/collect.py --report-only --output-dir ./discovery-output/<tool>`).\n\n**See a sample Datadog report:** [preview it in your browser](https://htmlpreview.github.io/?https://github.com/oodle-ai/discovery-agent-skills/blob/main/examples/sample-datadog-report.html) ([source](examples/sample-datadog-report.html)) — generated from the synthetic test fixtures in this repo.\n\n**See a sample CloudWatch report:** [preview it in your browser](https://htmlpreview.github.io/?https://github.com/oodle-ai/discovery-agent-skills/blob/main/examples/sample-cloudwatch-report.html) ([source](examples/sample-cloudwatch-report.html)) — generated from the synthetic test fixtures in this repo.\n\n**See a sample GCP Cloud Operations report:** [preview it in your browser](https://htmlpreview.github.io/?https://github.com/oodle-ai/discovery-agent-skills/blob/main/examples/sample-gcp-report.html) ([source](examples/sample-gcp-report.html)) — generated from the synthetic test fixtures in this repo.\n\n**See a sample Elasticsearch report:** [preview it in your browser](https://htmlpreview.github.io/?https://github.com/oodle-ai/discovery-agent-skills/blob/main/examples/sample-elasticsearch-report.html) ([source](examples/sample-elasticsearch-report.html)) — generated from the synthetic test fixtures in this repo.\n\n**See a sample OpenSearch report:** [preview it in your browser](https://htmlpreview.github.io/?https://github.com/oodle-ai/discovery-agent-skills/blob/main/examples/sample-opensearch-report.html) ([source](examples/sample-opensearch-report.html)) — generated from the synthetic test fixtures in this repo.\n\n**See a sample Mimir report:** [preview it in your browser](https://htmlpreview.github.io/?https://github.com/oodle-ai/discovery-agent-skills/blob/main/examples/sample-mimir-report.html) ([source](examples/sample-mimir-report.html)) — generated from the synthetic test fixtures in this repo.\n\n**See a sample Prometheus report:** [preview it in your browser](https://htmlpreview.github.io/?https://github.com/oodle-ai/discovery-agent-skills/blob/main/examples/sample-report-prometheus.html) ([source](examples/sample-report-prometheus.html)) — generated from a local Prometheus Docker instance.\n\n**See a sample VictoriaMetrics report:** [preview it in your browser](https://htmlpreview.github.io/?https://github.com/oodle-ai/discovery-agent-skills/blob/main/examples/sample-report-victoriametrics.html) ([source](examples/sample-report-victoriametrics.html)) — generated from a local VictoriaMetrics Docker instance.\n\n**See a sample Thanos report:** [preview it in your browser](https://htmlpreview.github.io/?https://github.com/oodle-ai/discovery-agent-skills/blob/main/examples/sample-report-thanos.html) ([source](examples/sample-report-thanos.html)) — generated from a local Thanos Docker instance.\n\n**See a sample Loki report:** [preview it in your browser](https://htmlpreview.github.io/?https://github.com/oodle-ai/discovery-agent-skills/blob/main/examples/sample-report-loki.html) ([source](examples/sample-report-loki.html)) — generated from a Prometheus + Loki Docker instance.\n\n**See a sample Tempo report:** [preview it in your browser](https://htmlpreview.github.io/?https://github.com/oodle-ai/discovery-agent-skills/blob/main/examples/sample-report-tempo.html) ([source](examples/sample-report-tempo.html)) — generated from a Prometheus + Tempo Docker instance.\n\n## Requirements\n\n- `uv` (https://docs.astral.sh/uv/) and Python ≥ 3.11 — used to run collector scripts. If unavailable, the skill runs in degraded mode (no measured figures, gaps reported).\n\nOptional, used when present:\n\n- `kubectl` — Kubernetes cluster discovery\n- `aws` / `gcloud` / `az` CLIs — cloud environment discovery\n- Read-only API keys for your observability vendors (e.g., Datadog API + application key with `usage_read`)\n- Access to your code repository (for IaC and dependency detection)\n\n## Development\n\n```bash\nuv sync --group dev\nuv run pytest tests\nuvx ruff check collectors report tests\n```\n\nCollector output contract: [schemas/summary.schema.json](schemas/summary.schema.json).\nAgent context contract: [schemas/context.schema.json](schemas/context.schema.json).\nEach collector documents its figure ↔ API mapping in its own README\n(e.g., [collectors/datadog/README.md](collectors/datadog/README.md)).\n\n## Platform Plugin Notes\n\nThis repository includes plugin metadata files for multiple agent platforms:\n\n- `.claude-plugin/plugin.json` and `.cursor-plugin/plugin.json` — Identical metadata for Claude Code and Cursor respectively. These files must be kept in sync.\n- `gemini-extension.json` — Minimal metadata for Gemini CLI. Gemini's extension schema supports only `name`, `version`, and `description`.\n\n## License\n\n[MIT](LICENSE)\n",
  "bytes": 9310,
  "sha": "14df3d0a1b1c1698ae0c865e220e893584eef204c589eeb3fb06324b6737f80c",
  "repo_slug": "oodle-ai/discovery-agent-skills",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_oodle_ai_discovery_agent_skills_a86ae190/readme"
}