[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-aws-labs-prism-dash":3,"mdc--9vsf1c-key":37,"related-org-aws-labs-prism-dash":2710,"related-repo-aws-labs-prism-dash":2887},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":32,"sourceUrl":35,"mdContent":36},"prism-dash","analyze Amazon DocumentDB with Prism Dash","Top-level guide to the Prism Dash platform — an autonomous Amazon DocumentDB analysis and advisory tool built on Python\u002FDash. Covers the Observe→Reason→Decide→Act agent loop, the AnalyzerPlugin system, the 8-module analysis pipeline, cross-module correlation, cross-run memory, the Bedrock AI advisory stack, the code review engine, and Markdown report generation. Use when you need to understand how Prism works end-to-end, where a capability lives, or how the sub-skills (documentdb-advisor, documentdb-well-architected-review) plug in.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"aws-labs","AWS Labs","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Faws-labs.png","awslabs",[13,17,20,23],{"name":14,"slug":15,"type":16},"Observability","observability","tag",{"name":18,"slug":19,"type":16},"Database","database",{"name":21,"slug":22,"type":16},"Python","python",{"name":24,"slug":25,"type":16},"Engineering","engineering",157,"https:\u002F\u002Fgithub.com\u002Fawslabs\u002Famazon-documentdb-tools","2026-08-07T05:03:39.767088",null,86,[],{"repoUrl":27,"stars":26,"forks":30,"topics":33,"description":34},[],"Tools for use with the Amazon DocumentDB managed document database service.","https:\u002F\u002Fgithub.com\u002Fawslabs\u002Famazon-documentdb-tools\u002Ftree\u002FHEAD\u002Fperformance\u002Fprism\u002Fprism-skill","---\nname: prism-dash\ndisplay_name: Prism Dash Platform\ndescription: \"Top-level guide to the Prism Dash platform — an autonomous Amazon DocumentDB analysis and advisory tool built on Python\u002FDash. Covers the Observe→Reason→Decide→Act agent loop, the AnalyzerPlugin system, the 8-module analysis pipeline, cross-module correlation, cross-run memory, the Bedrock AI advisory stack, the code review engine, and Markdown report generation. Use when you need to understand how Prism works end-to-end, where a capability lives, or how the sub-skills (documentdb-advisor, documentdb-well-architected-review) plug in.\"\nicon: \"🔭\"\nmetadata:\n  author: Amazon DocumentDB SSA Team\n  version: \"1.0.0\"\n---\n\n# Prism Dash Platform\n\nPrism Dash is an autonomous Amazon DocumentDB optimization platform written in\nPython on top of Dash 2.17 (with Dash Bootstrap Components + Plotly). It connects\nto a DocumentDB cluster, runs an autonomous agent that analyzes the cluster for\nperformance, cost, reliability, and architectural issues, correlates the findings\nacross modules, and surfaces AI-grounded recommendations through a tabbed UI and a\nMarkdown report.\n\nThis is the **orchestration-level** skill. It describes how the whole system fits\ntogether and where each capability lives. Two focused sub-skills handle the\nconversational and review surfaces:\n\n- **`documentdb-advisor`** — the read-only conversational advisor (chat, agentic\n  tool-use, per-slow-query recommendations). See `documentdb-advisor\u002FSKILL.md`.\n- **`documentdb-well-architected-review`** — the 6-pillar Well-Architected review\n  (38-check catalog, scoring, exports). See\n  `documentdb-well-architected-review\u002FSKILL.md`.\n\nWhen a task is specifically about chat\u002Fadvice or about a WA review, defer to those\nsub-skills. Use this skill for cross-cutting questions about the platform.\n\n## 1. Tech Stack\n\n- **UI:** Dash 2.17 + Dash Bootstrap Components + Plotly\n- **Backend:** Python 3, PyMongo 4.5 (`appname=\"DocDB-Prism\"`), boto3\n- **AI:** AWS Bedrock — `us.anthropic.claude-sonnet-4-20250514-v1:0` (primary),\n  `us.anthropic.claude-haiku-4-5-20251001-v1:0` (fallback)\n- **Target:** Amazon DocumentDB clusters (public or private via SSH tunnel)\n\n## 2. Architecture — The Autonomous Agent (`agent_orchestrator.py`)\n\nThe agent runs an **Observe → Reason → Decide → Act** loop on a background daemon\nthread (started by `start_agent(conn_data)`; stopped by `stop_agent()`). A second\ndaemon thread (`_monitor_activity`) polls `currentOp` for live activity. All shared\nstate lives in the module-level `_agent_state` dict guarded by a `threading.Lock`;\nthe UI polls a lightweight summary via `get_agent_state()` and `dcc.Interval`.\n\n| Phase | Function | What it does |\n|-------|----------|--------------|\n| Observe | `_observe(conn_data)` | Collects fast facts: AWS cluster metadata (engine version, deletion protection, backup retention, log exports, instance types) via boto3; database sizes\u002Fcollection counts via PyMongo (`dbStats`, capped by `initial_batch`); CloudWatch profiler log-group existence; active databases from `currentOp`; previous state + config drift from `agent_memory`. |\n| Reason | `_reason(...)` | Calls Bedrock as a **planner** with the advisor system prompt + a planner addendum. Returns JSON `{next_module, target_database, target_collection, reasoning, priority, skip_modules, skip_reasons}`. On any failure it falls back to a fixed order via `_fallback_decision`. |\n| Decide | `_decide(decision, completed)` | Validates the plan: dedups already-completed modules, enforces that critical modules ran (`cluster_snapshot`, `well_architected`, `db_analysis`, and `slow_query` when profiler logs exist), and returns the next module or `\"done\"`. |\n| Act | `_act(module, ...)` | Executes the chosen module under a per-module timeout (`_run_with_timeout`, default 120s) and records results into `_agent_state[\"modules\"][name]`. |\n\n**Fixed fallback order** (`_FALLBACK_ORDER`): `cluster_snapshot → well_architected →\ndb_analysis → slow_query → compression → bloat → instance_recommender →\nstorage_recommender`.\n\n### Safety & prioritisation (driven by `prism_config.yaml`)\n\n- System databases `admin`, `local`, `config` are **always** excluded.\n- `_safety_check()` enforces `skip_databases` and `skip_collections` (prefix match).\n- `_build_analysis_scope()` ranks candidates: **active databases first** (from\n  `currentOp`), then `priority_databases`, then largest-by-size, truncated to\n  `max_databases_to_analyse`. Skipped databases and their reasons are recorded in\n  `analysis_scope.skipped`.\n- `_iter_databases()` paces work with `database_tree.delay_between_seconds` to keep\n  cluster load gentle and honors the `_stop_event`.\n\n### Cross-module correlation\n\nAfter modules complete, the agent correlates findings across modules (for example\nslow query on a collection with a missing\u002Flow-cardinality index, or high bloat on a\ncollection with compression disabled) and stores human-readable strings in\n`_agent_state[\"correlated_insights\"]`. These feed the report's executive summary and\nare exposed to the chat advisor as the `agent_insights` data source.\n\n## 3. Plugin System (`analyzer_base.py`)\n\nAnalysis modules are designed as plugins implementing the `AnalyzerPlugin` ABC.\nConcrete subclasses **auto-register** at import time via `__init_subclass__` into\n`_ANALYZER_REGISTRY` (accessed through `get_analyzer_registry()`,\n`get_analyzer(name)`, `get_execution_order()`).\n\n```python\nclass AnalyzerPlugin(ABC):\n    name: str            # Unique ID; matches a key in agent_state[\"modules\"]\n    display_name: str    # Human-readable name for the UI\n    scope: str           # \"database\" (per-db) or \"cluster\" (once)\n    dependencies: list   # Analyzer names that must complete first\n    priority: int = 50   # Lower runs earlier\n    enabled: bool = True # Kill switch\n\n    def run(self, conn_data, progress_callback=None, previous_results=None) -> Any: ...\n    def should_skip(self, conn_data, previous_results=None) -> Optional[str]: ...\n    def validate_prerequisites(self, conn_data) -> Optional[str]: ...\n    def get_report_section(self, result, conn_data) -> Optional[str]: ...\n```\n\n`conn_data` keys: `connection_string`, `database_name`, `cluster_id`, `region`,\n`log_group`. `progress_callback(phase: str, detail: str, pct: int)` is the standard\nprogress contract across the platform.\n\n`analyzers\u002F__init__.py` imports the **7** plugin implementations so they register:\n`ClusterSnapshotAnalyzer`, `DbAnalysisAnalyzer`, `SlowQueryAnalyzer`,\n`CompressionAnalyzer`, `WellArchitectedAnalyzer`, `InstanceRecommenderAnalyzer`,\n`StorageRecommenderAnalyzer`.\n\n> **Current execution reality:** the orchestrator's `_act()` keeps\n> `_PLUGIN_READY_MODULES` empty and runs a **legacy hardcoded dispatch** for every\n> module, because the UI reads from shared-state dicts (`_snap`, `_wa`,\n> `_agent_state`) that the plugins don't yet fully populate. The plugin registry is\n> fully wired and discovered at import; modules graduate to the plugin path by being\n> added to `_PLUGIN_READY_MODULES`. Document modules by their behavior, not by\n> assuming the plugin path is active.\n\nTo add a new analyzer, follow the **`prism-analyzer-module`** skill.\n\n## 4. Module Catalog (8 agent-state slots)\n\n`_agent_state[\"modules\"]` has **8** slots. Seven map to registered analyzer plugins;\n`bloat` is a slot whose analysis is produced as part of `db_analysis` (index\u002Fcollection\nbloat percentages), not a separate registered plugin.\n\n| Module | Scope | Depends on | Produces |\n|--------|-------|-----------|----------|\n| `cluster_snapshot` | cluster | — | AWS cluster config + per-instance CloudWatch metrics (CPU, cache hit ratio, connections, memory). Backed by `cloudwatch_analyzer.py` and `tabs\u002Fcluster_snapshot.py`. |\n| `well_architected` | cluster | — | 38-check WA assessment across 6 pillars + Bedrock recommendations. See the WA review sub-skill. |\n| `db_analysis` | database | — | Per-database, per-collection stats: doc counts, sizes, indexes, usage (`$indexStats`), cardinality, bloat. Backed by `db_analyzer.py`, `cardinality_analyzer.py`. Also yields the `bloat` slot data. |\n| `slow_query` | cluster | — | Slow query patterns from CloudWatch profiler logs (namespace, operation, avg\u002Fmax ms, count, example query). Backed by `query_analyzer.py`. |\n| `compression` | database | db_analysis | Per-collection compression analysis (LZ4\u002FZSTD savings estimation). Backed by `compression_analyzer.py`. |\n| `bloat` | database | db_analysis | Index\u002Fcollection bloat detection (surfaced from `db_analysis` results). |\n| `instance_recommender` | cluster | cluster_snapshot | Statistical workload sizing recommendations. Backed by `instance_recommender.py`. |\n| `storage_recommender` | cluster | cluster_snapshot | Standard vs I\u002FO-Optimized cost comparison. Backed by `storage_cost_analyzer.py`. |\n\nEach module slot holds `{status, result, error, ts}` where `status ∈ {pending,\nrunning, done, skipped}`.\n\n### Instance recommender (`instance_recommender.py`)\n\n`analyze_workload_statistics()` computes mean, std, **coefficient of variation (CV)**,\nspike frequency (values above mean + 2·std), idle frequency (values \u003C 20%), and P5\u002FP95\nfrom CloudWatch CPU datapoints, then classifies the workload as `highly_spiky`,\n`moderately_spiky`, or `sustained`. `recommend_instance_type()` then proposes one of:\n**Serverless** (DCU-based, for spiky workloads with high idle + spike frequency),\n**NVMe** (`db.r6gd.*`, when buffer cache hit ratio \u003C 85% and not CPU-bound),\n**downgrade** (over-provisioned), or **upgrade** (under-provisioned). Catalogs:\n`STANDARD_INSTANCES` (db.t4g, db.r5, db.r6g, db.r8g) and `NVME_INSTANCES` (db.r6gd).\nBurstable `db.t*` types are never recommended for scale up\u002Fdown targets.\n\n### Storage cost analyzer (`storage_cost_analyzer.py`)\n\nPulls live AWS Pricing API data and compares **Standard** vs **I\u002FO-Optimized** monthly\ncost (instance compute + storage + I\u002FO), region-specific. I\u002FO-Optimized is favored\nwhen per-operation I\u002FO cost is the dominant component of the bill.\n\n## 5. Memory System (`agent_memory.py`)\n\nPersistent, cross-run learning under `.prism_cache\u002F{cluster_id}\u002F`:\n\n| File | Contents |\n|------|----------|\n| `snapshot.json` | Lightweight cluster facts (engine version, instance types, deletion protection, backup retention, log exports, db count). |\n| `databases.json` | Per-db summary: collections, docs, size, index counts, unused indexes, avg bloat. |\n| `activity\u002F{YYYYMMDD_HHMM}.json` | 15-minute `currentOp` activity summaries. |\n| `daily\u002F{YYYYMMDD}.json` | Daily rollups (auto-created from ≥4 activity files; the 15-min files are then removed). |\n| `last_analysis.json` | Compact summary of the last agent run (module statuses, top correlated insights, reasoning log). |\n| `wa_results.json`, `slow_queries.json`, `index_health.json` | Versioned module outputs for trend\u002Fdrift comparison. |\n\n- **Change detection:** `_content_hash()` hashes content while ignoring timestamp\n  fields, so unchanged data only refreshes `last_seen` rather than writing a new\n  version. `compare_with_previous()` emits human-readable drift strings (engine\n  upgrades, instance-type changes, db count changes, bloat\u002Fsize growth, prior WA\u002Fslow\n  query\u002Findex summaries).\n- **Versioning:** `_write_versioned()` keeps up to **3** versions\n  (`name.json`, `name.v1.json`, `name.v2.json`) and preserves the oldest `first_seen`.\n- **Retention:** `cleanup_old_files()` deletes activity\u002Fdaily files older than **30\n  days**.\n\n## 6. AI Advisory Stack\n\nThree Bedrock-backed components share the same model pair and degrade gracefully.\nDetailed behavior lives in the sub-skills; the wiring is:\n\n- **`bedrock_advisor.py`** — agentic tool-use advisor. Loads its system prompt from\n  `documentdb-well-architected-review\u002Fadvisor-prompt.md` (via `_load_skill()`) and\n  injects topic-matched reference docs from that directory's `references\u002F`. Defines\n  **8** tools but `_execute_tool()` returns an error (MCP disabled), so answers are\n  grounded in injected context. See `documentdb-advisor\u002FSKILL.md`.\n- **`chat_advisor.py`** — two-step chat (classify → fetch → answer). Step 1 (Haiku)\n  classifies which data sources are needed; step 2 fetches those sources from agent\n  state and answers with the advisor prompt + matched references. Data sources:\n  `collection_stats`, `index_health`, `slow_queries`, `live_activity`,\n  `cluster_config`, `well_architected`, `agent_insights`.\n- **`slow_query_recommender.py`** — per-pattern recommendations (`Add index` \u002F\n  `Rewrite query` \u002F `Scale compute`), grounded in `documentdb-advisor\u002FSKILL.md` + all\n  of its `references\u002F`. Background generation, per-database concurrency limit of 5,\n  persistent cache keyed by `(cluster_id, pattern_key, stats_digest)`, lifecycle\n  `placeholder → generating → done | failed | unavailable`.\n- **`bedrock_parallel.py`** — parallel per-pattern index suggestions (Haiku) with\n  collection context (existing indexes, doc count), ESR-rule prompting, JSON output.\n\nThe same Bedrock pair also powers the **agent planner** (`_reason`) and the WA\n**recommendation generation** (`tabs\u002Fwell_architected._generate_ai_recommendations`\nvia `documentdb-well-architected-review\u002Fwa-advisor-prompt.md`).\n\n## 7. Code Review Engine (`code_review_engine.py`)\n\nScans **application source code** (not the database) for DocumentDB client best\npractices. `start_code_review(target_dir, output_dir)` runs on a background thread:\n`_discover_files()` finds source files (JS\u002FTS, Java, Python, Go, C#, Ruby, PHP, R) and\nconfig files (docker-compose, .env, serverless.yml, CDK, etc.); `_scan_patterns()`\ndetects `MongoClient` usage, connection strings, pool\u002Ftimeout\u002Fretry config, and index\ncreation; `_evaluate_checklist()` scores **54** checklist items; `_write_report()`\nemits a Markdown report with a compliance percentage. Surfaced via\n`tabs\u002Fcode_review_panel.py`.\n\n## 8. Report Generation (`agent_report.py`)\n\n`generate_report(agent_state, conn_data)` produces a Markdown report with: title +\nmetadata, **Executive Summary** (modules completed, correlated insights, top actions),\n**Agent Reasoning Log** (step\u002Fmodule\u002Freasoning table), **Analysis Scope** (in-scope vs\nskipped databases), per-module sections (cluster config, database analysis, slow\nqueries, compression, Well-Architected, instance sizing, storage), **Live Activity\nObservations**, and **Skipped Modules**. The Well-Architected review additionally\nsupports a PDF export via `wa_pdf.generate_wa_pdf(...)`.\n\n## 9. Configuration (`prism_config.yaml`)\n\nLoaded at runtime through `prism_cfg.get_config()`. Key sections:\n\n- `database_tree.initial_batch` (10) — databases fully populated at connect; the rest\n  load in the background.\n- `database_tree.delay_between_seconds` (2) — pacing between background db loads and\n  agent iterations.\n- `compression_analysis.collections_per_batch` (5), `delay_between_seconds` (3).\n- `agent_prioritisation.priority_databases` ([]), `skip_databases`\n  (`staging, local, admin, config`), `max_databases_to_analyse` (20),\n  `skip_collections` (`audit_log, tmp_, _archive` — prefix match),\n  `max_collection_size_gb` (50), `max_compression_sample_docs` (1,000,000).\n\nAlways respect these limits; never bypass `skip_*` lists or analyze system databases.\n\n## 10. Other Components\n\n- `aws_discovery.py` — discovers DocumentDB clusters\u002Finstances in an account\u002Fregion.\n- `ssh_tunnel.py` — manages SSH tunnels for private clusters (with orphan reaping).\n- `tabs\u002F` — self-registering Dash UI tabs (`tabs\u002Fregistry.py`); `tabs\u002Fwa_v2\u002F` is the\n  next-gen WA UI that contributes additional checks (e.g. `PERF1`, `PERF1c`).\n\n## 11. Severity \u002F Priority Schema (shared across all Prism skills)\n\nTo keep findings traceable across the platform, all three skills use the same scale:\n\n- **Critical** — data loss, security breach, or unavailability risk.\n- **High** — significant performance degradation or cost waste happening now.\n- **Medium** — best-practice gap with moderate risk.\n- **Low** — optimization opportunity with low urgency.\n\nWA check rows additionally carry a status of `pass | warn | fail | info`; `info` is\nexcluded from the health score denominator.\n\n## 12. Safety Constraints (platform-wide)\n\n- Prism is **read-only** with respect to user data. Never insert\u002Fupdate\u002Fdelete user\n  documents. The advisor may recommend index\u002Fconfig changes but always with a\n  \"test in non-production first\" caveat.\n- **Never** recommend dropping the `_id` index.\n- LLM-generated queries are safety-checked (`bedrock_advisor._check_query_safety`):\n  `$where`, `$function`, `$accumulator` are denied; `$regex` length and nesting depth\n  are capped.\n- Treat AWS resources as production unless proven otherwise; prefer read\u002Fdescribe\u002Flist\n  operations and never disable safety protections without explicit confirmation.\n",{"data":38,"body":44},{"name":4,"display_name":39,"description":6,"icon":40,"metadata":41},"Prism Dash Platform","🔭",{"author":42,"version":43},"Amazon DocumentDB SSA Team","1.0.0",{"type":45,"children":46},"root",[47,55,61,74,123,128,135,202,216,291,517,542,556,693,699,720,733,792,913,968,1035,1100,1116,1122,1155,1463,1483,1495,1602,1614,1633,1646,1659,1804,1917,1923,1928,2131,2171,2184,2258,2271,2323,2335,2348,2457,2470,2476,2542,2548,2553,2596,2617,2623,2704],{"type":48,"tag":49,"props":50,"children":52},"element","h1",{"id":51},"prism-dash-platform",[53],{"type":54,"value":39},"text",{"type":48,"tag":56,"props":57,"children":58},"p",{},[59],{"type":54,"value":60},"Prism Dash is an autonomous Amazon DocumentDB optimization platform written in\nPython on top of Dash 2.17 (with Dash Bootstrap Components + Plotly). It connects\nto a DocumentDB cluster, runs an autonomous agent that analyzes the cluster for\nperformance, cost, reliability, and architectural issues, correlates the findings\nacross modules, and surfaces AI-grounded recommendations through a tabbed UI and a\nMarkdown report.",{"type":48,"tag":56,"props":62,"children":63},{},[64,66,72],{"type":54,"value":65},"This is the ",{"type":48,"tag":67,"props":68,"children":69},"strong",{},[70],{"type":54,"value":71},"orchestration-level",{"type":54,"value":73}," skill. It describes how the whole system fits\ntogether and where each capability lives. Two focused sub-skills handle the\nconversational and review surfaces:",{"type":48,"tag":75,"props":76,"children":77},"ul",{},[78,102],{"type":48,"tag":79,"props":80,"children":81},"li",{},[82,92,94,100],{"type":48,"tag":67,"props":83,"children":84},{},[85],{"type":48,"tag":86,"props":87,"children":89},"code",{"className":88},[],[90],{"type":54,"value":91},"documentdb-advisor",{"type":54,"value":93}," — the read-only conversational advisor (chat, agentic\ntool-use, per-slow-query recommendations). See ",{"type":48,"tag":86,"props":95,"children":97},{"className":96},[],[98],{"type":54,"value":99},"documentdb-advisor\u002FSKILL.md",{"type":54,"value":101},".",{"type":48,"tag":79,"props":103,"children":104},{},[105,114,116,122],{"type":48,"tag":67,"props":106,"children":107},{},[108],{"type":48,"tag":86,"props":109,"children":111},{"className":110},[],[112],{"type":54,"value":113},"documentdb-well-architected-review",{"type":54,"value":115}," — the 6-pillar Well-Architected review\n(38-check catalog, scoring, exports). See\n",{"type":48,"tag":86,"props":117,"children":119},{"className":118},[],[120],{"type":54,"value":121},"documentdb-well-architected-review\u002FSKILL.md",{"type":54,"value":101},{"type":48,"tag":56,"props":124,"children":125},{},[126],{"type":54,"value":127},"When a task is specifically about chat\u002Fadvice or about a WA review, defer to those\nsub-skills. Use this skill for cross-cutting questions about the platform.",{"type":48,"tag":129,"props":130,"children":132},"h2",{"id":131},"_1-tech-stack",[133],{"type":54,"value":134},"1. Tech Stack",{"type":48,"tag":75,"props":136,"children":137},{},[138,148,166,192],{"type":48,"tag":79,"props":139,"children":140},{},[141,146],{"type":48,"tag":67,"props":142,"children":143},{},[144],{"type":54,"value":145},"UI:",{"type":54,"value":147}," Dash 2.17 + Dash Bootstrap Components + Plotly",{"type":48,"tag":79,"props":149,"children":150},{},[151,156,158,164],{"type":48,"tag":67,"props":152,"children":153},{},[154],{"type":54,"value":155},"Backend:",{"type":54,"value":157}," Python 3, PyMongo 4.5 (",{"type":48,"tag":86,"props":159,"children":161},{"className":160},[],[162],{"type":54,"value":163},"appname=\"DocDB-Prism\"",{"type":54,"value":165},"), boto3",{"type":48,"tag":79,"props":167,"children":168},{},[169,174,176,182,184,190],{"type":48,"tag":67,"props":170,"children":171},{},[172],{"type":54,"value":173},"AI:",{"type":54,"value":175}," AWS Bedrock — ",{"type":48,"tag":86,"props":177,"children":179},{"className":178},[],[180],{"type":54,"value":181},"us.anthropic.claude-sonnet-4-20250514-v1:0",{"type":54,"value":183}," (primary),\n",{"type":48,"tag":86,"props":185,"children":187},{"className":186},[],[188],{"type":54,"value":189},"us.anthropic.claude-haiku-4-5-20251001-v1:0",{"type":54,"value":191}," (fallback)",{"type":48,"tag":79,"props":193,"children":194},{},[195,200],{"type":48,"tag":67,"props":196,"children":197},{},[198],{"type":54,"value":199},"Target:",{"type":54,"value":201}," Amazon DocumentDB clusters (public or private via SSH tunnel)",{"type":48,"tag":129,"props":203,"children":205},{"id":204},"_2-architecture-the-autonomous-agent-agent_orchestratorpy",[206,208,214],{"type":54,"value":207},"2. Architecture — The Autonomous Agent (",{"type":48,"tag":86,"props":209,"children":211},{"className":210},[],[212],{"type":54,"value":213},"agent_orchestrator.py",{"type":54,"value":215},")",{"type":48,"tag":56,"props":217,"children":218},{},[219,221,226,228,234,236,242,244,250,252,258,260,266,268,274,276,282,284,290],{"type":54,"value":220},"The agent runs an ",{"type":48,"tag":67,"props":222,"children":223},{},[224],{"type":54,"value":225},"Observe → Reason → Decide → Act",{"type":54,"value":227}," loop on a background daemon\nthread (started by ",{"type":48,"tag":86,"props":229,"children":231},{"className":230},[],[232],{"type":54,"value":233},"start_agent(conn_data)",{"type":54,"value":235},"; stopped by ",{"type":48,"tag":86,"props":237,"children":239},{"className":238},[],[240],{"type":54,"value":241},"stop_agent()",{"type":54,"value":243},"). A second\ndaemon thread (",{"type":48,"tag":86,"props":245,"children":247},{"className":246},[],[248],{"type":54,"value":249},"_monitor_activity",{"type":54,"value":251},") polls ",{"type":48,"tag":86,"props":253,"children":255},{"className":254},[],[256],{"type":54,"value":257},"currentOp",{"type":54,"value":259}," for live activity. All shared\nstate lives in the module-level ",{"type":48,"tag":86,"props":261,"children":263},{"className":262},[],[264],{"type":54,"value":265},"_agent_state",{"type":54,"value":267}," dict guarded by a ",{"type":48,"tag":86,"props":269,"children":271},{"className":270},[],[272],{"type":54,"value":273},"threading.Lock",{"type":54,"value":275},";\nthe UI polls a lightweight summary via ",{"type":48,"tag":86,"props":277,"children":279},{"className":278},[],[280],{"type":54,"value":281},"get_agent_state()",{"type":54,"value":283}," and ",{"type":48,"tag":86,"props":285,"children":287},{"className":286},[],[288],{"type":54,"value":289},"dcc.Interval",{"type":54,"value":101},{"type":48,"tag":292,"props":293,"children":294},"table",{},[295,319],{"type":48,"tag":296,"props":297,"children":298},"thead",{},[299],{"type":48,"tag":300,"props":301,"children":302},"tr",{},[303,309,314],{"type":48,"tag":304,"props":305,"children":306},"th",{},[307],{"type":54,"value":308},"Phase",{"type":48,"tag":304,"props":310,"children":311},{},[312],{"type":54,"value":313},"Function",{"type":48,"tag":304,"props":315,"children":316},{},[317],{"type":54,"value":318},"What it does",{"type":48,"tag":320,"props":321,"children":322},"tbody",{},[323,376,420,480],{"type":48,"tag":300,"props":324,"children":325},{},[326,332,341],{"type":48,"tag":327,"props":328,"children":329},"td",{},[330],{"type":54,"value":331},"Observe",{"type":48,"tag":327,"props":333,"children":334},{},[335],{"type":48,"tag":86,"props":336,"children":338},{"className":337},[],[339],{"type":54,"value":340},"_observe(conn_data)",{"type":48,"tag":327,"props":342,"children":343},{},[344,346,352,354,360,362,367,369,375],{"type":54,"value":345},"Collects fast facts: AWS cluster metadata (engine version, deletion protection, backup retention, log exports, instance types) via boto3; database sizes\u002Fcollection counts via PyMongo (",{"type":48,"tag":86,"props":347,"children":349},{"className":348},[],[350],{"type":54,"value":351},"dbStats",{"type":54,"value":353},", capped by ",{"type":48,"tag":86,"props":355,"children":357},{"className":356},[],[358],{"type":54,"value":359},"initial_batch",{"type":54,"value":361},"); CloudWatch profiler log-group existence; active databases from ",{"type":48,"tag":86,"props":363,"children":365},{"className":364},[],[366],{"type":54,"value":257},{"type":54,"value":368},"; previous state + config drift from ",{"type":48,"tag":86,"props":370,"children":372},{"className":371},[],[373],{"type":54,"value":374},"agent_memory",{"type":54,"value":101},{"type":48,"tag":300,"props":377,"children":378},{},[379,384,393],{"type":48,"tag":327,"props":380,"children":381},{},[382],{"type":54,"value":383},"Reason",{"type":48,"tag":327,"props":385,"children":386},{},[387],{"type":48,"tag":86,"props":388,"children":390},{"className":389},[],[391],{"type":54,"value":392},"_reason(...)",{"type":48,"tag":327,"props":394,"children":395},{},[396,398,403,405,411,413,419],{"type":54,"value":397},"Calls Bedrock as a ",{"type":48,"tag":67,"props":399,"children":400},{},[401],{"type":54,"value":402},"planner",{"type":54,"value":404}," with the advisor system prompt + a planner addendum. Returns JSON ",{"type":48,"tag":86,"props":406,"children":408},{"className":407},[],[409],{"type":54,"value":410},"{next_module, target_database, target_collection, reasoning, priority, skip_modules, skip_reasons}",{"type":54,"value":412},". On any failure it falls back to a fixed order via ",{"type":48,"tag":86,"props":414,"children":416},{"className":415},[],[417],{"type":54,"value":418},"_fallback_decision",{"type":54,"value":101},{"type":48,"tag":300,"props":421,"children":422},{},[423,428,437],{"type":48,"tag":327,"props":424,"children":425},{},[426],{"type":54,"value":427},"Decide",{"type":48,"tag":327,"props":429,"children":430},{},[431],{"type":48,"tag":86,"props":432,"children":434},{"className":433},[],[435],{"type":54,"value":436},"_decide(decision, completed)",{"type":48,"tag":327,"props":438,"children":439},{},[440,442,448,450,456,457,463,465,471,473,479],{"type":54,"value":441},"Validates the plan: dedups already-completed modules, enforces that critical modules ran (",{"type":48,"tag":86,"props":443,"children":445},{"className":444},[],[446],{"type":54,"value":447},"cluster_snapshot",{"type":54,"value":449},", ",{"type":48,"tag":86,"props":451,"children":453},{"className":452},[],[454],{"type":54,"value":455},"well_architected",{"type":54,"value":449},{"type":48,"tag":86,"props":458,"children":460},{"className":459},[],[461],{"type":54,"value":462},"db_analysis",{"type":54,"value":464},", and ",{"type":48,"tag":86,"props":466,"children":468},{"className":467},[],[469],{"type":54,"value":470},"slow_query",{"type":54,"value":472}," when profiler logs exist), and returns the next module or ",{"type":48,"tag":86,"props":474,"children":476},{"className":475},[],[477],{"type":54,"value":478},"\"done\"",{"type":54,"value":101},{"type":48,"tag":300,"props":481,"children":482},{},[483,488,497],{"type":48,"tag":327,"props":484,"children":485},{},[486],{"type":54,"value":487},"Act",{"type":48,"tag":327,"props":489,"children":490},{},[491],{"type":48,"tag":86,"props":492,"children":494},{"className":493},[],[495],{"type":54,"value":496},"_act(module, ...)",{"type":48,"tag":327,"props":498,"children":499},{},[500,502,508,510,516],{"type":54,"value":501},"Executes the chosen module under a per-module timeout (",{"type":48,"tag":86,"props":503,"children":505},{"className":504},[],[506],{"type":54,"value":507},"_run_with_timeout",{"type":54,"value":509},", default 120s) and records results into ",{"type":48,"tag":86,"props":511,"children":513},{"className":512},[],[514],{"type":54,"value":515},"_agent_state[\"modules\"][name]",{"type":54,"value":101},{"type":48,"tag":56,"props":518,"children":519},{},[520,525,527,533,535,541],{"type":48,"tag":67,"props":521,"children":522},{},[523],{"type":54,"value":524},"Fixed fallback order",{"type":54,"value":526}," (",{"type":48,"tag":86,"props":528,"children":530},{"className":529},[],[531],{"type":54,"value":532},"_FALLBACK_ORDER",{"type":54,"value":534},"): ",{"type":48,"tag":86,"props":536,"children":538},{"className":537},[],[539],{"type":54,"value":540},"cluster_snapshot → well_architected → db_analysis → slow_query → compression → bloat → instance_recommender → storage_recommender",{"type":54,"value":101},{"type":48,"tag":543,"props":544,"children":546},"h3",{"id":545},"safety-prioritisation-driven-by-prism_configyaml",[547,549,555],{"type":54,"value":548},"Safety & prioritisation (driven by ",{"type":48,"tag":86,"props":550,"children":552},{"className":551},[],[553],{"type":54,"value":554},"prism_config.yaml",{"type":54,"value":215},{"type":48,"tag":75,"props":557,"children":558},{},[559,593,619,667],{"type":48,"tag":79,"props":560,"children":561},{},[562,564,570,571,577,578,584,586,591],{"type":54,"value":563},"System databases ",{"type":48,"tag":86,"props":565,"children":567},{"className":566},[],[568],{"type":54,"value":569},"admin",{"type":54,"value":449},{"type":48,"tag":86,"props":572,"children":574},{"className":573},[],[575],{"type":54,"value":576},"local",{"type":54,"value":449},{"type":48,"tag":86,"props":579,"children":581},{"className":580},[],[582],{"type":54,"value":583},"config",{"type":54,"value":585}," are ",{"type":48,"tag":67,"props":587,"children":588},{},[589],{"type":54,"value":590},"always",{"type":54,"value":592}," excluded.",{"type":48,"tag":79,"props":594,"children":595},{},[596,602,604,610,611,617],{"type":48,"tag":86,"props":597,"children":599},{"className":598},[],[600],{"type":54,"value":601},"_safety_check()",{"type":54,"value":603}," enforces ",{"type":48,"tag":86,"props":605,"children":607},{"className":606},[],[608],{"type":54,"value":609},"skip_databases",{"type":54,"value":283},{"type":48,"tag":86,"props":612,"children":614},{"className":613},[],[615],{"type":54,"value":616},"skip_collections",{"type":54,"value":618}," (prefix match).",{"type":48,"tag":79,"props":620,"children":621},{},[622,628,630,635,637,642,644,650,652,658,660,666],{"type":48,"tag":86,"props":623,"children":625},{"className":624},[],[626],{"type":54,"value":627},"_build_analysis_scope()",{"type":54,"value":629}," ranks candidates: ",{"type":48,"tag":67,"props":631,"children":632},{},[633],{"type":54,"value":634},"active databases first",{"type":54,"value":636}," (from\n",{"type":48,"tag":86,"props":638,"children":640},{"className":639},[],[641],{"type":54,"value":257},{"type":54,"value":643},"), then ",{"type":48,"tag":86,"props":645,"children":647},{"className":646},[],[648],{"type":54,"value":649},"priority_databases",{"type":54,"value":651},", then largest-by-size, truncated to\n",{"type":48,"tag":86,"props":653,"children":655},{"className":654},[],[656],{"type":54,"value":657},"max_databases_to_analyse",{"type":54,"value":659},". Skipped databases and their reasons are recorded in\n",{"type":48,"tag":86,"props":661,"children":663},{"className":662},[],[664],{"type":54,"value":665},"analysis_scope.skipped",{"type":54,"value":101},{"type":48,"tag":79,"props":668,"children":669},{},[670,676,678,684,686,692],{"type":48,"tag":86,"props":671,"children":673},{"className":672},[],[674],{"type":54,"value":675},"_iter_databases()",{"type":54,"value":677}," paces work with ",{"type":48,"tag":86,"props":679,"children":681},{"className":680},[],[682],{"type":54,"value":683},"database_tree.delay_between_seconds",{"type":54,"value":685}," to keep\ncluster load gentle and honors the ",{"type":48,"tag":86,"props":687,"children":689},{"className":688},[],[690],{"type":54,"value":691},"_stop_event",{"type":54,"value":101},{"type":48,"tag":543,"props":694,"children":696},{"id":695},"cross-module-correlation",[697],{"type":54,"value":698},"Cross-module correlation",{"type":48,"tag":56,"props":700,"children":701},{},[702,704,710,712,718],{"type":54,"value":703},"After modules complete, the agent correlates findings across modules (for example\nslow query on a collection with a missing\u002Flow-cardinality index, or high bloat on a\ncollection with compression disabled) and stores human-readable strings in\n",{"type":48,"tag":86,"props":705,"children":707},{"className":706},[],[708],{"type":54,"value":709},"_agent_state[\"correlated_insights\"]",{"type":54,"value":711},". These feed the report's executive summary and\nare exposed to the chat advisor as the ",{"type":48,"tag":86,"props":713,"children":715},{"className":714},[],[716],{"type":54,"value":717},"agent_insights",{"type":54,"value":719}," data source.",{"type":48,"tag":129,"props":721,"children":723},{"id":722},"_3-plugin-system-analyzer_basepy",[724,726,732],{"type":54,"value":725},"3. Plugin System (",{"type":48,"tag":86,"props":727,"children":729},{"className":728},[],[730],{"type":54,"value":731},"analyzer_base.py",{"type":54,"value":215},{"type":48,"tag":56,"props":734,"children":735},{},[736,738,744,746,751,753,759,761,767,769,775,777,783,784,790],{"type":54,"value":737},"Analysis modules are designed as plugins implementing the ",{"type":48,"tag":86,"props":739,"children":741},{"className":740},[],[742],{"type":54,"value":743},"AnalyzerPlugin",{"type":54,"value":745}," ABC.\nConcrete subclasses ",{"type":48,"tag":67,"props":747,"children":748},{},[749],{"type":54,"value":750},"auto-register",{"type":54,"value":752}," at import time via ",{"type":48,"tag":86,"props":754,"children":756},{"className":755},[],[757],{"type":54,"value":758},"__init_subclass__",{"type":54,"value":760}," into\n",{"type":48,"tag":86,"props":762,"children":764},{"className":763},[],[765],{"type":54,"value":766},"_ANALYZER_REGISTRY",{"type":54,"value":768}," (accessed through ",{"type":48,"tag":86,"props":770,"children":772},{"className":771},[],[773],{"type":54,"value":774},"get_analyzer_registry()",{"type":54,"value":776},",\n",{"type":48,"tag":86,"props":778,"children":780},{"className":779},[],[781],{"type":54,"value":782},"get_analyzer(name)",{"type":54,"value":449},{"type":48,"tag":86,"props":785,"children":787},{"className":786},[],[788],{"type":54,"value":789},"get_execution_order()",{"type":54,"value":791},").",{"type":48,"tag":793,"props":794,"children":798},"pre",{"className":795,"code":796,"language":22,"meta":797,"style":797},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","class AnalyzerPlugin(ABC):\n    name: str            # Unique ID; matches a key in agent_state[\"modules\"]\n    display_name: str    # Human-readable name for the UI\n    scope: str           # \"database\" (per-db) or \"cluster\" (once)\n    dependencies: list   # Analyzer names that must complete first\n    priority: int = 50   # Lower runs earlier\n    enabled: bool = True # Kill switch\n\n    def run(self, conn_data, progress_callback=None, previous_results=None) -> Any: ...\n    def should_skip(self, conn_data, previous_results=None) -> Optional[str]: ...\n    def validate_prerequisites(self, conn_data) -> Optional[str]: ...\n    def get_report_section(self, result, conn_data) -> Optional[str]: ...\n","",[799],{"type":48,"tag":86,"props":800,"children":801},{"__ignoreMap":797},[802,813,822,831,840,849,858,867,877,886,895,904],{"type":48,"tag":803,"props":804,"children":807},"span",{"class":805,"line":806},"line",1,[808],{"type":48,"tag":803,"props":809,"children":810},{},[811],{"type":54,"value":812},"class AnalyzerPlugin(ABC):\n",{"type":48,"tag":803,"props":814,"children":816},{"class":805,"line":815},2,[817],{"type":48,"tag":803,"props":818,"children":819},{},[820],{"type":54,"value":821},"    name: str            # Unique ID; matches a key in agent_state[\"modules\"]\n",{"type":48,"tag":803,"props":823,"children":825},{"class":805,"line":824},3,[826],{"type":48,"tag":803,"props":827,"children":828},{},[829],{"type":54,"value":830},"    display_name: str    # Human-readable name for the UI\n",{"type":48,"tag":803,"props":832,"children":834},{"class":805,"line":833},4,[835],{"type":48,"tag":803,"props":836,"children":837},{},[838],{"type":54,"value":839},"    scope: str           # \"database\" (per-db) or \"cluster\" (once)\n",{"type":48,"tag":803,"props":841,"children":843},{"class":805,"line":842},5,[844],{"type":48,"tag":803,"props":845,"children":846},{},[847],{"type":54,"value":848},"    dependencies: list   # Analyzer names that must complete first\n",{"type":48,"tag":803,"props":850,"children":852},{"class":805,"line":851},6,[853],{"type":48,"tag":803,"props":854,"children":855},{},[856],{"type":54,"value":857},"    priority: int = 50   # Lower runs earlier\n",{"type":48,"tag":803,"props":859,"children":861},{"class":805,"line":860},7,[862],{"type":48,"tag":803,"props":863,"children":864},{},[865],{"type":54,"value":866},"    enabled: bool = True # Kill switch\n",{"type":48,"tag":803,"props":868,"children":870},{"class":805,"line":869},8,[871],{"type":48,"tag":803,"props":872,"children":874},{"emptyLinePlaceholder":873},true,[875],{"type":54,"value":876},"\n",{"type":48,"tag":803,"props":878,"children":880},{"class":805,"line":879},9,[881],{"type":48,"tag":803,"props":882,"children":883},{},[884],{"type":54,"value":885},"    def run(self, conn_data, progress_callback=None, previous_results=None) -> Any: ...\n",{"type":48,"tag":803,"props":887,"children":889},{"class":805,"line":888},10,[890],{"type":48,"tag":803,"props":891,"children":892},{},[893],{"type":54,"value":894},"    def should_skip(self, conn_data, previous_results=None) -> Optional[str]: ...\n",{"type":48,"tag":803,"props":896,"children":898},{"class":805,"line":897},11,[899],{"type":48,"tag":803,"props":900,"children":901},{},[902],{"type":54,"value":903},"    def validate_prerequisites(self, conn_data) -> Optional[str]: ...\n",{"type":48,"tag":803,"props":905,"children":907},{"class":805,"line":906},12,[908],{"type":48,"tag":803,"props":909,"children":910},{},[911],{"type":54,"value":912},"    def get_report_section(self, result, conn_data) -> Optional[str]: ...\n",{"type":48,"tag":56,"props":914,"children":915},{},[916,922,924,930,931,937,938,944,945,951,952,958,960,966],{"type":48,"tag":86,"props":917,"children":919},{"className":918},[],[920],{"type":54,"value":921},"conn_data",{"type":54,"value":923}," keys: ",{"type":48,"tag":86,"props":925,"children":927},{"className":926},[],[928],{"type":54,"value":929},"connection_string",{"type":54,"value":449},{"type":48,"tag":86,"props":932,"children":934},{"className":933},[],[935],{"type":54,"value":936},"database_name",{"type":54,"value":449},{"type":48,"tag":86,"props":939,"children":941},{"className":940},[],[942],{"type":54,"value":943},"cluster_id",{"type":54,"value":449},{"type":48,"tag":86,"props":946,"children":948},{"className":947},[],[949],{"type":54,"value":950},"region",{"type":54,"value":776},{"type":48,"tag":86,"props":953,"children":955},{"className":954},[],[956],{"type":54,"value":957},"log_group",{"type":54,"value":959},". ",{"type":48,"tag":86,"props":961,"children":963},{"className":962},[],[964],{"type":54,"value":965},"progress_callback(phase: str, detail: str, pct: int)",{"type":54,"value":967}," is the standard\nprogress contract across the platform.",{"type":48,"tag":56,"props":969,"children":970},{},[971,977,979,984,986,992,993,999,1000,1006,1007,1013,1014,1020,1021,1027,1028,1034],{"type":48,"tag":86,"props":972,"children":974},{"className":973},[],[975],{"type":54,"value":976},"analyzers\u002F__init__.py",{"type":54,"value":978}," imports the ",{"type":48,"tag":67,"props":980,"children":981},{},[982],{"type":54,"value":983},"7",{"type":54,"value":985}," plugin implementations so they register:\n",{"type":48,"tag":86,"props":987,"children":989},{"className":988},[],[990],{"type":54,"value":991},"ClusterSnapshotAnalyzer",{"type":54,"value":449},{"type":48,"tag":86,"props":994,"children":996},{"className":995},[],[997],{"type":54,"value":998},"DbAnalysisAnalyzer",{"type":54,"value":449},{"type":48,"tag":86,"props":1001,"children":1003},{"className":1002},[],[1004],{"type":54,"value":1005},"SlowQueryAnalyzer",{"type":54,"value":776},{"type":48,"tag":86,"props":1008,"children":1010},{"className":1009},[],[1011],{"type":54,"value":1012},"CompressionAnalyzer",{"type":54,"value":449},{"type":48,"tag":86,"props":1015,"children":1017},{"className":1016},[],[1018],{"type":54,"value":1019},"WellArchitectedAnalyzer",{"type":54,"value":449},{"type":48,"tag":86,"props":1022,"children":1024},{"className":1023},[],[1025],{"type":54,"value":1026},"InstanceRecommenderAnalyzer",{"type":54,"value":776},{"type":48,"tag":86,"props":1029,"children":1031},{"className":1030},[],[1032],{"type":54,"value":1033},"StorageRecommenderAnalyzer",{"type":54,"value":101},{"type":48,"tag":1036,"props":1037,"children":1038},"blockquote",{},[1039],{"type":48,"tag":56,"props":1040,"children":1041},{},[1042,1047,1049,1055,1057,1063,1065,1070,1072,1078,1079,1085,1086,1091,1093,1098],{"type":48,"tag":67,"props":1043,"children":1044},{},[1045],{"type":54,"value":1046},"Current execution reality:",{"type":54,"value":1048}," the orchestrator's ",{"type":48,"tag":86,"props":1050,"children":1052},{"className":1051},[],[1053],{"type":54,"value":1054},"_act()",{"type":54,"value":1056}," keeps\n",{"type":48,"tag":86,"props":1058,"children":1060},{"className":1059},[],[1061],{"type":54,"value":1062},"_PLUGIN_READY_MODULES",{"type":54,"value":1064}," empty and runs a ",{"type":48,"tag":67,"props":1066,"children":1067},{},[1068],{"type":54,"value":1069},"legacy hardcoded dispatch",{"type":54,"value":1071}," for every\nmodule, because the UI reads from shared-state dicts (",{"type":48,"tag":86,"props":1073,"children":1075},{"className":1074},[],[1076],{"type":54,"value":1077},"_snap",{"type":54,"value":449},{"type":48,"tag":86,"props":1080,"children":1082},{"className":1081},[],[1083],{"type":54,"value":1084},"_wa",{"type":54,"value":776},{"type":48,"tag":86,"props":1087,"children":1089},{"className":1088},[],[1090],{"type":54,"value":265},{"type":54,"value":1092},") that the plugins don't yet fully populate. The plugin registry is\nfully wired and discovered at import; modules graduate to the plugin path by being\nadded to ",{"type":48,"tag":86,"props":1094,"children":1096},{"className":1095},[],[1097],{"type":54,"value":1062},{"type":54,"value":1099},". Document modules by their behavior, not by\nassuming the plugin path is active.",{"type":48,"tag":56,"props":1101,"children":1102},{},[1103,1105,1114],{"type":54,"value":1104},"To add a new analyzer, follow the ",{"type":48,"tag":67,"props":1106,"children":1107},{},[1108],{"type":48,"tag":86,"props":1109,"children":1111},{"className":1110},[],[1112],{"type":54,"value":1113},"prism-analyzer-module",{"type":54,"value":1115}," skill.",{"type":48,"tag":129,"props":1117,"children":1119},{"id":1118},"_4-module-catalog-8-agent-state-slots",[1120],{"type":54,"value":1121},"4. Module Catalog (8 agent-state slots)",{"type":48,"tag":56,"props":1123,"children":1124},{},[1125,1131,1133,1138,1140,1146,1148,1153],{"type":48,"tag":86,"props":1126,"children":1128},{"className":1127},[],[1129],{"type":54,"value":1130},"_agent_state[\"modules\"]",{"type":54,"value":1132}," has ",{"type":48,"tag":67,"props":1134,"children":1135},{},[1136],{"type":54,"value":1137},"8",{"type":54,"value":1139}," slots. Seven map to registered analyzer plugins;\n",{"type":48,"tag":86,"props":1141,"children":1143},{"className":1142},[],[1144],{"type":54,"value":1145},"bloat",{"type":54,"value":1147}," is a slot whose analysis is produced as part of ",{"type":48,"tag":86,"props":1149,"children":1151},{"className":1150},[],[1152],{"type":54,"value":462},{"type":54,"value":1154}," (index\u002Fcollection\nbloat percentages), not a separate registered plugin.",{"type":48,"tag":292,"props":1156,"children":1157},{},[1158,1184],{"type":48,"tag":296,"props":1159,"children":1160},{},[1161],{"type":48,"tag":300,"props":1162,"children":1163},{},[1164,1169,1174,1179],{"type":48,"tag":304,"props":1165,"children":1166},{},[1167],{"type":54,"value":1168},"Module",{"type":48,"tag":304,"props":1170,"children":1171},{},[1172],{"type":54,"value":1173},"Scope",{"type":48,"tag":304,"props":1175,"children":1176},{},[1177],{"type":54,"value":1178},"Depends on",{"type":48,"tag":304,"props":1180,"children":1181},{},[1182],{"type":54,"value":1183},"Produces",{"type":48,"tag":320,"props":1185,"children":1186},{},[1187,1227,1251,1305,1336,1368,1399,1431],{"type":48,"tag":300,"props":1188,"children":1189},{},[1190,1198,1203,1208],{"type":48,"tag":327,"props":1191,"children":1192},{},[1193],{"type":48,"tag":86,"props":1194,"children":1196},{"className":1195},[],[1197],{"type":54,"value":447},{"type":48,"tag":327,"props":1199,"children":1200},{},[1201],{"type":54,"value":1202},"cluster",{"type":48,"tag":327,"props":1204,"children":1205},{},[1206],{"type":54,"value":1207},"—",{"type":48,"tag":327,"props":1209,"children":1210},{},[1211,1213,1219,1220,1226],{"type":54,"value":1212},"AWS cluster config + per-instance CloudWatch metrics (CPU, cache hit ratio, connections, memory). Backed by ",{"type":48,"tag":86,"props":1214,"children":1216},{"className":1215},[],[1217],{"type":54,"value":1218},"cloudwatch_analyzer.py",{"type":54,"value":283},{"type":48,"tag":86,"props":1221,"children":1223},{"className":1222},[],[1224],{"type":54,"value":1225},"tabs\u002Fcluster_snapshot.py",{"type":54,"value":101},{"type":48,"tag":300,"props":1228,"children":1229},{},[1230,1238,1242,1246],{"type":48,"tag":327,"props":1231,"children":1232},{},[1233],{"type":48,"tag":86,"props":1234,"children":1236},{"className":1235},[],[1237],{"type":54,"value":455},{"type":48,"tag":327,"props":1239,"children":1240},{},[1241],{"type":54,"value":1202},{"type":48,"tag":327,"props":1243,"children":1244},{},[1245],{"type":54,"value":1207},{"type":48,"tag":327,"props":1247,"children":1248},{},[1249],{"type":54,"value":1250},"38-check WA assessment across 6 pillars + Bedrock recommendations. See the WA review sub-skill.",{"type":48,"tag":300,"props":1252,"children":1253},{},[1254,1262,1266,1270],{"type":48,"tag":327,"props":1255,"children":1256},{},[1257],{"type":48,"tag":86,"props":1258,"children":1260},{"className":1259},[],[1261],{"type":54,"value":462},{"type":48,"tag":327,"props":1263,"children":1264},{},[1265],{"type":54,"value":19},{"type":48,"tag":327,"props":1267,"children":1268},{},[1269],{"type":54,"value":1207},{"type":48,"tag":327,"props":1271,"children":1272},{},[1273,1275,1281,1283,1289,1290,1296,1298,1303],{"type":54,"value":1274},"Per-database, per-collection stats: doc counts, sizes, indexes, usage (",{"type":48,"tag":86,"props":1276,"children":1278},{"className":1277},[],[1279],{"type":54,"value":1280},"$indexStats",{"type":54,"value":1282},"), cardinality, bloat. Backed by ",{"type":48,"tag":86,"props":1284,"children":1286},{"className":1285},[],[1287],{"type":54,"value":1288},"db_analyzer.py",{"type":54,"value":449},{"type":48,"tag":86,"props":1291,"children":1293},{"className":1292},[],[1294],{"type":54,"value":1295},"cardinality_analyzer.py",{"type":54,"value":1297},". Also yields the ",{"type":48,"tag":86,"props":1299,"children":1301},{"className":1300},[],[1302],{"type":54,"value":1145},{"type":54,"value":1304}," slot data.",{"type":48,"tag":300,"props":1306,"children":1307},{},[1308,1316,1320,1324],{"type":48,"tag":327,"props":1309,"children":1310},{},[1311],{"type":48,"tag":86,"props":1312,"children":1314},{"className":1313},[],[1315],{"type":54,"value":470},{"type":48,"tag":327,"props":1317,"children":1318},{},[1319],{"type":54,"value":1202},{"type":48,"tag":327,"props":1321,"children":1322},{},[1323],{"type":54,"value":1207},{"type":48,"tag":327,"props":1325,"children":1326},{},[1327,1329,1335],{"type":54,"value":1328},"Slow query patterns from CloudWatch profiler logs (namespace, operation, avg\u002Fmax ms, count, example query). Backed by ",{"type":48,"tag":86,"props":1330,"children":1332},{"className":1331},[],[1333],{"type":54,"value":1334},"query_analyzer.py",{"type":54,"value":101},{"type":48,"tag":300,"props":1337,"children":1338},{},[1339,1348,1352,1356],{"type":48,"tag":327,"props":1340,"children":1341},{},[1342],{"type":48,"tag":86,"props":1343,"children":1345},{"className":1344},[],[1346],{"type":54,"value":1347},"compression",{"type":48,"tag":327,"props":1349,"children":1350},{},[1351],{"type":54,"value":19},{"type":48,"tag":327,"props":1353,"children":1354},{},[1355],{"type":54,"value":462},{"type":48,"tag":327,"props":1357,"children":1358},{},[1359,1361,1367],{"type":54,"value":1360},"Per-collection compression analysis (LZ4\u002FZSTD savings estimation). Backed by ",{"type":48,"tag":86,"props":1362,"children":1364},{"className":1363},[],[1365],{"type":54,"value":1366},"compression_analyzer.py",{"type":54,"value":101},{"type":48,"tag":300,"props":1369,"children":1370},{},[1371,1379,1383,1387],{"type":48,"tag":327,"props":1372,"children":1373},{},[1374],{"type":48,"tag":86,"props":1375,"children":1377},{"className":1376},[],[1378],{"type":54,"value":1145},{"type":48,"tag":327,"props":1380,"children":1381},{},[1382],{"type":54,"value":19},{"type":48,"tag":327,"props":1384,"children":1385},{},[1386],{"type":54,"value":462},{"type":48,"tag":327,"props":1388,"children":1389},{},[1390,1392,1397],{"type":54,"value":1391},"Index\u002Fcollection bloat detection (surfaced from ",{"type":48,"tag":86,"props":1393,"children":1395},{"className":1394},[],[1396],{"type":54,"value":462},{"type":54,"value":1398}," results).",{"type":48,"tag":300,"props":1400,"children":1401},{},[1402,1411,1415,1419],{"type":48,"tag":327,"props":1403,"children":1404},{},[1405],{"type":48,"tag":86,"props":1406,"children":1408},{"className":1407},[],[1409],{"type":54,"value":1410},"instance_recommender",{"type":48,"tag":327,"props":1412,"children":1413},{},[1414],{"type":54,"value":1202},{"type":48,"tag":327,"props":1416,"children":1417},{},[1418],{"type":54,"value":447},{"type":48,"tag":327,"props":1420,"children":1421},{},[1422,1424,1430],{"type":54,"value":1423},"Statistical workload sizing recommendations. Backed by ",{"type":48,"tag":86,"props":1425,"children":1427},{"className":1426},[],[1428],{"type":54,"value":1429},"instance_recommender.py",{"type":54,"value":101},{"type":48,"tag":300,"props":1432,"children":1433},{},[1434,1443,1447,1451],{"type":48,"tag":327,"props":1435,"children":1436},{},[1437],{"type":48,"tag":86,"props":1438,"children":1440},{"className":1439},[],[1441],{"type":54,"value":1442},"storage_recommender",{"type":48,"tag":327,"props":1444,"children":1445},{},[1446],{"type":54,"value":1202},{"type":48,"tag":327,"props":1448,"children":1449},{},[1450],{"type":54,"value":447},{"type":48,"tag":327,"props":1452,"children":1453},{},[1454,1456,1462],{"type":54,"value":1455},"Standard vs I\u002FO-Optimized cost comparison. Backed by ",{"type":48,"tag":86,"props":1457,"children":1459},{"className":1458},[],[1460],{"type":54,"value":1461},"storage_cost_analyzer.py",{"type":54,"value":101},{"type":48,"tag":56,"props":1464,"children":1465},{},[1466,1468,1474,1476,1482],{"type":54,"value":1467},"Each module slot holds ",{"type":48,"tag":86,"props":1469,"children":1471},{"className":1470},[],[1472],{"type":54,"value":1473},"{status, result, error, ts}",{"type":54,"value":1475}," where ",{"type":48,"tag":86,"props":1477,"children":1479},{"className":1478},[],[1480],{"type":54,"value":1481},"status ∈ {pending, running, done, skipped}",{"type":54,"value":101},{"type":48,"tag":543,"props":1484,"children":1486},{"id":1485},"instance-recommender-instance_recommenderpy",[1487,1489,1494],{"type":54,"value":1488},"Instance recommender (",{"type":48,"tag":86,"props":1490,"children":1492},{"className":1491},[],[1493],{"type":54,"value":1429},{"type":54,"value":215},{"type":48,"tag":56,"props":1496,"children":1497},{},[1498,1504,1506,1511,1513,1519,1520,1526,1528,1534,1535,1541,1543,1548,1550,1555,1556,1562,1564,1569,1571,1576,1578,1584,1586,1592,1594,1600],{"type":48,"tag":86,"props":1499,"children":1501},{"className":1500},[],[1502],{"type":54,"value":1503},"analyze_workload_statistics()",{"type":54,"value":1505}," computes mean, std, ",{"type":48,"tag":67,"props":1507,"children":1508},{},[1509],{"type":54,"value":1510},"coefficient of variation (CV)",{"type":54,"value":1512},",\nspike frequency (values above mean + 2·std), idle frequency (values \u003C 20%), and P5\u002FP95\nfrom CloudWatch CPU datapoints, then classifies the workload as ",{"type":48,"tag":86,"props":1514,"children":1516},{"className":1515},[],[1517],{"type":54,"value":1518},"highly_spiky",{"type":54,"value":776},{"type":48,"tag":86,"props":1521,"children":1523},{"className":1522},[],[1524],{"type":54,"value":1525},"moderately_spiky",{"type":54,"value":1527},", or ",{"type":48,"tag":86,"props":1529,"children":1531},{"className":1530},[],[1532],{"type":54,"value":1533},"sustained",{"type":54,"value":959},{"type":48,"tag":86,"props":1536,"children":1538},{"className":1537},[],[1539],{"type":54,"value":1540},"recommend_instance_type()",{"type":54,"value":1542}," then proposes one of:\n",{"type":48,"tag":67,"props":1544,"children":1545},{},[1546],{"type":54,"value":1547},"Serverless",{"type":54,"value":1549}," (DCU-based, for spiky workloads with high idle + spike frequency),\n",{"type":48,"tag":67,"props":1551,"children":1552},{},[1553],{"type":54,"value":1554},"NVMe",{"type":54,"value":526},{"type":48,"tag":86,"props":1557,"children":1559},{"className":1558},[],[1560],{"type":54,"value":1561},"db.r6gd.*",{"type":54,"value":1563},", when buffer cache hit ratio \u003C 85% and not CPU-bound),\n",{"type":48,"tag":67,"props":1565,"children":1566},{},[1567],{"type":54,"value":1568},"downgrade",{"type":54,"value":1570}," (over-provisioned), or ",{"type":48,"tag":67,"props":1572,"children":1573},{},[1574],{"type":54,"value":1575},"upgrade",{"type":54,"value":1577}," (under-provisioned). Catalogs:\n",{"type":48,"tag":86,"props":1579,"children":1581},{"className":1580},[],[1582],{"type":54,"value":1583},"STANDARD_INSTANCES",{"type":54,"value":1585}," (db.t4g, db.r5, db.r6g, db.r8g) and ",{"type":48,"tag":86,"props":1587,"children":1589},{"className":1588},[],[1590],{"type":54,"value":1591},"NVME_INSTANCES",{"type":54,"value":1593}," (db.r6gd).\nBurstable ",{"type":48,"tag":86,"props":1595,"children":1597},{"className":1596},[],[1598],{"type":54,"value":1599},"db.t*",{"type":54,"value":1601}," types are never recommended for scale up\u002Fdown targets.",{"type":48,"tag":543,"props":1603,"children":1605},{"id":1604},"storage-cost-analyzer-storage_cost_analyzerpy",[1606,1608,1613],{"type":54,"value":1607},"Storage cost analyzer (",{"type":48,"tag":86,"props":1609,"children":1611},{"className":1610},[],[1612],{"type":54,"value":1461},{"type":54,"value":215},{"type":48,"tag":56,"props":1615,"children":1616},{},[1617,1619,1624,1626,1631],{"type":54,"value":1618},"Pulls live AWS Pricing API data and compares ",{"type":48,"tag":67,"props":1620,"children":1621},{},[1622],{"type":54,"value":1623},"Standard",{"type":54,"value":1625}," vs ",{"type":48,"tag":67,"props":1627,"children":1628},{},[1629],{"type":54,"value":1630},"I\u002FO-Optimized",{"type":54,"value":1632}," monthly\ncost (instance compute + storage + I\u002FO), region-specific. I\u002FO-Optimized is favored\nwhen per-operation I\u002FO cost is the dominant component of the bill.",{"type":48,"tag":129,"props":1634,"children":1636},{"id":1635},"_5-memory-system-agent_memorypy",[1637,1639,1645],{"type":54,"value":1638},"5. Memory System (",{"type":48,"tag":86,"props":1640,"children":1642},{"className":1641},[],[1643],{"type":54,"value":1644},"agent_memory.py",{"type":54,"value":215},{"type":48,"tag":56,"props":1647,"children":1648},{},[1649,1651,1657],{"type":54,"value":1650},"Persistent, cross-run learning under ",{"type":48,"tag":86,"props":1652,"children":1654},{"className":1653},[],[1655],{"type":54,"value":1656},".prism_cache\u002F{cluster_id}\u002F",{"type":54,"value":1658},":",{"type":48,"tag":292,"props":1660,"children":1661},{},[1662,1678],{"type":48,"tag":296,"props":1663,"children":1664},{},[1665],{"type":48,"tag":300,"props":1666,"children":1667},{},[1668,1673],{"type":48,"tag":304,"props":1669,"children":1670},{},[1671],{"type":54,"value":1672},"File",{"type":48,"tag":304,"props":1674,"children":1675},{},[1676],{"type":54,"value":1677},"Contents",{"type":48,"tag":320,"props":1679,"children":1680},{},[1681,1698,1715,1739,1756,1773],{"type":48,"tag":300,"props":1682,"children":1683},{},[1684,1693],{"type":48,"tag":327,"props":1685,"children":1686},{},[1687],{"type":48,"tag":86,"props":1688,"children":1690},{"className":1689},[],[1691],{"type":54,"value":1692},"snapshot.json",{"type":48,"tag":327,"props":1694,"children":1695},{},[1696],{"type":54,"value":1697},"Lightweight cluster facts (engine version, instance types, deletion protection, backup retention, log exports, db count).",{"type":48,"tag":300,"props":1699,"children":1700},{},[1701,1710],{"type":48,"tag":327,"props":1702,"children":1703},{},[1704],{"type":48,"tag":86,"props":1705,"children":1707},{"className":1706},[],[1708],{"type":54,"value":1709},"databases.json",{"type":48,"tag":327,"props":1711,"children":1712},{},[1713],{"type":54,"value":1714},"Per-db summary: collections, docs, size, index counts, unused indexes, avg bloat.",{"type":48,"tag":300,"props":1716,"children":1717},{},[1718,1727],{"type":48,"tag":327,"props":1719,"children":1720},{},[1721],{"type":48,"tag":86,"props":1722,"children":1724},{"className":1723},[],[1725],{"type":54,"value":1726},"activity\u002F{YYYYMMDD_HHMM}.json",{"type":48,"tag":327,"props":1728,"children":1729},{},[1730,1732,1737],{"type":54,"value":1731},"15-minute ",{"type":48,"tag":86,"props":1733,"children":1735},{"className":1734},[],[1736],{"type":54,"value":257},{"type":54,"value":1738}," activity summaries.",{"type":48,"tag":300,"props":1740,"children":1741},{},[1742,1751],{"type":48,"tag":327,"props":1743,"children":1744},{},[1745],{"type":48,"tag":86,"props":1746,"children":1748},{"className":1747},[],[1749],{"type":54,"value":1750},"daily\u002F{YYYYMMDD}.json",{"type":48,"tag":327,"props":1752,"children":1753},{},[1754],{"type":54,"value":1755},"Daily rollups (auto-created from ≥4 activity files; the 15-min files are then removed).",{"type":48,"tag":300,"props":1757,"children":1758},{},[1759,1768],{"type":48,"tag":327,"props":1760,"children":1761},{},[1762],{"type":48,"tag":86,"props":1763,"children":1765},{"className":1764},[],[1766],{"type":54,"value":1767},"last_analysis.json",{"type":48,"tag":327,"props":1769,"children":1770},{},[1771],{"type":54,"value":1772},"Compact summary of the last agent run (module statuses, top correlated insights, reasoning log).",{"type":48,"tag":300,"props":1774,"children":1775},{},[1776,1799],{"type":48,"tag":327,"props":1777,"children":1778},{},[1779,1785,1786,1792,1793],{"type":48,"tag":86,"props":1780,"children":1782},{"className":1781},[],[1783],{"type":54,"value":1784},"wa_results.json",{"type":54,"value":449},{"type":48,"tag":86,"props":1787,"children":1789},{"className":1788},[],[1790],{"type":54,"value":1791},"slow_queries.json",{"type":54,"value":449},{"type":48,"tag":86,"props":1794,"children":1796},{"className":1795},[],[1797],{"type":54,"value":1798},"index_health.json",{"type":48,"tag":327,"props":1800,"children":1801},{},[1802],{"type":54,"value":1803},"Versioned module outputs for trend\u002Fdrift comparison.",{"type":48,"tag":75,"props":1805,"children":1806},{},[1807,1841,1894],{"type":48,"tag":79,"props":1808,"children":1809},{},[1810,1815,1817,1823,1825,1831,1833,1839],{"type":48,"tag":67,"props":1811,"children":1812},{},[1813],{"type":54,"value":1814},"Change detection:",{"type":54,"value":1816}," ",{"type":48,"tag":86,"props":1818,"children":1820},{"className":1819},[],[1821],{"type":54,"value":1822},"_content_hash()",{"type":54,"value":1824}," hashes content while ignoring timestamp\nfields, so unchanged data only refreshes ",{"type":48,"tag":86,"props":1826,"children":1828},{"className":1827},[],[1829],{"type":54,"value":1830},"last_seen",{"type":54,"value":1832}," rather than writing a new\nversion. ",{"type":48,"tag":86,"props":1834,"children":1836},{"className":1835},[],[1837],{"type":54,"value":1838},"compare_with_previous()",{"type":54,"value":1840}," emits human-readable drift strings (engine\nupgrades, instance-type changes, db count changes, bloat\u002Fsize growth, prior WA\u002Fslow\nquery\u002Findex summaries).",{"type":48,"tag":79,"props":1842,"children":1843},{},[1844,1849,1850,1856,1858,1863,1865,1871,1872,1878,1879,1885,1887,1893],{"type":48,"tag":67,"props":1845,"children":1846},{},[1847],{"type":54,"value":1848},"Versioning:",{"type":54,"value":1816},{"type":48,"tag":86,"props":1851,"children":1853},{"className":1852},[],[1854],{"type":54,"value":1855},"_write_versioned()",{"type":54,"value":1857}," keeps up to ",{"type":48,"tag":67,"props":1859,"children":1860},{},[1861],{"type":54,"value":1862},"3",{"type":54,"value":1864}," versions\n(",{"type":48,"tag":86,"props":1866,"children":1868},{"className":1867},[],[1869],{"type":54,"value":1870},"name.json",{"type":54,"value":449},{"type":48,"tag":86,"props":1873,"children":1875},{"className":1874},[],[1876],{"type":54,"value":1877},"name.v1.json",{"type":54,"value":449},{"type":48,"tag":86,"props":1880,"children":1882},{"className":1881},[],[1883],{"type":54,"value":1884},"name.v2.json",{"type":54,"value":1886},") and preserves the oldest ",{"type":48,"tag":86,"props":1888,"children":1890},{"className":1889},[],[1891],{"type":54,"value":1892},"first_seen",{"type":54,"value":101},{"type":48,"tag":79,"props":1895,"children":1896},{},[1897,1902,1903,1909,1911,1916],{"type":48,"tag":67,"props":1898,"children":1899},{},[1900],{"type":54,"value":1901},"Retention:",{"type":54,"value":1816},{"type":48,"tag":86,"props":1904,"children":1906},{"className":1905},[],[1907],{"type":54,"value":1908},"cleanup_old_files()",{"type":54,"value":1910}," deletes activity\u002Fdaily files older than ",{"type":48,"tag":67,"props":1912,"children":1913},{},[1914],{"type":54,"value":1915},"30\ndays",{"type":54,"value":101},{"type":48,"tag":129,"props":1918,"children":1920},{"id":1919},"_6-ai-advisory-stack",[1921],{"type":54,"value":1922},"6. AI Advisory Stack",{"type":48,"tag":56,"props":1924,"children":1925},{},[1926],{"type":54,"value":1927},"Three Bedrock-backed components share the same model pair and degrade gracefully.\nDetailed behavior lives in the sub-skills; the wiring is:",{"type":48,"tag":75,"props":1929,"children":1930},{},[1931,1989,2050,2117],{"type":48,"tag":79,"props":1932,"children":1933},{},[1934,1943,1945,1951,1953,1959,1961,1967,1969,1973,1975,1981,1983,1988],{"type":48,"tag":67,"props":1935,"children":1936},{},[1937],{"type":48,"tag":86,"props":1938,"children":1940},{"className":1939},[],[1941],{"type":54,"value":1942},"bedrock_advisor.py",{"type":54,"value":1944}," — agentic tool-use advisor. Loads its system prompt from\n",{"type":48,"tag":86,"props":1946,"children":1948},{"className":1947},[],[1949],{"type":54,"value":1950},"documentdb-well-architected-review\u002Fadvisor-prompt.md",{"type":54,"value":1952}," (via ",{"type":48,"tag":86,"props":1954,"children":1956},{"className":1955},[],[1957],{"type":54,"value":1958},"_load_skill()",{"type":54,"value":1960},") and\ninjects topic-matched reference docs from that directory's ",{"type":48,"tag":86,"props":1962,"children":1964},{"className":1963},[],[1965],{"type":54,"value":1966},"references\u002F",{"type":54,"value":1968},". Defines\n",{"type":48,"tag":67,"props":1970,"children":1971},{},[1972],{"type":54,"value":1137},{"type":54,"value":1974}," tools but ",{"type":48,"tag":86,"props":1976,"children":1978},{"className":1977},[],[1979],{"type":54,"value":1980},"_execute_tool()",{"type":54,"value":1982}," returns an error (MCP disabled), so answers are\ngrounded in injected context. See ",{"type":48,"tag":86,"props":1984,"children":1986},{"className":1985},[],[1987],{"type":54,"value":99},{"type":54,"value":101},{"type":48,"tag":79,"props":1990,"children":1991},{},[1992,2001,2003,2009,2010,2016,2017,2023,2024,2030,2031,2037,2038,2043,2044,2049],{"type":48,"tag":67,"props":1993,"children":1994},{},[1995],{"type":48,"tag":86,"props":1996,"children":1998},{"className":1997},[],[1999],{"type":54,"value":2000},"chat_advisor.py",{"type":54,"value":2002}," — two-step chat (classify → fetch → answer). Step 1 (Haiku)\nclassifies which data sources are needed; step 2 fetches those sources from agent\nstate and answers with the advisor prompt + matched references. Data sources:\n",{"type":48,"tag":86,"props":2004,"children":2006},{"className":2005},[],[2007],{"type":54,"value":2008},"collection_stats",{"type":54,"value":449},{"type":48,"tag":86,"props":2011,"children":2013},{"className":2012},[],[2014],{"type":54,"value":2015},"index_health",{"type":54,"value":449},{"type":48,"tag":86,"props":2018,"children":2020},{"className":2019},[],[2021],{"type":54,"value":2022},"slow_queries",{"type":54,"value":449},{"type":48,"tag":86,"props":2025,"children":2027},{"className":2026},[],[2028],{"type":54,"value":2029},"live_activity",{"type":54,"value":776},{"type":48,"tag":86,"props":2032,"children":2034},{"className":2033},[],[2035],{"type":54,"value":2036},"cluster_config",{"type":54,"value":449},{"type":48,"tag":86,"props":2039,"children":2041},{"className":2040},[],[2042],{"type":54,"value":455},{"type":54,"value":449},{"type":48,"tag":86,"props":2045,"children":2047},{"className":2046},[],[2048],{"type":54,"value":717},{"type":54,"value":101},{"type":48,"tag":79,"props":2051,"children":2052},{},[2053,2062,2064,2070,2072,2078,2080,2086,2088,2093,2095,2100,2102,2108,2110,2116],{"type":48,"tag":67,"props":2054,"children":2055},{},[2056],{"type":48,"tag":86,"props":2057,"children":2059},{"className":2058},[],[2060],{"type":54,"value":2061},"slow_query_recommender.py",{"type":54,"value":2063}," — per-pattern recommendations (",{"type":48,"tag":86,"props":2065,"children":2067},{"className":2066},[],[2068],{"type":54,"value":2069},"Add index",{"type":54,"value":2071}," \u002F\n",{"type":48,"tag":86,"props":2073,"children":2075},{"className":2074},[],[2076],{"type":54,"value":2077},"Rewrite query",{"type":54,"value":2079}," \u002F ",{"type":48,"tag":86,"props":2081,"children":2083},{"className":2082},[],[2084],{"type":54,"value":2085},"Scale compute",{"type":54,"value":2087},"), grounded in ",{"type":48,"tag":86,"props":2089,"children":2091},{"className":2090},[],[2092],{"type":54,"value":99},{"type":54,"value":2094}," + all\nof its ",{"type":48,"tag":86,"props":2096,"children":2098},{"className":2097},[],[2099],{"type":54,"value":1966},{"type":54,"value":2101},". Background generation, per-database concurrency limit of 5,\npersistent cache keyed by ",{"type":48,"tag":86,"props":2103,"children":2105},{"className":2104},[],[2106],{"type":54,"value":2107},"(cluster_id, pattern_key, stats_digest)",{"type":54,"value":2109},", lifecycle\n",{"type":48,"tag":86,"props":2111,"children":2113},{"className":2112},[],[2114],{"type":54,"value":2115},"placeholder → generating → done | failed | unavailable",{"type":54,"value":101},{"type":48,"tag":79,"props":2118,"children":2119},{},[2120,2129],{"type":48,"tag":67,"props":2121,"children":2122},{},[2123],{"type":48,"tag":86,"props":2124,"children":2126},{"className":2125},[],[2127],{"type":54,"value":2128},"bedrock_parallel.py",{"type":54,"value":2130}," — parallel per-pattern index suggestions (Haiku) with\ncollection context (existing indexes, doc count), ESR-rule prompting, JSON output.",{"type":48,"tag":56,"props":2132,"children":2133},{},[2134,2136,2141,2142,2148,2150,2155,2156,2162,2164,2170],{"type":54,"value":2135},"The same Bedrock pair also powers the ",{"type":48,"tag":67,"props":2137,"children":2138},{},[2139],{"type":54,"value":2140},"agent planner",{"type":54,"value":526},{"type":48,"tag":86,"props":2143,"children":2145},{"className":2144},[],[2146],{"type":54,"value":2147},"_reason",{"type":54,"value":2149},") and the WA\n",{"type":48,"tag":67,"props":2151,"children":2152},{},[2153],{"type":54,"value":2154},"recommendation generation",{"type":54,"value":526},{"type":48,"tag":86,"props":2157,"children":2159},{"className":2158},[],[2160],{"type":54,"value":2161},"tabs\u002Fwell_architected._generate_ai_recommendations",{"type":54,"value":2163},"\nvia ",{"type":48,"tag":86,"props":2165,"children":2167},{"className":2166},[],[2168],{"type":54,"value":2169},"documentdb-well-architected-review\u002Fwa-advisor-prompt.md",{"type":54,"value":791},{"type":48,"tag":129,"props":2172,"children":2174},{"id":2173},"_7-code-review-engine-code_review_enginepy",[2175,2177,2183],{"type":54,"value":2176},"7. Code Review Engine (",{"type":48,"tag":86,"props":2178,"children":2180},{"className":2179},[],[2181],{"type":54,"value":2182},"code_review_engine.py",{"type":54,"value":215},{"type":48,"tag":56,"props":2185,"children":2186},{},[2187,2189,2194,2196,2202,2204,2210,2212,2218,2220,2226,2228,2234,2236,2241,2243,2249,2251,2257],{"type":54,"value":2188},"Scans ",{"type":48,"tag":67,"props":2190,"children":2191},{},[2192],{"type":54,"value":2193},"application source code",{"type":54,"value":2195}," (not the database) for DocumentDB client best\npractices. ",{"type":48,"tag":86,"props":2197,"children":2199},{"className":2198},[],[2200],{"type":54,"value":2201},"start_code_review(target_dir, output_dir)",{"type":54,"value":2203}," runs on a background thread:\n",{"type":48,"tag":86,"props":2205,"children":2207},{"className":2206},[],[2208],{"type":54,"value":2209},"_discover_files()",{"type":54,"value":2211}," finds source files (JS\u002FTS, Java, Python, Go, C#, Ruby, PHP, R) and\nconfig files (docker-compose, .env, serverless.yml, CDK, etc.); ",{"type":48,"tag":86,"props":2213,"children":2215},{"className":2214},[],[2216],{"type":54,"value":2217},"_scan_patterns()",{"type":54,"value":2219},"\ndetects ",{"type":48,"tag":86,"props":2221,"children":2223},{"className":2222},[],[2224],{"type":54,"value":2225},"MongoClient",{"type":54,"value":2227}," usage, connection strings, pool\u002Ftimeout\u002Fretry config, and index\ncreation; ",{"type":48,"tag":86,"props":2229,"children":2231},{"className":2230},[],[2232],{"type":54,"value":2233},"_evaluate_checklist()",{"type":54,"value":2235}," scores ",{"type":48,"tag":67,"props":2237,"children":2238},{},[2239],{"type":54,"value":2240},"54",{"type":54,"value":2242}," checklist items; ",{"type":48,"tag":86,"props":2244,"children":2246},{"className":2245},[],[2247],{"type":54,"value":2248},"_write_report()",{"type":54,"value":2250},"\nemits a Markdown report with a compliance percentage. Surfaced via\n",{"type":48,"tag":86,"props":2252,"children":2254},{"className":2253},[],[2255],{"type":54,"value":2256},"tabs\u002Fcode_review_panel.py",{"type":54,"value":101},{"type":48,"tag":129,"props":2259,"children":2261},{"id":2260},"_8-report-generation-agent_reportpy",[2262,2264,2270],{"type":54,"value":2263},"8. Report Generation (",{"type":48,"tag":86,"props":2265,"children":2267},{"className":2266},[],[2268],{"type":54,"value":2269},"agent_report.py",{"type":54,"value":215},{"type":48,"tag":56,"props":2272,"children":2273},{},[2274,2280,2282,2287,2289,2294,2296,2301,2303,2308,2309,2314,2316,2322],{"type":48,"tag":86,"props":2275,"children":2277},{"className":2276},[],[2278],{"type":54,"value":2279},"generate_report(agent_state, conn_data)",{"type":54,"value":2281}," produces a Markdown report with: title +\nmetadata, ",{"type":48,"tag":67,"props":2283,"children":2284},{},[2285],{"type":54,"value":2286},"Executive Summary",{"type":54,"value":2288}," (modules completed, correlated insights, top actions),\n",{"type":48,"tag":67,"props":2290,"children":2291},{},[2292],{"type":54,"value":2293},"Agent Reasoning Log",{"type":54,"value":2295}," (step\u002Fmodule\u002Freasoning table), ",{"type":48,"tag":67,"props":2297,"children":2298},{},[2299],{"type":54,"value":2300},"Analysis Scope",{"type":54,"value":2302}," (in-scope vs\nskipped databases), per-module sections (cluster config, database analysis, slow\nqueries, compression, Well-Architected, instance sizing, storage), ",{"type":48,"tag":67,"props":2304,"children":2305},{},[2306],{"type":54,"value":2307},"Live Activity\nObservations",{"type":54,"value":464},{"type":48,"tag":67,"props":2310,"children":2311},{},[2312],{"type":54,"value":2313},"Skipped Modules",{"type":54,"value":2315},". The Well-Architected review additionally\nsupports a PDF export via ",{"type":48,"tag":86,"props":2317,"children":2319},{"className":2318},[],[2320],{"type":54,"value":2321},"wa_pdf.generate_wa_pdf(...)",{"type":54,"value":101},{"type":48,"tag":129,"props":2324,"children":2326},{"id":2325},"_9-configuration-prism_configyaml",[2327,2329,2334],{"type":54,"value":2328},"9. Configuration (",{"type":48,"tag":86,"props":2330,"children":2332},{"className":2331},[],[2333],{"type":54,"value":554},{"type":54,"value":215},{"type":48,"tag":56,"props":2336,"children":2337},{},[2338,2340,2346],{"type":54,"value":2339},"Loaded at runtime through ",{"type":48,"tag":86,"props":2341,"children":2343},{"className":2342},[],[2344],{"type":54,"value":2345},"prism_cfg.get_config()",{"type":54,"value":2347},". Key sections:",{"type":48,"tag":75,"props":2349,"children":2350},{},[2351,2362,2372,2391],{"type":48,"tag":79,"props":2352,"children":2353},{},[2354,2360],{"type":48,"tag":86,"props":2355,"children":2357},{"className":2356},[],[2358],{"type":54,"value":2359},"database_tree.initial_batch",{"type":54,"value":2361}," (10) — databases fully populated at connect; the rest\nload in the background.",{"type":48,"tag":79,"props":2363,"children":2364},{},[2365,2370],{"type":48,"tag":86,"props":2366,"children":2368},{"className":2367},[],[2369],{"type":54,"value":683},{"type":54,"value":2371}," (2) — pacing between background db loads and\nagent iterations.",{"type":48,"tag":79,"props":2373,"children":2374},{},[2375,2381,2383,2389],{"type":48,"tag":86,"props":2376,"children":2378},{"className":2377},[],[2379],{"type":54,"value":2380},"compression_analysis.collections_per_batch",{"type":54,"value":2382}," (5), ",{"type":48,"tag":86,"props":2384,"children":2386},{"className":2385},[],[2387],{"type":54,"value":2388},"delay_between_seconds",{"type":54,"value":2390}," (3).",{"type":48,"tag":79,"props":2392,"children":2393},{},[2394,2400,2401,2404,2406,2411,2413,2419,2420,2425,2427,2432,2433,2439,2441,2447,2449,2455],{"type":48,"tag":86,"props":2395,"children":2397},{"className":2396},[],[2398],{"type":54,"value":2399},"agent_prioritisation.priority_databases",{"type":54,"value":526},{"type":48,"tag":803,"props":2402,"children":2403},{},[],{"type":54,"value":2405},"), ",{"type":48,"tag":86,"props":2407,"children":2409},{"className":2408},[],[2410],{"type":54,"value":609},{"type":54,"value":2412},"\n(",{"type":48,"tag":86,"props":2414,"children":2416},{"className":2415},[],[2417],{"type":54,"value":2418},"staging, local, admin, config",{"type":54,"value":2405},{"type":48,"tag":86,"props":2421,"children":2423},{"className":2422},[],[2424],{"type":54,"value":657},{"type":54,"value":2426}," (20),\n",{"type":48,"tag":86,"props":2428,"children":2430},{"className":2429},[],[2431],{"type":54,"value":616},{"type":54,"value":526},{"type":48,"tag":86,"props":2434,"children":2436},{"className":2435},[],[2437],{"type":54,"value":2438},"audit_log, tmp_, _archive",{"type":54,"value":2440}," — prefix match),\n",{"type":48,"tag":86,"props":2442,"children":2444},{"className":2443},[],[2445],{"type":54,"value":2446},"max_collection_size_gb",{"type":54,"value":2448}," (50), ",{"type":48,"tag":86,"props":2450,"children":2452},{"className":2451},[],[2453],{"type":54,"value":2454},"max_compression_sample_docs",{"type":54,"value":2456}," (1,000,000).",{"type":48,"tag":56,"props":2458,"children":2459},{},[2460,2462,2468],{"type":54,"value":2461},"Always respect these limits; never bypass ",{"type":48,"tag":86,"props":2463,"children":2465},{"className":2464},[],[2466],{"type":54,"value":2467},"skip_*",{"type":54,"value":2469}," lists or analyze system databases.",{"type":48,"tag":129,"props":2471,"children":2473},{"id":2472},"_10-other-components",[2474],{"type":54,"value":2475},"10. Other Components",{"type":48,"tag":75,"props":2477,"children":2478},{},[2479,2490,2501],{"type":48,"tag":79,"props":2480,"children":2481},{},[2482,2488],{"type":48,"tag":86,"props":2483,"children":2485},{"className":2484},[],[2486],{"type":54,"value":2487},"aws_discovery.py",{"type":54,"value":2489}," — discovers DocumentDB clusters\u002Finstances in an account\u002Fregion.",{"type":48,"tag":79,"props":2491,"children":2492},{},[2493,2499],{"type":48,"tag":86,"props":2494,"children":2496},{"className":2495},[],[2497],{"type":54,"value":2498},"ssh_tunnel.py",{"type":54,"value":2500}," — manages SSH tunnels for private clusters (with orphan reaping).",{"type":48,"tag":79,"props":2502,"children":2503},{},[2504,2510,2512,2518,2520,2526,2528,2534,2535,2541],{"type":48,"tag":86,"props":2505,"children":2507},{"className":2506},[],[2508],{"type":54,"value":2509},"tabs\u002F",{"type":54,"value":2511}," — self-registering Dash UI tabs (",{"type":48,"tag":86,"props":2513,"children":2515},{"className":2514},[],[2516],{"type":54,"value":2517},"tabs\u002Fregistry.py",{"type":54,"value":2519},"); ",{"type":48,"tag":86,"props":2521,"children":2523},{"className":2522},[],[2524],{"type":54,"value":2525},"tabs\u002Fwa_v2\u002F",{"type":54,"value":2527}," is the\nnext-gen WA UI that contributes additional checks (e.g. ",{"type":48,"tag":86,"props":2529,"children":2531},{"className":2530},[],[2532],{"type":54,"value":2533},"PERF1",{"type":54,"value":449},{"type":48,"tag":86,"props":2536,"children":2538},{"className":2537},[],[2539],{"type":54,"value":2540},"PERF1c",{"type":54,"value":791},{"type":48,"tag":129,"props":2543,"children":2545},{"id":2544},"_11-severity-priority-schema-shared-across-all-prism-skills",[2546],{"type":54,"value":2547},"11. Severity \u002F Priority Schema (shared across all Prism skills)",{"type":48,"tag":56,"props":2549,"children":2550},{},[2551],{"type":54,"value":2552},"To keep findings traceable across the platform, all three skills use the same scale:",{"type":48,"tag":75,"props":2554,"children":2555},{},[2556,2566,2576,2586],{"type":48,"tag":79,"props":2557,"children":2558},{},[2559,2564],{"type":48,"tag":67,"props":2560,"children":2561},{},[2562],{"type":54,"value":2563},"Critical",{"type":54,"value":2565}," — data loss, security breach, or unavailability risk.",{"type":48,"tag":79,"props":2567,"children":2568},{},[2569,2574],{"type":48,"tag":67,"props":2570,"children":2571},{},[2572],{"type":54,"value":2573},"High",{"type":54,"value":2575}," — significant performance degradation or cost waste happening now.",{"type":48,"tag":79,"props":2577,"children":2578},{},[2579,2584],{"type":48,"tag":67,"props":2580,"children":2581},{},[2582],{"type":54,"value":2583},"Medium",{"type":54,"value":2585}," — best-practice gap with moderate risk.",{"type":48,"tag":79,"props":2587,"children":2588},{},[2589,2594],{"type":48,"tag":67,"props":2590,"children":2591},{},[2592],{"type":54,"value":2593},"Low",{"type":54,"value":2595}," — optimization opportunity with low urgency.",{"type":48,"tag":56,"props":2597,"children":2598},{},[2599,2601,2607,2609,2615],{"type":54,"value":2600},"WA check rows additionally carry a status of ",{"type":48,"tag":86,"props":2602,"children":2604},{"className":2603},[],[2605],{"type":54,"value":2606},"pass | warn | fail | info",{"type":54,"value":2608},"; ",{"type":48,"tag":86,"props":2610,"children":2612},{"className":2611},[],[2613],{"type":54,"value":2614},"info",{"type":54,"value":2616}," is\nexcluded from the health score denominator.",{"type":48,"tag":129,"props":2618,"children":2620},{"id":2619},"_12-safety-constraints-platform-wide",[2621],{"type":54,"value":2622},"12. Safety Constraints (platform-wide)",{"type":48,"tag":75,"props":2624,"children":2625},{},[2626,2638,2656,2699],{"type":48,"tag":79,"props":2627,"children":2628},{},[2629,2631,2636],{"type":54,"value":2630},"Prism is ",{"type":48,"tag":67,"props":2632,"children":2633},{},[2634],{"type":54,"value":2635},"read-only",{"type":54,"value":2637}," with respect to user data. Never insert\u002Fupdate\u002Fdelete user\ndocuments. The advisor may recommend index\u002Fconfig changes but always with a\n\"test in non-production first\" caveat.",{"type":48,"tag":79,"props":2639,"children":2640},{},[2641,2646,2648,2654],{"type":48,"tag":67,"props":2642,"children":2643},{},[2644],{"type":54,"value":2645},"Never",{"type":54,"value":2647}," recommend dropping the ",{"type":48,"tag":86,"props":2649,"children":2651},{"className":2650},[],[2652],{"type":54,"value":2653},"_id",{"type":54,"value":2655}," index.",{"type":48,"tag":79,"props":2657,"children":2658},{},[2659,2661,2667,2669,2675,2676,2682,2683,2689,2691,2697],{"type":54,"value":2660},"LLM-generated queries are safety-checked (",{"type":48,"tag":86,"props":2662,"children":2664},{"className":2663},[],[2665],{"type":54,"value":2666},"bedrock_advisor._check_query_safety",{"type":54,"value":2668},"):\n",{"type":48,"tag":86,"props":2670,"children":2672},{"className":2671},[],[2673],{"type":54,"value":2674},"$where",{"type":54,"value":449},{"type":48,"tag":86,"props":2677,"children":2679},{"className":2678},[],[2680],{"type":54,"value":2681},"$function",{"type":54,"value":449},{"type":48,"tag":86,"props":2684,"children":2686},{"className":2685},[],[2687],{"type":54,"value":2688},"$accumulator",{"type":54,"value":2690}," are denied; ",{"type":48,"tag":86,"props":2692,"children":2694},{"className":2693},[],[2695],{"type":54,"value":2696},"$regex",{"type":54,"value":2698}," length and nesting depth\nare capped.",{"type":48,"tag":79,"props":2700,"children":2701},{},[2702],{"type":54,"value":2703},"Treat AWS resources as production unless proven otherwise; prefer read\u002Fdescribe\u002Flist\noperations and never disable safety protections without explicit confirmation.",{"type":48,"tag":2705,"props":2706,"children":2707},"style",{},[2708],{"type":54,"value":2709},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":2711,"total":2886},[2712,2731,2749,2759,2772,2785,2795,2805,2826,2841,2856,2871],{"slug":2713,"name":2713,"fn":2714,"description":2715,"org":2716,"tags":2717,"stars":2728,"repoUrl":2729,"updatedAt":2730},"agentcore-investigation","investigate Bedrock AgentCore runtime sessions","Investigate Bedrock AgentCore runtime sessions via CloudWatch Logs Insights — resolve session\u002Ftrace IDs, query OTEL spans, filter noise, build timelines. Use when debugging AgentCore agent sessions, tracing tool calls, or analyzing latency.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2718,2721,2724,2727],{"name":2719,"slug":2720,"type":16},"AWS","aws",{"name":2722,"slug":2723,"type":16},"Debugging","debugging",{"name":2725,"slug":2726,"type":16},"Logs","logs",{"name":14,"slug":15,"type":16},9427,"https:\u002F\u002Fgithub.com\u002Fawslabs\u002Fmcp","2026-07-12T08:37:22.601527",{"slug":2732,"name":2733,"fn":2734,"description":2735,"org":2736,"tags":2737,"stars":2728,"repoUrl":2729,"updatedAt":2748},"amazon-aurora-dsql","amazon aurora dsql","build applications with Aurora DSQL","Build with Aurora DSQL — manage schemas, execute queries, handle migrations, diagnose query plans, load data, and develop applications with a serverless, distributed SQL database. Covers IAM auth, multi-tenant patterns, MySQL-to-DSQL and PostgreSQL-to-DSQL schema conversion, FK replacement code generation, OCC retry patterns, ORM migration (Django\u002FHibernate\u002FRails), DDL operations, query plan explainability, SQL compatibility validation, and bulk data loading. Triggers on phrases like: DSQL, Aurora DSQL, create DSQL table, DSQL schema, migrate to DSQL, distributed SQL database, serverless PostgreSQL-compatible database, DSQL query plan, DSQL EXPLAIN ANALYZE, why is my DSQL query slow, DSQL foreign key, DSQL OCC retry, DSQL multi-region, load into DSQL, load CSV into DSQL, bulk load DSQL, aurora-dsql-loader.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2738,2741,2742,2743,2745],{"name":2739,"slug":2740,"type":16},"Aurora","aurora",{"name":2719,"slug":2720,"type":16},{"name":18,"slug":19,"type":16},{"name":1547,"slug":2744,"type":16},"serverless",{"name":2746,"slug":2747,"type":16},"SQL","sql","2026-08-04T05:35:10.770847",{"slug":2750,"name":2751,"fn":2734,"description":2735,"org":2752,"tags":2753,"stars":2728,"repoUrl":2729,"updatedAt":2758},"aurora-dsql","aurora dsql",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2754,2755,2756,2757],{"name":2719,"slug":2720,"type":16},{"name":18,"slug":19,"type":16},{"name":1547,"slug":2744,"type":16},{"name":2746,"slug":2747,"type":16},"2026-08-04T05:35:05.694395",{"slug":2760,"name":2761,"fn":2734,"description":2735,"org":2762,"tags":2763,"stars":2728,"repoUrl":2729,"updatedAt":2771},"aws-dsql","aws dsql",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2764,2765,2766,2769,2770],{"name":2719,"slug":2720,"type":16},{"name":18,"slug":19,"type":16},{"name":2767,"slug":2768,"type":16},"Migration","migration",{"name":1547,"slug":2744,"type":16},{"name":2746,"slug":2747,"type":16},"2026-08-04T05:35:08.749669",{"slug":2773,"name":2774,"fn":2734,"description":2735,"org":2775,"tags":2776,"stars":2728,"repoUrl":2729,"updatedAt":2784},"distributed-postgres","distributed postgres",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2777,2778,2779,2782,2783],{"name":2719,"slug":2720,"type":16},{"name":18,"slug":19,"type":16},{"name":2780,"slug":2781,"type":16},"PostgreSQL","postgresql",{"name":1547,"slug":2744,"type":16},{"name":2746,"slug":2747,"type":16},"2026-08-04T05:35:06.713102",{"slug":2786,"name":2787,"fn":2734,"description":2735,"org":2788,"tags":2789,"stars":2728,"repoUrl":2729,"updatedAt":2794},"distributed-sql","distributed sql",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2790,2791,2792,2793],{"name":2719,"slug":2720,"type":16},{"name":18,"slug":19,"type":16},{"name":1547,"slug":2744,"type":16},{"name":2746,"slug":2747,"type":16},"2026-08-04T05:35:10.086942",{"slug":2796,"name":2796,"fn":2734,"description":2735,"org":2797,"tags":2798,"stars":2728,"repoUrl":2729,"updatedAt":2804},"dsql",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2799,2800,2801,2802,2803],{"name":2719,"slug":2720,"type":16},{"name":18,"slug":19,"type":16},{"name":2767,"slug":2768,"type":16},{"name":1547,"slug":2744,"type":16},{"name":2746,"slug":2747,"type":16},"2026-08-04T05:35:07.751779",{"slug":2806,"name":2806,"fn":2807,"description":2808,"org":2809,"tags":2810,"stars":2823,"repoUrl":2824,"updatedAt":2825},"cost-efficiency-analyzer","analyze cost efficiency and expenses","Analyzes cost structure, cost efficiency, and expense management from P&L data. Use when the user asks about costs, expenses, COGS, operating expenses, cost ratios, cost control, spending efficiency, margin compression from cost side, or wants to understand where money is going. Also use for \"are we spending too much\", \"cost breakdown\", \"expense analysis\", or \"how efficient are our operations\". NOT for revenue or top-line analysis.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2811,2814,2817,2820],{"name":2812,"slug":2813,"type":16},"Accounting","accounting",{"name":2815,"slug":2816,"type":16},"Analytics","analytics",{"name":2818,"slug":2819,"type":16},"Cost Optimization","cost-optimization",{"name":2821,"slug":2822,"type":16},"Finance","finance",3176,"https:\u002F\u002Fgithub.com\u002Fawslabs\u002Fagentcore-samples","2026-07-12T08:40:03.29555",{"slug":2827,"name":2827,"fn":2828,"description":2829,"org":2830,"tags":2831,"stars":2823,"repoUrl":2824,"updatedAt":2840},"executive-financial-briefing","generate executive financial briefings","Generates a concise executive-level financial briefing or summary suitable for a CEO, CFO, or board presentation. Use when the user asks for a summary, briefing, executive summary, board update, financial overview, financial health check, or \"how is the business doing\". Covers the full P&L picture in one page. Also use for \"give me the highlights\", \"what do I need to know\", or \"quick financial update\".",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2832,2833,2834,2837],{"name":2719,"slug":2720,"type":16},{"name":2821,"slug":2822,"type":16},{"name":2835,"slug":2836,"type":16},"Management","management",{"name":2838,"slug":2839,"type":16},"Reporting","reporting","2026-07-12T08:40:02.066471",{"slug":2842,"name":2842,"fn":2843,"description":2844,"org":2845,"tags":2846,"stars":2823,"repoUrl":2824,"updatedAt":2855},"multi-quarter-trend-analysis","analyze multi-quarter financial trends","Analyzes financial trends across multiple quarters by comparing P&L metrics over time. Use when the user wants to see trends, patterns, trajectories, or directional movement across 3 or more quarters. Also use for \"how are we trending\", \"show me the trend\", \"track performance over time\", \"quarter over quarter comparison across all quarters\", or any multi-period longitudinal analysis.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2847,2848,2849,2852],{"name":2815,"slug":2816,"type":16},{"name":2821,"slug":2822,"type":16},{"name":2850,"slug":2851,"type":16},"Financial Statements","financial-statements",{"name":2853,"slug":2854,"type":16},"Variance Analysis","variance-analysis","2026-07-12T08:40:00.79141",{"slug":2857,"name":2857,"fn":2858,"description":2859,"org":2860,"tags":2861,"stars":2823,"repoUrl":2824,"updatedAt":2870},"pdf","process and manipulate PDF documents","Use this skill whenever the user wants to do anything with PDF files. This includes reading or extracting text\u002Ftables from PDFs, combining or merging multiple PDFs into one, splitting PDFs apart, rotating pages, adding watermarks, creating new PDFs, filling PDF forms, encrypting\u002Fdecrypting PDFs, extracting images, and OCR on scanned PDFs to make them searchable. If the user mentions a .pdf file or asks to produce one, use this skill.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2862,2865,2868],{"name":2863,"slug":2864,"type":16},"Automation","automation",{"name":2866,"slug":2867,"type":16},"Documents","documents",{"name":2869,"slug":2857,"type":16},"PDF","2026-07-12T08:41:44.135656",{"slug":2872,"name":2872,"fn":2873,"description":2874,"org":2875,"tags":2876,"stars":2823,"repoUrl":2824,"updatedAt":2885},"quarterly-kpi-calculator","calculate quarterly financial KPIs","Calculates quarterly financial KPIs from P&L data. P&L figures can be provided directly by the user or fetched from the financial data MCP server. Use when the user wants KPI calculations such as Gross Margin %, EBITDA Margin %, Operating Expense Ratio, or Revenue Growth % QoQ. Also use for quarterly performance review, P&L analysis, or interpreting financial ratios against benchmarks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2877,2878,2881,2882],{"name":2812,"slug":2813,"type":16},{"name":2879,"slug":2880,"type":16},"Data Analysis","data-analysis",{"name":2821,"slug":2822,"type":16},{"name":2883,"slug":2884,"type":16},"KPI","kpi","2026-07-12T08:39:59.54971",159,{"items":2888,"total":824},[2889,2901,2916],{"slug":91,"name":91,"fn":2890,"description":2891,"org":2892,"tags":2893,"stars":26,"repoUrl":27,"updatedAt":2900},"optimize Amazon DocumentDB performance and configuration","Amazon DocumentDB expert advisor for database optimization, query tuning, index management, instance sizing, cost analysis, anti-pattern detection, and migration guidance. Powers Prism's conversational advisor — agentic Bedrock tool-use, two-step classify→fetch→answer chat, topic-aware reference injection, safety-gated query execution, and per-slow-query AI recommendations. Use when asking about DocumentDB best practices, performance issues, query plans, supported operators, serverless vs provisioned, storage options, backup\u002Frestore, compression, or differences from MongoDB.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2894,2895,2896,2897],{"name":2818,"slug":2819,"type":16},{"name":18,"slug":19,"type":16},{"name":24,"slug":25,"type":16},{"name":2898,"slug":2899,"type":16},"Performance","performance","2026-08-07T05:03:40.122457",{"slug":113,"name":113,"fn":2902,"description":2903,"org":2904,"tags":2905,"stars":26,"repoUrl":27,"updatedAt":2915},"perform Well-Architected reviews for Amazon DocumentDB","Performs a comprehensive Well-Architected review of Amazon DocumentDB clusters. Evaluates cluster configuration against 6 pillars (Reliability, Security, Operational Excellence, Performance Efficiency, Cost Optimization, Sustainability), generates findings with remediation guidance, and produces a universal JSON export + interactive HTML dashboard.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2906,2909,2910,2911,2912],{"name":2907,"slug":2908,"type":16},"Architecture","architecture",{"name":2719,"slug":2720,"type":16},{"name":18,"slug":19,"type":16},{"name":2898,"slug":2899,"type":16},{"name":2913,"slug":2914,"type":16},"Security","security","2026-08-07T05:03:40.486376",{"slug":4,"name":4,"fn":5,"description":6,"org":2917,"tags":2918,"stars":26,"repoUrl":27,"updatedAt":28},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[2919,2920,2921,2922],{"name":18,"slug":19,"type":16},{"name":24,"slug":25,"type":16},{"name":14,"slug":15,"type":16},{"name":21,"slug":22,"type":16}]