[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-aws-investigation-cost-guardrail":3,"mdc-rqei3b-key":51,"related-org-aws-investigation-cost-guardrail":2911,"related-repo-aws-investigation-cost-guardrail":3088},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":24,"repoUrl":25,"updatedAt":26,"license":27,"forks":28,"topics":29,"repo":46,"sourceUrl":49,"mdContent":50},"investigation-cost-guardrail","enforce cost guardrails for AWS operations","Cost guardrail for AWS DevOps Agent that covers ALL AWS services and native agent tools. Before the agent makes any paid API call, this skill estimates cost, enforces budgets per investigation, detects expensive operations across all services (Athena queries, S3 scans, DynamoDB scans, SageMaker inference, PromQL, etc.), enforces time window requirements, monitors cumulative call volume, and cancels if thresholds are exceeded. This skill applies to ALL investigations regardless of which services are involved.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"aws","AWS (Amazon)","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Faws.png",[12,16,19,22],{"name":13,"slug":14,"type":15},"Operations","operations","tag",{"name":17,"slug":18,"type":15},"DevOps","devops",{"name":20,"slug":21,"type":15},"Cost Optimization","cost-optimization",{"name":23,"slug":8,"type":15},"AWS",35,"https:\u002F\u002Fgithub.com\u002Faws\u002Ftools-for-devops-agent","2026-08-20T03:53:22.719718",null,30,[30,31,32,33,34,8,35,36,37,18,38,39,40,41,42,43,44,45],"agent-skills","agentic-ai","agents","ai-agents","aiops","aws-devops-agent","cloud-operations","custom-agents","devops-agent-skills","frontier-agent","incident-response","operational-excellence","root-cause-analysis","skills","sre","support",{"repoUrl":25,"stars":24,"forks":28,"topics":47,"description":48},[30,31,32,33,34,8,35,36,37,18,38,39,40,41,42,43,44,45],"Open-source tools for AWS DevOps Agent - extend DevOps Agent with ready-to-use skills, custom agents, and other tools, for incident response, root cause analysis, and operational troubleshooting","https:\u002F\u002Fgithub.com\u002Faws\u002Ftools-for-devops-agent\u002Ftree\u002FHEAD\u002Fskills\u002Finvestigation-cost-guardrail","---\nname: investigation-cost-guardrail\ndescription: Cost guardrail for AWS DevOps Agent that covers ALL AWS services and native agent tools. Before the agent makes any paid API call, this skill estimates cost, enforces budgets per investigation, detects expensive operations across all services (Athena queries, S3 scans, DynamoDB scans, SageMaker inference, PromQL, etc.), enforces time window requirements, monitors cumulative call volume, and cancels if thresholds are exceeded. This skill applies to ALL investigations regardless of which services are involved.\nmetadata:\n  author: tqquresh, inesttia\n  version: \"2.0.0\"\n  aws-devops-agent-skills.agent-types: \"Incident RCA\"\n  aws-devops-agent-skills.aws-services: \"All\"\n  aws-devops-agent-skills.technical-domains: \"Cost Optimization, Operations\"\n---\n\n# Investigation Cost Guardrail Skill\n\n## Overview\n\nThis skill provides cost guardrails for ANY AWS service and ALL native agent tools — not just a hardcoded list. It uses **heuristic classification** to determine whether an API operation is free or paid, estimates cost before execution, and enforces per-investigation budgets.\n\n## Design Principle\n\nRather than listing every free\u002Fpaid operation across 200+ AWS services, this skill uses three layers:\n\n1. **Heuristic rules** — classify any operation based on naming patterns and behavior\n2. **Known-paid registry** — explicit overrides for high-cost operations with pricing formulas\n3. **Response validation** — detect metered usage from API response fields after execution\n\n## Activation\n\nThis skill MUST be ALWAYS ACTIVE during investigations. It does NOT require user invocation.\n\n---\n\n## Layer 0: Native Agent Tool Classification\n\nBefore Layer 1 heuristics, classify the agent's own tools. These are NOT `use_aws` calls but have distinct billing implications:\n\n### Tool Cost Matrix\n\n| Tool | Classification | Cost Model | Guardrail |\n|---|---|---|---|\n| `get_prometheus_metrics` | **PAID** | $0.01 \u002F 1,000 metrics×periods (same billing meter as CloudWatch GetMetricData) | Track series × datapoints per call |\n| `use_aws` | **VARIABLE** | Depends on operation — apply Layers 1–3 | Full heuristic pipeline |\n| `use_azure` | **FREE** | Azure Reader role, no per-call billing | Track count only |\n| `grafana_query_prometheus` | **CAUTION** | Depends on Grafana data source billing model | Track count, warn at 50+ |\n| `use_datadog` | **CAUTION** | Datadog API rate limits (no per-call $ cost, but may throttle) | Track count, warn at 100+ |\n| `use_splunk` | **PAID** | Splunk search license (per GB ingested\u002Fsearched) | Treat like CW Logs StartQuery |\n| `use_pagerduty` | **FREE** | PagerDuty API (rate limited, not per-call billed) | Track count only |\n| `shell` | **CAUTION** | May invoke `aws`, `az`, `kubectl` — untracked by Layers 1–3 | Log commands, warn if aws\u002Faz detected |\n| `subagent` | **PAID** | Counts toward agent-seconds billing ($0.0083\u002Fsec) | Track spawns, enforce total time |\n| `fs_read`, `fs_write`, `fs_tree` | **FREE** | Local file I\u002FO | No guardrail needed |\n| `datetime` | **FREE** | Internal state ops | No guardrail needed |\n| `write_scratchpad`, `read_scratchpad` | **FREE** | Internal state (may not be available in all environments) | No guardrail needed |\n| `read_memories` | **FREE** | Internal memory recall | No guardrail needed |\n\n### PromQL-Specific Controls\n\n`get_prometheus_metrics` deserves special handling because:\n\n- Cost = (number of series returned) × (number of datapoints per series) \u002F 1000 × $0.01\n- Maximum 500 series per query — a broad query hitting the cap costs ~$0.005 per period\n- Range queries with small `step` multiply cost: `7d \u002F 60s step = 10,080 datapoints × 500 series = 5M metrics`\n\n**Before each PromQL call:**\n\n```text\nestimated_metrics = min(500, estimated_series) × (time_range_seconds \u002F step_seconds)\nestimated_cost = (estimated_metrics \u002F 1000) * 0.01\n\nif estimated_cost > $0.50:\n    ⚠️ WARN — suggest narrower time range, larger step, or label filters\nif estimated_cost > $2.00:\n    🚫 HALT — require approval or suggest aggregation (sum, topk, avg)\n```\n\n**Cost reduction for PromQL:**\n\n- Use `sum by (label)` to reduce series count\n- Use `topk(N, ...)` to cap returned series\n- Increase `step` (300s instead of 60s = 5× cheaper)\n- Narrow time range (1h instead of 7d = 168× cheaper)\n\n---\n\n## Layer 1: Heuristic Classification\n\nBefore making ANY `use_aws` call, classify the operation using these rules IN ORDER:\n\n### Rule 1: FREE by default — Metadata operations\n\nAn operation is FREE if it matches ALL of these:\n\n- Verb is: `Describe`, `List`, `Get`, `Lookup`, `Check`, `Validate`, `Tag`, `Untag`\n- It returns metadata\u002Fconfiguration (not data content or query results)\n- It does NOT scan, process, or transform customer data\n\n**Examples:** `DescribeInstances`, `ListFunctions`, `GetRole`, `LookupEvents`\n\n> ⚠️ **Exception:** Some services charge per-request even for Get\u002FList operations. Layer 2 overrides this heuristic for: **S3** ($0.0004\u002F1K GET, $0.005\u002F1K LIST), **SQS** ($0.40\u002F1M requests after free tier), **Lambda Invoke** ($0.20\u002F1M). When Layer 2 has an entry, it takes precedence over Rule 1.\n\n> ⚠️ **Tool policy can override cost classification.** Some operations classified as FREE here (e.g., `cloudtrail:LookupEvents`) may be blocked by tool policy in certain environments. If an operation is denied, it costs $0.00 (never executed) — proceed with alternatives.\n\n### Rule 2: PAID — Data-scanning operations\n\nAn operation is PAID if it matches ANY of these patterns:\n\n| Pattern | Why It Costs Money | Examples |\n|---|---|---|\n| Verb contains `Query` or `Search` | Scans indexed data | `StartQuery`, `Search`, `StartQueryExecution` |\n| Verb contains `Scan` | Full table\u002Findex scan | `Scan` (DynamoDB), `StartScan` |\n| Verb contains `Execute` + processes data | Runs a computation | `StartQueryExecution` (Athena), `ExecuteStatement` |\n| Verb contains `Invoke` + runs workload | Triggers compute | `InvokeEndpoint` (SageMaker), `Invoke` (Lambda) |\n| Operation reads **content** (not metadata) | Data transfer | `GetObject` (S3, large), `GetLogEvents` (bulk), `BatchGetTraces` |\n| Operation starts a **streaming session** | Per-time billing | `StartLiveTail`, `SubscribeToShard` |\n| Operation name contains `Insights` | Analytics processing | `GetContributorInsights`, `StartQuery` |\n\n### Rule 3: CAUTION — High-volume free operations\n\nAn operation is FREE but CAUTION if:\n\n- It's a paginated List\u002FDescribe that could return thousands of results\n- It has no built-in limit and the scope is broad (e.g., all resources in a region)\n\n**Examples:** `ListObjectsV2` (large bucket), `ListMetrics` (unfiltered), `DescribeTasks` (large cluster)\n\n### Rule 4: UNKNOWN — Cannot classify\n\nIf an operation doesn't clearly fit Rules 1–3:\n\n- Treat as **CAUTION** (proceed but track)\n- After execution, check response for metered fields (see Layer 3)\n- If metered: add to the known-paid list for this session\n\n---\n\n## Layer 2: Known-Paid Registry\n\nThese operations have **confirmed pricing** with estimation formulas. This list is extensible — operators can add entries.\n\n### Confirmed Paid Operations\n\n| Service | Operation | Cost Formula | Estimation Method |\n|---|---|---|---|\n| CloudWatch Logs | `StartQuery` | $0.005\u002FGB scanned | Query `IncomingBytes` metric for time window |\n| CloudWatch Logs | `StartLiveTail` | $0.01\u002Fminute | Duration-based |\n| CloudWatch | `GetMetricData` | $0.01\u002F1,000 metrics×periods | Count metrics and periods |\n| CloudWatch | `get_prometheus_metrics` | $0.01\u002F1,000 metrics×periods | Count series × (range\u002Fstep) |\n| X-Ray | `GetTraceSummaries` | $0.50\u002F1M traces | Paginate or sample to estimate count |\n| X-Ray | `BatchGetTraces` | $0.50\u002F1M traces | Count trace IDs in request |\n| Athena | `StartQueryExecution` | $5.00\u002FTB scanned | Check table metadata; require `WHERE` clause |\n| DynamoDB | `Scan` | RCU consumed (~$0.25\u002F1M RCU) | Check `TableSizeBytes`; BLOCK unless user approves |\n| DynamoDB | `Query` (broad) | RCU consumed | Check `ItemCount`; warn if > 10K items |\n| S3 | `GetObject` | $0.0004\u002F1,000 requests + $0.09\u002FGB transfer | Count requests; flag if cross-region or >100MB |\n| S3 | `ListObjectsV2`, `ListObjects` | $0.005\u002F1,000 requests | Count calls; warn if paginating heavily |\n| S3 | `PutObject`, `CopyObject` | $0.005\u002F1,000 requests | Count calls |\n| S3 | `SelectObjectContent` | $0.002\u002FGB scanned + $0.0007\u002FGB returned | Check object size |\n| Resource Explorer | `Search` | $0.01\u002Fquery (after 1000 free\u002Fmonth) | Count calls |\n| SageMaker | `InvokeEndpoint` | Instance-dependent | BLOCK — require explicit approval |\n| Kinesis | `GetRecords` | $0.015\u002F1M records | Estimate from shard count × duration |\n| CloudWatch | Contributor Insights | $0.02\u002Frule\u002F1K events | Count rules and event volume |\n| SQS | All operations | $0.40\u002F1M requests (first 1M free\u002Fmonth) | Count total SQS calls; usually negligible |\n| Lambda | `Invoke` | $0.20\u002F1M requests + compute ($0.0000166667\u002FGB-sec) | BLOCK unless user explicitly requests function execution |\n\n> ℹ️ **Rates are baseline published figures and may vary by region.** The regional rate may be higher, so a rate-based estimate is a lower bound. Treat any estimate within 20% of the remaining budget as exceeding it.\n\n---\n\n## Layer 3: Response Validation\n\nAfter ANY operation executes, check the response for metered fields:\n\n### Metered Response Fields (indicates cost was incurred)\n\n| Field Pattern | Meaning | Action |\n|---|---|---|\n| `BytesScanned`, `DataScanned` | Data scanning charge | Record GB scanned, add to running cost |\n| `RecordsProcessed`, `ItemCount` | Record processing | Record count, estimate RCU\u002Fcost |\n| `QueryExecutionId` + `DataScannedInBytes` | Athena scan | Add to cost at $5\u002FTB |\n| `TracesProcessedCount` | X-Ray processing | Add to cost at $0.50\u002F1M |\n| `ConsumedCapacity` | DynamoDB RCU\u002FWCU | Add to cost at $0.25\u002F1M RCU |\n| `ContentLength` > 100MB | Large object fetch | Flag for transfer cost |\n| `NextToken` after 10+ pages | Pagination runaway | Trigger volume guardrail |\n| `warnings` containing \"500 series\" | PromQL truncation | Flag max-cost query, suggest narrowing |\n\nIf a previously-unclassified operation returns metered fields:\n\n1. Log it as a paid operation for this session\n2. Add the cost to the running total\n3. Warn the user: `⚠️ Discovered paid operation: \u003Cservice>:\u003Coperation> cost $X.XX`\n\n---\n\n## Budget Enforcement\n\n### Per-Investigation Budget\n\nThe agent MUST mentally track a running cost estimate throughout the investigation. Since write_scratchpad\u002Fread_scratchpad are not available in all environments, budget enforcement is behavioral — the agent maintains the accumulator in its context window.\n\n**At investigation start:**\n\n```text\nBudget: $10.00\nRunning cost: $0.00\nCall counts: {}\n```\n\n**Before each PAID operation:**\n\n```text\nestimated_cost = estimate(operation)\nif running_cost + estimated_cost > budget:\n    🚫 HALT — show budget display\nelse:\n    proceed\n    # After execution:\n    running_cost += actual_cost (from response fields or estimation)\n    call_counts[service] += 1\n```\n\n**Volume guardrails:**\n\n```text\nif call_counts[any_service] > 200: ⚠️ WARN\nif call_counts[any_service] > 500: 🚫 HALT\nif sum(all_call_counts) > 1000: 🚫 HALT\n```\n\n> ℹ️ If `write_scratchpad` becomes available in your environment, use it for persistent state across subagent boundaries. Check with: `search_user_tools(\"scratchpad\")`. If found, store `{budget, running_cost, call_counts}` as JSON.\n\n### Budget Display (on halt)\n\n```text\n📋 INVESTIGATION BUDGET STATUS\n═══════════════════════════════════════════════════════════\nBudget:      $10.00\nSpent:       $X.XX (Y paid operations)\nFree calls:  Z operations (no cost)\nPromQL:      X,XXX metrics×periods consumed ($X.XX)\nNext op:     \u003Cservice>:\u003Coperation> — estimated $X.XX\nProjected:   $X.XX (exceeds budget by $X.XX)\n\n🚫 HALTED — would exceed $10.00 budget.\n💡 Options:\n  → Approve additional $X.XX to continue\n  → Narrow the time window to reduce scan volume\n  → Skip this operation and continue with free alternatives\n  → End investigation with findings so far\n```\n\n---\n\n## Time Window Enforcement\n\nFor ANY operation classified as PAID that scans data over a time range:\n\n| Scenario | Action |\n|---|---|\n| User provided time window | ✅ Use it — estimate cost for that window |\n| No time window, operation scans data | 🚫 CANCEL — show worst-case cost, ask for window |\n| No time window, operation is bounded (single resource lookup) | ✅ Proceed — no scan involved |\n\n**Key distinction:** \"Get me the config of Lambda X\" (bounded, free) vs. \"Search logs for errors\" (unbounded scan, needs window).\n\n**PromQL-specific:** Range queries without explicit start\u002Fend default to \"now\" which is safe. But broad label selectors (`{}` with just metric name) can hit 500 series cap — always prefer specific labels.\n\n---\n\n## Cross-Region Detection\n\nFor EVERY paid operation:\n\n```text\nif target_region ≠ agent_space_region:\n    estimated_return_size = estimate_return_bytes(operation_type)\n    transfer_cost = estimated_return_size × $0.02\u002FGB\n    total_estimate += transfer_cost\n    flag: \"⚠️ Cross-region transfer: \u003Ctarget> → \u003Cagent_space>\"\n```\n\nReturn size heuristics:\n\n- Aggregation queries (stats, count, group-by): ~KB (negligible)\n- PromQL with aggregation (sum, topk): ~KB (negligible)\n- PromQL range query (500 series × 10K points): ~50MB (flag ⚠️)\n- Raw log\u002Ftrace fetches: up to 100% of matched bytes\n- Describe\u002FList results: ~KB (negligible)\n- Unknown: use 15% of scan volume as upper bound, flag ⚠️\n\n---\n\n## Cost Reduction Suggestions\n\nWhen halting or warning, ALWAYS suggest free or cheaper alternatives:\n\n### Generic Alternatives (apply to any service)\n\n| Pattern | Free\u002FCheaper Alternative |\n|---|---|\n| Broad time window scan | Narrow to ±30 min around the incident |\n| Multiple resource query | Target specific resource ID |\n| Full scan (DynamoDB, Athena) | Add filter\u002FWHERE\u002Fkey condition |\n| Analytics query for known string | Use free filter API (FilterLogEvents) — note: LookupEvents may be tool-policy-blocked in some environments |\n| Cross-region operation | Suggest user run from workload region |\n| Large object fetch | Use SelectObjectContent with SQL filter |\n| Pagination explosion | Add limit, filter, or narrower scope |\n| Broad PromQL (no label filters) | Add specific label matchers or use aggregation |\n| PromQL small step (60s over 7d) | Increase to 300s+ or reduce time range |\n\n### Service-Specific Alternatives\n\n| Instead of... | Use... | Savings |\n|---|---|---|\n| `logs:StartQuery` | `logs:FilterLogEvents` (if searching for known string) | 100% |\n| `cloudwatch:GetMetricData` (many) | `cloudwatch:GetMetricStatistics` (single) | ~100% |\n| `get_prometheus_metrics` (broad) | Add `sum by (label)` or `topk(5, ...)` | 90%+ |\n| `dynamodb:Scan` | `dynamodb:Query` with key condition | ~100% |\n| `athena:StartQueryExecution` (full) | Add partition filter in `WHERE` | 90%+ |\n| `xray:GetTraceSummaries` (broad) | Narrow time + add filter expression | 90%+ |\n| `s3:GetObject` (large) | `s3:SelectObjectContent` with SQL | Variable |\n\n---\n",{"data":52,"body":60},{"name":4,"description":6,"metadata":53},{"author":54,"version":55,"aws-devops-agent-skills":56},"tqquresh, inesttia","2.0.0",{"agent-types":57,"aws-services":58,"technical-domains":59},"Incident RCA","All","Cost Optimization, Operations",{"type":61,"children":62},"root",[63,72,79,93,99,104,139,145,150,154,160,174,181,638,644,654,687,695,707,715,760,763,769,781,787,792,865,902,939,961,967,972,1269,1275,1280,1293,1325,1331,1336,1360,1363,1369,1381,1387,1945,1960,1963,1969,1974,1980,2210,2215,2239,2242,2248,2254,2259,2267,2276,2284,2293,2301,2310,2341,2347,2356,2359,2365,2370,2430,2440,2458,2461,2467,2472,2481,2486,2519,2522,2528,2533,2539,2676,2682,2908],{"type":64,"tag":65,"props":66,"children":68},"element","h1",{"id":67},"investigation-cost-guardrail-skill",[69],{"type":70,"value":71},"text","Investigation Cost Guardrail Skill",{"type":64,"tag":73,"props":74,"children":76},"h2",{"id":75},"overview",[77],{"type":70,"value":78},"Overview",{"type":64,"tag":80,"props":81,"children":82},"p",{},[83,85,91],{"type":70,"value":84},"This skill provides cost guardrails for ANY AWS service and ALL native agent tools — not just a hardcoded list. It uses ",{"type":64,"tag":86,"props":87,"children":88},"strong",{},[89],{"type":70,"value":90},"heuristic classification",{"type":70,"value":92}," to determine whether an API operation is free or paid, estimates cost before execution, and enforces per-investigation budgets.",{"type":64,"tag":73,"props":94,"children":96},{"id":95},"design-principle",[97],{"type":70,"value":98},"Design Principle",{"type":64,"tag":80,"props":100,"children":101},{},[102],{"type":70,"value":103},"Rather than listing every free\u002Fpaid operation across 200+ AWS services, this skill uses three layers:",{"type":64,"tag":105,"props":106,"children":107},"ol",{},[108,119,129],{"type":64,"tag":109,"props":110,"children":111},"li",{},[112,117],{"type":64,"tag":86,"props":113,"children":114},{},[115],{"type":70,"value":116},"Heuristic rules",{"type":70,"value":118}," — classify any operation based on naming patterns and behavior",{"type":64,"tag":109,"props":120,"children":121},{},[122,127],{"type":64,"tag":86,"props":123,"children":124},{},[125],{"type":70,"value":126},"Known-paid registry",{"type":70,"value":128}," — explicit overrides for high-cost operations with pricing formulas",{"type":64,"tag":109,"props":130,"children":131},{},[132,137],{"type":64,"tag":86,"props":133,"children":134},{},[135],{"type":70,"value":136},"Response validation",{"type":70,"value":138}," — detect metered usage from API response fields after execution",{"type":64,"tag":73,"props":140,"children":142},{"id":141},"activation",[143],{"type":70,"value":144},"Activation",{"type":64,"tag":80,"props":146,"children":147},{},[148],{"type":70,"value":149},"This skill MUST be ALWAYS ACTIVE during investigations. It does NOT require user invocation.",{"type":64,"tag":151,"props":152,"children":153},"hr",{},[],{"type":64,"tag":73,"props":155,"children":157},{"id":156},"layer-0-native-agent-tool-classification",[158],{"type":70,"value":159},"Layer 0: Native Agent Tool Classification",{"type":64,"tag":80,"props":161,"children":162},{},[163,165,172],{"type":70,"value":164},"Before Layer 1 heuristics, classify the agent's own tools. These are NOT ",{"type":64,"tag":166,"props":167,"children":169},"code",{"className":168},[],[170],{"type":70,"value":171},"use_aws",{"type":70,"value":173}," calls but have distinct billing implications:",{"type":64,"tag":175,"props":176,"children":178},"h3",{"id":177},"tool-cost-matrix",[179],{"type":70,"value":180},"Tool Cost Matrix",{"type":64,"tag":182,"props":183,"children":184},"table",{},[185,214],{"type":64,"tag":186,"props":187,"children":188},"thead",{},[189],{"type":64,"tag":190,"props":191,"children":192},"tr",{},[193,199,204,209],{"type":64,"tag":194,"props":195,"children":196},"th",{},[197],{"type":70,"value":198},"Tool",{"type":64,"tag":194,"props":200,"children":201},{},[202],{"type":70,"value":203},"Classification",{"type":64,"tag":194,"props":205,"children":206},{},[207],{"type":70,"value":208},"Cost Model",{"type":64,"tag":194,"props":210,"children":211},{},[212],{"type":70,"value":213},"Guardrail",{"type":64,"tag":215,"props":216,"children":217},"tbody",{},[218,249,278,308,338,367,396,424,475,504,547,575,610],{"type":64,"tag":190,"props":219,"children":220},{},[221,231,239,244],{"type":64,"tag":222,"props":223,"children":224},"td",{},[225],{"type":64,"tag":166,"props":226,"children":228},{"className":227},[],[229],{"type":70,"value":230},"get_prometheus_metrics",{"type":64,"tag":222,"props":232,"children":233},{},[234],{"type":64,"tag":86,"props":235,"children":236},{},[237],{"type":70,"value":238},"PAID",{"type":64,"tag":222,"props":240,"children":241},{},[242],{"type":70,"value":243},"$0.01 \u002F 1,000 metrics×periods (same billing meter as CloudWatch GetMetricData)",{"type":64,"tag":222,"props":245,"children":246},{},[247],{"type":70,"value":248},"Track series × datapoints per call",{"type":64,"tag":190,"props":250,"children":251},{},[252,260,268,273],{"type":64,"tag":222,"props":253,"children":254},{},[255],{"type":64,"tag":166,"props":256,"children":258},{"className":257},[],[259],{"type":70,"value":171},{"type":64,"tag":222,"props":261,"children":262},{},[263],{"type":64,"tag":86,"props":264,"children":265},{},[266],{"type":70,"value":267},"VARIABLE",{"type":64,"tag":222,"props":269,"children":270},{},[271],{"type":70,"value":272},"Depends on operation — apply Layers 1–3",{"type":64,"tag":222,"props":274,"children":275},{},[276],{"type":70,"value":277},"Full heuristic pipeline",{"type":64,"tag":190,"props":279,"children":280},{},[281,290,298,303],{"type":64,"tag":222,"props":282,"children":283},{},[284],{"type":64,"tag":166,"props":285,"children":287},{"className":286},[],[288],{"type":70,"value":289},"use_azure",{"type":64,"tag":222,"props":291,"children":292},{},[293],{"type":64,"tag":86,"props":294,"children":295},{},[296],{"type":70,"value":297},"FREE",{"type":64,"tag":222,"props":299,"children":300},{},[301],{"type":70,"value":302},"Azure Reader role, no per-call billing",{"type":64,"tag":222,"props":304,"children":305},{},[306],{"type":70,"value":307},"Track count only",{"type":64,"tag":190,"props":309,"children":310},{},[311,320,328,333],{"type":64,"tag":222,"props":312,"children":313},{},[314],{"type":64,"tag":166,"props":315,"children":317},{"className":316},[],[318],{"type":70,"value":319},"grafana_query_prometheus",{"type":64,"tag":222,"props":321,"children":322},{},[323],{"type":64,"tag":86,"props":324,"children":325},{},[326],{"type":70,"value":327},"CAUTION",{"type":64,"tag":222,"props":329,"children":330},{},[331],{"type":70,"value":332},"Depends on Grafana data source billing model",{"type":64,"tag":222,"props":334,"children":335},{},[336],{"type":70,"value":337},"Track count, warn at 50+",{"type":64,"tag":190,"props":339,"children":340},{},[341,350,357,362],{"type":64,"tag":222,"props":342,"children":343},{},[344],{"type":64,"tag":166,"props":345,"children":347},{"className":346},[],[348],{"type":70,"value":349},"use_datadog",{"type":64,"tag":222,"props":351,"children":352},{},[353],{"type":64,"tag":86,"props":354,"children":355},{},[356],{"type":70,"value":327},{"type":64,"tag":222,"props":358,"children":359},{},[360],{"type":70,"value":361},"Datadog API rate limits (no per-call $ cost, but may throttle)",{"type":64,"tag":222,"props":363,"children":364},{},[365],{"type":70,"value":366},"Track count, warn at 100+",{"type":64,"tag":190,"props":368,"children":369},{},[370,379,386,391],{"type":64,"tag":222,"props":371,"children":372},{},[373],{"type":64,"tag":166,"props":374,"children":376},{"className":375},[],[377],{"type":70,"value":378},"use_splunk",{"type":64,"tag":222,"props":380,"children":381},{},[382],{"type":64,"tag":86,"props":383,"children":384},{},[385],{"type":70,"value":238},{"type":64,"tag":222,"props":387,"children":388},{},[389],{"type":70,"value":390},"Splunk search license (per GB ingested\u002Fsearched)",{"type":64,"tag":222,"props":392,"children":393},{},[394],{"type":70,"value":395},"Treat like CW Logs StartQuery",{"type":64,"tag":190,"props":397,"children":398},{},[399,408,415,420],{"type":64,"tag":222,"props":400,"children":401},{},[402],{"type":64,"tag":166,"props":403,"children":405},{"className":404},[],[406],{"type":70,"value":407},"use_pagerduty",{"type":64,"tag":222,"props":409,"children":410},{},[411],{"type":64,"tag":86,"props":412,"children":413},{},[414],{"type":70,"value":297},{"type":64,"tag":222,"props":416,"children":417},{},[418],{"type":70,"value":419},"PagerDuty API (rate limited, not per-call billed)",{"type":64,"tag":222,"props":421,"children":422},{},[423],{"type":70,"value":307},{"type":64,"tag":190,"props":425,"children":426},{},[427,436,443,470],{"type":64,"tag":222,"props":428,"children":429},{},[430],{"type":64,"tag":166,"props":431,"children":433},{"className":432},[],[434],{"type":70,"value":435},"shell",{"type":64,"tag":222,"props":437,"children":438},{},[439],{"type":64,"tag":86,"props":440,"children":441},{},[442],{"type":70,"value":327},{"type":64,"tag":222,"props":444,"children":445},{},[446,448,453,455,461,462,468],{"type":70,"value":447},"May invoke ",{"type":64,"tag":166,"props":449,"children":451},{"className":450},[],[452],{"type":70,"value":8},{"type":70,"value":454},", ",{"type":64,"tag":166,"props":456,"children":458},{"className":457},[],[459],{"type":70,"value":460},"az",{"type":70,"value":454},{"type":64,"tag":166,"props":463,"children":465},{"className":464},[],[466],{"type":70,"value":467},"kubectl",{"type":70,"value":469}," — untracked by Layers 1–3",{"type":64,"tag":222,"props":471,"children":472},{},[473],{"type":70,"value":474},"Log commands, warn if aws\u002Faz detected",{"type":64,"tag":190,"props":476,"children":477},{},[478,487,494,499],{"type":64,"tag":222,"props":479,"children":480},{},[481],{"type":64,"tag":166,"props":482,"children":484},{"className":483},[],[485],{"type":70,"value":486},"subagent",{"type":64,"tag":222,"props":488,"children":489},{},[490],{"type":64,"tag":86,"props":491,"children":492},{},[493],{"type":70,"value":238},{"type":64,"tag":222,"props":495,"children":496},{},[497],{"type":70,"value":498},"Counts toward agent-seconds billing ($0.0083\u002Fsec)",{"type":64,"tag":222,"props":500,"children":501},{},[502],{"type":70,"value":503},"Track spawns, enforce total time",{"type":64,"tag":190,"props":505,"children":506},{},[507,530,537,542],{"type":64,"tag":222,"props":508,"children":509},{},[510,516,517,523,524],{"type":64,"tag":166,"props":511,"children":513},{"className":512},[],[514],{"type":70,"value":515},"fs_read",{"type":70,"value":454},{"type":64,"tag":166,"props":518,"children":520},{"className":519},[],[521],{"type":70,"value":522},"fs_write",{"type":70,"value":454},{"type":64,"tag":166,"props":525,"children":527},{"className":526},[],[528],{"type":70,"value":529},"fs_tree",{"type":64,"tag":222,"props":531,"children":532},{},[533],{"type":64,"tag":86,"props":534,"children":535},{},[536],{"type":70,"value":297},{"type":64,"tag":222,"props":538,"children":539},{},[540],{"type":70,"value":541},"Local file I\u002FO",{"type":64,"tag":222,"props":543,"children":544},{},[545],{"type":70,"value":546},"No guardrail needed",{"type":64,"tag":190,"props":548,"children":549},{},[550,559,566,571],{"type":64,"tag":222,"props":551,"children":552},{},[553],{"type":64,"tag":166,"props":554,"children":556},{"className":555},[],[557],{"type":70,"value":558},"datetime",{"type":64,"tag":222,"props":560,"children":561},{},[562],{"type":64,"tag":86,"props":563,"children":564},{},[565],{"type":70,"value":297},{"type":64,"tag":222,"props":567,"children":568},{},[569],{"type":70,"value":570},"Internal state ops",{"type":64,"tag":222,"props":572,"children":573},{},[574],{"type":70,"value":546},{"type":64,"tag":190,"props":576,"children":577},{},[578,594,601,606],{"type":64,"tag":222,"props":579,"children":580},{},[581,587,588],{"type":64,"tag":166,"props":582,"children":584},{"className":583},[],[585],{"type":70,"value":586},"write_scratchpad",{"type":70,"value":454},{"type":64,"tag":166,"props":589,"children":591},{"className":590},[],[592],{"type":70,"value":593},"read_scratchpad",{"type":64,"tag":222,"props":595,"children":596},{},[597],{"type":64,"tag":86,"props":598,"children":599},{},[600],{"type":70,"value":297},{"type":64,"tag":222,"props":602,"children":603},{},[604],{"type":70,"value":605},"Internal state (may not be available in all environments)",{"type":64,"tag":222,"props":607,"children":608},{},[609],{"type":70,"value":546},{"type":64,"tag":190,"props":611,"children":612},{},[613,622,629,634],{"type":64,"tag":222,"props":614,"children":615},{},[616],{"type":64,"tag":166,"props":617,"children":619},{"className":618},[],[620],{"type":70,"value":621},"read_memories",{"type":64,"tag":222,"props":623,"children":624},{},[625],{"type":64,"tag":86,"props":626,"children":627},{},[628],{"type":70,"value":297},{"type":64,"tag":222,"props":630,"children":631},{},[632],{"type":70,"value":633},"Internal memory recall",{"type":64,"tag":222,"props":635,"children":636},{},[637],{"type":70,"value":546},{"type":64,"tag":175,"props":639,"children":641},{"id":640},"promql-specific-controls",[642],{"type":70,"value":643},"PromQL-Specific Controls",{"type":64,"tag":80,"props":645,"children":646},{},[647,652],{"type":64,"tag":166,"props":648,"children":650},{"className":649},[],[651],{"type":70,"value":230},{"type":70,"value":653}," deserves special handling because:",{"type":64,"tag":655,"props":656,"children":657},"ul",{},[658,663,668],{"type":64,"tag":109,"props":659,"children":660},{},[661],{"type":70,"value":662},"Cost = (number of series returned) × (number of datapoints per series) \u002F 1000 × $0.01",{"type":64,"tag":109,"props":664,"children":665},{},[666],{"type":70,"value":667},"Maximum 500 series per query — a broad query hitting the cap costs ~$0.005 per period",{"type":64,"tag":109,"props":669,"children":670},{},[671,673,679,681],{"type":70,"value":672},"Range queries with small ",{"type":64,"tag":166,"props":674,"children":676},{"className":675},[],[677],{"type":70,"value":678},"step",{"type":70,"value":680}," multiply cost: ",{"type":64,"tag":166,"props":682,"children":684},{"className":683},[],[685],{"type":70,"value":686},"7d \u002F 60s step = 10,080 datapoints × 500 series = 5M metrics",{"type":64,"tag":80,"props":688,"children":689},{},[690],{"type":64,"tag":86,"props":691,"children":692},{},[693],{"type":70,"value":694},"Before each PromQL call:",{"type":64,"tag":696,"props":697,"children":702},"pre",{"className":698,"code":700,"language":70,"meta":701},[699],"language-text","estimated_metrics = min(500, estimated_series) × (time_range_seconds \u002F step_seconds)\nestimated_cost = (estimated_metrics \u002F 1000) * 0.01\n\nif estimated_cost > $0.50:\n    ⚠️ WARN — suggest narrower time range, larger step, or label filters\nif estimated_cost > $2.00:\n    🚫 HALT — require approval or suggest aggregation (sum, topk, avg)\n","",[703],{"type":64,"tag":166,"props":704,"children":705},{"__ignoreMap":701},[706],{"type":70,"value":700},{"type":64,"tag":80,"props":708,"children":709},{},[710],{"type":64,"tag":86,"props":711,"children":712},{},[713],{"type":70,"value":714},"Cost reduction for PromQL:",{"type":64,"tag":655,"props":716,"children":717},{},[718,731,743,755],{"type":64,"tag":109,"props":719,"children":720},{},[721,723,729],{"type":70,"value":722},"Use ",{"type":64,"tag":166,"props":724,"children":726},{"className":725},[],[727],{"type":70,"value":728},"sum by (label)",{"type":70,"value":730}," to reduce series count",{"type":64,"tag":109,"props":732,"children":733},{},[734,735,741],{"type":70,"value":722},{"type":64,"tag":166,"props":736,"children":738},{"className":737},[],[739],{"type":70,"value":740},"topk(N, ...)",{"type":70,"value":742}," to cap returned series",{"type":64,"tag":109,"props":744,"children":745},{},[746,748,753],{"type":70,"value":747},"Increase ",{"type":64,"tag":166,"props":749,"children":751},{"className":750},[],[752],{"type":70,"value":678},{"type":70,"value":754}," (300s instead of 60s = 5× cheaper)",{"type":64,"tag":109,"props":756,"children":757},{},[758],{"type":70,"value":759},"Narrow time range (1h instead of 7d = 168× cheaper)",{"type":64,"tag":151,"props":761,"children":762},{},[],{"type":64,"tag":73,"props":764,"children":766},{"id":765},"layer-1-heuristic-classification",[767],{"type":70,"value":768},"Layer 1: Heuristic Classification",{"type":64,"tag":80,"props":770,"children":771},{},[772,774,779],{"type":70,"value":773},"Before making ANY ",{"type":64,"tag":166,"props":775,"children":777},{"className":776},[],[778],{"type":70,"value":171},{"type":70,"value":780}," call, classify the operation using these rules IN ORDER:",{"type":64,"tag":175,"props":782,"children":784},{"id":783},"rule-1-free-by-default-metadata-operations",[785],{"type":70,"value":786},"Rule 1: FREE by default — Metadata operations",{"type":64,"tag":80,"props":788,"children":789},{},[790],{"type":70,"value":791},"An operation is FREE if it matches ALL of these:",{"type":64,"tag":655,"props":793,"children":794},{},[795,855,860],{"type":64,"tag":109,"props":796,"children":797},{},[798,800,806,807,813,814,820,821,827,828,834,835,841,842,848,849],{"type":70,"value":799},"Verb is: ",{"type":64,"tag":166,"props":801,"children":803},{"className":802},[],[804],{"type":70,"value":805},"Describe",{"type":70,"value":454},{"type":64,"tag":166,"props":808,"children":810},{"className":809},[],[811],{"type":70,"value":812},"List",{"type":70,"value":454},{"type":64,"tag":166,"props":815,"children":817},{"className":816},[],[818],{"type":70,"value":819},"Get",{"type":70,"value":454},{"type":64,"tag":166,"props":822,"children":824},{"className":823},[],[825],{"type":70,"value":826},"Lookup",{"type":70,"value":454},{"type":64,"tag":166,"props":829,"children":831},{"className":830},[],[832],{"type":70,"value":833},"Check",{"type":70,"value":454},{"type":64,"tag":166,"props":836,"children":838},{"className":837},[],[839],{"type":70,"value":840},"Validate",{"type":70,"value":454},{"type":64,"tag":166,"props":843,"children":845},{"className":844},[],[846],{"type":70,"value":847},"Tag",{"type":70,"value":454},{"type":64,"tag":166,"props":850,"children":852},{"className":851},[],[853],{"type":70,"value":854},"Untag",{"type":64,"tag":109,"props":856,"children":857},{},[858],{"type":70,"value":859},"It returns metadata\u002Fconfiguration (not data content or query results)",{"type":64,"tag":109,"props":861,"children":862},{},[863],{"type":70,"value":864},"It does NOT scan, process, or transform customer data",{"type":64,"tag":80,"props":866,"children":867},{},[868,873,875,881,882,888,889,895,896],{"type":64,"tag":86,"props":869,"children":870},{},[871],{"type":70,"value":872},"Examples:",{"type":70,"value":874}," ",{"type":64,"tag":166,"props":876,"children":878},{"className":877},[],[879],{"type":70,"value":880},"DescribeInstances",{"type":70,"value":454},{"type":64,"tag":166,"props":883,"children":885},{"className":884},[],[886],{"type":70,"value":887},"ListFunctions",{"type":70,"value":454},{"type":64,"tag":166,"props":890,"children":892},{"className":891},[],[893],{"type":70,"value":894},"GetRole",{"type":70,"value":454},{"type":64,"tag":166,"props":897,"children":899},{"className":898},[],[900],{"type":70,"value":901},"LookupEvents",{"type":64,"tag":903,"props":904,"children":905},"blockquote",{},[906],{"type":64,"tag":80,"props":907,"children":908},{},[909,911,916,918,923,925,930,932,937],{"type":70,"value":910},"⚠️ ",{"type":64,"tag":86,"props":912,"children":913},{},[914],{"type":70,"value":915},"Exception:",{"type":70,"value":917}," Some services charge per-request even for Get\u002FList operations. Layer 2 overrides this heuristic for: ",{"type":64,"tag":86,"props":919,"children":920},{},[921],{"type":70,"value":922},"S3",{"type":70,"value":924}," ($0.0004\u002F1K GET, $0.005\u002F1K LIST), ",{"type":64,"tag":86,"props":926,"children":927},{},[928],{"type":70,"value":929},"SQS",{"type":70,"value":931}," ($0.40\u002F1M requests after free tier), ",{"type":64,"tag":86,"props":933,"children":934},{},[935],{"type":70,"value":936},"Lambda Invoke",{"type":70,"value":938}," ($0.20\u002F1M). When Layer 2 has an entry, it takes precedence over Rule 1.",{"type":64,"tag":903,"props":940,"children":941},{},[942],{"type":64,"tag":80,"props":943,"children":944},{},[945,946,951,953,959],{"type":70,"value":910},{"type":64,"tag":86,"props":947,"children":948},{},[949],{"type":70,"value":950},"Tool policy can override cost classification.",{"type":70,"value":952}," Some operations classified as FREE here (e.g., ",{"type":64,"tag":166,"props":954,"children":956},{"className":955},[],[957],{"type":70,"value":958},"cloudtrail:LookupEvents",{"type":70,"value":960},") may be blocked by tool policy in certain environments. If an operation is denied, it costs $0.00 (never executed) — proceed with alternatives.",{"type":64,"tag":175,"props":962,"children":964},{"id":963},"rule-2-paid-data-scanning-operations",[965],{"type":70,"value":966},"Rule 2: PAID — Data-scanning operations",{"type":64,"tag":80,"props":968,"children":969},{},[970],{"type":70,"value":971},"An operation is PAID if it matches ANY of these patterns:",{"type":64,"tag":182,"props":973,"children":974},{},[975,996],{"type":64,"tag":186,"props":976,"children":977},{},[978],{"type":64,"tag":190,"props":979,"children":980},{},[981,986,991],{"type":64,"tag":194,"props":982,"children":983},{},[984],{"type":70,"value":985},"Pattern",{"type":64,"tag":194,"props":987,"children":988},{},[989],{"type":70,"value":990},"Why It Costs Money",{"type":64,"tag":194,"props":992,"children":993},{},[994],{"type":70,"value":995},"Examples",{"type":64,"tag":215,"props":997,"children":998},{},[999,1048,1082,1118,1156,1201,1235],{"type":64,"tag":190,"props":1000,"children":1001},{},[1002,1021,1026],{"type":64,"tag":222,"props":1003,"children":1004},{},[1005,1007,1013,1015],{"type":70,"value":1006},"Verb contains ",{"type":64,"tag":166,"props":1008,"children":1010},{"className":1009},[],[1011],{"type":70,"value":1012},"Query",{"type":70,"value":1014}," or ",{"type":64,"tag":166,"props":1016,"children":1018},{"className":1017},[],[1019],{"type":70,"value":1020},"Search",{"type":64,"tag":222,"props":1022,"children":1023},{},[1024],{"type":70,"value":1025},"Scans indexed data",{"type":64,"tag":222,"props":1027,"children":1028},{},[1029,1035,1036,1041,1042],{"type":64,"tag":166,"props":1030,"children":1032},{"className":1031},[],[1033],{"type":70,"value":1034},"StartQuery",{"type":70,"value":454},{"type":64,"tag":166,"props":1037,"children":1039},{"className":1038},[],[1040],{"type":70,"value":1020},{"type":70,"value":454},{"type":64,"tag":166,"props":1043,"children":1045},{"className":1044},[],[1046],{"type":70,"value":1047},"StartQueryExecution",{"type":64,"tag":190,"props":1049,"children":1050},{},[1051,1061,1066],{"type":64,"tag":222,"props":1052,"children":1053},{},[1054,1055],{"type":70,"value":1006},{"type":64,"tag":166,"props":1056,"children":1058},{"className":1057},[],[1059],{"type":70,"value":1060},"Scan",{"type":64,"tag":222,"props":1062,"children":1063},{},[1064],{"type":70,"value":1065},"Full table\u002Findex scan",{"type":64,"tag":222,"props":1067,"children":1068},{},[1069,1074,1076],{"type":64,"tag":166,"props":1070,"children":1072},{"className":1071},[],[1073],{"type":70,"value":1060},{"type":70,"value":1075}," (DynamoDB), ",{"type":64,"tag":166,"props":1077,"children":1079},{"className":1078},[],[1080],{"type":70,"value":1081},"StartScan",{"type":64,"tag":190,"props":1083,"children":1084},{},[1085,1097,1102],{"type":64,"tag":222,"props":1086,"children":1087},{},[1088,1089,1095],{"type":70,"value":1006},{"type":64,"tag":166,"props":1090,"children":1092},{"className":1091},[],[1093],{"type":70,"value":1094},"Execute",{"type":70,"value":1096}," + processes data",{"type":64,"tag":222,"props":1098,"children":1099},{},[1100],{"type":70,"value":1101},"Runs a computation",{"type":64,"tag":222,"props":1103,"children":1104},{},[1105,1110,1112],{"type":64,"tag":166,"props":1106,"children":1108},{"className":1107},[],[1109],{"type":70,"value":1047},{"type":70,"value":1111}," (Athena), ",{"type":64,"tag":166,"props":1113,"children":1115},{"className":1114},[],[1116],{"type":70,"value":1117},"ExecuteStatement",{"type":64,"tag":190,"props":1119,"children":1120},{},[1121,1133,1138],{"type":64,"tag":222,"props":1122,"children":1123},{},[1124,1125,1131],{"type":70,"value":1006},{"type":64,"tag":166,"props":1126,"children":1128},{"className":1127},[],[1129],{"type":70,"value":1130},"Invoke",{"type":70,"value":1132}," + runs workload",{"type":64,"tag":222,"props":1134,"children":1135},{},[1136],{"type":70,"value":1137},"Triggers compute",{"type":64,"tag":222,"props":1139,"children":1140},{},[1141,1147,1149,1154],{"type":64,"tag":166,"props":1142,"children":1144},{"className":1143},[],[1145],{"type":70,"value":1146},"InvokeEndpoint",{"type":70,"value":1148}," (SageMaker), ",{"type":64,"tag":166,"props":1150,"children":1152},{"className":1151},[],[1153],{"type":70,"value":1130},{"type":70,"value":1155}," (Lambda)",{"type":64,"tag":190,"props":1157,"children":1158},{},[1159,1171,1176],{"type":64,"tag":222,"props":1160,"children":1161},{},[1162,1164,1169],{"type":70,"value":1163},"Operation reads ",{"type":64,"tag":86,"props":1165,"children":1166},{},[1167],{"type":70,"value":1168},"content",{"type":70,"value":1170}," (not metadata)",{"type":64,"tag":222,"props":1172,"children":1173},{},[1174],{"type":70,"value":1175},"Data transfer",{"type":64,"tag":222,"props":1177,"children":1178},{},[1179,1185,1187,1193,1195],{"type":64,"tag":166,"props":1180,"children":1182},{"className":1181},[],[1183],{"type":70,"value":1184},"GetObject",{"type":70,"value":1186}," (S3, large), ",{"type":64,"tag":166,"props":1188,"children":1190},{"className":1189},[],[1191],{"type":70,"value":1192},"GetLogEvents",{"type":70,"value":1194}," (bulk), ",{"type":64,"tag":166,"props":1196,"children":1198},{"className":1197},[],[1199],{"type":70,"value":1200},"BatchGetTraces",{"type":64,"tag":190,"props":1202,"children":1203},{},[1204,1214,1219],{"type":64,"tag":222,"props":1205,"children":1206},{},[1207,1209],{"type":70,"value":1208},"Operation starts a ",{"type":64,"tag":86,"props":1210,"children":1211},{},[1212],{"type":70,"value":1213},"streaming session",{"type":64,"tag":222,"props":1215,"children":1216},{},[1217],{"type":70,"value":1218},"Per-time billing",{"type":64,"tag":222,"props":1220,"children":1221},{},[1222,1228,1229],{"type":64,"tag":166,"props":1223,"children":1225},{"className":1224},[],[1226],{"type":70,"value":1227},"StartLiveTail",{"type":70,"value":454},{"type":64,"tag":166,"props":1230,"children":1232},{"className":1231},[],[1233],{"type":70,"value":1234},"SubscribeToShard",{"type":64,"tag":190,"props":1236,"children":1237},{},[1238,1249,1254],{"type":64,"tag":222,"props":1239,"children":1240},{},[1241,1243],{"type":70,"value":1242},"Operation name contains ",{"type":64,"tag":166,"props":1244,"children":1246},{"className":1245},[],[1247],{"type":70,"value":1248},"Insights",{"type":64,"tag":222,"props":1250,"children":1251},{},[1252],{"type":70,"value":1253},"Analytics processing",{"type":64,"tag":222,"props":1255,"children":1256},{},[1257,1263,1264],{"type":64,"tag":166,"props":1258,"children":1260},{"className":1259},[],[1261],{"type":70,"value":1262},"GetContributorInsights",{"type":70,"value":454},{"type":64,"tag":166,"props":1265,"children":1267},{"className":1266},[],[1268],{"type":70,"value":1034},{"type":64,"tag":175,"props":1270,"children":1272},{"id":1271},"rule-3-caution-high-volume-free-operations",[1273],{"type":70,"value":1274},"Rule 3: CAUTION — High-volume free operations",{"type":64,"tag":80,"props":1276,"children":1277},{},[1278],{"type":70,"value":1279},"An operation is FREE but CAUTION if:",{"type":64,"tag":655,"props":1281,"children":1282},{},[1283,1288],{"type":64,"tag":109,"props":1284,"children":1285},{},[1286],{"type":70,"value":1287},"It's a paginated List\u002FDescribe that could return thousands of results",{"type":64,"tag":109,"props":1289,"children":1290},{},[1291],{"type":70,"value":1292},"It has no built-in limit and the scope is broad (e.g., all resources in a region)",{"type":64,"tag":80,"props":1294,"children":1295},{},[1296,1300,1301,1307,1309,1315,1317,1323],{"type":64,"tag":86,"props":1297,"children":1298},{},[1299],{"type":70,"value":872},{"type":70,"value":874},{"type":64,"tag":166,"props":1302,"children":1304},{"className":1303},[],[1305],{"type":70,"value":1306},"ListObjectsV2",{"type":70,"value":1308}," (large bucket), ",{"type":64,"tag":166,"props":1310,"children":1312},{"className":1311},[],[1313],{"type":70,"value":1314},"ListMetrics",{"type":70,"value":1316}," (unfiltered), ",{"type":64,"tag":166,"props":1318,"children":1320},{"className":1319},[],[1321],{"type":70,"value":1322},"DescribeTasks",{"type":70,"value":1324}," (large cluster)",{"type":64,"tag":175,"props":1326,"children":1328},{"id":1327},"rule-4-unknown-cannot-classify",[1329],{"type":70,"value":1330},"Rule 4: UNKNOWN — Cannot classify",{"type":64,"tag":80,"props":1332,"children":1333},{},[1334],{"type":70,"value":1335},"If an operation doesn't clearly fit Rules 1–3:",{"type":64,"tag":655,"props":1337,"children":1338},{},[1339,1350,1355],{"type":64,"tag":109,"props":1340,"children":1341},{},[1342,1344,1348],{"type":70,"value":1343},"Treat as ",{"type":64,"tag":86,"props":1345,"children":1346},{},[1347],{"type":70,"value":327},{"type":70,"value":1349}," (proceed but track)",{"type":64,"tag":109,"props":1351,"children":1352},{},[1353],{"type":70,"value":1354},"After execution, check response for metered fields (see Layer 3)",{"type":64,"tag":109,"props":1356,"children":1357},{},[1358],{"type":70,"value":1359},"If metered: add to the known-paid list for this session",{"type":64,"tag":151,"props":1361,"children":1362},{},[],{"type":64,"tag":73,"props":1364,"children":1366},{"id":1365},"layer-2-known-paid-registry",[1367],{"type":70,"value":1368},"Layer 2: Known-Paid Registry",{"type":64,"tag":80,"props":1370,"children":1371},{},[1372,1374,1379],{"type":70,"value":1373},"These operations have ",{"type":64,"tag":86,"props":1375,"children":1376},{},[1377],{"type":70,"value":1378},"confirmed pricing",{"type":70,"value":1380}," with estimation formulas. This list is extensible — operators can add entries.",{"type":64,"tag":175,"props":1382,"children":1384},{"id":1383},"confirmed-paid-operations",[1385],{"type":70,"value":1386},"Confirmed Paid Operations",{"type":64,"tag":182,"props":1388,"children":1389},{},[1390,1416],{"type":64,"tag":186,"props":1391,"children":1392},{},[1393],{"type":64,"tag":190,"props":1394,"children":1395},{},[1396,1401,1406,1411],{"type":64,"tag":194,"props":1397,"children":1398},{},[1399],{"type":70,"value":1400},"Service",{"type":64,"tag":194,"props":1402,"children":1403},{},[1404],{"type":70,"value":1405},"Operation",{"type":64,"tag":194,"props":1407,"children":1408},{},[1409],{"type":70,"value":1410},"Cost Formula",{"type":64,"tag":194,"props":1412,"children":1413},{},[1414],{"type":70,"value":1415},"Estimation Method",{"type":64,"tag":215,"props":1417,"children":1418},{},[1419,1453,1478,1505,1529,1556,1580,1614,1648,1682,1707,1739,1771,1797,1822,1848,1875,1897,1919],{"type":64,"tag":190,"props":1420,"children":1421},{},[1422,1427,1435,1440],{"type":64,"tag":222,"props":1423,"children":1424},{},[1425],{"type":70,"value":1426},"CloudWatch Logs",{"type":64,"tag":222,"props":1428,"children":1429},{},[1430],{"type":64,"tag":166,"props":1431,"children":1433},{"className":1432},[],[1434],{"type":70,"value":1034},{"type":64,"tag":222,"props":1436,"children":1437},{},[1438],{"type":70,"value":1439},"$0.005\u002FGB scanned",{"type":64,"tag":222,"props":1441,"children":1442},{},[1443,1445,1451],{"type":70,"value":1444},"Query ",{"type":64,"tag":166,"props":1446,"children":1448},{"className":1447},[],[1449],{"type":70,"value":1450},"IncomingBytes",{"type":70,"value":1452}," metric for time window",{"type":64,"tag":190,"props":1454,"children":1455},{},[1456,1460,1468,1473],{"type":64,"tag":222,"props":1457,"children":1458},{},[1459],{"type":70,"value":1426},{"type":64,"tag":222,"props":1461,"children":1462},{},[1463],{"type":64,"tag":166,"props":1464,"children":1466},{"className":1465},[],[1467],{"type":70,"value":1227},{"type":64,"tag":222,"props":1469,"children":1470},{},[1471],{"type":70,"value":1472},"$0.01\u002Fminute",{"type":64,"tag":222,"props":1474,"children":1475},{},[1476],{"type":70,"value":1477},"Duration-based",{"type":64,"tag":190,"props":1479,"children":1480},{},[1481,1486,1495,1500],{"type":64,"tag":222,"props":1482,"children":1483},{},[1484],{"type":70,"value":1485},"CloudWatch",{"type":64,"tag":222,"props":1487,"children":1488},{},[1489],{"type":64,"tag":166,"props":1490,"children":1492},{"className":1491},[],[1493],{"type":70,"value":1494},"GetMetricData",{"type":64,"tag":222,"props":1496,"children":1497},{},[1498],{"type":70,"value":1499},"$0.01\u002F1,000 metrics×periods",{"type":64,"tag":222,"props":1501,"children":1502},{},[1503],{"type":70,"value":1504},"Count metrics and periods",{"type":64,"tag":190,"props":1506,"children":1507},{},[1508,1512,1520,1524],{"type":64,"tag":222,"props":1509,"children":1510},{},[1511],{"type":70,"value":1485},{"type":64,"tag":222,"props":1513,"children":1514},{},[1515],{"type":64,"tag":166,"props":1516,"children":1518},{"className":1517},[],[1519],{"type":70,"value":230},{"type":64,"tag":222,"props":1521,"children":1522},{},[1523],{"type":70,"value":1499},{"type":64,"tag":222,"props":1525,"children":1526},{},[1527],{"type":70,"value":1528},"Count series × (range\u002Fstep)",{"type":64,"tag":190,"props":1530,"children":1531},{},[1532,1537,1546,1551],{"type":64,"tag":222,"props":1533,"children":1534},{},[1535],{"type":70,"value":1536},"X-Ray",{"type":64,"tag":222,"props":1538,"children":1539},{},[1540],{"type":64,"tag":166,"props":1541,"children":1543},{"className":1542},[],[1544],{"type":70,"value":1545},"GetTraceSummaries",{"type":64,"tag":222,"props":1547,"children":1548},{},[1549],{"type":70,"value":1550},"$0.50\u002F1M traces",{"type":64,"tag":222,"props":1552,"children":1553},{},[1554],{"type":70,"value":1555},"Paginate or sample to estimate count",{"type":64,"tag":190,"props":1557,"children":1558},{},[1559,1563,1571,1575],{"type":64,"tag":222,"props":1560,"children":1561},{},[1562],{"type":70,"value":1536},{"type":64,"tag":222,"props":1564,"children":1565},{},[1566],{"type":64,"tag":166,"props":1567,"children":1569},{"className":1568},[],[1570],{"type":70,"value":1200},{"type":64,"tag":222,"props":1572,"children":1573},{},[1574],{"type":70,"value":1550},{"type":64,"tag":222,"props":1576,"children":1577},{},[1578],{"type":70,"value":1579},"Count trace IDs in request",{"type":64,"tag":190,"props":1581,"children":1582},{},[1583,1588,1596,1601],{"type":64,"tag":222,"props":1584,"children":1585},{},[1586],{"type":70,"value":1587},"Athena",{"type":64,"tag":222,"props":1589,"children":1590},{},[1591],{"type":64,"tag":166,"props":1592,"children":1594},{"className":1593},[],[1595],{"type":70,"value":1047},{"type":64,"tag":222,"props":1597,"children":1598},{},[1599],{"type":70,"value":1600},"$5.00\u002FTB scanned",{"type":64,"tag":222,"props":1602,"children":1603},{},[1604,1606,1612],{"type":70,"value":1605},"Check table metadata; require ",{"type":64,"tag":166,"props":1607,"children":1609},{"className":1608},[],[1610],{"type":70,"value":1611},"WHERE",{"type":70,"value":1613}," clause",{"type":64,"tag":190,"props":1615,"children":1616},{},[1617,1622,1630,1635],{"type":64,"tag":222,"props":1618,"children":1619},{},[1620],{"type":70,"value":1621},"DynamoDB",{"type":64,"tag":222,"props":1623,"children":1624},{},[1625],{"type":64,"tag":166,"props":1626,"children":1628},{"className":1627},[],[1629],{"type":70,"value":1060},{"type":64,"tag":222,"props":1631,"children":1632},{},[1633],{"type":70,"value":1634},"RCU consumed (~$0.25\u002F1M RCU)",{"type":64,"tag":222,"props":1636,"children":1637},{},[1638,1640,1646],{"type":70,"value":1639},"Check ",{"type":64,"tag":166,"props":1641,"children":1643},{"className":1642},[],[1644],{"type":70,"value":1645},"TableSizeBytes",{"type":70,"value":1647},"; BLOCK unless user approves",{"type":64,"tag":190,"props":1649,"children":1650},{},[1651,1655,1665,1670],{"type":64,"tag":222,"props":1652,"children":1653},{},[1654],{"type":70,"value":1621},{"type":64,"tag":222,"props":1656,"children":1657},{},[1658,1663],{"type":64,"tag":166,"props":1659,"children":1661},{"className":1660},[],[1662],{"type":70,"value":1012},{"type":70,"value":1664}," (broad)",{"type":64,"tag":222,"props":1666,"children":1667},{},[1668],{"type":70,"value":1669},"RCU consumed",{"type":64,"tag":222,"props":1671,"children":1672},{},[1673,1674,1680],{"type":70,"value":1639},{"type":64,"tag":166,"props":1675,"children":1677},{"className":1676},[],[1678],{"type":70,"value":1679},"ItemCount",{"type":70,"value":1681},"; warn if > 10K items",{"type":64,"tag":190,"props":1683,"children":1684},{},[1685,1689,1697,1702],{"type":64,"tag":222,"props":1686,"children":1687},{},[1688],{"type":70,"value":922},{"type":64,"tag":222,"props":1690,"children":1691},{},[1692],{"type":64,"tag":166,"props":1693,"children":1695},{"className":1694},[],[1696],{"type":70,"value":1184},{"type":64,"tag":222,"props":1698,"children":1699},{},[1700],{"type":70,"value":1701},"$0.0004\u002F1,000 requests + $0.09\u002FGB transfer",{"type":64,"tag":222,"props":1703,"children":1704},{},[1705],{"type":70,"value":1706},"Count requests; flag if cross-region or >100MB",{"type":64,"tag":190,"props":1708,"children":1709},{},[1710,1714,1729,1734],{"type":64,"tag":222,"props":1711,"children":1712},{},[1713],{"type":70,"value":922},{"type":64,"tag":222,"props":1715,"children":1716},{},[1717,1722,1723],{"type":64,"tag":166,"props":1718,"children":1720},{"className":1719},[],[1721],{"type":70,"value":1306},{"type":70,"value":454},{"type":64,"tag":166,"props":1724,"children":1726},{"className":1725},[],[1727],{"type":70,"value":1728},"ListObjects",{"type":64,"tag":222,"props":1730,"children":1731},{},[1732],{"type":70,"value":1733},"$0.005\u002F1,000 requests",{"type":64,"tag":222,"props":1735,"children":1736},{},[1737],{"type":70,"value":1738},"Count calls; warn if paginating heavily",{"type":64,"tag":190,"props":1740,"children":1741},{},[1742,1746,1762,1766],{"type":64,"tag":222,"props":1743,"children":1744},{},[1745],{"type":70,"value":922},{"type":64,"tag":222,"props":1747,"children":1748},{},[1749,1755,1756],{"type":64,"tag":166,"props":1750,"children":1752},{"className":1751},[],[1753],{"type":70,"value":1754},"PutObject",{"type":70,"value":454},{"type":64,"tag":166,"props":1757,"children":1759},{"className":1758},[],[1760],{"type":70,"value":1761},"CopyObject",{"type":64,"tag":222,"props":1763,"children":1764},{},[1765],{"type":70,"value":1733},{"type":64,"tag":222,"props":1767,"children":1768},{},[1769],{"type":70,"value":1770},"Count calls",{"type":64,"tag":190,"props":1772,"children":1773},{},[1774,1778,1787,1792],{"type":64,"tag":222,"props":1775,"children":1776},{},[1777],{"type":70,"value":922},{"type":64,"tag":222,"props":1779,"children":1780},{},[1781],{"type":64,"tag":166,"props":1782,"children":1784},{"className":1783},[],[1785],{"type":70,"value":1786},"SelectObjectContent",{"type":64,"tag":222,"props":1788,"children":1789},{},[1790],{"type":70,"value":1791},"$0.002\u002FGB scanned + $0.0007\u002FGB returned",{"type":64,"tag":222,"props":1793,"children":1794},{},[1795],{"type":70,"value":1796},"Check object size",{"type":64,"tag":190,"props":1798,"children":1799},{},[1800,1805,1813,1818],{"type":64,"tag":222,"props":1801,"children":1802},{},[1803],{"type":70,"value":1804},"Resource Explorer",{"type":64,"tag":222,"props":1806,"children":1807},{},[1808],{"type":64,"tag":166,"props":1809,"children":1811},{"className":1810},[],[1812],{"type":70,"value":1020},{"type":64,"tag":222,"props":1814,"children":1815},{},[1816],{"type":70,"value":1817},"$0.01\u002Fquery (after 1000 free\u002Fmonth)",{"type":64,"tag":222,"props":1819,"children":1820},{},[1821],{"type":70,"value":1770},{"type":64,"tag":190,"props":1823,"children":1824},{},[1825,1830,1838,1843],{"type":64,"tag":222,"props":1826,"children":1827},{},[1828],{"type":70,"value":1829},"SageMaker",{"type":64,"tag":222,"props":1831,"children":1832},{},[1833],{"type":64,"tag":166,"props":1834,"children":1836},{"className":1835},[],[1837],{"type":70,"value":1146},{"type":64,"tag":222,"props":1839,"children":1840},{},[1841],{"type":70,"value":1842},"Instance-dependent",{"type":64,"tag":222,"props":1844,"children":1845},{},[1846],{"type":70,"value":1847},"BLOCK — require explicit approval",{"type":64,"tag":190,"props":1849,"children":1850},{},[1851,1856,1865,1870],{"type":64,"tag":222,"props":1852,"children":1853},{},[1854],{"type":70,"value":1855},"Kinesis",{"type":64,"tag":222,"props":1857,"children":1858},{},[1859],{"type":64,"tag":166,"props":1860,"children":1862},{"className":1861},[],[1863],{"type":70,"value":1864},"GetRecords",{"type":64,"tag":222,"props":1866,"children":1867},{},[1868],{"type":70,"value":1869},"$0.015\u002F1M records",{"type":64,"tag":222,"props":1871,"children":1872},{},[1873],{"type":70,"value":1874},"Estimate from shard count × duration",{"type":64,"tag":190,"props":1876,"children":1877},{},[1878,1882,1887,1892],{"type":64,"tag":222,"props":1879,"children":1880},{},[1881],{"type":70,"value":1485},{"type":64,"tag":222,"props":1883,"children":1884},{},[1885],{"type":70,"value":1886},"Contributor Insights",{"type":64,"tag":222,"props":1888,"children":1889},{},[1890],{"type":70,"value":1891},"$0.02\u002Frule\u002F1K events",{"type":64,"tag":222,"props":1893,"children":1894},{},[1895],{"type":70,"value":1896},"Count rules and event volume",{"type":64,"tag":190,"props":1898,"children":1899},{},[1900,1904,1909,1914],{"type":64,"tag":222,"props":1901,"children":1902},{},[1903],{"type":70,"value":929},{"type":64,"tag":222,"props":1905,"children":1906},{},[1907],{"type":70,"value":1908},"All operations",{"type":64,"tag":222,"props":1910,"children":1911},{},[1912],{"type":70,"value":1913},"$0.40\u002F1M requests (first 1M free\u002Fmonth)",{"type":64,"tag":222,"props":1915,"children":1916},{},[1917],{"type":70,"value":1918},"Count total SQS calls; usually negligible",{"type":64,"tag":190,"props":1920,"children":1921},{},[1922,1927,1935,1940],{"type":64,"tag":222,"props":1923,"children":1924},{},[1925],{"type":70,"value":1926},"Lambda",{"type":64,"tag":222,"props":1928,"children":1929},{},[1930],{"type":64,"tag":166,"props":1931,"children":1933},{"className":1932},[],[1934],{"type":70,"value":1130},{"type":64,"tag":222,"props":1936,"children":1937},{},[1938],{"type":70,"value":1939},"$0.20\u002F1M requests + compute ($0.0000166667\u002FGB-sec)",{"type":64,"tag":222,"props":1941,"children":1942},{},[1943],{"type":70,"value":1944},"BLOCK unless user explicitly requests function execution",{"type":64,"tag":903,"props":1946,"children":1947},{},[1948],{"type":64,"tag":80,"props":1949,"children":1950},{},[1951,1953,1958],{"type":70,"value":1952},"ℹ️ ",{"type":64,"tag":86,"props":1954,"children":1955},{},[1956],{"type":70,"value":1957},"Rates are baseline published figures and may vary by region.",{"type":70,"value":1959}," The regional rate may be higher, so a rate-based estimate is a lower bound. Treat any estimate within 20% of the remaining budget as exceeding it.",{"type":64,"tag":151,"props":1961,"children":1962},{},[],{"type":64,"tag":73,"props":1964,"children":1966},{"id":1965},"layer-3-response-validation",[1967],{"type":70,"value":1968},"Layer 3: Response Validation",{"type":64,"tag":80,"props":1970,"children":1971},{},[1972],{"type":70,"value":1973},"After ANY operation executes, check the response for metered fields:",{"type":64,"tag":175,"props":1975,"children":1977},{"id":1976},"metered-response-fields-indicates-cost-was-incurred",[1978],{"type":70,"value":1979},"Metered Response Fields (indicates cost was incurred)",{"type":64,"tag":182,"props":1981,"children":1982},{},[1983,2004],{"type":64,"tag":186,"props":1984,"children":1985},{},[1986],{"type":64,"tag":190,"props":1987,"children":1988},{},[1989,1994,1999],{"type":64,"tag":194,"props":1990,"children":1991},{},[1992],{"type":70,"value":1993},"Field Pattern",{"type":64,"tag":194,"props":1995,"children":1996},{},[1997],{"type":70,"value":1998},"Meaning",{"type":64,"tag":194,"props":2000,"children":2001},{},[2002],{"type":70,"value":2003},"Action",{"type":64,"tag":215,"props":2005,"children":2006},{},[2007,2036,2064,2094,2116,2138,2162,2186],{"type":64,"tag":190,"props":2008,"children":2009},{},[2010,2026,2031],{"type":64,"tag":222,"props":2011,"children":2012},{},[2013,2019,2020],{"type":64,"tag":166,"props":2014,"children":2016},{"className":2015},[],[2017],{"type":70,"value":2018},"BytesScanned",{"type":70,"value":454},{"type":64,"tag":166,"props":2021,"children":2023},{"className":2022},[],[2024],{"type":70,"value":2025},"DataScanned",{"type":64,"tag":222,"props":2027,"children":2028},{},[2029],{"type":70,"value":2030},"Data scanning charge",{"type":64,"tag":222,"props":2032,"children":2033},{},[2034],{"type":70,"value":2035},"Record GB scanned, add to running cost",{"type":64,"tag":190,"props":2037,"children":2038},{},[2039,2054,2059],{"type":64,"tag":222,"props":2040,"children":2041},{},[2042,2048,2049],{"type":64,"tag":166,"props":2043,"children":2045},{"className":2044},[],[2046],{"type":70,"value":2047},"RecordsProcessed",{"type":70,"value":454},{"type":64,"tag":166,"props":2050,"children":2052},{"className":2051},[],[2053],{"type":70,"value":1679},{"type":64,"tag":222,"props":2055,"children":2056},{},[2057],{"type":70,"value":2058},"Record processing",{"type":64,"tag":222,"props":2060,"children":2061},{},[2062],{"type":70,"value":2063},"Record count, estimate RCU\u002Fcost",{"type":64,"tag":190,"props":2065,"children":2066},{},[2067,2084,2089],{"type":64,"tag":222,"props":2068,"children":2069},{},[2070,2076,2078],{"type":64,"tag":166,"props":2071,"children":2073},{"className":2072},[],[2074],{"type":70,"value":2075},"QueryExecutionId",{"type":70,"value":2077}," + ",{"type":64,"tag":166,"props":2079,"children":2081},{"className":2080},[],[2082],{"type":70,"value":2083},"DataScannedInBytes",{"type":64,"tag":222,"props":2085,"children":2086},{},[2087],{"type":70,"value":2088},"Athena scan",{"type":64,"tag":222,"props":2090,"children":2091},{},[2092],{"type":70,"value":2093},"Add to cost at $5\u002FTB",{"type":64,"tag":190,"props":2095,"children":2096},{},[2097,2106,2111],{"type":64,"tag":222,"props":2098,"children":2099},{},[2100],{"type":64,"tag":166,"props":2101,"children":2103},{"className":2102},[],[2104],{"type":70,"value":2105},"TracesProcessedCount",{"type":64,"tag":222,"props":2107,"children":2108},{},[2109],{"type":70,"value":2110},"X-Ray processing",{"type":64,"tag":222,"props":2112,"children":2113},{},[2114],{"type":70,"value":2115},"Add to cost at $0.50\u002F1M",{"type":64,"tag":190,"props":2117,"children":2118},{},[2119,2128,2133],{"type":64,"tag":222,"props":2120,"children":2121},{},[2122],{"type":64,"tag":166,"props":2123,"children":2125},{"className":2124},[],[2126],{"type":70,"value":2127},"ConsumedCapacity",{"type":64,"tag":222,"props":2129,"children":2130},{},[2131],{"type":70,"value":2132},"DynamoDB RCU\u002FWCU",{"type":64,"tag":222,"props":2134,"children":2135},{},[2136],{"type":70,"value":2137},"Add to cost at $0.25\u002F1M RCU",{"type":64,"tag":190,"props":2139,"children":2140},{},[2141,2152,2157],{"type":64,"tag":222,"props":2142,"children":2143},{},[2144,2150],{"type":64,"tag":166,"props":2145,"children":2147},{"className":2146},[],[2148],{"type":70,"value":2149},"ContentLength",{"type":70,"value":2151}," > 100MB",{"type":64,"tag":222,"props":2153,"children":2154},{},[2155],{"type":70,"value":2156},"Large object fetch",{"type":64,"tag":222,"props":2158,"children":2159},{},[2160],{"type":70,"value":2161},"Flag for transfer cost",{"type":64,"tag":190,"props":2163,"children":2164},{},[2165,2176,2181],{"type":64,"tag":222,"props":2166,"children":2167},{},[2168,2174],{"type":64,"tag":166,"props":2169,"children":2171},{"className":2170},[],[2172],{"type":70,"value":2173},"NextToken",{"type":70,"value":2175}," after 10+ pages",{"type":64,"tag":222,"props":2177,"children":2178},{},[2179],{"type":70,"value":2180},"Pagination runaway",{"type":64,"tag":222,"props":2182,"children":2183},{},[2184],{"type":70,"value":2185},"Trigger volume guardrail",{"type":64,"tag":190,"props":2187,"children":2188},{},[2189,2200,2205],{"type":64,"tag":222,"props":2190,"children":2191},{},[2192,2198],{"type":64,"tag":166,"props":2193,"children":2195},{"className":2194},[],[2196],{"type":70,"value":2197},"warnings",{"type":70,"value":2199}," containing \"500 series\"",{"type":64,"tag":222,"props":2201,"children":2202},{},[2203],{"type":70,"value":2204},"PromQL truncation",{"type":64,"tag":222,"props":2206,"children":2207},{},[2208],{"type":70,"value":2209},"Flag max-cost query, suggest narrowing",{"type":64,"tag":80,"props":2211,"children":2212},{},[2213],{"type":70,"value":2214},"If a previously-unclassified operation returns metered fields:",{"type":64,"tag":105,"props":2216,"children":2217},{},[2218,2223,2228],{"type":64,"tag":109,"props":2219,"children":2220},{},[2221],{"type":70,"value":2222},"Log it as a paid operation for this session",{"type":64,"tag":109,"props":2224,"children":2225},{},[2226],{"type":70,"value":2227},"Add the cost to the running total",{"type":64,"tag":109,"props":2229,"children":2230},{},[2231,2233],{"type":70,"value":2232},"Warn the user: ",{"type":64,"tag":166,"props":2234,"children":2236},{"className":2235},[],[2237],{"type":70,"value":2238},"⚠️ Discovered paid operation: \u003Cservice>:\u003Coperation> cost $X.XX",{"type":64,"tag":151,"props":2240,"children":2241},{},[],{"type":64,"tag":73,"props":2243,"children":2245},{"id":2244},"budget-enforcement",[2246],{"type":70,"value":2247},"Budget Enforcement",{"type":64,"tag":175,"props":2249,"children":2251},{"id":2250},"per-investigation-budget",[2252],{"type":70,"value":2253},"Per-Investigation Budget",{"type":64,"tag":80,"props":2255,"children":2256},{},[2257],{"type":70,"value":2258},"The agent MUST mentally track a running cost estimate throughout the investigation. Since write_scratchpad\u002Fread_scratchpad are not available in all environments, budget enforcement is behavioral — the agent maintains the accumulator in its context window.",{"type":64,"tag":80,"props":2260,"children":2261},{},[2262],{"type":64,"tag":86,"props":2263,"children":2264},{},[2265],{"type":70,"value":2266},"At investigation start:",{"type":64,"tag":696,"props":2268,"children":2271},{"className":2269,"code":2270,"language":70,"meta":701},[699],"Budget: $10.00\nRunning cost: $0.00\nCall counts: {}\n",[2272],{"type":64,"tag":166,"props":2273,"children":2274},{"__ignoreMap":701},[2275],{"type":70,"value":2270},{"type":64,"tag":80,"props":2277,"children":2278},{},[2279],{"type":64,"tag":86,"props":2280,"children":2281},{},[2282],{"type":70,"value":2283},"Before each PAID operation:",{"type":64,"tag":696,"props":2285,"children":2288},{"className":2286,"code":2287,"language":70,"meta":701},[699],"estimated_cost = estimate(operation)\nif running_cost + estimated_cost > budget:\n    🚫 HALT — show budget display\nelse:\n    proceed\n    # After execution:\n    running_cost += actual_cost (from response fields or estimation)\n    call_counts[service] += 1\n",[2289],{"type":64,"tag":166,"props":2290,"children":2291},{"__ignoreMap":701},[2292],{"type":70,"value":2287},{"type":64,"tag":80,"props":2294,"children":2295},{},[2296],{"type":64,"tag":86,"props":2297,"children":2298},{},[2299],{"type":70,"value":2300},"Volume guardrails:",{"type":64,"tag":696,"props":2302,"children":2305},{"className":2303,"code":2304,"language":70,"meta":701},[699],"if call_counts[any_service] > 200: ⚠️ WARN\nif call_counts[any_service] > 500: 🚫 HALT\nif sum(all_call_counts) > 1000: 🚫 HALT\n",[2306],{"type":64,"tag":166,"props":2307,"children":2308},{"__ignoreMap":701},[2309],{"type":70,"value":2304},{"type":64,"tag":903,"props":2311,"children":2312},{},[2313],{"type":64,"tag":80,"props":2314,"children":2315},{},[2316,2318,2323,2325,2331,2333,2339],{"type":70,"value":2317},"ℹ️ If ",{"type":64,"tag":166,"props":2319,"children":2321},{"className":2320},[],[2322],{"type":70,"value":586},{"type":70,"value":2324}," becomes available in your environment, use it for persistent state across subagent boundaries. Check with: ",{"type":64,"tag":166,"props":2326,"children":2328},{"className":2327},[],[2329],{"type":70,"value":2330},"search_user_tools(\"scratchpad\")",{"type":70,"value":2332},". If found, store ",{"type":64,"tag":166,"props":2334,"children":2336},{"className":2335},[],[2337],{"type":70,"value":2338},"{budget, running_cost, call_counts}",{"type":70,"value":2340}," as JSON.",{"type":64,"tag":175,"props":2342,"children":2344},{"id":2343},"budget-display-on-halt",[2345],{"type":70,"value":2346},"Budget Display (on halt)",{"type":64,"tag":696,"props":2348,"children":2351},{"className":2349,"code":2350,"language":70,"meta":701},[699],"📋 INVESTIGATION BUDGET STATUS\n═══════════════════════════════════════════════════════════\nBudget:      $10.00\nSpent:       $X.XX (Y paid operations)\nFree calls:  Z operations (no cost)\nPromQL:      X,XXX metrics×periods consumed ($X.XX)\nNext op:     \u003Cservice>:\u003Coperation> — estimated $X.XX\nProjected:   $X.XX (exceeds budget by $X.XX)\n\n🚫 HALTED — would exceed $10.00 budget.\n💡 Options:\n  → Approve additional $X.XX to continue\n  → Narrow the time window to reduce scan volume\n  → Skip this operation and continue with free alternatives\n  → End investigation with findings so far\n",[2352],{"type":64,"tag":166,"props":2353,"children":2354},{"__ignoreMap":701},[2355],{"type":70,"value":2350},{"type":64,"tag":151,"props":2357,"children":2358},{},[],{"type":64,"tag":73,"props":2360,"children":2362},{"id":2361},"time-window-enforcement",[2363],{"type":70,"value":2364},"Time Window Enforcement",{"type":64,"tag":80,"props":2366,"children":2367},{},[2368],{"type":70,"value":2369},"For ANY operation classified as PAID that scans data over a time range:",{"type":64,"tag":182,"props":2371,"children":2372},{},[2373,2388],{"type":64,"tag":186,"props":2374,"children":2375},{},[2376],{"type":64,"tag":190,"props":2377,"children":2378},{},[2379,2384],{"type":64,"tag":194,"props":2380,"children":2381},{},[2382],{"type":70,"value":2383},"Scenario",{"type":64,"tag":194,"props":2385,"children":2386},{},[2387],{"type":70,"value":2003},{"type":64,"tag":215,"props":2389,"children":2390},{},[2391,2404,2417],{"type":64,"tag":190,"props":2392,"children":2393},{},[2394,2399],{"type":64,"tag":222,"props":2395,"children":2396},{},[2397],{"type":70,"value":2398},"User provided time window",{"type":64,"tag":222,"props":2400,"children":2401},{},[2402],{"type":70,"value":2403},"✅ Use it — estimate cost for that window",{"type":64,"tag":190,"props":2405,"children":2406},{},[2407,2412],{"type":64,"tag":222,"props":2408,"children":2409},{},[2410],{"type":70,"value":2411},"No time window, operation scans data",{"type":64,"tag":222,"props":2413,"children":2414},{},[2415],{"type":70,"value":2416},"🚫 CANCEL — show worst-case cost, ask for window",{"type":64,"tag":190,"props":2418,"children":2419},{},[2420,2425],{"type":64,"tag":222,"props":2421,"children":2422},{},[2423],{"type":70,"value":2424},"No time window, operation is bounded (single resource lookup)",{"type":64,"tag":222,"props":2426,"children":2427},{},[2428],{"type":70,"value":2429},"✅ Proceed — no scan involved",{"type":64,"tag":80,"props":2431,"children":2432},{},[2433,2438],{"type":64,"tag":86,"props":2434,"children":2435},{},[2436],{"type":70,"value":2437},"Key distinction:",{"type":70,"value":2439}," \"Get me the config of Lambda X\" (bounded, free) vs. \"Search logs for errors\" (unbounded scan, needs window).",{"type":64,"tag":80,"props":2441,"children":2442},{},[2443,2448,2450,2456],{"type":64,"tag":86,"props":2444,"children":2445},{},[2446],{"type":70,"value":2447},"PromQL-specific:",{"type":70,"value":2449}," Range queries without explicit start\u002Fend default to \"now\" which is safe. But broad label selectors (",{"type":64,"tag":166,"props":2451,"children":2453},{"className":2452},[],[2454],{"type":70,"value":2455},"{}",{"type":70,"value":2457}," with just metric name) can hit 500 series cap — always prefer specific labels.",{"type":64,"tag":151,"props":2459,"children":2460},{},[],{"type":64,"tag":73,"props":2462,"children":2464},{"id":2463},"cross-region-detection",[2465],{"type":70,"value":2466},"Cross-Region Detection",{"type":64,"tag":80,"props":2468,"children":2469},{},[2470],{"type":70,"value":2471},"For EVERY paid operation:",{"type":64,"tag":696,"props":2473,"children":2476},{"className":2474,"code":2475,"language":70,"meta":701},[699],"if target_region ≠ agent_space_region:\n    estimated_return_size = estimate_return_bytes(operation_type)\n    transfer_cost = estimated_return_size × $0.02\u002FGB\n    total_estimate += transfer_cost\n    flag: \"⚠️ Cross-region transfer: \u003Ctarget> → \u003Cagent_space>\"\n",[2477],{"type":64,"tag":166,"props":2478,"children":2479},{"__ignoreMap":701},[2480],{"type":70,"value":2475},{"type":64,"tag":80,"props":2482,"children":2483},{},[2484],{"type":70,"value":2485},"Return size heuristics:",{"type":64,"tag":655,"props":2487,"children":2488},{},[2489,2494,2499,2504,2509,2514],{"type":64,"tag":109,"props":2490,"children":2491},{},[2492],{"type":70,"value":2493},"Aggregation queries (stats, count, group-by): ~KB (negligible)",{"type":64,"tag":109,"props":2495,"children":2496},{},[2497],{"type":70,"value":2498},"PromQL with aggregation (sum, topk): ~KB (negligible)",{"type":64,"tag":109,"props":2500,"children":2501},{},[2502],{"type":70,"value":2503},"PromQL range query (500 series × 10K points): ~50MB (flag ⚠️)",{"type":64,"tag":109,"props":2505,"children":2506},{},[2507],{"type":70,"value":2508},"Raw log\u002Ftrace fetches: up to 100% of matched bytes",{"type":64,"tag":109,"props":2510,"children":2511},{},[2512],{"type":70,"value":2513},"Describe\u002FList results: ~KB (negligible)",{"type":64,"tag":109,"props":2515,"children":2516},{},[2517],{"type":70,"value":2518},"Unknown: use 15% of scan volume as upper bound, flag ⚠️",{"type":64,"tag":151,"props":2520,"children":2521},{},[],{"type":64,"tag":73,"props":2523,"children":2525},{"id":2524},"cost-reduction-suggestions",[2526],{"type":70,"value":2527},"Cost Reduction Suggestions",{"type":64,"tag":80,"props":2529,"children":2530},{},[2531],{"type":70,"value":2532},"When halting or warning, ALWAYS suggest free or cheaper alternatives:",{"type":64,"tag":175,"props":2534,"children":2536},{"id":2535},"generic-alternatives-apply-to-any-service",[2537],{"type":70,"value":2538},"Generic Alternatives (apply to any service)",{"type":64,"tag":182,"props":2540,"children":2541},{},[2542,2557],{"type":64,"tag":186,"props":2543,"children":2544},{},[2545],{"type":64,"tag":190,"props":2546,"children":2547},{},[2548,2552],{"type":64,"tag":194,"props":2549,"children":2550},{},[2551],{"type":70,"value":985},{"type":64,"tag":194,"props":2553,"children":2554},{},[2555],{"type":70,"value":2556},"Free\u002FCheaper Alternative",{"type":64,"tag":215,"props":2558,"children":2559},{},[2560,2573,2586,2599,2612,2625,2637,2650,2663],{"type":64,"tag":190,"props":2561,"children":2562},{},[2563,2568],{"type":64,"tag":222,"props":2564,"children":2565},{},[2566],{"type":70,"value":2567},"Broad time window scan",{"type":64,"tag":222,"props":2569,"children":2570},{},[2571],{"type":70,"value":2572},"Narrow to ±30 min around the incident",{"type":64,"tag":190,"props":2574,"children":2575},{},[2576,2581],{"type":64,"tag":222,"props":2577,"children":2578},{},[2579],{"type":70,"value":2580},"Multiple resource query",{"type":64,"tag":222,"props":2582,"children":2583},{},[2584],{"type":70,"value":2585},"Target specific resource ID",{"type":64,"tag":190,"props":2587,"children":2588},{},[2589,2594],{"type":64,"tag":222,"props":2590,"children":2591},{},[2592],{"type":70,"value":2593},"Full scan (DynamoDB, Athena)",{"type":64,"tag":222,"props":2595,"children":2596},{},[2597],{"type":70,"value":2598},"Add filter\u002FWHERE\u002Fkey condition",{"type":64,"tag":190,"props":2600,"children":2601},{},[2602,2607],{"type":64,"tag":222,"props":2603,"children":2604},{},[2605],{"type":70,"value":2606},"Analytics query for known string",{"type":64,"tag":222,"props":2608,"children":2609},{},[2610],{"type":70,"value":2611},"Use free filter API (FilterLogEvents) — note: LookupEvents may be tool-policy-blocked in some environments",{"type":64,"tag":190,"props":2613,"children":2614},{},[2615,2620],{"type":64,"tag":222,"props":2616,"children":2617},{},[2618],{"type":70,"value":2619},"Cross-region operation",{"type":64,"tag":222,"props":2621,"children":2622},{},[2623],{"type":70,"value":2624},"Suggest user run from workload region",{"type":64,"tag":190,"props":2626,"children":2627},{},[2628,2632],{"type":64,"tag":222,"props":2629,"children":2630},{},[2631],{"type":70,"value":2156},{"type":64,"tag":222,"props":2633,"children":2634},{},[2635],{"type":70,"value":2636},"Use SelectObjectContent with SQL filter",{"type":64,"tag":190,"props":2638,"children":2639},{},[2640,2645],{"type":64,"tag":222,"props":2641,"children":2642},{},[2643],{"type":70,"value":2644},"Pagination explosion",{"type":64,"tag":222,"props":2646,"children":2647},{},[2648],{"type":70,"value":2649},"Add limit, filter, or narrower scope",{"type":64,"tag":190,"props":2651,"children":2652},{},[2653,2658],{"type":64,"tag":222,"props":2654,"children":2655},{},[2656],{"type":70,"value":2657},"Broad PromQL (no label filters)",{"type":64,"tag":222,"props":2659,"children":2660},{},[2661],{"type":70,"value":2662},"Add specific label matchers or use aggregation",{"type":64,"tag":190,"props":2664,"children":2665},{},[2666,2671],{"type":64,"tag":222,"props":2667,"children":2668},{},[2669],{"type":70,"value":2670},"PromQL small step (60s over 7d)",{"type":64,"tag":222,"props":2672,"children":2673},{},[2674],{"type":70,"value":2675},"Increase to 300s+ or reduce time range",{"type":64,"tag":175,"props":2677,"children":2679},{"id":2678},"service-specific-alternatives",[2680],{"type":70,"value":2681},"Service-Specific Alternatives",{"type":64,"tag":182,"props":2683,"children":2684},{},[2685,2706],{"type":64,"tag":186,"props":2686,"children":2687},{},[2688],{"type":64,"tag":190,"props":2689,"children":2690},{},[2691,2696,2701],{"type":64,"tag":194,"props":2692,"children":2693},{},[2694],{"type":70,"value":2695},"Instead of...",{"type":64,"tag":194,"props":2697,"children":2698},{},[2699],{"type":70,"value":2700},"Use...",{"type":64,"tag":194,"props":2702,"children":2703},{},[2704],{"type":70,"value":2705},"Savings",{"type":64,"tag":215,"props":2707,"children":2708},{},[2709,2737,2767,2801,2828,2856,2878],{"type":64,"tag":190,"props":2710,"children":2711},{},[2712,2721,2732],{"type":64,"tag":222,"props":2713,"children":2714},{},[2715],{"type":64,"tag":166,"props":2716,"children":2718},{"className":2717},[],[2719],{"type":70,"value":2720},"logs:StartQuery",{"type":64,"tag":222,"props":2722,"children":2723},{},[2724,2730],{"type":64,"tag":166,"props":2725,"children":2727},{"className":2726},[],[2728],{"type":70,"value":2729},"logs:FilterLogEvents",{"type":70,"value":2731}," (if searching for known string)",{"type":64,"tag":222,"props":2733,"children":2734},{},[2735],{"type":70,"value":2736},"100%",{"type":64,"tag":190,"props":2738,"children":2739},{},[2740,2751,2762],{"type":64,"tag":222,"props":2741,"children":2742},{},[2743,2749],{"type":64,"tag":166,"props":2744,"children":2746},{"className":2745},[],[2747],{"type":70,"value":2748},"cloudwatch:GetMetricData",{"type":70,"value":2750}," (many)",{"type":64,"tag":222,"props":2752,"children":2753},{},[2754,2760],{"type":64,"tag":166,"props":2755,"children":2757},{"className":2756},[],[2758],{"type":70,"value":2759},"cloudwatch:GetMetricStatistics",{"type":70,"value":2761}," (single)",{"type":64,"tag":222,"props":2763,"children":2764},{},[2765],{"type":70,"value":2766},"~100%",{"type":64,"tag":190,"props":2768,"children":2769},{},[2770,2779,2796],{"type":64,"tag":222,"props":2771,"children":2772},{},[2773,2778],{"type":64,"tag":166,"props":2774,"children":2776},{"className":2775},[],[2777],{"type":70,"value":230},{"type":70,"value":1664},{"type":64,"tag":222,"props":2780,"children":2781},{},[2782,2784,2789,2790],{"type":70,"value":2783},"Add ",{"type":64,"tag":166,"props":2785,"children":2787},{"className":2786},[],[2788],{"type":70,"value":728},{"type":70,"value":1014},{"type":64,"tag":166,"props":2791,"children":2793},{"className":2792},[],[2794],{"type":70,"value":2795},"topk(5, ...)",{"type":64,"tag":222,"props":2797,"children":2798},{},[2799],{"type":70,"value":2800},"90%+",{"type":64,"tag":190,"props":2802,"children":2803},{},[2804,2813,2824],{"type":64,"tag":222,"props":2805,"children":2806},{},[2807],{"type":64,"tag":166,"props":2808,"children":2810},{"className":2809},[],[2811],{"type":70,"value":2812},"dynamodb:Scan",{"type":64,"tag":222,"props":2814,"children":2815},{},[2816,2822],{"type":64,"tag":166,"props":2817,"children":2819},{"className":2818},[],[2820],{"type":70,"value":2821},"dynamodb:Query",{"type":70,"value":2823}," with key condition",{"type":64,"tag":222,"props":2825,"children":2826},{},[2827],{"type":70,"value":2766},{"type":64,"tag":190,"props":2829,"children":2830},{},[2831,2842,2852],{"type":64,"tag":222,"props":2832,"children":2833},{},[2834,2840],{"type":64,"tag":166,"props":2835,"children":2837},{"className":2836},[],[2838],{"type":70,"value":2839},"athena:StartQueryExecution",{"type":70,"value":2841}," (full)",{"type":64,"tag":222,"props":2843,"children":2844},{},[2845,2847],{"type":70,"value":2846},"Add partition filter in ",{"type":64,"tag":166,"props":2848,"children":2850},{"className":2849},[],[2851],{"type":70,"value":1611},{"type":64,"tag":222,"props":2853,"children":2854},{},[2855],{"type":70,"value":2800},{"type":64,"tag":190,"props":2857,"children":2858},{},[2859,2869,2874],{"type":64,"tag":222,"props":2860,"children":2861},{},[2862,2868],{"type":64,"tag":166,"props":2863,"children":2865},{"className":2864},[],[2866],{"type":70,"value":2867},"xray:GetTraceSummaries",{"type":70,"value":1664},{"type":64,"tag":222,"props":2870,"children":2871},{},[2872],{"type":70,"value":2873},"Narrow time + add filter expression",{"type":64,"tag":222,"props":2875,"children":2876},{},[2877],{"type":70,"value":2800},{"type":64,"tag":190,"props":2879,"children":2880},{},[2881,2892,2903],{"type":64,"tag":222,"props":2882,"children":2883},{},[2884,2890],{"type":64,"tag":166,"props":2885,"children":2887},{"className":2886},[],[2888],{"type":70,"value":2889},"s3:GetObject",{"type":70,"value":2891}," (large)",{"type":64,"tag":222,"props":2893,"children":2894},{},[2895,2901],{"type":64,"tag":166,"props":2896,"children":2898},{"className":2897},[],[2899],{"type":70,"value":2900},"s3:SelectObjectContent",{"type":70,"value":2902}," with SQL",{"type":64,"tag":222,"props":2904,"children":2905},{},[2906],{"type":70,"value":2907},"Variable",{"type":64,"tag":151,"props":2909,"children":2910},{},[],{"items":2912,"total":3087},[2913,2931,2946,2961,2976,2986,3001,3017,3031,3048,3061,3073],{"slug":2914,"name":2914,"fn":2915,"description":2916,"org":2917,"tags":2918,"stars":2928,"repoUrl":2929,"updatedAt":2930},"agents-build","add capabilities to existing agent projects","Use to extend an existing agent project with memory, app integration, VPC, multi-agent, migration, model, browser, code interpreter, payments, or resource removal. Triggers: \"add memory\", \"remember across sessions\", \"call agent from app\", \"invoke agent from code\", \"agent auth\", \"streaming\", \"VPC\", \"VPC connectivity\", \"can't reach from VPC\", \"multi-agent\", \"A2A\", \"A2A auth\", \"orchestrator not delegating\", \"specialist not called\", \"migrate Bedrock Agent\", \"migration issue\", \"change model\", \"browser tool\", \"code interpreter\", \"delete agent\", \"tear down\", \"agentcore remove\", \"cross-account memory\", \"add payments capability to my agent\", \"wire payments plugin\", \"integrate x402 payments with the agent I'm building\", \"add MPP payments\", \"Machine Payments Protocol\". External APIs via Gateway: use agents-connect. New project: use agents-get-started. CLI\u002Fdev-server errors: use agents-debug. Runtime x402\u002FMPP payments: use agents-pay. Migration-specific Strands vs LangGraph routes here.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2919,2921,2924,2925],{"name":2920,"slug":32,"type":15},"Agents",{"name":2922,"slug":2923,"type":15},"Automation","automation",{"name":23,"slug":8,"type":15},{"name":2926,"slug":2927,"type":15},"Engineering","engineering",1822,"https:\u002F\u002Fgithub.com\u002Faws\u002Fagent-toolkit-for-aws","2026-08-20T03:27:06.137661",{"slug":2932,"name":2932,"fn":2933,"description":2934,"org":2935,"tags":2936,"stars":2928,"repoUrl":2929,"updatedAt":2945},"agents-connect","connect agents to external services","Use when connecting your agent to external APIs, tools, or services via Gateway, or restricting tool access with Cedar policies. Handles gateway setup, target types, outbound auth (OAuth, API key, IAM), credentials, and Cedar policy authoring. Triggers on: \"connect to API\", \"add gateway\", \"connect to MCP server\", \"Lambda tools\", \"OpenAPI\", \"gateway target\", \"Cedar policy\", \"restrict tools\", \"policy engine\", \"gateway auth error\", \"store API key\", \"outbound credential\", \"env var API key\", \"API key None after deploy\", \"credential not available after deploy\", \"should this be a gateway target\", \"give my agent tools\", \"add tools to agent\". Not for inbound auth (who can call your agent) — use agents-harden. Not for debugging agent behavior — use agents-debug. Not for VPC networking errors (agent can't reach APIs due to VPC) — use agents-build. Not for creating or hosting a new MCP server project — use agents-get-started.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2937,2938,2941,2944],{"name":2920,"slug":32,"type":15},{"name":2939,"slug":2940,"type":15},"API Development","api-development",{"name":2942,"slug":2943,"type":15},"Authentication","authentication",{"name":23,"slug":8,"type":15},"2026-07-16T06:00:38.866147",{"slug":2947,"name":2947,"fn":2948,"description":2949,"org":2950,"tags":2951,"stars":2928,"repoUrl":2929,"updatedAt":2960},"agents-debug","debug agent and environment issues","Use when your agent or environment is broken — wrong answers, errors, timeouts, tool failures, or CLI issues. Reads traces and logs to diagnose root causes. Also checks prerequisites when the CLI itself isn't working. Triggers on: \"agent not working\", \"wrong answer\", \"agent error\", \"tool call failing\", \"debug agent\", \"check logs\", \"read traces\", \"broken\", \"500 error\", \"424 error\", \"model access denied\", \"command not found\", \"stuck in DELETING\", \"maxVms exceeded\", \"cold start diagnosis\", \"cold start slow\", \"agentcore create error\", \"create failed\", \"exit code 7\", \"connection refused local dev\". Not for deploy failures — use agents-deploy. Not for performance tuning without errors — use agents-optimize. Not for VPC configuration — use agents-build. Not for observability setup or missing logs — use agents-optimize.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2952,2953,2954,2957],{"name":2920,"slug":32,"type":15},{"name":23,"slug":8,"type":15},{"name":2955,"slug":2956,"type":15},"Debugging","debugging",{"name":2958,"slug":2959,"type":15},"Observability","observability","2026-07-16T06:00:44.679093",{"slug":2962,"name":2962,"fn":2963,"description":2964,"org":2965,"tags":2966,"stars":2928,"repoUrl":2929,"updatedAt":2975},"agents-deploy","deploy AI agents to AWS","Use when deploying your agent to AWS, or when a deploy has failed. Handles pre-flight validation, CDK\u002FIAM\u002Fquota error diagnosis, version management, rollback, and canary deployments. Triggers on: \"deploy my agent\", \"agentcore deploy\", \"deploy failed\", \"CDK error\", \"rollback\", \"canary deploy\", \"pin version\", \"redeploy\", \"deploy stuck\". Not for production hardening — use agents-harden. Not for adding capabilities before deploy — use agents-build or agents-connect. Not for VPC configuration errors — use agents-build.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2967,2968,2969,2972],{"name":2920,"slug":32,"type":15},{"name":23,"slug":8,"type":15},{"name":2970,"slug":2971,"type":15},"CI\u002FCD","ci-cd",{"name":2973,"slug":2974,"type":15},"Deployment","deployment","2026-07-12T08:42:55.059577",{"slug":2977,"name":2977,"fn":2978,"description":2979,"org":2980,"tags":2981,"stars":2928,"repoUrl":2929,"updatedAt":2985},"agents-get-started","scaffold and deploy new agent projects","Use when a developer wants to create a new agent project or get started with AgentCore. Handles framework selection, project scaffolding, first deploy, and first invocation. Triggers on: \"build an agent\", \"create an agent\", \"get started\", \"new project\", \"agentcore create\", \"which framework\", \"Strands vs LangGraph\", \"hello world agent\", \"first agent\", \"create MCP server\", \"host MCP server\", \"agentcore dev\", \"dev server\", \"what port\", \"local development\". Not for adding capabilities to existing projects — use agents-build or agents-connect. Strands vs LangGraph in a migration context routes to agents-build, not here. Connecting to an existing MCP server routes to agents-connect, not here.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2982,2983,2984],{"name":2920,"slug":32,"type":15},{"name":23,"slug":8,"type":15},{"name":2973,"slug":2974,"type":15},"2026-07-12T08:42:51.963247",{"slug":2987,"name":2987,"fn":2988,"description":2989,"org":2990,"tags":2991,"stars":2928,"repoUrl":2929,"updatedAt":3000},"agents-harden","harden agents for production","Use when preparing your agent for production — IAM scoping, inbound auth (JWT, SigV4), secrets management, cold start optimization, session lifecycle, rate limiting, input validation, and quota guidance. Triggers on: \"production checklist\", \"harden agent\", \"production ready\", \"secure agent\", \"inbound auth\", \"going live\", \"cold start optimization\", \"session lifecycle\", \"StopRuntimeSession\", \"quota\", \"throttling\", \"maxVms\", \"rate limit\", \"security audit of outbound API calls\", \"gateway target audit for production\", \"restrict who can call\", \"lock down endpoint\", \"only our app can call\". Not for Cedar tool-restriction policies — use agents-connect. Not for quality measurement — use agents-optimize. Not for outbound credential storage or API key wiring — use agents-connect. Not for A2A agent-to-agent auth — use agents-build. Cold start observation and diagnosis (not optimization) routes to agents-debug.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2992,2993,2994,2997],{"name":2920,"slug":32,"type":15},{"name":23,"slug":8,"type":15},{"name":2995,"slug":2996,"type":15},"Best Practices","best-practices",{"name":2998,"slug":2999,"type":15},"Security","security","2026-07-16T06:00:42.174705",{"slug":3002,"name":3002,"fn":3003,"description":3004,"org":3005,"tags":3006,"stars":2928,"repoUrl":2929,"updatedAt":3016},"agents-optimize","optimize agent quality and performance","Use when measuring or improving agent quality and performance — set up evaluators, online monitoring, CI\u002FCD quality gates, observability, or cost optimization. Triggers on: \"evaluate my agent\", \"add evaluator\", \"measure quality\", \"quality gate\", \"run evals\", \"agent too slow\", \"why is it slow\", \"reduce latency\", \"set up observability\", \"CloudWatch dashboard\", \"how much does my agent cost\", \"cost optimization\", \"logs not showing up\", \"logs missing\", \"spans not found\", \"eval failing\", \"eval error\", \"dev traces\", \"local traces\", \"agentcore dev traces\", \"traces to CloudWatch\". Not for debugging errors or crashes — use agents-debug. Slow but correct routes here; broken routes to debug.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3007,3008,3009,3012,3013],{"name":2920,"slug":32,"type":15},{"name":23,"slug":8,"type":15},{"name":3010,"slug":3011,"type":15},"Evals","evals",{"name":2958,"slug":2959,"type":15},{"name":3014,"slug":3015,"type":15},"Performance","performance","2026-07-12T08:42:56.488105",{"slug":3018,"name":3018,"fn":3019,"description":3020,"org":3021,"tags":3022,"stars":2928,"repoUrl":2929,"updatedAt":3030},"agents-pay","handle x402 payments for agent tasks","Use when THIS agent needs to pay for x402-protected content at runtime: hitting a paywall mid-task, settling it via AgentCore Payments, and applying operator-defined spend limits. Covers payment setup, policy, session budgets, and troubleshooting. Triggers on: \"my agent hit a 402 while calling an API\", \"a tool call returned 402 Payment Required\", \"my agent needs to pay for x402-protected content\", \"let the agent pay for content, capped at $5 per session\", \"set a spend limit for the agent\", \"ProcessPayment failed\", or \"why did my agent refuse to pay\". Not for BUILDING payment capability for end users, including wallets and framework middleware; use agents-build and references\u002Fpayments.md. For non-paid APIs via Gateway use agents-connect. For inbound auth use agents-harden. For project scaffolding use agents-get-started.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3023,3024,3025,3028],{"name":2920,"slug":32,"type":15},{"name":2922,"slug":2923,"type":15},{"name":3026,"slug":3027,"type":15},"Payments","payments",{"name":3029,"slug":3029,"type":15},"x402","2026-08-10T04:16:31.844309",{"slug":3032,"name":3032,"fn":3033,"description":3034,"org":3035,"tags":3036,"stars":2928,"repoUrl":2929,"updatedAt":3047},"amazon-aurora-mysql","manage Amazon Aurora MySQL clusters","Amazon Aurora MySQL — creates, modifies, and advises on Aurora MySQL clusters specifically (MySQL-compatible engine, Aurora serverless, parallel query). Trigger for Aurora MySQL cluster operations, ACU sizing, I\u002FO-Optimized storage, commitment pricing, or MySQL upgrade planning. Aurora MySQL uses full (VPC-based) configuration — express configuration is PostgreSQL-only. For Aurora PostgreSQL, use amazon-aurora-postgresql instead. Contains safety guardrails and response templates that override defaults.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3037,3038,3041,3044],{"name":23,"slug":8,"type":15},{"name":3039,"slug":3040,"type":15},"Database","database",{"name":3042,"slug":3043,"type":15},"MySQL","mysql",{"name":3045,"slug":3046,"type":15},"Serverless","serverless","2026-07-12T08:43:13.27939",{"slug":3049,"name":3049,"fn":3050,"description":3051,"org":3052,"tags":3053,"stars":2928,"repoUrl":2929,"updatedAt":3060},"amazon-aurora-postgresql","configure Amazon Aurora PostgreSQL clusters","Amazon Aurora PostgreSQL — creates, modifies, and advises on Aurora PostgreSQL clusters specifically (PostgreSQL-compatible engine, Aurora serverless, express configuration, pgvector, Babelfish). Trigger for Aurora PostgreSQL cluster operations, express-configuration quick-start, ACU sizing, I\u002FO-Optimized storage, commitment pricing, or PostgreSQL upgrade planning. For Aurora MySQL, use amazon-aurora-mysql instead. Contains safety guardrails, express-first routing, and response templates that override defaults.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3054,3055,3056,3059],{"name":23,"slug":8,"type":15},{"name":3039,"slug":3040,"type":15},{"name":3057,"slug":3058,"type":15},"PostgreSQL","postgresql",{"name":3045,"slug":3046,"type":15},"2026-07-16T06:00:34.789624",{"slug":3062,"name":3062,"fn":3063,"description":3064,"org":3065,"tags":3066,"stars":2928,"repoUrl":2929,"updatedAt":3072},"amazon-bedrock","build generative AI apps with Amazon Bedrock","Builds generative AI applications on Amazon Bedrock. Covers model invocation (Converse API, InvokeModel), RAG with Knowledge Bases, Bedrock Agents, Guardrails, and AgentCore (including the Harness managed agent loop). Use when invoking models, setting up Knowledge Bases, creating agents, applying guardrails, deploying to AgentCore, migrating\u002Fporting\u002Fconverting a Bedrock Agent (including inline agents) to an AgentCore Harness, troubleshooting Bedrock errors (ThrottlingException, AccessDeniedException), or choosing models (Claude, Llama, Nova, Titan). ALSO USE for prompt caching, quota health checks and throttling diagnosis, cost attribution, migrating between Claude model generations, chunking strategies, API selection (Converse vs InvokeModel), and model selection. Also covers AgentCore Payments setup (x402, microtransactions, Payment Manager, Coinbase CDP, Stripe Privy, 402 Payment Required, paid endpoint). NOT for custom model training, Rekognition, or Comprehend.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3067,3068,3069],{"name":2920,"slug":32,"type":15},{"name":23,"slug":8,"type":15},{"name":3070,"slug":3071,"type":15},"LLM","llm","2026-08-07T04:38:13.03499",{"slug":3074,"name":3074,"fn":3075,"description":3076,"org":3077,"tags":3078,"stars":2928,"repoUrl":2929,"updatedAt":3086},"amazon-braket","run quantum computing workflows on AWS","Runs quantum computing workflows on AWS through Amazon Braket — discovering devices (QPUs and simulators) and their availability, building gate-model circuits and analog Hamiltonian programs, submitting quantum tasks, program sets and hybrid jobs, looking up prices, and capping spend with spending limits. Applies to any request about quantum computing, quantum hardware, quantum simulation, AHS, OpenQASM, or running a quantum algorithm on AWS.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3079,3080,3083],{"name":23,"slug":8,"type":15},{"name":3081,"slug":3082,"type":15},"Quantum Computing","quantum-computing",{"name":3084,"slug":3085,"type":15},"Simulation","simulation","2026-08-20T03:53:19.377174",139,{"items":3089,"total":3188},[3090,3104,3119,3133,3147,3159,3174],{"slug":3091,"name":3091,"fn":3092,"description":3093,"org":3094,"tags":3095,"stars":24,"repoUrl":25,"updatedAt":3103},"aws-health-events","analyze AWS Health events for incidents","ALWAYS use this skill in the beginning of any incident investigation, root cause analysis, or operational troubleshooting. This skill retrieves and analyzes AWS Health events (service issues, scheduled changes, and account notifications) to identify AWS-side events that may explain or correlate with observed operational issues. Activate this skill when investigating an issue and you observe service degradation, elevated error rates, latency spikes, connection failures, throttling, capacity issues, deployment-related failures, alarms, or any operational event or issue. This skill searches AWS Health events by service, time window, region, and status to surface active or recent service disruptions, scheduled maintenance, and account-specific notifications that inform the current investigation. Also activate when a user requests a health event summary or report for their account over a specified time period.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3096,3097,3098,3100],{"name":23,"slug":8,"type":15},{"name":2955,"slug":2956,"type":15},{"name":3099,"slug":40,"type":15},"Incident Response",{"name":3101,"slug":3102,"type":15},"Monitoring","monitoring","2026-08-20T03:53:41.178955",{"slug":3105,"name":3105,"fn":3106,"description":3107,"org":3108,"tags":3109,"stars":24,"repoUrl":25,"updatedAt":3118},"aws-vpc-dns-investigation","investigate VPC DNS resolution issues","Use this skill when a name is not resolving as expected inside a VPC, or before applying a DNS control-plane change. Activate on symptoms such as NXDOMAIN or SERVFAIL from an EC2 instance, a hostname resolving to a public address when a private endpoint was expected, an AWS service endpoint that stopped resolving after a VPC endpoint or Route 53 change, an application reaching the wrong IP, resolution that works from one instance but not another, IPv6 or dualstack resolution differences, a suspected on-premises forwarding or hybrid DNS problem, or a request to check whether enabling private DNS, adding a Resolver rule, associating a private hosted zone, attaching DNS Firewall, or associating a Route 53 Profile would break anything. It drives the aws-vpc-dns-diagnostics MCP server to observe live resolution from inside the subnet and to simulate a proposed change before it is applied.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3110,3111,3112,3115],{"name":23,"slug":8,"type":15},{"name":2955,"slug":2956,"type":15},{"name":3113,"slug":3114,"type":15},"DNS","dns",{"name":3116,"slug":3117,"type":15},"Networking","networking","2026-08-20T03:53:46.027593",{"slug":3120,"name":3120,"fn":3121,"description":3122,"org":3123,"tags":3124,"stars":24,"repoUrl":25,"updatedAt":3132},"crm-production-investigation-guidelines","investigate CRM production incidents","Guidelines for investigating production incidents in the CRM application. Use when triaging any alert or incident involving the CRM REST API, SQS queues, Lambda functions, or Aurora DSQL database in this AWS account. Ensures thorough root cause analysis using AWS-native observability tools.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3125,3126,3129,3130,3131],{"name":23,"slug":8,"type":15},{"name":3127,"slug":3128,"type":15},"CRM","crm",{"name":2955,"slug":2956,"type":15},{"name":3099,"slug":40,"type":15},{"name":13,"slug":14,"type":15},"2026-08-20T03:53:23.532781",{"slug":3134,"name":3134,"fn":3135,"description":3136,"org":3137,"tags":3138,"stars":24,"repoUrl":25,"updatedAt":3146},"database-migration-service-expertise","troubleshoot AWS Database Migration Service","AWS Database Migration Service (DMS) operational review and troubleshooting skill. Conducts best practices validation, health assessments, performance diagnostics, cost optimization reviews, and migration cutover guidance. Triggers on requests like \"DMS review\", \"DMS health check\", \"DMS troubleshooting\", \"migration assessment\", \"DMS best practices audit\", \"DMS cost optimization\", \"replication instance review\", \"CDC latency issue\", or \"DMS task failure\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3139,3140,3141,3142,3145],{"name":23,"slug":8,"type":15},{"name":3039,"slug":3040,"type":15},{"name":2955,"slug":2956,"type":15},{"name":3143,"slug":3144,"type":15},"Migration","migration",{"name":13,"slug":14,"type":15},"2026-08-20T03:53:23.927999",{"slug":3148,"name":3148,"fn":3149,"description":3150,"org":3151,"tags":3152,"stars":24,"repoUrl":25,"updatedAt":3158},"database-rds-devops","diagnose Aurora MySQL and PostgreSQL databases","Database-level data-plane diagnostics for Aurora MySQL and Aurora PostgreSQL. Executes predefined read-only health check queries via RDS Data API to analyze buffer pool, connections, locks, replication, storage, performance, and index efficiency. Requires the rds-aidba MCP server for database-internal access beyond what CloudWatch and RDS APIs provide.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3153,3154,3155,3156,3157],{"name":23,"slug":8,"type":15},{"name":3039,"slug":3040,"type":15},{"name":2955,"slug":2956,"type":15},{"name":3042,"slug":3043,"type":15},{"name":3057,"slug":3058,"type":15},"2026-08-20T03:53:41.560344",{"slug":3160,"name":3160,"fn":3161,"description":3162,"org":3163,"tags":3164,"stars":24,"repoUrl":25,"updatedAt":3173},"eks-operation-review","audit Amazon EKS cluster operations","Comprehensive Amazon EKS operational review aligned with the AWS EKS Best Practices Guide. Use this skill when a user asks to review, audit, or assess EKS clusters for best practices compliance, operational readiness, security posture, cost optimization, reliability, networking, scalability, or upgrade readiness. Triggers on requests like \"EKS review\", \"EKS best practices audit\", \"EKS operational assessment\", \"review my EKS cluster\", or \"EKS health check\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3165,3168,3169,3172],{"name":3166,"slug":3167,"type":15},"Audit","audit",{"name":23,"slug":8,"type":15},{"name":3170,"slug":3171,"type":15},"Kubernetes","kubernetes",{"name":13,"slug":14,"type":15},"2026-08-20T03:53:20.524374",{"slug":3175,"name":3175,"fn":3176,"description":3177,"org":3178,"tags":3179,"stars":24,"repoUrl":25,"updatedAt":3187},"enrich-with-aws-security-agent","investigate security root causes in AWS","Automatically load this skill when investigating application outages, service degradation, or errors that could have security-related root causes — including unexplained downtime, authentication or authorization failures, injection attacks, data exposure, or suspicious application behavior. Query AWS Security Agent CloudWatch logs to retrieve detailed code review findings with actionable, low-level details (file, line number, vulnerability type) that customers can directly fix.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3180,3183,3184,3185,3186],{"name":3181,"slug":3182,"type":15},"Auth","auth",{"name":23,"slug":8,"type":15},{"name":2955,"slug":2956,"type":15},{"name":3099,"slug":40,"type":15},{"name":2998,"slug":2999,"type":15},"2026-08-20T03:53:23.097965",15]