AWS Investigation
AWSOfficialPublished by AWS
- Skill
- Guidelines
- Cloud and DevOps
- Apache-2.0
- No issues found
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
AWS Investigation provides a rigorous framework for troubleshooting and auditing AWS environments. It emphasizes evidence-based reasoning, requiring that all conclusions be derived directly from verifiable sources such as service logs, deployment artifacts, and query results. The skill mandates strict practices for data completeness, including exhaustive pagination, regional scope verification, and precise aggregate counting, while explicitly separating factual evidence from unverified hypotheses.
What it does
- Traces requests across multiple AWS services to identify failure boundaries.
- Analyzes deployment records to determine the actual state of running configurations.
- Performs exact data investigations, including counts, breakdowns, and joins.
- Verifies the scope of incidents to distinguish between entity-specific and fleet-wide issues.
- Ensures search completeness by checking all relevant regions and data partitions.
- Provides a checklist for validating root causes against collected evidence.
When to use it
- When triaging an active alarm, error spike, or failed request.
- When you need to determine the exact configuration or version of a deployed system.
- When investigating why specific records are failing or unmatched in a data pipeline.
- When you need to confirm the scope of an incident across an entire AWS account.
Advantages
- Reduces reliance on assumptions by enforcing strict evidence provenance.
- Ensures high accuracy in reporting through mandatory pagination and aggregate queries.
- Provides a clear, repeatable process for complex multi-service troubleshooting.
- Prevents common errors like partial data reporting or incomplete regional searches.
Usage examples
- “Why are requests failing for user ID 123 in the us-west-2 region?”
- The agent will list relevant log groups, perform an aggregate query to check if the error is isolated to this user or widespread, and provide a root cause based on the logs.
- “Which version of the application is currently running in production?”
- The agent will inspect the actual deployment artifacts and configuration parameters rather than relying on the latest stored version, confirming the exact version in use.
Install
Download the skill as a ZIP:
https://mp-staging.autogineer.com/agent-skills/aws/aws-investigation/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip aws-investigation.zip -d .agents/skills
Documentation by AWS
AWS Investigation
An investigation answers a question about what an AWS account is doing, and every claim in the answer must come from something you read: a deployed artifact, a service's own log record, or a query result. Inference from names, descriptions, the newest stored version or one service's view of another is a lead, never evidence.
Pick the reference
Read the reference that matches the question before you start; most investigations need more than one.
| The question is about | Read |
|---|---|
| What a deployed system currently does, serves or executes: live configuration, feature flags, parameters, which code runs, reproducing a code path's query, or a first data route that is blocked | references/deployed-artifacts.md |
| A request, alarm or incident that spans several services: tracing one request, counting failed requests, deciding where an event was lost | references/multi-service-logs.md |
| Facts in the account's data: finding where data lives, exact counts and breakdowns, filtering, joining or exporting records, the rules behind failed or unmatched records | references/data-investigation.md |
| Whether a finding is complete and a root cause holds: searching every region and scope, paginating before counting, coverage of a date range, one entity vs the whole affected population, consistency of the root cause, whether a runbook fixes the cause, answering the user's own question | references/completeness-and-root-cause.md |
Rules for every investigation
Explore before you give up. Assume the credentials are the intended environment. Treat unfamiliar or internal terms (service nicknames, airport-code regions such as PDX = us-west-2, IAD = us-east-1) as search hints: list resources, log groups and data stores in the likely regions and search for the identifiers in the request before saying something cannot be done.
Separate evidence from inference. Keep a short provenance note per claim (
claim <- artifact, record or query). Label anything you did not read as a hypothesis or UNVERIFIED, with the routes you tried.Count exactly. Use aggregate queries run in the engine, scoped to exactly what was asked, and report unique entities separately from raw records.
Quote, don't paraphrase. Give identifiers, field values, error codes and messages exactly as the source produced them, including
nulland empty values.Finish the task. Produce every requested artifact (files, tables, plans), and state the assumptions you made in the final answer.
Closing checklist
Before submitting your analysis:
Have you searched all relevant regions and scopes?
Have you paginated through all results, and said which part of the requested range has data?
Have you verified the scope of failures (entity-specific vs fleet-wide, the whole affected population)?
Does your root cause fit all the facts you found?
Have you labelled every mechanism you could not confirm as unverified, and reported a missing component as a defect only if it was meant to exist?
Did your claims about live configuration come from the deployed artifact, not the latest stored version (deployed-artifacts.md)?
For a request that crosses services, did you read each service's own logs and place the failure boundary per event (multi-service-logs.md)?
Have you answered the user's specific question directly?
Before you finish, have you reread your conclusion against each piece of evidence you collected and removed any statement that contradicts it?
Have you removed any contradictions between your findings and recommendations, and checked each runbook option against the confirmed cause?
Files
- ATTRIBUTION.mdAdded by AutoGineer899 B
- LICENSELicence file added by AutoGineer9.9 KiB
- NOTICELicence file added by AutoGineer67 B
- SKILL.md4.9 KiB
- references/completeness-and-root-cause.md8.8 KiB
- references/data-investigation.md5.1 KiB
- references/deployed-artifacts.md7.9 KiB
- references/multi-service-logs.md1.8 KiB
references/completeness-and-root-cause.md
Completeness and root cause
Use this to decide whether a finding is complete and whether a root cause holds: confirming whether a failure belongs to one entity or the whole fleet, reporting counts, totals or "no evidence of X", and performing and reporting root cause analysis. It applies to any source (logs, API listings, data stores); the pagination rules below name the CloudWatch Logs calls.
Commands use AWS CLI syntax. The AWS MCP server is recommended for sandboxed execution and audit logging; the same calls work through the CLI without it.
Completeness and scope
Search completeness
Before concluding that an event, request, or record doesn't exist, make sure you searched everywhere it could be:
AWS resources are regional. If resource names include a region or marketplace marker, or the data could be served by more than one regional deployment, list and query the matching resources in every plausible region, not just the default one.
Never report "no evidence of X" as a finding until you have checked every scope. If searches across all scopes still find nothing, say exactly which scopes you checked.
For identity or authorization failures, find and compare the actual values on both sides, such as the identity the invitation or grant was issued to and the identity that authenticated. Base the root cause and fix on that comparison, not on guesses about infrastructure.
Pagination requirements
When you read logs or list resources through AWS APIs, paginate until the data is exhausted before you count, aggregate, or state a scope:
For CloudWatch GetLogEvents, keep following
nextForwardTokenuntil it returns the same token twice.For FilterLogEvents and List/Describe calls, keep following
nextTokenuntil none is returned.Treat any pagination or truncation warning as proof that the data is incomplete.
If one call returns too much output, process the pages and return only summaries. Do not shrink the read to a single page.
Before you report counts, totals, or "every X" claims, check that the last event's timestamp matches the stream's
lastEventTimestamp. Also look for entities whose results look partial, since that often means a page was cut off.If you can't confirm the data is complete, say the figures are partial.
Coverage of the requested range
When you compute a metric over a range (dates, hours, partitions, regions):
Check which values in the range have data, separately for each entity being compared.
In the answer, state for each entity whether its data covers the whole range, or name the missing values.
Never present an aggregate as covering the full range when part of it has no data.
If the entities cover different subsets, say so, because it affects whether the comparison is fair, and consider also giving the metric over the overlap they share.
Scope verification for failures
When asked to confirm from logs whether a failure belongs to a particular entity (store, account, tenant, resource), do not filter only on that entity. Get the wider context too:
Run an aggregated query, such as
stats count by entity, sub-ID, and outcome, across the same operation and time window. This shows whether the same error also hits other entities, so you can say whether it is specific to this entity or happening everywhere.For the target entity, list every unit of work in the relevant run, both successes and failures, so you can see the full scope of the batch. Pay particular attention to the operation that matters for the root cause.
If a query returns too much output, narrow it with aggregation, fields/parse, or smaller time windows. Do not add filters that would hide the comparison you need.
In the final answer, state whether the failure is unique to the entity or shared, and roughly how widely it is shared. Say which related operations succeeded. Explicitly correct any earlier claims in the thread that the logs contradict.
When asked why one record is failed or in an exception state, widen the analysis to the whole population the root cause touches: every category or rule pairing involved, every entity, account or ID the user listed, exact totals per category and per side, how many of the listed entities are affected and which are not, and the largest entity in each category.
Root-cause analysis
Consistency checks
Before reporting a root cause, check that it fits every fact you have already found, especially your own conclusions about how the system is designed (for example, whether work is pushed or pulled):
If something expected seems to be missing (such as a poller, loop, handler or log entry), do not treat the gap as proof of a defect. First ask whether the design you already found explains why it is absent.
Label any mechanism you could not confirm from data, configuration or logs as an unverified hypothesis, never as the root cause. In particular, never claim how a processing engine behaves ("rule X is being applied") unless you have read the rule definition.
If the evidence points elsewhere (such as a resource whose state changed or a reference that now points to a newer record), build the diagnosis on that.
Missing features as root causes
Treat a missing feature as a root cause only after you confirm the component was meant to have it:
A missing feature can be a missing handler, polling loop, subscriber, or log line. Before calling its absence a defect, work out from the evidence which component owns that responsibility.
In distributed or cross-region systems, check the data's target or destination fields (such as target region, account, or consumer) to see whether a different service or region does that work.
If you can't confirm who owns it, report the absence as an open question and name the next system to check. Don't present it as the root cause.
Bug reports and code defects
When investigating a bug report against code and logs, make sure your final verdict follows from your evidence:
If your trace shows that a computation gives a wrong or self-inconsistent result (for example, the same quantity is counted twice, or a valid request is rejected even though the resource is available), classify it as a code defect.
Do not call it "working as designed", and do not offer only workarounds such as process changes, extra user steps, or better error messages.
Name the specific faulty expression or line and propose a concrete code correction that would have made the reported case succeed. Workarounds can be listed as extra suggestions after that.
Take the intended behavior from the code and from the user's stated expectations, not from your own view of what the system should do. If a code path exists to handle a case (such as a fallback, retry, or alternate branch), treat that case as supported unless you have clear evidence otherwise.
Recommendation quality
In root-cause reports:
Do not say the case should be rejected, or call the failure "working as designed," when your own diagnosis shows a defect.
Recommend only the minimal fix that follows from the evidence, and do not add extra policy changes on top of it.
Remove or correct anything that contradicts your main finding, the user's stated expectation, or the purpose of the code.
If the user points to a runbook or playbook, go through every remediation it lists (retry, rollback, scaling, backfill, escalation) and say for each whether it addresses the confirmed cause and why, including the ones you reject. Name the options that only treat the symptom, such as a retry for a deterministic limit or a code defect. Recommend the change that fixes the cause.
Answering the user's question
When a user asks a specific question or names a suspected cause (for example, "why isn't X being applied?" or "is it enforced per A or per B?"):
Answer that question, and back the answer with evidence from the system.
Check the actual configuration or enforcement records, such as limit or quota settings, throttle or decision logs, and the keys or dimensions they record.
Say plainly whether the configuration was in effect during the incident window, what scope it applied to, and what value was enforced.
Rule out each competing explanation the user or other stakeholders raised, using evidence rather than assumption.
Don't hedge or offer speculative alternatives your evidence doesn't support (such as limits reverting to defaults or being split across hosts or partitions).
If you can't confirm something, label it as unverified instead of implying it.
Closing checklist
Run the closing checklist in the skill's SKILL.md before you report.
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Security
No issues found by our static scan· No issues found
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Published by
- AWS
- Publisher
- AWS (Official)
- Source
- aws/agent-toolkit-for-aws · skills/core-skills/aws-investigation · commit 0a218f8
- Licence
- Apache License 2.0 (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE)
- NOTICE (added by AutoGineer from NOTICE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
- Also distributed in
- aws/agent-toolkit-for-aws
AutoGineer is not affiliated with or endorsed by AWS.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download aws-investigation.zip