Agent skill

Datadog Insights

by speakeasy-api in speakeasy-api/gram

Investigate Gram production health and post a digest to Slack

AGPL-3.0Auto-check: notes

Install Datadog Insights

skills CLI
$ npx skills add speakeasy-api/gram --skill datadog-insights -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install speakeasy-api/gram datadog-insights --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/speakeasy-api/gram.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/datadog-insights .claude/skills/datadog-insights && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
datadog-insights
GitHub stars
272
Token cost
~4.5k tokens
SKILL.md length
1,156 words
Files
1
Skills in repo
39
Repo updated
First seen
Licence
AGPL-3.0

At a glance

Investigate Gram production health and post a digest to Slack

  • Works in 8 steps: Check for critical issues first → Top endpoints by traffic → Traffic volume and trends → …
  • SKILL.md covers Step 1: Check for critical…, Step 2: Top endpoints by traffic, Step 3: Traffic volume and… and Step 4: Latency analysis, plus 4 more sections
  • Reaches slack.com; needs SLACK_BOT_TOKEN

What it does

Datadog Insights is an agent skill from speakeasy-api/gram. Investigate Gram production health and post a digest to Slack

Its SKILL.md is about 4.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It works with Datadog and Slack. The repository describes itself as: Securely scale AI usage across your organization. A single stack to Connect, Secure, Observe and Distribute agents, MCPs, and Skills within your company. The licence is AGPL-3.0.

Example prompts

  • “/datadog-insights”

Workflow steps

8 steps, taken from the step headings in SKILL.md.

  1. Check for critical issues first
  2. Top endpoints by traffic
  3. Traffic volume and trends
  4. Latency analysis
  5. Create a Datadog Notebook
  6. Write a recommendation
  7. Compose the Slack Block Kit message
  8. Post to Slack

What it can do on your machine

Read from SKILL.md and the folder at commit ad78247. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are json, sql and python).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • slack.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • SLACK_BOT_TOKEN

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Datadog Insights loads about 4.5k tokens when it runs. Until then it costs about 20 tokens; SKILL.md has 1,156 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~20
When it runs · the whole SKILL.md, loaded when a task matches
~4.5k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NoteMentions a .env fileSKILL.md:473
    ath = os.path.expanduser("~/.config/gram/.env")
  • NoteMentions a .env fileSKILL.md:481
    CK_BOT_TOKEN not found in ~/.config/gram/.env")

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from speakeasy-api/gram at commit ad78247, republished under its AGPL-3.0 licence (© speakeasy-api). 1,156 words, ~4,524 tokens.

Download SKILL.mdSave it as .claude/skills/datadog-insights/SKILL.md (or your agent's skills folder).
name
datadog-insights
description
Investigate Gram production health and post a digest to Slack

Gram Production Health Digest

You are producing a health report for Gram's production services. The report must be actionable and visually structured — critical issues must stand out immediately, tabular data must use code blocks, and every section must be separated by a divider.

Before starting: activate the datadog skill for Gram service names, MCP tools, and query guidelines.

⚠️ MANDATORY FORMAT RULES — READ BEFORE COMPOSING THE MESSAGE:

  1. Every major section MUST be preceded by a Unicode divider line: ────────────────────────────────────── on its own line, with a blank line above and below.
  2. Top endpoints, error type breakdowns, and latency tables MUST use triple-backtick code blocks — never bullet points for tabular data.
  3. Code block tables must have aligned columns using spaces. Minimum widths: endpoint 38 chars, count 8 chars, 4xx% 6 chars, 5xx% 6 chars, p95 8 chars.
  4. Each monitor in alert MUST get its own paragraph — never combine multiple monitors into one block.
  5. Do NOT collapse or omit data to save space. If there are 8 monitors, show all 8.

Step 1: Check for critical issues first

These take priority over everything else. If any exist, they become the top of the digest.

  1. Open incidents — search_datadog_incidents for state:(active OR stable) in the last 24h
  2. Monitors in alert — search_datadog_monitors with query status:alert (notification:slack-Speakeasy-gram-oncall OR notification:slack-oncall-gram). This filters to Gram-only monitors. Never include monitors that don't notify one of these two channels.
  3. Error spikes — Use analyze_datadog_logs with SQL:
    sql
    SELECT service, status, count(*) FROM logs GROUP BY service, status ORDER BY count(*) DESC
    Filter: env:prod status:(error OR critical OR alert OR emergency), last 24h. Compare the last 6h vs. the previous 18h to detect spikes.

If there are critical issues, investigate each one:

  • Get a sample of the actual error logs (search_datadog_logs)
  • Follow trace IDs with get_datadog_trace to find root causes
  • Grep in server/internal/ for the error message to find the source code location

For top error message breakdown, use analyze_datadog_logs:

sql
SELECT message, count(*) as cnt
FROM logs
WHERE service = 'gram-server' AND status IN ('error', 'critical')
GROUP BY message
ORDER BY cnt DESC
LIMIT 10

Step 2: Top endpoints by traffic

Use search_datadog_spans for service:gram-server env:prod over the last 24h, or:

sum:trace.http.server.request.hits{service:gram-server,env:prod} by {resource_name}.rollup(sum, 86400)

Collect the top 10 endpoints with:

  • Request count
  • 4xx count and rate (% of requests returning 4xx)
  • 5xx count and rate (% of requests returning 5xx)
  • p95 latency

Keep 4xx and 5xx separate — never fold them into a single error rate. 4xx is mostly client behaviour (bad auth, missing resources) and is expected on public endpoints like /mcp/{mcpSlug}, while 5xx indicates a server fault. Use get_datadog_metric grouped by status code and bucket the series by leading digit:

sum:trace.http.server.request.hits{service:gram-server,env:prod} by {resource_name,http.status_code}.rollup(sum, 86400)

If the metric is missing the http.status_code tag, fall back to aggregate_spans over service:gram-server env:prod grouped by resource_name, once with @http.status_code:[400 TO 499] and once with @http.status_code:[500 TO 599].


Compare traffic between two 12h windows:

  1. Current 12h: from: now-12h, to: now
  2. Previous 12h: from: now-24h, to: now-12h

Use get_datadog_metric with:

sum:trace.http.server.request.hits{service:gram-server,env:prod}.rollup(sum, 43200)

Report:

  • Total requests in the last 24h
  • % change between the two 12h periods (flag if > 30% change)
  • Per-service breakdown (gram-server, gram-worker, gram, fly)

Step 4: Latency analysis

p50:trace.http.server.request{service:gram-server,env:prod} by {resource_name}
p95:trace.http.server.request{service:gram-server,env:prod} by {resource_name}
p99:trace.http.server.request{service:gram-server,env:prod} by {resource_name}

Over the last 24h with .rollup(avg, 86400).

Report:

  • Global latency: p50, p95, p99 across all endpoints
  • Slowest 5 endpoints by p95 latency (with their p50 for comparison)
  • Flag any endpoint where p95 > 2s or p99 > 5s

Step 5: Create a Datadog Notebook

Call create_datadog_notebook with name "Gram Health Digest — <DAY> <DATE>" (e.g. "Gram Health Digest — Fri 2026-03-27"). Use absolute_time: true with start_time = 24h ago and end_time = now. One notebook is created per run — old ones accumulate and can be manually deleted periodically.

The notebook cells must be wrapped in {"cells": [...]}. Include:

  1. Summary markdown cell:
    json
    {
      "type": "notebook_cells",
      "attributes": {
        "definition": {
          "type": "markdown",
          "text": "One paragraph verdict with key numbers."
        }
      }
    }
  2. Error rate timeseries cell:
    json
    {
      "type": "notebook_cells",
      "attributes": {
        "definition": {
          "type": "timeseries",
          "title": "gram-server Error Rate (1h buckets)",
          "requests": [
            {
              "q": "sum:trace.http.server.request.errors{service:gram-server,env:prod}.rollup(sum, 3600)",
              "display_type": "bars",
              "style": { "palette": "warm" }
            }
          ],
          "show_legend": true,
          "yaxis": { "scale": "linear" },
          "markers": [
            {
              "value": "y = 500",
              "display_type": "warning dashed",
              "label": "Elevated"
            }
          ]
        }
      }
    }
  3. Traffic volume timeseries cell:
    json
    {
      "type": "notebook_cells",
      "attributes": {
        "definition": {
          "type": "timeseries",
          "title": "gram-server Traffic Volume (1h buckets)",
          "requests": [
            {
              "q": "sum:trace.http.server.request.hits{service:gram-server,env:prod}.rollup(sum, 3600)",
              "display_type": "area",
              "style": { "palette": "dog_classic" }
            }
          ],
          "show_legend": true,
          "yaxis": { "scale": "linear" }
        }
      }
    }
  4. p95 latency by endpoint timeseries cell:
    json
    {
      "type": "notebook_cells",
      "attributes": {
        "definition": {
          "type": "timeseries",
          "title": "Top Endpoint p95 Latency",
          "requests": [
            {
              "q": "p95:trace.http.server.request{service:gram-server,env:prod} by {resource_name}.rollup(avg, 3600)",
              "display_type": "line",
              "style": { "palette": "dog_classic" }
            }
          ],
          "show_legend": true,
          "yaxis": { "scale": "linear" },
          "markers": [
            {
              "value": "y = 2",
              "display_type": "error dashed",
              "label": "2s threshold"
            }
          ]
        }
      }
    }
  5. gram-worker error rate timeseries cell:
    json
    {
      "type": "notebook_cells",
      "attributes": {
        "definition": {
          "type": "timeseries",
          "title": "gram-worker Error Rate (1h buckets)",
          "requests": [
            {
              "q": "sum:trace.http.server.request.errors{service:gram-worker,env:prod}.rollup(sum, 3600)",
              "display_type": "bars",
              "style": { "palette": "warm" }
            }
          ],
          "show_legend": true,
          "yaxis": { "scale": "linear" }
        }
      }
    }
  6. gram (frontend) trace errors timeseries cell — gram is an APM service, so use trace metrics:
    json
    {
      "type": "notebook_cells",
      "attributes": {
        "definition": {
          "type": "timeseries",
          "title": "gram (frontend) Trace Errors (1h buckets)",
          "requests": [
            {
              "q": "sum:trace.http.server.request.errors{service:gram,env:prod}.rollup(sum, 3600)",
              "display_type": "bars",
              "style": { "palette": "warm" }
            }
          ],
          "show_legend": true,
          "yaxis": { "scale": "linear" }
        }
      }
    }
  7. fly (functions) error log stream cell — fly is a log source (not an APM service), so use a log stream, not a trace metric:
    json
    {
      "type": "notebook_cells",
      "attributes": {
        "definition": {
          "type": "log_stream",
          "title": "fly (functions) Error Logs (24h)",
          "query": "source:fly env:prod status:error",
          "columns": ["timestamp", "host", "message"],
          "message_display": "inline",
          "show_date_column": true,
          "show_message_column": true,
          "sort": { "column": "timestamp", "order": "desc" }
        }
      }
    }
  8. Slow endpoints + top errors markdown table cell with the real data from Steps 1–4.
  9. All Gram services error log stream cell — includes source:fly for Gram Functions logs:
    json
    {
      "type": "notebook_cells",
      "attributes": {
        "definition": {
          "type": "log_stream",
          "query": "(service:(gram-server OR gram-worker OR gram) OR source:fly) env:prod status:error",
          "columns": ["timestamp", "host", "service", "message"],
          "message_display": "inline",
          "show_date_column": true,
          "show_message_column": true,
          "sort": { "column": "timestamp", "order": "desc" }
        }
      }
    }

Save the notebook URL — you will link it in the Slack message footer.


Show full SKILL.md (471 more words)Show less

Step 6: Write a recommendation

Based on all the data gathered, write one concrete recommendation for the on-call engineer. Be specific:

  • If errors are spiking: name the error type, the likely cause based on code grep, and the first action to take.
  • If a slow endpoint is flagged: name it and suggest where to look (query, external call, etc.).
  • If everything is healthy: say "No action needed. Monitor X for Y."
  • If errors are declining: say so and advise continued monitoring.

This recommendation goes into the Slack message as a dedicated section.


Step 7: Compose the Slack Block Kit message

Build a list of Block Kit blocks. The message is structured around the 4 Golden Signals: Alerts → Errors → Traffic → Latency.

Formatting rules
  • Prose and bullet lists: use mrkdwn bullet points (•) with inline backtick formatting for endpoint/service names
  • Tabular data (error type breakdowns, endpoint tables, latency tables): use triple-backtick code blocks inside section mrkdwn text — they render as aligned monospace in Slack and are much more readable than bullet points for columnar data
  • Verdict: use a section with fields (2-column grid) — never a context block, which is too small to notice
Verdict emoji rules
  • 🔴 if any active incidents or monitors in ALERT state
  • 🟡 if elevated error rates (>1.5x normal), notable latency, or monitors in WARNING/ALERT state
  • 🟢 if everything looks healthy

Block structure (in order)

1. Header

json
{
  "type": "header",
  "text": { "type": "plain_text", "text": "Gram Health Digest — <DAY> <DATE>" }
}

2. Verdict — section with fields (2-column grid)

Always 6 fields: Status, Monitors in Alert, Errors (24h), Traffic (24h), Latency p95, Slow Endpoints.

json
{
  "type": "section",
  "fields": [
    { "type": "mrkdwn", "text": "*Status*\n<VERDICT_EMOJI> <one-word status>" },
    { "type": "mrkdwn", "text": "*Monitors in Alert*\n<N (name)> or 0 🟢" },
    { "type": "mrkdwn", "text": "*Errors (24h)*\n<count> · ↑<Nx> last 6h" },
    { "type": "mrkdwn", "text": "*Traffic (24h)*\n~<Xk> · <↑/↓pct%> last 12h" },
    { "type": "mrkdwn", "text": "*Latency p95*\n<Xms> (global)" },
    {
      "type": "mrkdwn",
      "text": "*Slow Endpoints*\n<N endpoints > 2s> or All healthy 🟢"
    }
  ]
}

Follow with a divider.


3. 🚨 Alerts (omit section entirely if no monitors in alert)

Each monitor gets its own paragraph. Do NOT combine monitors.

json
{
  "type": "section",
  "text": {
    "type": "mrkdwn",
    "text": "🚨 *Alerts*\n🔴 *<Monitor name>*\n<What it means and why it matters>\n*Notifying:* `#<channel>`\n\n🔴 *<Next monitor name>*\n<What it means>\n*Notifying:* `#<channel>`"
  }
}

Follow with a divider.


4. ❌ Errors

Bullet prose for per-service summary, then a code block table for top error types.

{"type": "section", "text": {"type": "mrkdwn", "text": "❌ *Errors*\n• `gram-server`: X errors in last 6h (Y/h) vs Z/h prior — *~Nx spike*\n• `gram-worker`: N errors (stable)\n• `gram` (frontend): N (stable)\n• `fly` (functions): 0 🟢\n\n*Top error types — gram-server (24h):*\n```\nmessage                                      count    pct\nnot found                                      402  31.4%\ntoken value is empty for bearer auth           270  21.1%\nmissing value for env var in api key auth       74   5.8%\nHTTP roundtrip failed                           70   5.5%\nno MCP install page metadata for toolset        65   5.1%\n```"}}

Follow with a divider.


5. 📊 Traffic

Bullet prose for trend, then a code block table for top endpoints by volume with separate 4xx and 5xx columns. Never merge 4xx and 5xx into one error column. Flag any endpoint with a 5xx rate > 1% with ⚠️.

{"type": "section", "text": {"type": "mrkdwn", "text": "📊 *Traffic*\n• Previous 12h: ~Xk requests\n• Current 12h: ~Xk requests — *↑Y%* ⚠️ (flag if >30%)\n• Total 24h: ~Xk · 4xx: N (X%) · 5xx: N (X%)\n\n*Top endpoints by volume (24h):*\n```\nendpoint                                      hits   4xx    5xx\nPOST /mcp/{mcpSlug}                        103,784  8.2%   0.1%\nPOST /rpc/hooks.otel/v1/logs                16,824  0.0%   0.0%\nPOST /rpc/hooks.claude                      14,956  0.3%   0.0%\nGET  /mcp/{mcpSlug}                         14,454  2.1%   1.4% ⚠️\nGET  /.well-known/oauth-protected-resource   6,789  0.0%   0.0%\n```"}}

Follow with a divider.


6. ⏱️ Latency

If any endpoint has p95 > 2s, use a code block table for slow endpoints. Always include "approaching threshold" if any endpoints are 1–2s p95.

{"type": "section", "text": {"type": "mrkdwn", "text": "⏱️ *Latency*\n*Global:* p50: Xms · p95: Xms · p99: Xms\n\n*Slow endpoints (p95 > 2s):*\n```\nendpoint                           p95       p50   hits\nGET /rpc/toolsets.listfororg     7,275ms  5,766ms    57  ⚠️\nGET /rpc/usage.getperiodusage    5,173ms  3,403ms    49  ⚠️\nPOST /chat/completions           4,713ms  2,615ms    15  (AI)\n```\n*Approaching threshold (p95 > 1s):*\n```\nGET /rpc/environments.list       1,406ms             57\nGET /rpc/access.listgrants       1,281ms             84\n```"}}

If all endpoints are fast:

json
{
  "type": "section",
  "text": {
    "type": "mrkdwn",
    "text": "⏱️ *Latency* — All endpoints healthy. p50: Xms · p95: Xms · p99: Xms 🟢"
  }
}

Follow with a divider.


7. Recommendation

json
{
  "type": "section",
  "text": {
    "type": "mrkdwn",
    "text": "💡 *Recommendation*\n<Specific, concrete recommendation for the on-call engineer. One or two sentences. Name the action and where to look.>"
  }
}

Follow with a divider.


8. Footer — links to Datadog notebook and skill source

json
{
  "type": "context",
  "elements": [
    {
      "type": "mrkdwn",
      "text": "🔴 Critical  🟡 Warning  🟢 Healthy  |  <NOTEBOOK_URL|View in Datadog>  |  <https://github.com/speakeasy-api/gram/blob/main/.claude/skills/datadog-insights/SKILL.md|Skill source>"
    }
  ]
}

Replace NOTEBOOK_URL with the actual notebook URL from Step 5.


Step 8: Post to Slack

Write and run this Python script via Bash. Post to #gram-datadog-insights by default, unless a different channel was specified in the prompt.

python
import json, urllib.request, os, datetime

now_utc = datetime.datetime.utcnow()
digest_date = now_utc.strftime("%a %b %-d")  # e.g. "Mon Apr 20"

env_path = os.path.expanduser("~/.config/gram/.env")
token = None
with open(env_path) as f:
    for line in f:
        if line.startswith("SLACK_BOT_TOKEN="):
            token = line.split("=", 1)[1].strip().strip('"').strip("'")
            break
if not token:
    raise RuntimeError("SLACK_BOT_TOKEN not found in ~/.config/gram/.env")

channel = "C0AKLE930BX"  # #gram-datadog-insights — override with channel name if specified in prompt

blocks = []  # replace with actual Block Kit blocks from Step 7 — use f"Gram Health Digest — {digest_date}" in the header block

def slack_post(payload):
    data = json.dumps(payload).encode()
    req = urllib.request.Request(
        "https://slack.com/api/chat.postMessage",
        data=data,
        headers={"Content-Type": "application/json", "Authorization": f"Bearer {token}"},
        method="POST",
    )
    with urllib.request.urlopen(req) as resp:
        return json.loads(resp.read())

result = slack_post({
    "channel": channel,
    "text": "Gram Health Digest",
    "blocks": blocks,
})
if not result.get("ok"):
    raise RuntimeError(f"Slack error: {result}")

ts = result["ts"]
reply = slack_post({
    "channel": channel,
    "thread_ts": ts,
    "text": "<!subteam^S09EXM6DPCY|dev-mcp-oncall>",
})
if not reply.get("ok"):
    raise RuntimeError(f"Thread reply error: {reply}")

print(f"✓ Posted to {channel} (ts={ts}), oncall tagged in thread")

MANDATORY RULES — never violate:

  • Post ALL content as ONE main message. Never split the digest across multiple messages.
  • NEVER send test or placeholder messages. Only post if you have real data from Step 1.
  • The thread reply must contain ONLY the oncall tag — nothing else.

© speakeasy-api, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/datadog-insights of speakeasy-api/gram.

Open the folder on GitHubat commit ad78247

Compare with similar skills

Datadog Insights next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Datadog Insights compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Datadog Insights this skillspeakeasy-api/gram272—~4.5kAutomated safety check: NotesAGPL-3.0
Code Design Rationale Investigatorcursor/plugins10k9 repos~2.6kAutomated safety check: PassNone
Tool ConnectorZhixiangLuo/10xProductivity478—~925Automated safety check: PassMIT
Product Diagnosisamplitude/builder-skills159—~4kAutomated safety check: PassNone
Agent Browser CLIvercel-labs/agent-browser44k24 repos~864Automated safety check: PassApache-2.0
Slack GIF Creatoranthropics/skills180k29 repos~2kAutomated safety check: PassApache-2.0

Similar skills

  • Official

    Digs into why code is shaped the way it is by checking git history, pull requests and connected tools in parallel, then reporting a cited read on the tradeoffs.

    10k GitHub starsUsed in 9 repos~2.6k tokens
    DevelopmentAuto-check passed
  • Tool Connector

    ZhixiangLuo/10xProductivity

    Connect any tool you use at work to your agent — including internal company tools, custom-built systems, deployment portals, incident trackers, internal knowledge bases, HR systems, and commercial…

    478 GitHub stars~925 tokensUpdated 2 mo ago
    DevOps & CloudAuto-check passed
  • Product Diagnosis

    amplitude/builder-skills

    Diagnoses product health by cross-referencing Amplitude analytics (dashboards, charts, funnels, feedback, AI agent analytics), optionally Datadog (errors, latency, stack traces), and optionally…

    159 GitHub stars~4k tokensUpdated 2 mo ago
    Testing & QAAuto-check passed
  • Agent Browser CLI

    vercel-labs/agent-browser

    Official

    Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking…

    44k GitHub starsUsed in 24 repos~864 tokens
    Productivity & AutomationAuto-check passed
  • Slack GIF Creator

    anthropics/skills

    Official

    Provides Slack size and frame limits, Python animation helpers and validators for building animated GIFs sized for emoji and messages.

    180k GitHub starsUsed in 29 repos~2k tokens
    Media & CreativeAuto-check passed
  • Electron App Automation

    vercel-labs/agent-browser

    Official

    Automates Electron desktop apps such as VS Code, Slack or Discord by connecting agent-browser to their Chrome DevTools Protocol port.

    44k GitHub starsUsed in 5 repos~1.7k tokens
    Productivity & AutomationAuto-check passed

More from speakeasy-api/gram

All 39 skills in this repo
  • Gram Playwright CLI

    speakeasy-api/gram

    A skill your agent uses when automating the Gram dashboard in a browser, capturing screenshots, inspecting pages.

    272 GitHub stars~3.4k tokensUpdated today
    Auto-check passed
  • Transactional Email

    speakeasy-api/gram

    A skill your agent uses when adding, changing, restyling, reviewing, validating, or previewing a Gram/Speakeasy transactional email, in Go or in LMX/MJML — a template<name.go, a TemplateKey…

    272 GitHub stars~4.7k tokensUpdated today
    Auto-check passed
  • Admin Shadcn

    speakeasy-api/gram

    A skill your agent uses when adding, changing, or styling UI in client/admin (the Gram admin dashboard) that touches shadcn/ui — a button, dialog, table, sidebar, badge, select, tabs, tooltip, card…

    272 GitHub stars~1k tokensUpdated today
    Auto-check passed
  • A skill your agent uses when adding, editing, reviewing, testing, or locating a reviewed skill distributed with the Platform MCP plugin; triggers include "Platform MCP skill", "platformmcpskills"…

    272 GitHub stars~2.2k tokensUpdated today
    Auto-check passed
  • Clickhouse

    speakeasy-api/gram

    A skill your agent uses when changing or reviewing Gram ClickHouse schemas, migrations, queries, inserts, access principals, bootstrap SQL, Cloud compatibility, partial migration failures, or…

    272 GitHub stars~3.2k tokensUpdated today
    Auto-check passed
  • Feature Flag

    speakeasy-api/gram

    A skill your agent uses when gating a feature behind a flag, dogfooding or gradually rolling out a change, choosing between productfeatures and PostHog feature flags, adding or checking a product…

    272 GitHub stars~2.6k tokensUpdated today
    Auto-check passed

Works with

Questions about Datadog Insights

What does Datadog Insights do?

Investigate Gram production health and post a digest to Slack. Datadog Insights is an agent skill from speakeasy-api/gram.

How do I install Datadog Insights in Claude Code?

Run `npx skills add speakeasy-api/gram --skill datadog-insights -a claude-code`. Or copy the skill folder (.claude/skills/datadog-insights in speakeasy-api/gram) into .claude/skills/datadog-insights in your project. Claude Code loads it when a task matches its description.

How do I install Datadog Insights in Codex?

Run `npx skills add speakeasy-api/gram --skill datadog-insights -a codex`. Or copy the skill folder (.claude/skills/datadog-insights in speakeasy-api/gram) into .agents/skills/datadog-insights in your project. Codex loads it when a task matches its description.

Can I use Datadog Insights in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add speakeasy-api/gram --skill datadog-insights -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/datadog-insights, .gemini/skills/datadog-insights, .github/skills/datadog-insights and .opencode/skills/datadog-insights in your project.

What does Datadog Insights need to run?

Going by SKILL.md and its folder, Datadog Insights needs credentials named SLACK_BOT_TOKEN.

Does Datadog Insights access the network?

SKILL.md names 1 domain. In commands or code: slack.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.

Is Datadog Insights safe to install?

Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Datadog Insights use?

Datadog Insights is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Datadog Insights use?

About 4.5k tokens (SKILL.md is roughly 18k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Datadog Insights?

Skills that share tags, products or a category with Datadog Insights: Code Design Rationale Investigator (cursor/plugins, 10k stars), Tool Connector (ZhixiangLuo/10xProductivity, 478 stars), Product Diagnosis (amplitude/builder-skills, 159 stars) and Agent Browser CLI (vercel-labs/agent-browser, 44k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Datadog Insights?

speakeasy-api (a GitHub organization) maintains it in speakeasy-api/gram, which has 272 GitHub stars. The repository holds 39 skills in this directory. The repository was last updated on October 8, 2026.

Source: speakeasy-api/gram on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.