From Oodle Skills
Create and manage Oodle metric drop rules — reduce ingestion cost by dropping or sampling high-volume, low-value metrics.
How this skill is triggered — by the user, by Claude, or both
Slash command
/oodle-agent-skills:oodle-drop-rulesThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill teaches the agent to drop or sample high-volume metrics safely: estimate the impact first, prefer sampling over dropping, and never silently delete a metric a dashboard depends on.
This skill teaches the agent to drop or sample high-volume metrics safely: estimate the impact first, prefer sampling over dropping, and never silently delete a metric a dashboard depends on.
brew install oodle-ai/oodle/oodle
oodle configure
Confirm the drop-rules endpoint works:
oodle drop-rules list -o json | jq 'length'
Before running any oodle command:
oodle metrics list --match <prefix> -o json | jq 'length' to estimate impact.oodle dashboards list -o json | jq '.[] | select(.panels[]?.query | contains("<metric>"))'oodle monitors list -o json | jq '.[] | select(.query | contains("<metric>"))'action: sample (e.g. sampleRate: 0.1) on the first attempt; switch to action: drop only after the sampled data confirms low value.oodle drop-rules create -f rule.json.| Task | Command |
|---|---|
| List rules | oodle drop-rules list -o json |
| Get rule | oodle drop-rules get <id> -o json |
| Create rule | oodle drop-rules create -f rule.json |
| Update rule | oodle drop-rules update <id> -f rule.json |
| Delete rule | oodle drop-rules delete <id> --force |
{
"name": "drop-noisy-debug-metrics",
"matchers": [
{"name": "level", "value": "debug"},
{"name": "env", "value": "staging"}
],
"action": "drop",
"sampleRate": null
}
| Field | Meaning |
|---|---|
matchers | All matchers must match for the rule to fire (logical AND) |
action | drop (discard) or sample (keep a fraction) |
sampleRate | Required when action="sample"; float in (0,1]. null for drop |
# ✅ CORRECT — count series that will be affected
oodle metrics list --match "debug_" -o json | jq 'length'
# ✅ CORRECT — confirm no dashboard panel queries the metric
oodle dashboards list -o json | jq '.[] | select(.panels[]?.query | contains("debug_traffic_total"))'
# ✅ CORRECT — confirm no monitor depends on it
oodle monitors list -o json | jq '.[] | select(.query | contains("debug_traffic_total"))'
# ❌ WRONG — create the rule first, find out from on-call later
oodle drop-rules create -f rule.json
sample rule (safer first step){
"name": "sample-debug-metrics-staging",
"matchers": [
{"name": "__name__", "value": "debug_traffic_total"},
{"name": "env", "value": "staging"}
],
"action": "sample",
"sampleRate": 0.1
}
# ✅ CORRECT — keep 10% of the series; observe for a week before dropping
oodle drop-rules create -f rule.json
sample rule to drop# ✅ CORRECT — get → switch action → update
oodle drop-rules get dr_123 -o json > rule.json
jq '.action = "drop" | .sampleRate = null' rule.json > rule.new.json
oodle drop-rules update dr_123 -f rule.new.json
# ❌ WRONG — partial payload nulls matchers
oodle drop-rules update dr_123 -f <(echo '{"action":"drop"}')
# ✅ CORRECT
oodle drop-rules get dr_123 -o json > /dev/null
oodle drop-rules delete dr_123 --force
# ❌ WRONG — speculative delete by name match
oodle drop-rules delete "$(oodle drop-rules list | grep debug | awk '{print $1}')" --force
oodle metrics list --match <prefix> -o json | jq 'length' before creating a ruleA drop rule that matches more series than expected can hide real signal.
# ✅ CORRECT
oodle metrics list --match "kube_pod_" -o json | jq 'length'
# 1742 series — confirm with the team that all 1742 are safe to drop before creating a rule
# ❌ WRONG — create rule based on a guess; later discover a critical metric was matched
oodle drop-rules create -f rule.json
action: sample with sampleRate: 0.1 on the first iterationSampling preserves enough signal to confirm the metric truly is low-value before fully dropping it.
# ✅ CORRECT — week 1: sample at 10%, observe dashboards
"action": "sample", "sampleRate": 0.1
# week 2: if no dashboards or monitors regressed, switch to drop
"action": "drop", "sampleRate": null
# ❌ WRONG — drop on first attempt; can break a dashboard nobody remembered
"action": "drop"
env and service (or __name__) in matchersBroad matchers like {level: debug} alone can match production metrics that happen to share a label.
# ✅ CORRECT — scoped to one env
"matchers": [{"name":"level","value":"debug"},{"name":"env","value":"staging"}]
# ❌ WRONG — also drops debug metrics in prod
"matchers": [{"name":"level","value":"debug"}]
get before update to preserve fieldsUpdate is a full-document replace.
# ✅ CORRECT
oodle drop-rules get dr_123 -o json > rule.json
jq '.sampleRate = 0.05' rule.json > rule.new.json
oodle drop-rules update dr_123 -f rule.new.json
# ❌ WRONG — drops matchers and action
oodle drop-rules update dr_123 -f <(echo '{"sampleRate":0.05}')
<action>-<metric-or-domain>-<scope>Predictable names make it easy to find and revert a rule when a dashboard breaks.
# ✅ CORRECT
"name": "drop-debug-metrics-staging"
"name": "sample-kube-pod-info-prod"
# ❌ WRONG
"name": "rule1"
| Error | Cause | Fix |
|---|---|---|
| 401 Unauthorized | Invalid or missing API key | Run oodle configure or set OODLE_API_KEY |
| 404 Not Found | Drop rule ID does not exist | Verify with oodle drop-rules list -o json |
| connection refused | Wrong OODLE_DEPLOYMENT URL | Check OODLE_DEPLOYMENT env var |
sampleRate required | action: sample without sampleRate | Add sampleRate between 0 and 1 (e.g. 0.1) |
| Dashboard panel suddenly empty | Drop rule matched a metric the panel queries | Run oodle drop-rules list -o json to find the rule; delete it (oodle drop-rules delete <id> --force) or narrow its matchers |
Monitor went into no data | Drop rule matched the monitor's metric | Same fix as above; alternatively switch the rule from drop to sample |
| Cost did not decrease | Matchers don't actually match the high-volume series | Re-run oodle metrics list --match ... and compare label sets to the rule's matchers |
| 429 Too Many Requests | Bulk drop-rule sync | Add --retries 3, throttle to <10 creates per second |
npx claudepluginhub oodle-ai/agent-skillsProvides behavioral guidelines to reduce common LLM coding mistakes, focusing on simplicity, surgical changes, assumption surfacing, and verifiable success criteria.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.