> **aws-investigation** — skill 48 of 156 in [aws/agent-toolkit-for-aws](https://skillsdocs.com/aws/agent-toolkit-for-aws).
>
> Book (all skills, one file): https://skillsdocs.com/aws/agent-toolkit-for-aws.md
> Machine manifest: https://skillsdocs.com/aws/agent-toolkit-for-aws/.well-known/agent-skills/index.json
> Install the book: `npx skills add aws/agent-toolkit-for-aws`
> Upstream: https://github.com/aws/agent-toolkit-for-aws/blob/main/skills/core-skills/aws-investigation/SKILL.md @ `main`
> Raw bytes, no header: https://raw.githubusercontent.com/aws/agent-toolkit-for-aws/main/skills/core-skills/aws-investigation/SKILL.md
> Base for relative paths: https://raw.githubusercontent.com/aws/agent-toolkit-for-aws/main/skills/core-skills/aws-investigation/
> Licence: Apache-2.0 — https://spdx.org/licenses/Apache-2.0.html
>
> Bundled files (4), referenced from this skill's directory:
>   - `references/completeness-and-root-cause.md` — https://raw.githubusercontent.com/aws/agent-toolkit-for-aws/main/skills/core-skills/aws-investigation/references/completeness-and-root-cause.md
>   - `references/data-investigation.md` — https://raw.githubusercontent.com/aws/agent-toolkit-for-aws/main/skills/core-skills/aws-investigation/references/data-investigation.md
>   - `references/deployed-artifacts.md` — https://raw.githubusercontent.com/aws/agent-toolkit-for-aws/main/skills/core-skills/aws-investigation/references/deployed-artifacts.md
>   - `references/multi-service-logs.md` — https://raw.githubusercontent.com/aws/agent-toolkit-for-aws/main/skills/core-skills/aws-investigation/references/multi-service-logs.md
>
> Content © its authors, served unmodified. Takedown: https://github.com/DreambaseAI/skillsdocs/issues/new?labels=takedown&title=Takedown+request

<!-- Verbatim upstream SKILL.md follows, YAML frontmatter included. -->

---
name: aws-investigation
description: >-
  Investigates what is happening in an AWS account from evidence already recorded there. Not for
  capturing new data from running code (snapshots of function arguments on a live service,
  Dynamic Instrumentation), questions answered from the CloudWatch Omni context graph or
  Application Signals service map, or building or changing infrastructure. Covers reading
  deployment records instead of the newest stored version (completed AppConfig deployments, the
  version an alias points to, a stack's current template), following a request through every
  service's own logs (exact per-layer fields, unique failed requests in an alarm's breach window,
  failure boundary per event), and answering questions from the account's data (exact counts and
  breakdowns, coverage of the requested range, exact filters and joins, the rule behind failed or
  unmatched records, verbatim values). Use to triage an alarm, error spike or failed request, trace
  a request across services, or count, break down, extract or join records.
metadata:
  version: "1"
---

# 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](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](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](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](references/completeness-and-root-cause.md) |

## Rules for every investigation

1. **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.
2. **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.
3. **Count exactly.** Use aggregate queries run in the engine, scoped to exactly what was asked, and
   report unique entities separately from raw records.
4. **Quote, don't paraphrase.** Give identifiers, field values, error codes and messages exactly as
   the source produced them, including `null` and empty values.
5. **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:

1. Have you searched all relevant regions and scopes?
2. Have you paginated through all results, and said which part of the requested range has data?
3. Have you verified the scope of failures (entity-specific vs fleet-wide, the whole affected
   population)?
4. Does your root cause fit all the facts you found?
5. 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?
6. Did your claims about live configuration come from the deployed artifact, not the latest
   stored version ([deployed-artifacts.md](references/deployed-artifacts.md))?
7. 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](references/multi-service-logs.md))?
8. Have you answered the user's specific question directly?
9. Before you finish, have you reread your conclusion against each piece of evidence you
   collected and removed any statement that contradicts it?
10. Have you removed any contradictions between your findings and recommendations, and checked
    each runbook option against the confirmed cause?
