[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-aws-labs-aws-transform":3,"mdc-8bpnw7-key":45,"related-repo-aws-labs-aws-transform":3092,"related-org-aws-labs-aws-transform":3199},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":29,"repoUrl":30,"updatedAt":31,"license":32,"forks":33,"topics":34,"repo":40,"sourceUrl":43,"mdContent":44},"aws-transform","migrate and modernize codebases to AWS","Migrate, modernize, and upgrade codebases to AWS. Run analysis on repos for tech debt, security vulnerabilities, and modernization opportunities. Transforms .NET Framework to .NET 8\u002F10, mainframe COBOL to Java, VMware VMs to EC2, SQL Server to Aurora, and upgrades Java\u002FPython\u002FNode.js versions and AWS SDKs. Use when the user says \"migrate .NET to AWS\", \"upgrade Java to 17\u002F21\", \"modernize COBOL\", \"modernize mainframe\", \"move VMware to EC2\", \"convert SQL Server to Aurora\", \"upgrade Python version\", \"migrate AWS SDK\", \"transform this codebase\", \"analyze for issues\", \"find tech debt\", \"what tech debt\", \"security vulnerabilities\", \"CVEs\", \"what's wrong with my code\", \"assess my repos\", \"where do I start\", \"find what's outdated\", \"analyze my repos\", \"AWS Transform - continuous modernization\", \"continuous modernization\" or \"continuous-modernization\". Don't use for infrastructure provisioning, CI\u002FCD pipelines, or general coding tasks.",{"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,26],{"name":14,"slug":15,"type":16},"Security","security","tag",{"name":18,"slug":19,"type":16},"Modernization","modernization",{"name":21,"slug":22,"type":16},"Migration","migration",{"name":24,"slug":25,"type":16},"Engineering","engineering",{"name":27,"slug":28,"type":16},"AWS","aws",831,"https:\u002F\u002Fgithub.com\u002Fawslabs\u002Fagent-plugins","2026-08-01T05:43:53.724377",null,127,[35,36,37,28,38,39],"agent-plugins","agent-skills","agents","coding-agent-skills","coding-agents",{"repoUrl":30,"stars":29,"forks":33,"topics":41,"description":42},[35,36,37,28,38,39],"Agent Plugins for AWS equip AI coding agents with the skills to help you architect, deploy, and operate on AWS.","https:\u002F\u002Fgithub.com\u002Fawslabs\u002Fagent-plugins\u002Ftree\u002FHEAD\u002Fplugins\u002Faws-transform\u002Fskills\u002Faws-transform","---\nname: aws-transform\ndescription: Migrate, modernize, and upgrade codebases to AWS. Run analysis on repos for tech debt, security vulnerabilities, and modernization opportunities. Transforms .NET Framework to .NET 8\u002F10, mainframe COBOL to Java, VMware VMs to EC2, SQL Server to Aurora, and upgrades Java\u002FPython\u002FNode.js versions and AWS SDKs. Use when the user says \"migrate .NET to AWS\", \"upgrade Java to 17\u002F21\", \"modernize COBOL\", \"modernize mainframe\", \"move VMware to EC2\", \"convert SQL Server to Aurora\", \"upgrade Python version\", \"migrate AWS SDK\", \"transform this codebase\", \"analyze for issues\", \"find tech debt\", \"what tech debt\", \"security vulnerabilities\", \"CVEs\", \"what's wrong with my code\", \"assess my repos\", \"where do I start\", \"find what's outdated\", \"analyze my repos\", \"AWS Transform - continuous modernization\", \"continuous modernization\" or \"continuous-modernization\". Don't use for infrastructure provisioning, CI\u002FCD pipelines, or general coding tasks.\n---\n\n# AWS Transform\n\n## CRITICAL: Route Before Anything Else\n\n**STOP. Before reading files, analyzing code, or starting any workflow, identify the workload first, then route.**\n\n### Step A: Identify the workload\n\nLook for an explicit workload signal in the user's request — a named technology (`.NET`, `VMware`, `SQL Server`\u002F`Aurora`\u002F`Oracle`\u002F`MySQL`, `mainframe`\u002F`COBOL`), workload-specific terminology (Hyper-V, EC2 rehost, stored procs, CICS, JCL), or file\u002Fproject signals already in the conversation. If no signal is present, treat the request as **workload-unspecified**.\n\n### Step B: Apply workload-specific routing\n\nWorkload-specific rules ALWAYS win over the keyword list in Step C. Do not let \"analysis\" or \"tech debt\" phrasing override these.\n\n| Workload                 | Route                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |\n| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **.NET**                 | Ask the user via `AskUserQuestion`: \"For your .NET work, are you looking to **modernize to .NET 8\u002F10** (port the code, change targets), **run an assessment for modernization** (scope the work, identify blockers, plan the port), or **analyze your repos for tech debt, security vulnerabilities, or CVEs**?\" → \"Modernize\" or \"Assessment for modernization\" → proceed to the Overview section (the .NET workload handles both). → \"Analyze for tech debt \u002F security \u002F CVEs\" → route to continuous modernization (see Step D). |\n| **VMware**               | Proceed to the Overview section. **NEVER route VMware requests to continuous modernization** — even if the user uses words like \"analyze\", \"assess\", \"find issues\". VMware assessment is handled by the VMware workload agent, see [vmware](references\u002Fvmware.md).                                                                                                                                                                                                                                                                 |\n| **SQL \u002F Database**       | Proceed to the Overview section. **NEVER route SQL\u002Fdatabase requests to continuous modernization** — SQL Server, Oracle, MySQL, and Aurora migrations are handled by the SQL workload agent, see [sql](references\u002Fsql.md).                                                                                                                                                                                                                                                                                                         |\n| **Mainframe \u002F COBOL**    | Proceed to the Overview section. **NEVER route mainframe requests to continuous modernization** — COBOL\u002FCICS\u002FJCL transformations are handled by the mainframe workload agent, see [mainframe](references\u002Fmainframe.md).                                                                                                                                                                                                                                                                                                            |\n| **Workload-unspecified** | Continue to Step C.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |\n\n### Step C: Keyword-based routing (workload-unspecified only)\n\nThis list applies **only** when the user has not named a workload. If any of the workload rules in Step B matched, you have already routed — do not re-evaluate against this list.\n\nIf the user's workload-unspecified request matches any of these intents, route to **continuous modernization** — do NOT scan files yourself:\n\n- \"analysis\", \"analyze\", \"find issues\", \"what's wrong\", \"tech debt\", \"security vulnerabilities\", \"CVEs\"\n- \"what should I fix\", \"where do I start\"\n- \"report\", \"dashboard\", \"compare\", \"trend\"\n- \"remediate findings\", \"remediation\", \"fix what you found\"\n- \"custom transform\"\n- \"continuous modernization\", \"AWS Transform - continuous modernization\"\n\n### Step D: For continuous modernization requests\n\n1. **First-response telemetry notice (once per session).** The first time a request routes here in this session, ALWAYS prepend this line exactly to your reply to the user before doing anything else:\n\n   > Note: this skill and the continuous modernization CLI, (`atx ct`), collect usage telemetry by default during transformation execution. The telemetry consists of different data points, such as, the IDE name (for example, VS Code or Kiro), the AI agent name (for example, Claude Code or OpenAI Codex), and the execution mode (local or remote). This data is used by AWS Transform to prioritize compatibility testing, as well as latency and reliability. To opt out, see [here](https:\u002F\u002Fdocs.aws.amazon.com\u002Ftransform\u002Flatest\u002Fuserguide\u002Ftransform-usage-telemetry.html).\n\n   Show it exactly once per session. Do NOT repeat it on subsequent continuous modernization requests in the same session.\n\n   **Telemetry opt-out.** If the user explicitly asks to disable telemetry during the chat session:\n   1. Omit `--telemetry` for the rest of the session (see each sub-skill's Telemetry section for the flag format).\n   2. Prepend `ATX_DISABLE_TELEMETRY=true` inline on **every** `atx ct` command for the rest of the session — not only `analysis`\u002F`remediation`, but also setup and diagnostic commands like `atx ct status`, `atx ct source ...`, and `atx ct setup ...`. The prefix must be on the same command line as the `atx ct` invocation (including inside compound commands, e.g. `which atx && ATX_DISABLE_TELEMETRY=true atx ct ...`), because the shell does not persist env vars between invocations: `ATX_DISABLE_TELEMETRY=true atx ct ...`\n\n2. When invoking AWS Transform - continuous modernization (continuous modernization) commands, use `atx ct` (with a space). `atxct` (no space) is being deprecated; it remains functionally equivalent and hits the same backend, so an `atxct` invocation in the user's environment is not itself a problem. Do not warn the user about `atxct` and do not treat its presence as a failure cause.\n\n3. **Verify local CLI dispatch before checking versions or AWS configuration.** Run this without redirecting stderr:\n\n   ```\n   atx ct --version\n   ```\n\n   Classify failures before continuing:\n   - If the shell reports `atx: command not found`, install the AWS Transform CLI: `curl -fsSL https:\u002F\u002Ftransform-cli.awsstatic.com\u002Finstall.sh | bash`, then restart the shell or source its profile.\n   - If an `atx` process runs but reports `unknown command 'ct'`, do NOT reinstall blindly or investigate AWS credentials\u002Fregion. Follow the [command-resolution troubleshooting](references\u002Fcontinuous-modernization-troubleshooting.md#atx-ct-reports-unknown-command-ct) first.\n   - If the command succeeds, continue with the version comparison.\n\n4. Check whether the working CLI is up to date:\n\n   ```\n   INSTALLED=$(atx ct --version | head -1); LATEST=$(curl -fsSL \"https:\u002F\u002Ftransform-cli.awsstatic.com\u002Findex.json\" 2>\u002Fdev\u002Fnull | grep -o '\"latest\"[[:space:]]*:[[:space:]]*\"[^\"]*\"' | sed 's\u002F.*\"latest\"[[:space:]]*:[[:space:]]*\"\\([^\"]*\\)\".*\u002F\\1\u002F'); echo \"Installed: ${INSTALLED:-not found}, Latest: ${LATEST:-unknown}\"\n   ```\n\n   If `LATEST` is known and newer than `INSTALLED`, update with `curl -fsSL https:\u002F\u002Ftransform-cli.awsstatic.com\u002Finstall.sh | bash`, then restart the shell or source its profile.\n\n5. **Credential preflight.** Validate AWS credentials before starting any analysis or remediation — at minimum on the first continuous modernization request of the session (new or returning users), and again before any later run in a long session, since credentials can lapse mid-session:\n\n   ```\n   aws sts get-caller-identity\n   ```\n\n   If it fails or the credentials are expired, refresh them before continuing. Do NOT start any long-running work on expired or soon-to-expire credentials — an analysis started on credentials about to expire can strand the run mid-flight. Run the preflight silently; surface it to the user only if the credentials need refreshing.\n\n6. If local `atx ct` dispatch succeeded but a later command fails, then check runtime configuration:\n   - `AWS_PROFILE` points at a valid account with refreshed credentials\n   - `AWS_REGION` is set to a supported region\n   - `ATX_CUSTOM_ENDPOINT` is set in the environment (only if you use a custom endpoint)\n\n   An `unknown command 'ct'` failure is a local command-resolution problem, not an AWS configuration problem; return to Step 3 instead.\n\n7. Ensure a supported region has been selected (see [continuous-modernization-setup.md](references\u002Fcontinuous-modernization-setup.md) \"Choose your region\") and prefixed inline (`AWS_REGION=$ATX_REGION`) on every `atx ct` command.\n\n8. Then use the appropriate continuous modernization skill — see [continuous-modernization](references\u002Fcontinuous-modernization.md). Recurring\u002Fscheduled intent (\"weekly scan\", \"every Monday\", \"on a schedule\", \"cron\") routes to [continuous-modernization-schedule](references\u002Fcontinuous-modernization-schedule.md): scheduling is a real, shipped capability (`atx ct schedule create\u002Flist\u002Fget\u002Fenable\u002Fdisable\u002Fdelete`) that runs on remote infrastructure ONLY — never claim it doesn't exist, and never offer a local cron\u002Fsystemd\u002Flaunchd entry as a substitute or fallback.\n\n**When in doubt for a workload-unspecified request → continuous modernization.** This default applies ONLY after Step B has cleared — VMware, SQL, and mainframe never fall through to continuous modernization regardless of how the question is phrased; .NET only routes to continuous modernization after the user picks \"analyze for tech debt \u002F security \u002F CVEs\" in Step B's intent question (both \"modernize\" and \"assessment for modernization\" stay in the .NET workload). Once routed, do NOT manually read source files to find issues — that's what `atx ct analysis run` does.\n\n## CRITICAL: Never Show Pricing or Timing Estimates\n\n**Do NOT quote specific dollar amounts, hourly rates, or time estimates** for AWS resources or analyses. This includes:\n\n- ❌ \"~$0.20\u002Fhr\", \"~$5\u002Fday\", \"$X per analysis\"\n- ❌ \"takes ~30 min\", \"completes in 2-5 hours\", \"~30s startup\"\n- ❌ \"ETA: 30 min – 2 hours\"\n\n**Instead:**\n\n- For pricing: redirect to https:\u002F\u002Faws.amazon.com\u002Fec2\u002Fpricing\u002F, https:\u002F\u002Faws.amazon.com\u002Ftransform\u002Fpricing\u002F, etc.\n- If asked directly: \"I can't give specific cost or time estimates — pricing depends on your usage and AWS quotas. Check the AWS pricing pages for current rates.\"\n\nThis applies to all responses, all skills, and all situations.\n\n---\n\n## Overview\n\nDomain expertise for migrating and modernizing workloads using AWS Transform. Covers .NET Framework to .NET 8\u002F10, mainframe COBOL to Java, VMware to EC2, SQL Server to Aurora PostgreSQL, and custom code transformations (Java, Python, Node.js version upgrades, SDK migrations). Orchestrates assessment, planning, and execution through Managed Agents and AWS Transform CLI with human-in-the-loop checkpoints.\n\n## Prerequisites\n\nThis skill requires the AWS Transform MCP server (`aws-transform-mcp`). Configure it in your agent's MCP settings:\n\n```json\n{\n  \"mcpServers\": {\n    \"aws-transform-mcp\": {\n      \"command\": \"uvx\",\n      \"args\": [\n        \"awslabs.aws-transform-mcp-server@latest\"\n      ]\n    }\n  }\n}\n```\n\nThe AWS Transform CLI is also required for custom transformations. Install via:\n\n```bash\ncurl -fsSL https:\u002F\u002Ftransform-cli.awsstatic.com\u002Finstall.sh | bash\n```\n\n## Mandatory workflow\n\nFollow these phases in order. Do NOT skip ahead. Authentication is handled just-in-time — only when a chosen action actually needs it. Do NOT probe auth before the user has declared an intent.\n\n```\nResume        → Check .atx\u002Fcontext.json\nIntent        → Ask user what they want to do\nDiscovery     → Scan workspace + query available agents\nScope         → User selects what to modernize (GATE 1)\nAssessment    → Run workload assessment (NOT optional)\nRequirements  → Draft from assessment report\nApproval      → User approves requirements (GATE 2)\nTasks         → Generate tasks.md\nExecute       → Run transforms, monitor, review diffs\n```\n\n**Discovery finds opportunities. Assessment produces detailed findings. Requirements come from the assessment — NOT from discovery.**\n\nYou MUST NOT create requirements without an assessment report.\nYou MUST NOT start execution without requirements.md and tasks.md.\n\n## Resuming a prior session\n\nCheck for `.atx\u002Fcontext.json` (workspace-relative). NEVER read `~\u002F.aws\u002Fatx\u002Fkiro-power-context.json`.\n\n**This check is an internal bookkeeping operation. The user must never see it happen.** Do not announce the check, do not narrate what you are doing. No phrases like \"checking for prior sessions\", \"let me check\", \"check for a prior session\", \"context file\". On a fresh install, the first visible output must be the intent question — no preamble of any kind.\n\n- **No context found:** Proceed directly to intent. Produce no user-visible output for this step.\n- **Context found:** If the context has an active job (`assessment.jobId` or entries in `execution.activeJobIds`), try to refresh live state from the service, but do so invisibly:\n  - **Check auth first** (no-auth-required). If sign-in is NOT configured, skip the refresh entirely — do not attempt service calls. Use local context only.\n  - **If sign-in is configured**, fetch each resource your resume message depends on — at minimum the job itself and all pending user tasks. Surface every pending task to the user; do not cherry-pick one and omit the others. `BLOCKING` HITL tasks hold up progress even when the job status is active; `NON_BLOCKING` tasks still need attention but don't stall the job. Name every pending task; flag blocking ones. Don't infer one resource from another.\n  - **If any call fails** for any reason, silently fall back to local context. **Do NOT reveal your reasoning about the refresh to the user** — no \"sign-in isn't configured so I'll skip\", no \"the service isn't reachable\". The user should see only the resume message. Do NOT demand auth or block the flow.\n\n  Then tell the user about their prior session. Frame the offer explicitly as a **continuation** of that same session — not a new one. The message should make clear:\n  - This is the specific session they previously worked on. Mention the phase reached, workspace\u002Fjob identifiers if relevant.\n  - **Refresh succeeded** → speak in present tense about live state (\"your assessment job is running\", \"I need your input on X to continue\"). If there is a pending HITL task, surface it — don't bury it under \"your job is running.\"\n  - **Refresh failed or was skipped** → use prior-session framing: \"last time\", \"when you paused\", \"previously\", \"your last session had finished assessment.\" Do NOT present-tense claims about job state — local context may be stale. Offer sign-in as the path to current status (\"sign in to see the latest status\"), not as a gate.\n  - **Resume** = continue where you left off, reusing the existing assessment report, workspace, and prior progress.\n  - **Start fresh** = discard the prior session (local artifacts deleted) and begin a brand-new migration.\n\n  Use language like \"continue where you left off\" or \"pick up from where you stopped\" — not ambiguous phrasing like \"start a similar session.\" If user chooses start fresh, delete `.atx\u002Fcontext.json`, `.atx\u002Fdiscovery.json`, `.atx\u002Fassessment-report\u002F`, and `.atx\u002Fspecs\u002F`, then proceed to intent. Otherwise follow the resume logic in [workflow reference](references\u002Fworkflow.md).\n\n## Determining user intent\n\n**If Step A\u002FB routed the request to continuous modernization, skip this entire section.** continuous modernization has its own self-contained onboarding flow — hand off directly to [continuous-modernization-guide](references\u002Fcontinuous-modernization-guide.md). Its own first prompt (Mode selection: Local vs. AWS Infrastructure) is the user's first visible question. Do NOT show the generic intent menu first, and do NOT mix in non-continuous modernization options like \"Browse My Jobs\" or \"Start a Specific Transform\" — those are AWS Transform top-level capabilities, not continuous modernization features.\n\nFor every other route — VMware, SQL, Mainframe, and .NET (modernize or assessment-for-modernization) — use the generic intent menu below. The menu's options (Discover Workspace, Browse Jobs, Start Specific Transform, Analyze for findings) are how those workloads enter the standard MANDATORY workflow's Discovery → Scope → Assessment phases.\n\n### Generic intent menu\n\nAsk the user: \"What would you like to focus on?\" The first user-visible action in this phase is the question — no auth-probing tool calls precede it, no auth lecture precedes it.\n\nWith projects: [Discover This Workspace] [Browse My Jobs] [Start a Specific Transform] [Analyze for findings]\nNo projects: [Browse My Jobs] [Open a Project Folder] [Start from Scratch] [Analyze for findings]\n\n**Custom vs continuous modernization routing.** When the user's intent is clear, route to the correct skill set\nusing the decision table in [continuous-modernization reference](references\u002Fcontinuous-modernization.md). Key rule: named transformation AND no prior continuous modernization findings → Custom. Analysis\u002Freporting\u002Fremediation of existing findings → continuous modernization. When in doubt → continuous modernization.\n\n**Just-in-time auth.** Once the user picks an intent, the next tool that action needs may require auth. If so, prompt for auth then, framed around the action the user just chose (\"to browse your jobs, sign in to AWS Transform\"). Which auth each MCP tool needs is reported by the MCP server — read it from the tool's description, `get_status`, or the error the tool returns. CLI transforms use AWS credentials only — do NOT prompt for sign-in for CLI-only intents, even when sign-in is unconfigured. If the user picks something that needs no service call (e.g., \"Open a Project Folder\"), do not probe auth.\n\nSee [auth reference](references\u002Fauth.md) for the MCP-vs-CLI auth split and how to present sign-in options.\n\n## Discovery\n\nFast scan (~10 sec). Three things happen in parallel:\n\n1. **Scan the workspace** — detect languages, frameworks, file types, and dependencies present in the project.\n2. **Query available agents** — call `list_resources` with `resource: \"agents\"` (MCP). Skip if sign-in is not configured or the user's intent is CLI-only. This is a paginated API — fetch all pages to get the complete set. The results contain two levels:\n   - **Orchestrator agents** — top-level agents you create jobs with. Each orchestrator may have sub-agents that provide deeper workload-specific capabilities.\n   - **Sub-agents** — invoked through their orchestrator, not directly. They represent specialized skills within a workload type.\n   - Some agents may not belong to a known orchestrator — treat these as standalone capabilities.\n3. **List available transformation definitions** — call `atx custom def list` (CLI) to get the current set and what they transform. Skip if CLI is not available or the user's intent is MCP-only.\n\nFor the \"Discover This Workspace\" intent, Discovery is where sign-in is first required (other intents like \"Browse My Jobs\" need sign-in even earlier, per the just-in-time rule — handle those there). If `list_resources` returns NOT_CONFIGURED, prompt the user to sign in for the auth system needed — do not demand both.\n\nThen **match** workspace signals against orchestrator capabilities and available transformation definitions. Before selecting an orchestratorAgent for any workload, read the matched workload's reference file — it may specify the exact agent to use. Save the matched results to `.atx\u002Fdiscovery.json` — include the orchestrator → sub-agent hierarchy so later steps know what deeper capabilities are available.\n\nSee [workflow reference](references\u002Fworkflow.md) for the workspace scanning framework.\n\n**Discovery is NOT assessment.** Discovery identifies opportunities and matches them to available agents. Assessment produces the detailed findings.\n\n## Scoping (GATE 1)\n\n**For each matched workload type, read ALL reference files with its prefix (e.g., [dotnet](references\u002Fdotnet.md)).** These contain the workload's capabilities, workflow, agent details, example requirements, and known limitations. The file prefix comes from the agent match in Discovery — not from a hardcoded list.\n\nShow migration table, then let the user select with multiSelect:\n\n```\n| Risk | Why | Component | Current | Target | AWS Target | Recommended Approach |\n```\n\nAlways explain risk in plain language in the \"Why\" column — use the user-facing phrases from the Risk Classification table in [workflow reference](references\u002Fworkflow.md). Never show a bare HIGH\u002FMED\u002FLOW label without explanation.\n\nUser selects what to modernize.\n\n## Assessment\n\n**This is NOT optional. Run the workload's assessment BEFORE creating requirements.**\n\nTell the user: \"I'll assess your workload. The assessment report drives the migration plan.\"\n\n**How assessment runs depends on the workload's reference files.** Each workload type defines its own assessment approach — the agent to use, the objective format, and how to collect results. Consult the matched workload's reference files for specifics.\n\nGeneral pattern for agent-based assessment:\n\n1. **Confirm the plan** — tell the user what you will do (create workspace, create job with which agent, what the objective is). WAIT for approval before calling any tools.\n2. Create\u002Fselect workspace\n3. Create job with a **clear objective** — the workload's reference files define what a good objective looks like\n4. Start the job (already started by `create_job`; use `control_job` to restart if stopped)\n5. Send a **detailed follow-up message** with project specifics\n6. **Ask before uploading** — ask how the user wants to share source code. WAIT. Then upload with `categoryType: \"CUSTOMER_INPUT\"`.\n7. Handle agent requests (checkpoints, decisions) — always present to user, WAIT for user response\n8. When assessment completes, download the report: `get_resource resource=\"artifact\"`\n9. Save report to `.atx\u002Fassessment-report\u002F`\n\n**Rule: NEVER batch workspace creation, job creation, and uploads into a single turn without user confirmation at each decision point.**\n\nUse the orchestrator agent or transformation definition identified during Discovery. The match comes from `list_resources` (with `resource: \"agents\"`) and `atx custom def list`, not a hardcoded mapping. When creating a job, specify the orchestrator — sub-agents are invoked by the orchestrator as needed.\n\nUpdate `.atx\u002Fcontext.json` with `phase: \"assessed\"`, workspace ID, job ID.\n\n## Requirements (from assessment report)\n\nNow create `.atx\u002Fspecs\u002Frequirements.md` using the **assessment report** — NOT discovery findings.\n\n- Read `.atx\u002Fassessment-report\u002F` for detailed findings\n- Load workload reference files for context\n- Draft requirements grounded in the assessment (specific blockers, LOC, complexity, migration paths)\n- Each requirement says WHO handles it: AWS Transform CLI \u002F Managed Agents \u002F IDE\n- Multi-module: group by module with Module Overview table\n- See [workflow reference](references\u002Fworkflow.md) for format\n\n**Do NOT create tasks.md yet.**\n\nShow requirements summary and let the user choose: [Looks Good] [Edit] [Add Component]\n\n## Approval (GATE 2)\n\nAsk the user: \"Requirements finalized. Ready to create the execution plan?\"\n[Create Plan] [Edit More]\n\n## Task generation\n\nGenerate `tasks.md` from approved requirements:\n\n- Module Status table + per-module sections\n- Sized: max 100 files\u002Ftask\n- Parallel groups verified\n- Review-diffs after every code change\n- See [workflow reference](references\u002Fworkflow.md) for format\n\nPresent options: [Start Execution] [Review Tasks] [Modify]\n\n## Execution\n\nSee [workflow reference](references\u002Fworkflow.md) for full details.\n\n**How execution runs depends on the workload's reference files.** Each workload type defines its own execution tooling — which agent or CLI command to use, how to parallelize, and how to collect results. Consult the matched workload's reference files.\n\nGeneral pattern for agent-based execution:\n\nWhen creating new jobs, always:\n\n1. **Clear objective** in `create_job` — what to transform, from what, to what\n2. **Detailed follow-up message** via `send_message` — project specifics, discovery findings, blockers\n3. **Upload artifacts** if agent needs code — ask user first, `categoryType: \"CUSTOMER_INPUT\"`\n\n### Every agent request → user decides (NEVER auto-handle)\n\nWhen the AWS Transform agent asks for input, needs files, or hits a checkpoint:\n\n1. Read the task\u002Fmessage\n2. Present to user\n3. WAIT for user response\n4. Relay user's decision back to agent\n\n### Uploading artifacts to agents\n\nAlways use `categoryType: \"CUSTOMER_INPUT\"` when uploading files to an agent:\n\n```python\nupload_artifact(\n  workspaceId=\"...\", jobId=\"...\",\n  content=\"\u002Fpath\u002Fto\u002Fsource.zip\",\n  fileType=\"ZIP\",\n  categoryType=\"CUSTOMER_INPUT\"\n)\n```\n\n| categoryType      | When to Use                                               |\n| ----------------- | --------------------------------------------------------- |\n| `CUSTOMER_INPUT`  | Uploading files TO the agent (source code, configs, data) |\n| `CUSTOMER_OUTPUT` | Downloading files FROM the agent (reports, migrated code) |\n| `HITL_FROM_USER`  | User responses to agent HITL tasks                        |\n\nSee [workflow reference](references\u002Fworkflow.md) for agent request handling patterns.\n\n### Progress\n\nReview diffs after every code change. User must approve.\nUpdate tasks.md checkboxes + `.atx\u002Fcontext.json` after every step.\n\n---\n\n## Context persistence (.atx\u002Fcontext.json)\n\nSave `.atx\u002Fcontext.json` IMMEDIATELY after completing each phase — before presenting results to the user. Every phase transition must have a context save between them. Top-level keys: `phase`, `discovery`, `assessment`, `spec`, `workStyle`, `execution`, `updatedAt`. See [workflow reference](references\u002Fworkflow.md) for the full schema.\n\nResume: read `phase`, pick up from that phase.\n\n---\n\n## Constraints\n\n- MUST use product, capability, and step names exactly as defined in this document. Never paraphrase or invent terminology. When describing this skill's capabilities, use: \"Migrate, modernize, and upgrade codebases — .NET, mainframe COBOL, VMware, databases, and language\u002FSDK upgrades — using AWS Transform CLI and Managed Agents, directly from your IDE.\"\n- MUST present user choices as an explicit selectable list — never bury options in prose or proceed on an inferred answer\n- MUST run CLI commands in background — never block the conversation\n- MUST discover agents dynamically via `list_resources` with `resource: \"agents\"` (paginated) — do not hardcode agent names\n- MUST create jobs with orchestrator agents — sub-agents are invoked by the orchestrator, not directly\n- MUST refer to resources by name, not ID. When referencing a workspace, job, agent, or artifact in user-facing messages, use its human-readable name. Never surface raw UUIDs in prose. If a resource has no name, use a descriptive phrase (\"your .NET modernization job\") rather than the ID.\n- MUST NOT expose internal mechanics to the user — do not name tools (get_status, list_resources), do not cite step numbers, do not reference files you are reading, and do not narrate what you are about to do. Just do it silently and present the outcome in user terms.\n- MUST NOT mix workflow descriptions with actual questions in the same numbered list, and never use count language like \"two questions\" when some items are informational steps rather than questions. Keep what-I-will-do separate from what-I-need-from-you.\n- MUST NOT frame HITL checkpoints, agent questions, or pending decisions as coming from \"the web app\", \"the webapp\", \"the web UI\", or a third-party \"the agent is asking \u002F the agent needs \u002F the agent wants\". The user is working with you in the IDE — you own the interaction. Present every checkpoint as your own first-person request, not a relayed message from elsewhere. **Wrong:** \"The web app is asking how you want to deploy the landing zone.\" \u002F \"The agent is now asking about the replication subnet configuration.\" **Right:** \"The next step is to choose how to deploy the landing zone.\" \u002F \"I need the replication subnet configuration to continue.\"\n- MUST NOT explain what this skill does\n- MUST NOT create requirements from discovery — wait for assessment\n- MUST NOT skip from discovery to execution\n- MUST NOT modify code, upgrade dependencies, or run analysis manually — always use AWS Transform tooling\n- MUST NOT probe `--help` to figure out a CLI invocation that the reference files already document. The capability-specific reference files in `references\u002F` (e.g. `continuous-modernization-source.md`, `continuous-modernization-analysis.md`, `continuous-modernization-remediation.md`, `custom-cli-reference.md`) contain the canonical `atx ct …` and `atx custom …` commands with every required flag and example invocations — read the matching file and lift the command verbatim. The orchestrating files (`continuous-modernization-guide.md`, `continuous-modernization-setup.md`) explicitly point at them (\"Use the `\u002Fsource` skill for the exact commands\"). `--help` is a fallback used ONLY when (a) no reference file covers the capability, or (b) a documented command demonstrably fails because the installed CLI version diverges from the reference. Treat `--help` probes the user can see as a signal that the agent didn't read its own skill — that is the failure mode this rule prevents.\n- MUST NOT make decisions on behalf of the user\n- MUST NOT editorialize or use subjective language — no \"interesting\", \"fascinating\", \"notably\", \"impressive\", \"remarkable\". State findings as facts.\n- MUST NOT prompt for authentication before the user has declared an intent. Auth prompts come from the tool a chosen action needs, framed around that action.\n- MUST NOT overclaim freshness. If you did NOT fetch a resource this turn, lead with \"last I checked\" (past tense throughout) and offer to refresh. Never promise proactive surfacing (\"I'll let you know when…\") unless actively polling — make the reactive model explicit.\n- MUST NOT infer one resource's state from another — each MCP resource (job, tasks, artifacts) is its own source of truth. A job in an active state does NOT imply no pending user tasks. Fetch each resource directly when relevant. See [workflow reference](references\u002Fworkflow.md).\n- MUST NOT mix unrelated transformation goals in the same chat without warning. On every shift to a different goal, suggest the user start a new chat session (they start it themselves). Keep re-offers terse. If the user declines, proceed to answer their question about the other job — do not refuse or redirect back to the original goal. Just avoid mixing cached state (e.g., don't apply VMware findings to the .NET question).\n- MUST store state in `.atx\u002Fcontext.json`\n\n---\n\n## Reference\n\n### Core\n\n| Topic                                                                   | File                                             |\n| ----------------------------------------------------------------------- | ------------------------------------------------ |\n| Authentication (sign-in, AWS credentials, CLI credentials, errors)      | [references\u002Fauth.md](references\u002Fauth.md)         |\n| Tools (MCP tools, CLI commands, connectors, HITL, troubleshooting)      | [references\u002Ftools.md](references\u002Ftools.md)       |\n| Workflow (discovery, transforms, execution, planning, context, display) | [references\u002Fworkflow.md](references\u002Fworkflow.md) |\n\n### Workload Types\n\n| Workload                 | Files                                     |\n| ------------------------ | ----------------------------------------- |\n| .NET                     | `references\u002Fdotnet*.md`                   |\n| SQL\u002FDatabase             | `references\u002Fsql*.md`                      |\n| Mainframe                | `references\u002Fmainframe*.md`                |\n| VMware                   | `references\u002Fvmware*.md`                   |\n| continuous modernization | `references\u002Fcontinuous-modernization*.md` |\n\nEach workload type has a root reference file with its capabilities, workflow, and agent details. Additional files with the same prefix provide deeper guidance (e.g., `continuous-modernization-setup.md`, `continuous-modernization-discovery.md`).\n",{"data":46,"body":47},{"name":4,"description":6},{"type":48,"children":49},"root",[50,58,65,75,82,154,160,165,340,346,358,370,405,411,870,888,894,904,930,938,966,971,975,981,986,992,1005,1206,1211,1248,1254,1259,1268,1276,1281,1287,1307,1317,1512,1518,1536,1541,1547,1552,1603,1620,1638,1651,1657,1662,1746,1758,1777,1787,1797,1803,1821,1826,1835,1846,1851,1857,1865,1870,1880,1885,1991,1999,2025,2044,2050,2070,2115,2123,2145,2151,2167,2173,2186,2218,2240,2246,2256,2266,2271,2276,2329,2335,2340,2363,2369,2381,2438,2511,2521,2527,2539,2542,2548,2613,2625,2628,2634,2876,2879,2885,2891,2959,2965,3068,3086],{"type":51,"tag":52,"props":53,"children":54},"element","h1",{"id":4},[55],{"type":56,"value":57},"text","AWS Transform",{"type":51,"tag":59,"props":60,"children":62},"h2",{"id":61},"critical-route-before-anything-else",[63],{"type":56,"value":64},"CRITICAL: Route Before Anything Else",{"type":51,"tag":66,"props":67,"children":68},"p",{},[69],{"type":51,"tag":70,"props":71,"children":72},"strong",{},[73],{"type":56,"value":74},"STOP. Before reading files, analyzing code, or starting any workflow, identify the workload first, then route.",{"type":51,"tag":76,"props":77,"children":79},"h3",{"id":78},"step-a-identify-the-workload",[80],{"type":56,"value":81},"Step A: Identify the workload",{"type":51,"tag":66,"props":83,"children":84},{},[85,87,94,96,102,103,109,111,117,118,124,125,131,132,138,139,145,147,152],{"type":56,"value":86},"Look for an explicit workload signal in the user's request — a named technology (",{"type":51,"tag":88,"props":89,"children":91},"code",{"className":90},[],[92],{"type":56,"value":93},".NET",{"type":56,"value":95},", ",{"type":51,"tag":88,"props":97,"children":99},{"className":98},[],[100],{"type":56,"value":101},"VMware",{"type":56,"value":95},{"type":51,"tag":88,"props":104,"children":106},{"className":105},[],[107],{"type":56,"value":108},"SQL Server",{"type":56,"value":110},"\u002F",{"type":51,"tag":88,"props":112,"children":114},{"className":113},[],[115],{"type":56,"value":116},"Aurora",{"type":56,"value":110},{"type":51,"tag":88,"props":119,"children":121},{"className":120},[],[122],{"type":56,"value":123},"Oracle",{"type":56,"value":110},{"type":51,"tag":88,"props":126,"children":128},{"className":127},[],[129],{"type":56,"value":130},"MySQL",{"type":56,"value":95},{"type":51,"tag":88,"props":133,"children":135},{"className":134},[],[136],{"type":56,"value":137},"mainframe",{"type":56,"value":110},{"type":51,"tag":88,"props":140,"children":142},{"className":141},[],[143],{"type":56,"value":144},"COBOL",{"type":56,"value":146},"), workload-specific terminology (Hyper-V, EC2 rehost, stored procs, CICS, JCL), or file\u002Fproject signals already in the conversation. If no signal is present, treat the request as ",{"type":51,"tag":70,"props":148,"children":149},{},[150],{"type":56,"value":151},"workload-unspecified",{"type":56,"value":153},".",{"type":51,"tag":76,"props":155,"children":157},{"id":156},"step-b-apply-workload-specific-routing",[158],{"type":56,"value":159},"Step B: Apply workload-specific routing",{"type":51,"tag":66,"props":161,"children":162},{},[163],{"type":56,"value":164},"Workload-specific rules ALWAYS win over the keyword list in Step C. Do not let \"analysis\" or \"tech debt\" phrasing override these.",{"type":51,"tag":166,"props":167,"children":168},"table",{},[169,188],{"type":51,"tag":170,"props":171,"children":172},"thead",{},[173],{"type":51,"tag":174,"props":175,"children":176},"tr",{},[177,183],{"type":51,"tag":178,"props":179,"children":180},"th",{},[181],{"type":56,"value":182},"Workload",{"type":51,"tag":178,"props":184,"children":185},{},[186],{"type":56,"value":187},"Route",{"type":51,"tag":189,"props":190,"children":191},"tbody",{},[192,237,267,296,324],{"type":51,"tag":174,"props":193,"children":194},{},[195,203],{"type":51,"tag":196,"props":197,"children":198},"td",{},[199],{"type":51,"tag":70,"props":200,"children":201},{},[202],{"type":56,"value":93},{"type":51,"tag":196,"props":204,"children":205},{},[206,208,214,216,221,223,228,230,235],{"type":56,"value":207},"Ask the user via ",{"type":51,"tag":88,"props":209,"children":211},{"className":210},[],[212],{"type":56,"value":213},"AskUserQuestion",{"type":56,"value":215},": \"For your .NET work, are you looking to ",{"type":51,"tag":70,"props":217,"children":218},{},[219],{"type":56,"value":220},"modernize to .NET 8\u002F10",{"type":56,"value":222}," (port the code, change targets), ",{"type":51,"tag":70,"props":224,"children":225},{},[226],{"type":56,"value":227},"run an assessment for modernization",{"type":56,"value":229}," (scope the work, identify blockers, plan the port), or ",{"type":51,"tag":70,"props":231,"children":232},{},[233],{"type":56,"value":234},"analyze your repos for tech debt, security vulnerabilities, or CVEs",{"type":56,"value":236},"?\" → \"Modernize\" or \"Assessment for modernization\" → proceed to the Overview section (the .NET workload handles both). → \"Analyze for tech debt \u002F security \u002F CVEs\" → route to continuous modernization (see Step D).",{"type":51,"tag":174,"props":238,"children":239},{},[240,247],{"type":51,"tag":196,"props":241,"children":242},{},[243],{"type":51,"tag":70,"props":244,"children":245},{},[246],{"type":56,"value":101},{"type":51,"tag":196,"props":248,"children":249},{},[250,252,257,259,266],{"type":56,"value":251},"Proceed to the Overview section. ",{"type":51,"tag":70,"props":253,"children":254},{},[255],{"type":56,"value":256},"NEVER route VMware requests to continuous modernization",{"type":56,"value":258}," — even if the user uses words like \"analyze\", \"assess\", \"find issues\". VMware assessment is handled by the VMware workload agent, see ",{"type":51,"tag":260,"props":261,"children":263},"a",{"href":262},"references\u002Fvmware.md",[264],{"type":56,"value":265},"vmware",{"type":56,"value":153},{"type":51,"tag":174,"props":268,"children":269},{},[270,278],{"type":51,"tag":196,"props":271,"children":272},{},[273],{"type":51,"tag":70,"props":274,"children":275},{},[276],{"type":56,"value":277},"SQL \u002F Database",{"type":51,"tag":196,"props":279,"children":280},{},[281,282,287,289,295],{"type":56,"value":251},{"type":51,"tag":70,"props":283,"children":284},{},[285],{"type":56,"value":286},"NEVER route SQL\u002Fdatabase requests to continuous modernization",{"type":56,"value":288}," — SQL Server, Oracle, MySQL, and Aurora migrations are handled by the SQL workload agent, see ",{"type":51,"tag":260,"props":290,"children":292},{"href":291},"references\u002Fsql.md",[293],{"type":56,"value":294},"sql",{"type":56,"value":153},{"type":51,"tag":174,"props":297,"children":298},{},[299,307],{"type":51,"tag":196,"props":300,"children":301},{},[302],{"type":51,"tag":70,"props":303,"children":304},{},[305],{"type":56,"value":306},"Mainframe \u002F COBOL",{"type":51,"tag":196,"props":308,"children":309},{},[310,311,316,318,323],{"type":56,"value":251},{"type":51,"tag":70,"props":312,"children":313},{},[314],{"type":56,"value":315},"NEVER route mainframe requests to continuous modernization",{"type":56,"value":317}," — COBOL\u002FCICS\u002FJCL transformations are handled by the mainframe workload agent, see ",{"type":51,"tag":260,"props":319,"children":321},{"href":320},"references\u002Fmainframe.md",[322],{"type":56,"value":137},{"type":56,"value":153},{"type":51,"tag":174,"props":325,"children":326},{},[327,335],{"type":51,"tag":196,"props":328,"children":329},{},[330],{"type":51,"tag":70,"props":331,"children":332},{},[333],{"type":56,"value":334},"Workload-unspecified",{"type":51,"tag":196,"props":336,"children":337},{},[338],{"type":56,"value":339},"Continue to Step C.",{"type":51,"tag":76,"props":341,"children":343},{"id":342},"step-c-keyword-based-routing-workload-unspecified-only",[344],{"type":56,"value":345},"Step C: Keyword-based routing (workload-unspecified only)",{"type":51,"tag":66,"props":347,"children":348},{},[349,351,356],{"type":56,"value":350},"This list applies ",{"type":51,"tag":70,"props":352,"children":353},{},[354],{"type":56,"value":355},"only",{"type":56,"value":357}," when the user has not named a workload. If any of the workload rules in Step B matched, you have already routed — do not re-evaluate against this list.",{"type":51,"tag":66,"props":359,"children":360},{},[361,363,368],{"type":56,"value":362},"If the user's workload-unspecified request matches any of these intents, route to ",{"type":51,"tag":70,"props":364,"children":365},{},[366],{"type":56,"value":367},"continuous modernization",{"type":56,"value":369}," — do NOT scan files yourself:",{"type":51,"tag":371,"props":372,"children":373},"ul",{},[374,380,385,390,395,400],{"type":51,"tag":375,"props":376,"children":377},"li",{},[378],{"type":56,"value":379},"\"analysis\", \"analyze\", \"find issues\", \"what's wrong\", \"tech debt\", \"security vulnerabilities\", \"CVEs\"",{"type":51,"tag":375,"props":381,"children":382},{},[383],{"type":56,"value":384},"\"what should I fix\", \"where do I start\"",{"type":51,"tag":375,"props":386,"children":387},{},[388],{"type":56,"value":389},"\"report\", \"dashboard\", \"compare\", \"trend\"",{"type":51,"tag":375,"props":391,"children":392},{},[393],{"type":56,"value":394},"\"remediate findings\", \"remediation\", \"fix what you found\"",{"type":51,"tag":375,"props":396,"children":397},{},[398],{"type":56,"value":399},"\"custom transform\"",{"type":51,"tag":375,"props":401,"children":402},{},[403],{"type":56,"value":404},"\"continuous modernization\", \"AWS Transform - continuous modernization\"",{"type":51,"tag":76,"props":406,"children":408},{"id":407},"step-d-for-continuous-modernization-requests",[409],{"type":56,"value":410},"Step D: For continuous modernization requests",{"type":51,"tag":412,"props":413,"children":414},"ol",{},[415,569,603,688,729,753,813,841],{"type":51,"tag":375,"props":416,"children":417},{},[418,423,425,451,455,457,460,465,467],{"type":51,"tag":70,"props":419,"children":420},{},[421],{"type":56,"value":422},"First-response telemetry notice (once per session).",{"type":56,"value":424}," The first time a request routes here in this session, ALWAYS prepend this line exactly to your reply to the user before doing anything else:",{"type":51,"tag":426,"props":427,"children":428},"blockquote",{},[429],{"type":51,"tag":66,"props":430,"children":431},{},[432,434,440,442,450],{"type":56,"value":433},"Note: this skill and the continuous modernization CLI, (",{"type":51,"tag":88,"props":435,"children":437},{"className":436},[],[438],{"type":56,"value":439},"atx ct",{"type":56,"value":441},"), collect usage telemetry by default during transformation execution. The telemetry consists of different data points, such as, the IDE name (for example, VS Code or Kiro), the AI agent name (for example, Claude Code or OpenAI Codex), and the execution mode (local or remote). This data is used by AWS Transform to prioritize compatibility testing, as well as latency and reliability. To opt out, see ",{"type":51,"tag":260,"props":443,"children":447},{"href":444,"rel":445},"https:\u002F\u002Fdocs.aws.amazon.com\u002Ftransform\u002Flatest\u002Fuserguide\u002Ftransform-usage-telemetry.html",[446],"nofollow",[448],{"type":56,"value":449},"here",{"type":56,"value":153},{"type":51,"tag":452,"props":453,"children":454},"br",{},[],{"type":56,"value":456},"Show it exactly once per session. Do NOT repeat it on subsequent continuous modernization requests in the same session.",{"type":51,"tag":452,"props":458,"children":459},{},[],{"type":51,"tag":70,"props":461,"children":462},{},[463],{"type":56,"value":464},"Telemetry opt-out.",{"type":56,"value":466}," If the user explicitly asks to disable telemetry during the chat session:",{"type":51,"tag":412,"props":468,"children":469},{},[470,483],{"type":51,"tag":375,"props":471,"children":472},{},[473,475,481],{"type":56,"value":474},"Omit ",{"type":51,"tag":88,"props":476,"children":478},{"className":477},[],[479],{"type":56,"value":480},"--telemetry",{"type":56,"value":482}," for the rest of the session (see each sub-skill's Telemetry section for the flag format).",{"type":51,"tag":375,"props":484,"children":485},{},[486,488,494,496,501,503,508,510,516,517,523,525,531,532,538,540,546,548,553,555,561,563],{"type":56,"value":487},"Prepend ",{"type":51,"tag":88,"props":489,"children":491},{"className":490},[],[492],{"type":56,"value":493},"ATX_DISABLE_TELEMETRY=true",{"type":56,"value":495}," inline on ",{"type":51,"tag":70,"props":497,"children":498},{},[499],{"type":56,"value":500},"every",{"type":56,"value":502}," ",{"type":51,"tag":88,"props":504,"children":506},{"className":505},[],[507],{"type":56,"value":439},{"type":56,"value":509}," command for the rest of the session — not only ",{"type":51,"tag":88,"props":511,"children":513},{"className":512},[],[514],{"type":56,"value":515},"analysis",{"type":56,"value":110},{"type":51,"tag":88,"props":518,"children":520},{"className":519},[],[521],{"type":56,"value":522},"remediation",{"type":56,"value":524},", but also setup and diagnostic commands like ",{"type":51,"tag":88,"props":526,"children":528},{"className":527},[],[529],{"type":56,"value":530},"atx ct status",{"type":56,"value":95},{"type":51,"tag":88,"props":533,"children":535},{"className":534},[],[536],{"type":56,"value":537},"atx ct source ...",{"type":56,"value":539},", and ",{"type":51,"tag":88,"props":541,"children":543},{"className":542},[],[544],{"type":56,"value":545},"atx ct setup ...",{"type":56,"value":547},". The prefix must be on the same command line as the ",{"type":51,"tag":88,"props":549,"children":551},{"className":550},[],[552],{"type":56,"value":439},{"type":56,"value":554}," invocation (including inside compound commands, e.g. ",{"type":51,"tag":88,"props":556,"children":558},{"className":557},[],[559],{"type":56,"value":560},"which atx && ATX_DISABLE_TELEMETRY=true atx ct ...",{"type":56,"value":562},"), because the shell does not persist env vars between invocations: ",{"type":51,"tag":88,"props":564,"children":566},{"className":565},[],[567],{"type":56,"value":568},"ATX_DISABLE_TELEMETRY=true atx ct ...",{"type":51,"tag":375,"props":570,"children":571},{},[572,574,579,581,587,589,594,596,601],{"type":56,"value":573},"When invoking AWS Transform - continuous modernization (continuous modernization) commands, use ",{"type":51,"tag":88,"props":575,"children":577},{"className":576},[],[578],{"type":56,"value":439},{"type":56,"value":580}," (with a space). ",{"type":51,"tag":88,"props":582,"children":584},{"className":583},[],[585],{"type":56,"value":586},"atxct",{"type":56,"value":588}," (no space) is being deprecated; it remains functionally equivalent and hits the same backend, so an ",{"type":51,"tag":88,"props":590,"children":592},{"className":591},[],[593],{"type":56,"value":586},{"type":56,"value":595}," invocation in the user's environment is not itself a problem. Do not warn the user about ",{"type":51,"tag":88,"props":597,"children":599},{"className":598},[],[600],{"type":56,"value":586},{"type":56,"value":602}," and do not treat its presence as a failure cause.",{"type":51,"tag":375,"props":604,"children":605},{},[606,611,613,625,628,630],{"type":51,"tag":70,"props":607,"children":608},{},[609],{"type":56,"value":610},"Verify local CLI dispatch before checking versions or AWS configuration.",{"type":56,"value":612}," Run this without redirecting stderr:",{"type":51,"tag":614,"props":615,"children":619},"pre",{"className":616,"code":618,"language":56},[617],"language-text","atx ct --version\n",[620],{"type":51,"tag":88,"props":621,"children":623},{"__ignoreMap":622},"",[624],{"type":56,"value":618},{"type":51,"tag":452,"props":626,"children":627},{},[],{"type":56,"value":629},"Classify failures before continuing:",{"type":51,"tag":371,"props":631,"children":632},{},[633,654,683],{"type":51,"tag":375,"props":634,"children":635},{},[636,638,644,646,652],{"type":56,"value":637},"If the shell reports ",{"type":51,"tag":88,"props":639,"children":641},{"className":640},[],[642],{"type":56,"value":643},"atx: command not found",{"type":56,"value":645},", install the AWS Transform CLI: ",{"type":51,"tag":88,"props":647,"children":649},{"className":648},[],[650],{"type":56,"value":651},"curl -fsSL https:\u002F\u002Ftransform-cli.awsstatic.com\u002Finstall.sh | bash",{"type":56,"value":653},", then restart the shell or source its profile.",{"type":51,"tag":375,"props":655,"children":656},{},[657,659,665,667,673,675,681],{"type":56,"value":658},"If an ",{"type":51,"tag":88,"props":660,"children":662},{"className":661},[],[663],{"type":56,"value":664},"atx",{"type":56,"value":666}," process runs but reports ",{"type":51,"tag":88,"props":668,"children":670},{"className":669},[],[671],{"type":56,"value":672},"unknown command 'ct'",{"type":56,"value":674},", do NOT reinstall blindly or investigate AWS credentials\u002Fregion. Follow the ",{"type":51,"tag":260,"props":676,"children":678},{"href":677},"references\u002Fcontinuous-modernization-troubleshooting.md#atx-ct-reports-unknown-command-ct",[679],{"type":56,"value":680},"command-resolution troubleshooting",{"type":56,"value":682}," first.",{"type":51,"tag":375,"props":684,"children":685},{},[686],{"type":56,"value":687},"If the command succeeds, continue with the version comparison.",{"type":51,"tag":375,"props":689,"children":690},{},[691,693,702,705,707,713,715,721,723,728],{"type":56,"value":692},"Check whether the working CLI is up to date:",{"type":51,"tag":614,"props":694,"children":697},{"className":695,"code":696,"language":56},[617],"INSTALLED=$(atx ct --version | head -1); LATEST=$(curl -fsSL \"https:\u002F\u002Ftransform-cli.awsstatic.com\u002Findex.json\" 2>\u002Fdev\u002Fnull | grep -o '\"latest\"[[:space:]]*:[[:space:]]*\"[^\"]*\"' | sed 's\u002F.*\"latest\"[[:space:]]*:[[:space:]]*\"\\([^\"]*\\)\".*\u002F\\1\u002F'); echo \"Installed: ${INSTALLED:-not found}, Latest: ${LATEST:-unknown}\"\n",[698],{"type":51,"tag":88,"props":699,"children":700},{"__ignoreMap":622},[701],{"type":56,"value":696},{"type":51,"tag":452,"props":703,"children":704},{},[],{"type":56,"value":706},"If ",{"type":51,"tag":88,"props":708,"children":710},{"className":709},[],[711],{"type":56,"value":712},"LATEST",{"type":56,"value":714}," is known and newer than ",{"type":51,"tag":88,"props":716,"children":718},{"className":717},[],[719],{"type":56,"value":720},"INSTALLED",{"type":56,"value":722},", update with ",{"type":51,"tag":88,"props":724,"children":726},{"className":725},[],[727],{"type":56,"value":651},{"type":56,"value":653},{"type":51,"tag":375,"props":730,"children":731},{},[732,737,739,748,751],{"type":51,"tag":70,"props":733,"children":734},{},[735],{"type":56,"value":736},"Credential preflight.",{"type":56,"value":738}," Validate AWS credentials before starting any analysis or remediation — at minimum on the first continuous modernization request of the session (new or returning users), and again before any later run in a long session, since credentials can lapse mid-session:",{"type":51,"tag":614,"props":740,"children":743},{"className":741,"code":742,"language":56},[617],"aws sts get-caller-identity\n",[744],{"type":51,"tag":88,"props":745,"children":746},{"__ignoreMap":622},[747],{"type":56,"value":742},{"type":51,"tag":452,"props":749,"children":750},{},[],{"type":56,"value":752},"If it fails or the credentials are expired, refresh them before continuing. Do NOT start any long-running work on expired or soon-to-expire credentials — an analysis started on credentials about to expire can strand the run mid-flight. Run the preflight silently; surface it to the user only if the credentials need refreshing.",{"type":51,"tag":375,"props":754,"children":755},{},[756,758,763,765,801,804,806,811],{"type":56,"value":757},"If local ",{"type":51,"tag":88,"props":759,"children":761},{"className":760},[],[762],{"type":56,"value":439},{"type":56,"value":764}," dispatch succeeded but a later command fails, then check runtime configuration:",{"type":51,"tag":371,"props":766,"children":767},{},[768,779,790],{"type":51,"tag":375,"props":769,"children":770},{},[771,777],{"type":51,"tag":88,"props":772,"children":774},{"className":773},[],[775],{"type":56,"value":776},"AWS_PROFILE",{"type":56,"value":778}," points at a valid account with refreshed credentials",{"type":51,"tag":375,"props":780,"children":781},{},[782,788],{"type":51,"tag":88,"props":783,"children":785},{"className":784},[],[786],{"type":56,"value":787},"AWS_REGION",{"type":56,"value":789}," is set to a supported region",{"type":51,"tag":375,"props":791,"children":792},{},[793,799],{"type":51,"tag":88,"props":794,"children":796},{"className":795},[],[797],{"type":56,"value":798},"ATX_CUSTOM_ENDPOINT",{"type":56,"value":800}," is set in the environment (only if you use a custom endpoint)",{"type":51,"tag":452,"props":802,"children":803},{},[],{"type":56,"value":805},"An ",{"type":51,"tag":88,"props":807,"children":809},{"className":808},[],[810],{"type":56,"value":672},{"type":56,"value":812}," failure is a local command-resolution problem, not an AWS configuration problem; return to Step 3 instead.",{"type":51,"tag":375,"props":814,"children":815},{},[816,818,824,826,832,834,839],{"type":56,"value":817},"Ensure a supported region has been selected (see ",{"type":51,"tag":260,"props":819,"children":821},{"href":820},"references\u002Fcontinuous-modernization-setup.md",[822],{"type":56,"value":823},"continuous-modernization-setup.md",{"type":56,"value":825}," \"Choose your region\") and prefixed inline (",{"type":51,"tag":88,"props":827,"children":829},{"className":828},[],[830],{"type":56,"value":831},"AWS_REGION=$ATX_REGION",{"type":56,"value":833},") on every ",{"type":51,"tag":88,"props":835,"children":837},{"className":836},[],[838],{"type":56,"value":439},{"type":56,"value":840}," command.",{"type":51,"tag":375,"props":842,"children":843},{},[844,846,852,854,860,862,868],{"type":56,"value":845},"Then use the appropriate continuous modernization skill — see ",{"type":51,"tag":260,"props":847,"children":849},{"href":848},"references\u002Fcontinuous-modernization.md",[850],{"type":56,"value":851},"continuous-modernization",{"type":56,"value":853},". Recurring\u002Fscheduled intent (\"weekly scan\", \"every Monday\", \"on a schedule\", \"cron\") routes to ",{"type":51,"tag":260,"props":855,"children":857},{"href":856},"references\u002Fcontinuous-modernization-schedule.md",[858],{"type":56,"value":859},"continuous-modernization-schedule",{"type":56,"value":861},": scheduling is a real, shipped capability (",{"type":51,"tag":88,"props":863,"children":865},{"className":864},[],[866],{"type":56,"value":867},"atx ct schedule create\u002Flist\u002Fget\u002Fenable\u002Fdisable\u002Fdelete",{"type":56,"value":869},") that runs on remote infrastructure ONLY — never claim it doesn't exist, and never offer a local cron\u002Fsystemd\u002Flaunchd entry as a substitute or fallback.",{"type":51,"tag":66,"props":871,"children":872},{},[873,878,880,886],{"type":51,"tag":70,"props":874,"children":875},{},[876],{"type":56,"value":877},"When in doubt for a workload-unspecified request → continuous modernization.",{"type":56,"value":879}," This default applies ONLY after Step B has cleared — VMware, SQL, and mainframe never fall through to continuous modernization regardless of how the question is phrased; .NET only routes to continuous modernization after the user picks \"analyze for tech debt \u002F security \u002F CVEs\" in Step B's intent question (both \"modernize\" and \"assessment for modernization\" stay in the .NET workload). Once routed, do NOT manually read source files to find issues — that's what ",{"type":51,"tag":88,"props":881,"children":883},{"className":882},[],[884],{"type":56,"value":885},"atx ct analysis run",{"type":56,"value":887}," does.",{"type":51,"tag":59,"props":889,"children":891},{"id":890},"critical-never-show-pricing-or-timing-estimates",[892],{"type":56,"value":893},"CRITICAL: Never Show Pricing or Timing Estimates",{"type":51,"tag":66,"props":895,"children":896},{},[897,902],{"type":51,"tag":70,"props":898,"children":899},{},[900],{"type":56,"value":901},"Do NOT quote specific dollar amounts, hourly rates, or time estimates",{"type":56,"value":903}," for AWS resources or analyses. This includes:",{"type":51,"tag":371,"props":905,"children":906},{},[907,920,925],{"type":51,"tag":375,"props":908,"children":909},{},[910,912,918],{"type":56,"value":911},"❌ \"",{"type":51,"tag":913,"props":914,"children":915},"del",{},[916],{"type":56,"value":917},"$0.20\u002Fhr\", \"",{"type":56,"value":919},"$5\u002Fday\", \"$X per analysis\"",{"type":51,"tag":375,"props":921,"children":922},{},[923],{"type":56,"value":924},"❌ \"takes ~30 min\", \"completes in 2-5 hours\", \"~30s startup\"",{"type":51,"tag":375,"props":926,"children":927},{},[928],{"type":56,"value":929},"❌ \"ETA: 30 min – 2 hours\"",{"type":51,"tag":66,"props":931,"children":932},{},[933],{"type":51,"tag":70,"props":934,"children":935},{},[936],{"type":56,"value":937},"Instead:",{"type":51,"tag":371,"props":939,"children":940},{},[941,961],{"type":51,"tag":375,"props":942,"children":943},{},[944,946,952,953,959],{"type":56,"value":945},"For pricing: redirect to ",{"type":51,"tag":260,"props":947,"children":950},{"href":948,"rel":949},"https:\u002F\u002Faws.amazon.com\u002Fec2\u002Fpricing\u002F",[446],[951],{"type":56,"value":948},{"type":56,"value":95},{"type":51,"tag":260,"props":954,"children":957},{"href":955,"rel":956},"https:\u002F\u002Faws.amazon.com\u002Ftransform\u002Fpricing\u002F",[446],[958],{"type":56,"value":955},{"type":56,"value":960},", etc.",{"type":51,"tag":375,"props":962,"children":963},{},[964],{"type":56,"value":965},"If asked directly: \"I can't give specific cost or time estimates — pricing depends on your usage and AWS quotas. Check the AWS pricing pages for current rates.\"",{"type":51,"tag":66,"props":967,"children":968},{},[969],{"type":56,"value":970},"This applies to all responses, all skills, and all situations.",{"type":51,"tag":972,"props":973,"children":974},"hr",{},[],{"type":51,"tag":59,"props":976,"children":978},{"id":977},"overview",[979],{"type":56,"value":980},"Overview",{"type":51,"tag":66,"props":982,"children":983},{},[984],{"type":56,"value":985},"Domain expertise for migrating and modernizing workloads using AWS Transform. Covers .NET Framework to .NET 8\u002F10, mainframe COBOL to Java, VMware to EC2, SQL Server to Aurora PostgreSQL, and custom code transformations (Java, Python, Node.js version upgrades, SDK migrations). Orchestrates assessment, planning, and execution through Managed Agents and AWS Transform CLI with human-in-the-loop checkpoints.",{"type":51,"tag":59,"props":987,"children":989},{"id":988},"prerequisites",[990],{"type":56,"value":991},"Prerequisites",{"type":51,"tag":66,"props":993,"children":994},{},[995,997,1003],{"type":56,"value":996},"This skill requires the AWS Transform MCP server (",{"type":51,"tag":88,"props":998,"children":1000},{"className":999},[],[1001],{"type":56,"value":1002},"aws-transform-mcp",{"type":56,"value":1004},"). Configure it in your agent's MCP settings:",{"type":51,"tag":614,"props":1006,"children":1010},{"className":1007,"code":1008,"language":1009,"meta":622,"style":622},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"mcpServers\": {\n    \"aws-transform-mcp\": {\n      \"command\": \"uvx\",\n      \"args\": [\n        \"awslabs.aws-transform-mcp-server@latest\"\n      ]\n    }\n  }\n}\n","json",[1011],{"type":51,"tag":88,"props":1012,"children":1013},{"__ignoreMap":622},[1014,1026,1056,1082,1125,1151,1170,1179,1188,1197],{"type":51,"tag":1015,"props":1016,"children":1019},"span",{"class":1017,"line":1018},"line",1,[1020],{"type":51,"tag":1015,"props":1021,"children":1023},{"style":1022},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[1024],{"type":56,"value":1025},"{\n",{"type":51,"tag":1015,"props":1027,"children":1029},{"class":1017,"line":1028},2,[1030,1035,1041,1046,1051],{"type":51,"tag":1015,"props":1031,"children":1032},{"style":1022},[1033],{"type":56,"value":1034},"  \"",{"type":51,"tag":1015,"props":1036,"children":1038},{"style":1037},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[1039],{"type":56,"value":1040},"mcpServers",{"type":51,"tag":1015,"props":1042,"children":1043},{"style":1022},[1044],{"type":56,"value":1045},"\"",{"type":51,"tag":1015,"props":1047,"children":1048},{"style":1022},[1049],{"type":56,"value":1050},":",{"type":51,"tag":1015,"props":1052,"children":1053},{"style":1022},[1054],{"type":56,"value":1055}," {\n",{"type":51,"tag":1015,"props":1057,"children":1059},{"class":1017,"line":1058},3,[1060,1065,1070,1074,1078],{"type":51,"tag":1015,"props":1061,"children":1062},{"style":1022},[1063],{"type":56,"value":1064},"    \"",{"type":51,"tag":1015,"props":1066,"children":1068},{"style":1067},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[1069],{"type":56,"value":1002},{"type":51,"tag":1015,"props":1071,"children":1072},{"style":1022},[1073],{"type":56,"value":1045},{"type":51,"tag":1015,"props":1075,"children":1076},{"style":1022},[1077],{"type":56,"value":1050},{"type":51,"tag":1015,"props":1079,"children":1080},{"style":1022},[1081],{"type":56,"value":1055},{"type":51,"tag":1015,"props":1083,"children":1085},{"class":1017,"line":1084},4,[1086,1091,1097,1101,1105,1110,1116,1120],{"type":51,"tag":1015,"props":1087,"children":1088},{"style":1022},[1089],{"type":56,"value":1090},"      \"",{"type":51,"tag":1015,"props":1092,"children":1094},{"style":1093},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[1095],{"type":56,"value":1096},"command",{"type":51,"tag":1015,"props":1098,"children":1099},{"style":1022},[1100],{"type":56,"value":1045},{"type":51,"tag":1015,"props":1102,"children":1103},{"style":1022},[1104],{"type":56,"value":1050},{"type":51,"tag":1015,"props":1106,"children":1107},{"style":1022},[1108],{"type":56,"value":1109}," \"",{"type":51,"tag":1015,"props":1111,"children":1113},{"style":1112},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[1114],{"type":56,"value":1115},"uvx",{"type":51,"tag":1015,"props":1117,"children":1118},{"style":1022},[1119],{"type":56,"value":1045},{"type":51,"tag":1015,"props":1121,"children":1122},{"style":1022},[1123],{"type":56,"value":1124},",\n",{"type":51,"tag":1015,"props":1126,"children":1128},{"class":1017,"line":1127},5,[1129,1133,1138,1142,1146],{"type":51,"tag":1015,"props":1130,"children":1131},{"style":1022},[1132],{"type":56,"value":1090},{"type":51,"tag":1015,"props":1134,"children":1135},{"style":1093},[1136],{"type":56,"value":1137},"args",{"type":51,"tag":1015,"props":1139,"children":1140},{"style":1022},[1141],{"type":56,"value":1045},{"type":51,"tag":1015,"props":1143,"children":1144},{"style":1022},[1145],{"type":56,"value":1050},{"type":51,"tag":1015,"props":1147,"children":1148},{"style":1022},[1149],{"type":56,"value":1150}," [\n",{"type":51,"tag":1015,"props":1152,"children":1154},{"class":1017,"line":1153},6,[1155,1160,1165],{"type":51,"tag":1015,"props":1156,"children":1157},{"style":1022},[1158],{"type":56,"value":1159},"        \"",{"type":51,"tag":1015,"props":1161,"children":1162},{"style":1112},[1163],{"type":56,"value":1164},"awslabs.aws-transform-mcp-server@latest",{"type":51,"tag":1015,"props":1166,"children":1167},{"style":1022},[1168],{"type":56,"value":1169},"\"\n",{"type":51,"tag":1015,"props":1171,"children":1173},{"class":1017,"line":1172},7,[1174],{"type":51,"tag":1015,"props":1175,"children":1176},{"style":1022},[1177],{"type":56,"value":1178},"      ]\n",{"type":51,"tag":1015,"props":1180,"children":1182},{"class":1017,"line":1181},8,[1183],{"type":51,"tag":1015,"props":1184,"children":1185},{"style":1022},[1186],{"type":56,"value":1187},"    }\n",{"type":51,"tag":1015,"props":1189,"children":1191},{"class":1017,"line":1190},9,[1192],{"type":51,"tag":1015,"props":1193,"children":1194},{"style":1022},[1195],{"type":56,"value":1196},"  }\n",{"type":51,"tag":1015,"props":1198,"children":1200},{"class":1017,"line":1199},10,[1201],{"type":51,"tag":1015,"props":1202,"children":1203},{"style":1022},[1204],{"type":56,"value":1205},"}\n",{"type":51,"tag":66,"props":1207,"children":1208},{},[1209],{"type":56,"value":1210},"The AWS Transform CLI is also required for custom transformations. Install via:",{"type":51,"tag":614,"props":1212,"children":1216},{"className":1213,"code":1214,"language":1215,"meta":622,"style":622},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","curl -fsSL https:\u002F\u002Ftransform-cli.awsstatic.com\u002Finstall.sh | bash\n","bash",[1217],{"type":51,"tag":88,"props":1218,"children":1219},{"__ignoreMap":622},[1220],{"type":51,"tag":1015,"props":1221,"children":1222},{"class":1017,"line":1018},[1223,1228,1233,1238,1243],{"type":51,"tag":1015,"props":1224,"children":1225},{"style":1067},[1226],{"type":56,"value":1227},"curl",{"type":51,"tag":1015,"props":1229,"children":1230},{"style":1112},[1231],{"type":56,"value":1232}," -fsSL",{"type":51,"tag":1015,"props":1234,"children":1235},{"style":1112},[1236],{"type":56,"value":1237}," https:\u002F\u002Ftransform-cli.awsstatic.com\u002Finstall.sh",{"type":51,"tag":1015,"props":1239,"children":1240},{"style":1022},[1241],{"type":56,"value":1242}," |",{"type":51,"tag":1015,"props":1244,"children":1245},{"style":1067},[1246],{"type":56,"value":1247}," bash\n",{"type":51,"tag":59,"props":1249,"children":1251},{"id":1250},"mandatory-workflow",[1252],{"type":56,"value":1253},"Mandatory workflow",{"type":51,"tag":66,"props":1255,"children":1256},{},[1257],{"type":56,"value":1258},"Follow these phases in order. Do NOT skip ahead. Authentication is handled just-in-time — only when a chosen action actually needs it. Do NOT probe auth before the user has declared an intent.",{"type":51,"tag":614,"props":1260,"children":1263},{"className":1261,"code":1262,"language":56},[617],"Resume        → Check .atx\u002Fcontext.json\nIntent        → Ask user what they want to do\nDiscovery     → Scan workspace + query available agents\nScope         → User selects what to modernize (GATE 1)\nAssessment    → Run workload assessment (NOT optional)\nRequirements  → Draft from assessment report\nApproval      → User approves requirements (GATE 2)\nTasks         → Generate tasks.md\nExecute       → Run transforms, monitor, review diffs\n",[1264],{"type":51,"tag":88,"props":1265,"children":1266},{"__ignoreMap":622},[1267],{"type":56,"value":1262},{"type":51,"tag":66,"props":1269,"children":1270},{},[1271],{"type":51,"tag":70,"props":1272,"children":1273},{},[1274],{"type":56,"value":1275},"Discovery finds opportunities. Assessment produces detailed findings. Requirements come from the assessment — NOT from discovery.",{"type":51,"tag":66,"props":1277,"children":1278},{},[1279],{"type":56,"value":1280},"You MUST NOT create requirements without an assessment report.\nYou MUST NOT start execution without requirements.md and tasks.md.",{"type":51,"tag":59,"props":1282,"children":1284},{"id":1283},"resuming-a-prior-session",[1285],{"type":56,"value":1286},"Resuming a prior session",{"type":51,"tag":66,"props":1288,"children":1289},{},[1290,1292,1298,1300,1306],{"type":56,"value":1291},"Check for ",{"type":51,"tag":88,"props":1293,"children":1295},{"className":1294},[],[1296],{"type":56,"value":1297},".atx\u002Fcontext.json",{"type":56,"value":1299}," (workspace-relative). NEVER read ",{"type":51,"tag":88,"props":1301,"children":1303},{"className":1302},[],[1304],{"type":56,"value":1305},"~\u002F.aws\u002Fatx\u002Fkiro-power-context.json",{"type":56,"value":153},{"type":51,"tag":66,"props":1308,"children":1309},{},[1310,1315],{"type":51,"tag":70,"props":1311,"children":1312},{},[1313],{"type":56,"value":1314},"This check is an internal bookkeeping operation. The user must never see it happen.",{"type":56,"value":1316}," Do not announce the check, do not narrate what you are doing. No phrases like \"checking for prior sessions\", \"let me check\", \"check for a prior session\", \"context file\". On a fresh install, the first visible output must be the intent question — no preamble of any kind.",{"type":51,"tag":371,"props":1318,"children":1319},{},[1320,1330],{"type":51,"tag":375,"props":1321,"children":1322},{},[1323,1328],{"type":51,"tag":70,"props":1324,"children":1325},{},[1326],{"type":56,"value":1327},"No context found:",{"type":56,"value":1329}," Proceed directly to intent. Produce no user-visible output for this step.",{"type":51,"tag":375,"props":1331,"children":1332},{},[1333,1338,1340,1346,1348,1354,1356,1412,1415,1417,1422,1424,1472,1475,1477,1482,1483,1489,1490,1496,1497,1503,1505,1511],{"type":51,"tag":70,"props":1334,"children":1335},{},[1336],{"type":56,"value":1337},"Context found:",{"type":56,"value":1339}," If the context has an active job (",{"type":51,"tag":88,"props":1341,"children":1343},{"className":1342},[],[1344],{"type":56,"value":1345},"assessment.jobId",{"type":56,"value":1347}," or entries in ",{"type":51,"tag":88,"props":1349,"children":1351},{"className":1350},[],[1352],{"type":56,"value":1353},"execution.activeJobIds",{"type":56,"value":1355},"), try to refresh live state from the service, but do so invisibly:",{"type":51,"tag":371,"props":1357,"children":1358},{},[1359,1369,1395],{"type":51,"tag":375,"props":1360,"children":1361},{},[1362,1367],{"type":51,"tag":70,"props":1363,"children":1364},{},[1365],{"type":56,"value":1366},"Check auth first",{"type":56,"value":1368}," (no-auth-required). If sign-in is NOT configured, skip the refresh entirely — do not attempt service calls. Use local context only.",{"type":51,"tag":375,"props":1370,"children":1371},{},[1372,1377,1379,1385,1387,1393],{"type":51,"tag":70,"props":1373,"children":1374},{},[1375],{"type":56,"value":1376},"If sign-in is configured",{"type":56,"value":1378},", fetch each resource your resume message depends on — at minimum the job itself and all pending user tasks. Surface every pending task to the user; do not cherry-pick one and omit the others. ",{"type":51,"tag":88,"props":1380,"children":1382},{"className":1381},[],[1383],{"type":56,"value":1384},"BLOCKING",{"type":56,"value":1386}," HITL tasks hold up progress even when the job status is active; ",{"type":51,"tag":88,"props":1388,"children":1390},{"className":1389},[],[1391],{"type":56,"value":1392},"NON_BLOCKING",{"type":56,"value":1394}," tasks still need attention but don't stall the job. Name every pending task; flag blocking ones. Don't infer one resource from another.",{"type":51,"tag":375,"props":1396,"children":1397},{},[1398,1403,1405,1410],{"type":51,"tag":70,"props":1399,"children":1400},{},[1401],{"type":56,"value":1402},"If any call fails",{"type":56,"value":1404}," for any reason, silently fall back to local context. ",{"type":51,"tag":70,"props":1406,"children":1407},{},[1408],{"type":56,"value":1409},"Do NOT reveal your reasoning about the refresh to the user",{"type":56,"value":1411}," — no \"sign-in isn't configured so I'll skip\", no \"the service isn't reachable\". The user should see only the resume message. Do NOT demand auth or block the flow.",{"type":51,"tag":452,"props":1413,"children":1414},{},[],{"type":56,"value":1416},"Then tell the user about their prior session. Frame the offer explicitly as a ",{"type":51,"tag":70,"props":1418,"children":1419},{},[1420],{"type":56,"value":1421},"continuation",{"type":56,"value":1423}," of that same session — not a new one. The message should make clear:",{"type":51,"tag":371,"props":1425,"children":1426},{},[1427,1432,1442,1452,1462],{"type":51,"tag":375,"props":1428,"children":1429},{},[1430],{"type":56,"value":1431},"This is the specific session they previously worked on. Mention the phase reached, workspace\u002Fjob identifiers if relevant.",{"type":51,"tag":375,"props":1433,"children":1434},{},[1435,1440],{"type":51,"tag":70,"props":1436,"children":1437},{},[1438],{"type":56,"value":1439},"Refresh succeeded",{"type":56,"value":1441}," → speak in present tense about live state (\"your assessment job is running\", \"I need your input on X to continue\"). If there is a pending HITL task, surface it — don't bury it under \"your job is running.\"",{"type":51,"tag":375,"props":1443,"children":1444},{},[1445,1450],{"type":51,"tag":70,"props":1446,"children":1447},{},[1448],{"type":56,"value":1449},"Refresh failed or was skipped",{"type":56,"value":1451}," → use prior-session framing: \"last time\", \"when you paused\", \"previously\", \"your last session had finished assessment.\" Do NOT present-tense claims about job state — local context may be stale. Offer sign-in as the path to current status (\"sign in to see the latest status\"), not as a gate.",{"type":51,"tag":375,"props":1453,"children":1454},{},[1455,1460],{"type":51,"tag":70,"props":1456,"children":1457},{},[1458],{"type":56,"value":1459},"Resume",{"type":56,"value":1461}," = continue where you left off, reusing the existing assessment report, workspace, and prior progress.",{"type":51,"tag":375,"props":1463,"children":1464},{},[1465,1470],{"type":51,"tag":70,"props":1466,"children":1467},{},[1468],{"type":56,"value":1469},"Start fresh",{"type":56,"value":1471}," = discard the prior session (local artifacts deleted) and begin a brand-new migration.",{"type":51,"tag":452,"props":1473,"children":1474},{},[],{"type":56,"value":1476},"Use language like \"continue where you left off\" or \"pick up from where you stopped\" — not ambiguous phrasing like \"start a similar session.\" If user chooses start fresh, delete ",{"type":51,"tag":88,"props":1478,"children":1480},{"className":1479},[],[1481],{"type":56,"value":1297},{"type":56,"value":95},{"type":51,"tag":88,"props":1484,"children":1486},{"className":1485},[],[1487],{"type":56,"value":1488},".atx\u002Fdiscovery.json",{"type":56,"value":95},{"type":51,"tag":88,"props":1491,"children":1493},{"className":1492},[],[1494],{"type":56,"value":1495},".atx\u002Fassessment-report\u002F",{"type":56,"value":539},{"type":51,"tag":88,"props":1498,"children":1500},{"className":1499},[],[1501],{"type":56,"value":1502},".atx\u002Fspecs\u002F",{"type":56,"value":1504},", then proceed to intent. Otherwise follow the resume logic in ",{"type":51,"tag":260,"props":1506,"children":1508},{"href":1507},"references\u002Fworkflow.md",[1509],{"type":56,"value":1510},"workflow reference",{"type":56,"value":153},{"type":51,"tag":59,"props":1513,"children":1515},{"id":1514},"determining-user-intent",[1516],{"type":56,"value":1517},"Determining user intent",{"type":51,"tag":66,"props":1519,"children":1520},{},[1521,1526,1528,1534],{"type":51,"tag":70,"props":1522,"children":1523},{},[1524],{"type":56,"value":1525},"If Step A\u002FB routed the request to continuous modernization, skip this entire section.",{"type":56,"value":1527}," continuous modernization has its own self-contained onboarding flow — hand off directly to ",{"type":51,"tag":260,"props":1529,"children":1531},{"href":1530},"references\u002Fcontinuous-modernization-guide.md",[1532],{"type":56,"value":1533},"continuous-modernization-guide",{"type":56,"value":1535},". Its own first prompt (Mode selection: Local vs. AWS Infrastructure) is the user's first visible question. Do NOT show the generic intent menu first, and do NOT mix in non-continuous modernization options like \"Browse My Jobs\" or \"Start a Specific Transform\" — those are AWS Transform top-level capabilities, not continuous modernization features.",{"type":51,"tag":66,"props":1537,"children":1538},{},[1539],{"type":56,"value":1540},"For every other route — VMware, SQL, Mainframe, and .NET (modernize or assessment-for-modernization) — use the generic intent menu below. The menu's options (Discover Workspace, Browse Jobs, Start Specific Transform, Analyze for findings) are how those workloads enter the standard MANDATORY workflow's Discovery → Scope → Assessment phases.",{"type":51,"tag":76,"props":1542,"children":1544},{"id":1543},"generic-intent-menu",[1545],{"type":56,"value":1546},"Generic intent menu",{"type":51,"tag":66,"props":1548,"children":1549},{},[1550],{"type":56,"value":1551},"Ask the user: \"What would you like to focus on?\" The first user-visible action in this phase is the question — no auth-probing tool calls precede it, no auth lecture precedes it.",{"type":51,"tag":66,"props":1553,"children":1554},{},[1555,1557,1562,1563,1568,1569,1574,1575,1580,1582,1586,1587,1592,1593,1598,1599],{"type":56,"value":1556},"With projects: ",{"type":51,"tag":1015,"props":1558,"children":1559},{},[1560],{"type":56,"value":1561},"Discover This Workspace",{"type":56,"value":502},{"type":51,"tag":1015,"props":1564,"children":1565},{},[1566],{"type":56,"value":1567},"Browse My Jobs",{"type":56,"value":502},{"type":51,"tag":1015,"props":1570,"children":1571},{},[1572],{"type":56,"value":1573},"Start a Specific Transform",{"type":56,"value":502},{"type":51,"tag":1015,"props":1576,"children":1577},{},[1578],{"type":56,"value":1579},"Analyze for findings",{"type":56,"value":1581},"\nNo projects: ",{"type":51,"tag":1015,"props":1583,"children":1584},{},[1585],{"type":56,"value":1567},{"type":56,"value":502},{"type":51,"tag":1015,"props":1588,"children":1589},{},[1590],{"type":56,"value":1591},"Open a Project Folder",{"type":56,"value":502},{"type":51,"tag":1015,"props":1594,"children":1595},{},[1596],{"type":56,"value":1597},"Start from Scratch",{"type":56,"value":502},{"type":51,"tag":1015,"props":1600,"children":1601},{},[1602],{"type":56,"value":1579},{"type":51,"tag":66,"props":1604,"children":1605},{},[1606,1611,1613,1618],{"type":51,"tag":70,"props":1607,"children":1608},{},[1609],{"type":56,"value":1610},"Custom vs continuous modernization routing.",{"type":56,"value":1612}," When the user's intent is clear, route to the correct skill set\nusing the decision table in ",{"type":51,"tag":260,"props":1614,"children":1615},{"href":848},[1616],{"type":56,"value":1617},"continuous-modernization reference",{"type":56,"value":1619},". Key rule: named transformation AND no prior continuous modernization findings → Custom. Analysis\u002Freporting\u002Fremediation of existing findings → continuous modernization. When in doubt → continuous modernization.",{"type":51,"tag":66,"props":1621,"children":1622},{},[1623,1628,1630,1636],{"type":51,"tag":70,"props":1624,"children":1625},{},[1626],{"type":56,"value":1627},"Just-in-time auth.",{"type":56,"value":1629}," Once the user picks an intent, the next tool that action needs may require auth. If so, prompt for auth then, framed around the action the user just chose (\"to browse your jobs, sign in to AWS Transform\"). Which auth each MCP tool needs is reported by the MCP server — read it from the tool's description, ",{"type":51,"tag":88,"props":1631,"children":1633},{"className":1632},[],[1634],{"type":56,"value":1635},"get_status",{"type":56,"value":1637},", or the error the tool returns. CLI transforms use AWS credentials only — do NOT prompt for sign-in for CLI-only intents, even when sign-in is unconfigured. If the user picks something that needs no service call (e.g., \"Open a Project Folder\"), do not probe auth.",{"type":51,"tag":66,"props":1639,"children":1640},{},[1641,1643,1649],{"type":56,"value":1642},"See ",{"type":51,"tag":260,"props":1644,"children":1646},{"href":1645},"references\u002Fauth.md",[1647],{"type":56,"value":1648},"auth reference",{"type":56,"value":1650}," for the MCP-vs-CLI auth split and how to present sign-in options.",{"type":51,"tag":59,"props":1652,"children":1654},{"id":1653},"discovery",[1655],{"type":56,"value":1656},"Discovery",{"type":51,"tag":66,"props":1658,"children":1659},{},[1660],{"type":56,"value":1661},"Fast scan (~10 sec). Three things happen in parallel:",{"type":51,"tag":412,"props":1663,"children":1664},{},[1665,1675,1729],{"type":51,"tag":375,"props":1666,"children":1667},{},[1668,1673],{"type":51,"tag":70,"props":1669,"children":1670},{},[1671],{"type":56,"value":1672},"Scan the workspace",{"type":56,"value":1674}," — detect languages, frameworks, file types, and dependencies present in the project.",{"type":51,"tag":375,"props":1676,"children":1677},{},[1678,1683,1685,1691,1693,1699,1701],{"type":51,"tag":70,"props":1679,"children":1680},{},[1681],{"type":56,"value":1682},"Query available agents",{"type":56,"value":1684}," — call ",{"type":51,"tag":88,"props":1686,"children":1688},{"className":1687},[],[1689],{"type":56,"value":1690},"list_resources",{"type":56,"value":1692}," with ",{"type":51,"tag":88,"props":1694,"children":1696},{"className":1695},[],[1697],{"type":56,"value":1698},"resource: \"agents\"",{"type":56,"value":1700}," (MCP). Skip if sign-in is not configured or the user's intent is CLI-only. This is a paginated API — fetch all pages to get the complete set. The results contain two levels:\n",{"type":51,"tag":371,"props":1702,"children":1703},{},[1704,1714,1724],{"type":51,"tag":375,"props":1705,"children":1706},{},[1707,1712],{"type":51,"tag":70,"props":1708,"children":1709},{},[1710],{"type":56,"value":1711},"Orchestrator agents",{"type":56,"value":1713}," — top-level agents you create jobs with. Each orchestrator may have sub-agents that provide deeper workload-specific capabilities.",{"type":51,"tag":375,"props":1715,"children":1716},{},[1717,1722],{"type":51,"tag":70,"props":1718,"children":1719},{},[1720],{"type":56,"value":1721},"Sub-agents",{"type":56,"value":1723}," — invoked through their orchestrator, not directly. They represent specialized skills within a workload type.",{"type":51,"tag":375,"props":1725,"children":1726},{},[1727],{"type":56,"value":1728},"Some agents may not belong to a known orchestrator — treat these as standalone capabilities.",{"type":51,"tag":375,"props":1730,"children":1731},{},[1732,1737,1738,1744],{"type":51,"tag":70,"props":1733,"children":1734},{},[1735],{"type":56,"value":1736},"List available transformation definitions",{"type":56,"value":1684},{"type":51,"tag":88,"props":1739,"children":1741},{"className":1740},[],[1742],{"type":56,"value":1743},"atx custom def list",{"type":56,"value":1745}," (CLI) to get the current set and what they transform. Skip if CLI is not available or the user's intent is MCP-only.",{"type":51,"tag":66,"props":1747,"children":1748},{},[1749,1751,1756],{"type":56,"value":1750},"For the \"Discover This Workspace\" intent, Discovery is where sign-in is first required (other intents like \"Browse My Jobs\" need sign-in even earlier, per the just-in-time rule — handle those there). If ",{"type":51,"tag":88,"props":1752,"children":1754},{"className":1753},[],[1755],{"type":56,"value":1690},{"type":56,"value":1757}," returns NOT_CONFIGURED, prompt the user to sign in for the auth system needed — do not demand both.",{"type":51,"tag":66,"props":1759,"children":1760},{},[1761,1763,1768,1770,1775],{"type":56,"value":1762},"Then ",{"type":51,"tag":70,"props":1764,"children":1765},{},[1766],{"type":56,"value":1767},"match",{"type":56,"value":1769}," workspace signals against orchestrator capabilities and available transformation definitions. Before selecting an orchestratorAgent for any workload, read the matched workload's reference file — it may specify the exact agent to use. Save the matched results to ",{"type":51,"tag":88,"props":1771,"children":1773},{"className":1772},[],[1774],{"type":56,"value":1488},{"type":56,"value":1776}," — include the orchestrator → sub-agent hierarchy so later steps know what deeper capabilities are available.",{"type":51,"tag":66,"props":1778,"children":1779},{},[1780,1781,1785],{"type":56,"value":1642},{"type":51,"tag":260,"props":1782,"children":1783},{"href":1507},[1784],{"type":56,"value":1510},{"type":56,"value":1786}," for the workspace scanning framework.",{"type":51,"tag":66,"props":1788,"children":1789},{},[1790,1795],{"type":51,"tag":70,"props":1791,"children":1792},{},[1793],{"type":56,"value":1794},"Discovery is NOT assessment.",{"type":56,"value":1796}," Discovery identifies opportunities and matches them to available agents. Assessment produces the detailed findings.",{"type":51,"tag":59,"props":1798,"children":1800},{"id":1799},"scoping-gate-1",[1801],{"type":56,"value":1802},"Scoping (GATE 1)",{"type":51,"tag":66,"props":1804,"children":1805},{},[1806,1819],{"type":51,"tag":70,"props":1807,"children":1808},{},[1809,1811,1817],{"type":56,"value":1810},"For each matched workload type, read ALL reference files with its prefix (e.g., ",{"type":51,"tag":260,"props":1812,"children":1814},{"href":1813},"references\u002Fdotnet.md",[1815],{"type":56,"value":1816},"dotnet",{"type":56,"value":1818},").",{"type":56,"value":1820}," These contain the workload's capabilities, workflow, agent details, example requirements, and known limitations. The file prefix comes from the agent match in Discovery — not from a hardcoded list.",{"type":51,"tag":66,"props":1822,"children":1823},{},[1824],{"type":56,"value":1825},"Show migration table, then let the user select with multiSelect:",{"type":51,"tag":614,"props":1827,"children":1830},{"className":1828,"code":1829,"language":56},[617],"| Risk | Why | Component | Current | Target | AWS Target | Recommended Approach |\n",[1831],{"type":51,"tag":88,"props":1832,"children":1833},{"__ignoreMap":622},[1834],{"type":56,"value":1829},{"type":51,"tag":66,"props":1836,"children":1837},{},[1838,1840,1844],{"type":56,"value":1839},"Always explain risk in plain language in the \"Why\" column — use the user-facing phrases from the Risk Classification table in ",{"type":51,"tag":260,"props":1841,"children":1842},{"href":1507},[1843],{"type":56,"value":1510},{"type":56,"value":1845},". Never show a bare HIGH\u002FMED\u002FLOW label without explanation.",{"type":51,"tag":66,"props":1847,"children":1848},{},[1849],{"type":56,"value":1850},"User selects what to modernize.",{"type":51,"tag":59,"props":1852,"children":1854},{"id":1853},"assessment",[1855],{"type":56,"value":1856},"Assessment",{"type":51,"tag":66,"props":1858,"children":1859},{},[1860],{"type":51,"tag":70,"props":1861,"children":1862},{},[1863],{"type":56,"value":1864},"This is NOT optional. Run the workload's assessment BEFORE creating requirements.",{"type":51,"tag":66,"props":1866,"children":1867},{},[1868],{"type":56,"value":1869},"Tell the user: \"I'll assess your workload. The assessment report drives the migration plan.\"",{"type":51,"tag":66,"props":1871,"children":1872},{},[1873,1878],{"type":51,"tag":70,"props":1874,"children":1875},{},[1876],{"type":56,"value":1877},"How assessment runs depends on the workload's reference files.",{"type":56,"value":1879}," Each workload type defines its own assessment approach — the agent to use, the objective format, and how to collect results. Consult the matched workload's reference files for specifics.",{"type":51,"tag":66,"props":1881,"children":1882},{},[1883],{"type":56,"value":1884},"General pattern for agent-based assessment:",{"type":51,"tag":412,"props":1886,"children":1887},{},[1888,1898,1903,1915,1936,1948,1965,1970,1981],{"type":51,"tag":375,"props":1889,"children":1890},{},[1891,1896],{"type":51,"tag":70,"props":1892,"children":1893},{},[1894],{"type":56,"value":1895},"Confirm the plan",{"type":56,"value":1897}," — tell the user what you will do (create workspace, create job with which agent, what the objective is). WAIT for approval before calling any tools.",{"type":51,"tag":375,"props":1899,"children":1900},{},[1901],{"type":56,"value":1902},"Create\u002Fselect workspace",{"type":51,"tag":375,"props":1904,"children":1905},{},[1906,1908,1913],{"type":56,"value":1907},"Create job with a ",{"type":51,"tag":70,"props":1909,"children":1910},{},[1911],{"type":56,"value":1912},"clear objective",{"type":56,"value":1914}," — the workload's reference files define what a good objective looks like",{"type":51,"tag":375,"props":1916,"children":1917},{},[1918,1920,1926,1928,1934],{"type":56,"value":1919},"Start the job (already started by ",{"type":51,"tag":88,"props":1921,"children":1923},{"className":1922},[],[1924],{"type":56,"value":1925},"create_job",{"type":56,"value":1927},"; use ",{"type":51,"tag":88,"props":1929,"children":1931},{"className":1930},[],[1932],{"type":56,"value":1933},"control_job",{"type":56,"value":1935}," to restart if stopped)",{"type":51,"tag":375,"props":1937,"children":1938},{},[1939,1941,1946],{"type":56,"value":1940},"Send a ",{"type":51,"tag":70,"props":1942,"children":1943},{},[1944],{"type":56,"value":1945},"detailed follow-up message",{"type":56,"value":1947}," with project specifics",{"type":51,"tag":375,"props":1949,"children":1950},{},[1951,1956,1958,1964],{"type":51,"tag":70,"props":1952,"children":1953},{},[1954],{"type":56,"value":1955},"Ask before uploading",{"type":56,"value":1957}," — ask how the user wants to share source code. WAIT. Then upload with ",{"type":51,"tag":88,"props":1959,"children":1961},{"className":1960},[],[1962],{"type":56,"value":1963},"categoryType: \"CUSTOMER_INPUT\"",{"type":56,"value":153},{"type":51,"tag":375,"props":1966,"children":1967},{},[1968],{"type":56,"value":1969},"Handle agent requests (checkpoints, decisions) — always present to user, WAIT for user response",{"type":51,"tag":375,"props":1971,"children":1972},{},[1973,1975],{"type":56,"value":1974},"When assessment completes, download the report: ",{"type":51,"tag":88,"props":1976,"children":1978},{"className":1977},[],[1979],{"type":56,"value":1980},"get_resource resource=\"artifact\"",{"type":51,"tag":375,"props":1982,"children":1983},{},[1984,1986],{"type":56,"value":1985},"Save report to ",{"type":51,"tag":88,"props":1987,"children":1989},{"className":1988},[],[1990],{"type":56,"value":1495},{"type":51,"tag":66,"props":1992,"children":1993},{},[1994],{"type":51,"tag":70,"props":1995,"children":1996},{},[1997],{"type":56,"value":1998},"Rule: NEVER batch workspace creation, job creation, and uploads into a single turn without user confirmation at each decision point.",{"type":51,"tag":66,"props":2000,"children":2001},{},[2002,2004,2009,2011,2016,2018,2023],{"type":56,"value":2003},"Use the orchestrator agent or transformation definition identified during Discovery. The match comes from ",{"type":51,"tag":88,"props":2005,"children":2007},{"className":2006},[],[2008],{"type":56,"value":1690},{"type":56,"value":2010}," (with ",{"type":51,"tag":88,"props":2012,"children":2014},{"className":2013},[],[2015],{"type":56,"value":1698},{"type":56,"value":2017},") and ",{"type":51,"tag":88,"props":2019,"children":2021},{"className":2020},[],[2022],{"type":56,"value":1743},{"type":56,"value":2024},", not a hardcoded mapping. When creating a job, specify the orchestrator — sub-agents are invoked by the orchestrator as needed.",{"type":51,"tag":66,"props":2026,"children":2027},{},[2028,2030,2035,2036,2042],{"type":56,"value":2029},"Update ",{"type":51,"tag":88,"props":2031,"children":2033},{"className":2032},[],[2034],{"type":56,"value":1297},{"type":56,"value":1692},{"type":51,"tag":88,"props":2037,"children":2039},{"className":2038},[],[2040],{"type":56,"value":2041},"phase: \"assessed\"",{"type":56,"value":2043},", workspace ID, job ID.",{"type":51,"tag":59,"props":2045,"children":2047},{"id":2046},"requirements-from-assessment-report",[2048],{"type":56,"value":2049},"Requirements (from assessment report)",{"type":51,"tag":66,"props":2051,"children":2052},{},[2053,2055,2061,2063,2068],{"type":56,"value":2054},"Now create ",{"type":51,"tag":88,"props":2056,"children":2058},{"className":2057},[],[2059],{"type":56,"value":2060},".atx\u002Fspecs\u002Frequirements.md",{"type":56,"value":2062}," using the ",{"type":51,"tag":70,"props":2064,"children":2065},{},[2066],{"type":56,"value":2067},"assessment report",{"type":56,"value":2069}," — NOT discovery findings.",{"type":51,"tag":371,"props":2071,"children":2072},{},[2073,2085,2090,2095,2100,2105],{"type":51,"tag":375,"props":2074,"children":2075},{},[2076,2078,2083],{"type":56,"value":2077},"Read ",{"type":51,"tag":88,"props":2079,"children":2081},{"className":2080},[],[2082],{"type":56,"value":1495},{"type":56,"value":2084}," for detailed findings",{"type":51,"tag":375,"props":2086,"children":2087},{},[2088],{"type":56,"value":2089},"Load workload reference files for context",{"type":51,"tag":375,"props":2091,"children":2092},{},[2093],{"type":56,"value":2094},"Draft requirements grounded in the assessment (specific blockers, LOC, complexity, migration paths)",{"type":51,"tag":375,"props":2096,"children":2097},{},[2098],{"type":56,"value":2099},"Each requirement says WHO handles it: AWS Transform CLI \u002F Managed Agents \u002F IDE",{"type":51,"tag":375,"props":2101,"children":2102},{},[2103],{"type":56,"value":2104},"Multi-module: group by module with Module Overview table",{"type":51,"tag":375,"props":2106,"children":2107},{},[2108,2109,2113],{"type":56,"value":1642},{"type":51,"tag":260,"props":2110,"children":2111},{"href":1507},[2112],{"type":56,"value":1510},{"type":56,"value":2114}," for format",{"type":51,"tag":66,"props":2116,"children":2117},{},[2118],{"type":51,"tag":70,"props":2119,"children":2120},{},[2121],{"type":56,"value":2122},"Do NOT create tasks.md yet.",{"type":51,"tag":66,"props":2124,"children":2125},{},[2126,2128,2133,2134,2139,2140],{"type":56,"value":2127},"Show requirements summary and let the user choose: ",{"type":51,"tag":1015,"props":2129,"children":2130},{},[2131],{"type":56,"value":2132},"Looks Good",{"type":56,"value":502},{"type":51,"tag":1015,"props":2135,"children":2136},{},[2137],{"type":56,"value":2138},"Edit",{"type":56,"value":502},{"type":51,"tag":1015,"props":2141,"children":2142},{},[2143],{"type":56,"value":2144},"Add Component",{"type":51,"tag":59,"props":2146,"children":2148},{"id":2147},"approval-gate-2",[2149],{"type":56,"value":2150},"Approval (GATE 2)",{"type":51,"tag":66,"props":2152,"children":2153},{},[2154,2156,2161,2162],{"type":56,"value":2155},"Ask the user: \"Requirements finalized. Ready to create the execution plan?\"\n",{"type":51,"tag":1015,"props":2157,"children":2158},{},[2159],{"type":56,"value":2160},"Create Plan",{"type":56,"value":502},{"type":51,"tag":1015,"props":2163,"children":2164},{},[2165],{"type":56,"value":2166},"Edit More",{"type":51,"tag":59,"props":2168,"children":2170},{"id":2169},"task-generation",[2171],{"type":56,"value":2172},"Task generation",{"type":51,"tag":66,"props":2174,"children":2175},{},[2176,2178,2184],{"type":56,"value":2177},"Generate ",{"type":51,"tag":88,"props":2179,"children":2181},{"className":2180},[],[2182],{"type":56,"value":2183},"tasks.md",{"type":56,"value":2185}," from approved requirements:",{"type":51,"tag":371,"props":2187,"children":2188},{},[2189,2194,2199,2204,2209],{"type":51,"tag":375,"props":2190,"children":2191},{},[2192],{"type":56,"value":2193},"Module Status table + per-module sections",{"type":51,"tag":375,"props":2195,"children":2196},{},[2197],{"type":56,"value":2198},"Sized: max 100 files\u002Ftask",{"type":51,"tag":375,"props":2200,"children":2201},{},[2202],{"type":56,"value":2203},"Parallel groups verified",{"type":51,"tag":375,"props":2205,"children":2206},{},[2207],{"type":56,"value":2208},"Review-diffs after every code change",{"type":51,"tag":375,"props":2210,"children":2211},{},[2212,2213,2217],{"type":56,"value":1642},{"type":51,"tag":260,"props":2214,"children":2215},{"href":1507},[2216],{"type":56,"value":1510},{"type":56,"value":2114},{"type":51,"tag":66,"props":2219,"children":2220},{},[2221,2223,2228,2229,2234,2235],{"type":56,"value":2222},"Present options: ",{"type":51,"tag":1015,"props":2224,"children":2225},{},[2226],{"type":56,"value":2227},"Start Execution",{"type":56,"value":502},{"type":51,"tag":1015,"props":2230,"children":2231},{},[2232],{"type":56,"value":2233},"Review Tasks",{"type":56,"value":502},{"type":51,"tag":1015,"props":2236,"children":2237},{},[2238],{"type":56,"value":2239},"Modify",{"type":51,"tag":59,"props":2241,"children":2243},{"id":2242},"execution",[2244],{"type":56,"value":2245},"Execution",{"type":51,"tag":66,"props":2247,"children":2248},{},[2249,2250,2254],{"type":56,"value":1642},{"type":51,"tag":260,"props":2251,"children":2252},{"href":1507},[2253],{"type":56,"value":1510},{"type":56,"value":2255}," for full details.",{"type":51,"tag":66,"props":2257,"children":2258},{},[2259,2264],{"type":51,"tag":70,"props":2260,"children":2261},{},[2262],{"type":56,"value":2263},"How execution runs depends on the workload's reference files.",{"type":56,"value":2265}," Each workload type defines its own execution tooling — which agent or CLI command to use, how to parallelize, and how to collect results. Consult the matched workload's reference files.",{"type":51,"tag":66,"props":2267,"children":2268},{},[2269],{"type":56,"value":2270},"General pattern for agent-based execution:",{"type":51,"tag":66,"props":2272,"children":2273},{},[2274],{"type":56,"value":2275},"When creating new jobs, always:",{"type":51,"tag":412,"props":2277,"children":2278},{},[2279,2296,2314],{"type":51,"tag":375,"props":2280,"children":2281},{},[2282,2287,2289,2294],{"type":51,"tag":70,"props":2283,"children":2284},{},[2285],{"type":56,"value":2286},"Clear objective",{"type":56,"value":2288}," in ",{"type":51,"tag":88,"props":2290,"children":2292},{"className":2291},[],[2293],{"type":56,"value":1925},{"type":56,"value":2295}," — what to transform, from what, to what",{"type":51,"tag":375,"props":2297,"children":2298},{},[2299,2304,2306,2312],{"type":51,"tag":70,"props":2300,"children":2301},{},[2302],{"type":56,"value":2303},"Detailed follow-up message",{"type":56,"value":2305}," via ",{"type":51,"tag":88,"props":2307,"children":2309},{"className":2308},[],[2310],{"type":56,"value":2311},"send_message",{"type":56,"value":2313}," — project specifics, discovery findings, blockers",{"type":51,"tag":375,"props":2315,"children":2316},{},[2317,2322,2324],{"type":51,"tag":70,"props":2318,"children":2319},{},[2320],{"type":56,"value":2321},"Upload artifacts",{"type":56,"value":2323}," if agent needs code — ask user first, ",{"type":51,"tag":88,"props":2325,"children":2327},{"className":2326},[],[2328],{"type":56,"value":1963},{"type":51,"tag":76,"props":2330,"children":2332},{"id":2331},"every-agent-request-user-decides-never-auto-handle",[2333],{"type":56,"value":2334},"Every agent request → user decides (NEVER auto-handle)",{"type":51,"tag":66,"props":2336,"children":2337},{},[2338],{"type":56,"value":2339},"When the AWS Transform agent asks for input, needs files, or hits a checkpoint:",{"type":51,"tag":412,"props":2341,"children":2342},{},[2343,2348,2353,2358],{"type":51,"tag":375,"props":2344,"children":2345},{},[2346],{"type":56,"value":2347},"Read the task\u002Fmessage",{"type":51,"tag":375,"props":2349,"children":2350},{},[2351],{"type":56,"value":2352},"Present to user",{"type":51,"tag":375,"props":2354,"children":2355},{},[2356],{"type":56,"value":2357},"WAIT for user response",{"type":51,"tag":375,"props":2359,"children":2360},{},[2361],{"type":56,"value":2362},"Relay user's decision back to agent",{"type":51,"tag":76,"props":2364,"children":2366},{"id":2365},"uploading-artifacts-to-agents",[2367],{"type":56,"value":2368},"Uploading artifacts to agents",{"type":51,"tag":66,"props":2370,"children":2371},{},[2372,2374,2379],{"type":56,"value":2373},"Always use ",{"type":51,"tag":88,"props":2375,"children":2377},{"className":2376},[],[2378],{"type":56,"value":1963},{"type":56,"value":2380}," when uploading files to an agent:",{"type":51,"tag":614,"props":2382,"children":2386},{"className":2383,"code":2384,"language":2385,"meta":622,"style":622},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","upload_artifact(\n  workspaceId=\"...\", jobId=\"...\",\n  content=\"\u002Fpath\u002Fto\u002Fsource.zip\",\n  fileType=\"ZIP\",\n  categoryType=\"CUSTOMER_INPUT\"\n)\n","python",[2387],{"type":51,"tag":88,"props":2388,"children":2389},{"__ignoreMap":622},[2390,2398,2406,2414,2422,2430],{"type":51,"tag":1015,"props":2391,"children":2392},{"class":1017,"line":1018},[2393],{"type":51,"tag":1015,"props":2394,"children":2395},{},[2396],{"type":56,"value":2397},"upload_artifact(\n",{"type":51,"tag":1015,"props":2399,"children":2400},{"class":1017,"line":1028},[2401],{"type":51,"tag":1015,"props":2402,"children":2403},{},[2404],{"type":56,"value":2405},"  workspaceId=\"...\", jobId=\"...\",\n",{"type":51,"tag":1015,"props":2407,"children":2408},{"class":1017,"line":1058},[2409],{"type":51,"tag":1015,"props":2410,"children":2411},{},[2412],{"type":56,"value":2413},"  content=\"\u002Fpath\u002Fto\u002Fsource.zip\",\n",{"type":51,"tag":1015,"props":2415,"children":2416},{"class":1017,"line":1084},[2417],{"type":51,"tag":1015,"props":2418,"children":2419},{},[2420],{"type":56,"value":2421},"  fileType=\"ZIP\",\n",{"type":51,"tag":1015,"props":2423,"children":2424},{"class":1017,"line":1127},[2425],{"type":51,"tag":1015,"props":2426,"children":2427},{},[2428],{"type":56,"value":2429},"  categoryType=\"CUSTOMER_INPUT\"\n",{"type":51,"tag":1015,"props":2431,"children":2432},{"class":1017,"line":1153},[2433],{"type":51,"tag":1015,"props":2434,"children":2435},{},[2436],{"type":56,"value":2437},")\n",{"type":51,"tag":166,"props":2439,"children":2440},{},[2441,2457],{"type":51,"tag":170,"props":2442,"children":2443},{},[2444],{"type":51,"tag":174,"props":2445,"children":2446},{},[2447,2452],{"type":51,"tag":178,"props":2448,"children":2449},{},[2450],{"type":56,"value":2451},"categoryType",{"type":51,"tag":178,"props":2453,"children":2454},{},[2455],{"type":56,"value":2456},"When to Use",{"type":51,"tag":189,"props":2458,"children":2459},{},[2460,2477,2494],{"type":51,"tag":174,"props":2461,"children":2462},{},[2463,2472],{"type":51,"tag":196,"props":2464,"children":2465},{},[2466],{"type":51,"tag":88,"props":2467,"children":2469},{"className":2468},[],[2470],{"type":56,"value":2471},"CUSTOMER_INPUT",{"type":51,"tag":196,"props":2473,"children":2474},{},[2475],{"type":56,"value":2476},"Uploading files TO the agent (source code, configs, data)",{"type":51,"tag":174,"props":2478,"children":2479},{},[2480,2489],{"type":51,"tag":196,"props":2481,"children":2482},{},[2483],{"type":51,"tag":88,"props":2484,"children":2486},{"className":2485},[],[2487],{"type":56,"value":2488},"CUSTOMER_OUTPUT",{"type":51,"tag":196,"props":2490,"children":2491},{},[2492],{"type":56,"value":2493},"Downloading files FROM the agent (reports, migrated code)",{"type":51,"tag":174,"props":2495,"children":2496},{},[2497,2506],{"type":51,"tag":196,"props":2498,"children":2499},{},[2500],{"type":51,"tag":88,"props":2501,"children":2503},{"className":2502},[],[2504],{"type":56,"value":2505},"HITL_FROM_USER",{"type":51,"tag":196,"props":2507,"children":2508},{},[2509],{"type":56,"value":2510},"User responses to agent HITL tasks",{"type":51,"tag":66,"props":2512,"children":2513},{},[2514,2515,2519],{"type":56,"value":1642},{"type":51,"tag":260,"props":2516,"children":2517},{"href":1507},[2518],{"type":56,"value":1510},{"type":56,"value":2520}," for agent request handling patterns.",{"type":51,"tag":76,"props":2522,"children":2524},{"id":2523},"progress",[2525],{"type":56,"value":2526},"Progress",{"type":51,"tag":66,"props":2528,"children":2529},{},[2530,2532,2537],{"type":56,"value":2531},"Review diffs after every code change. User must approve.\nUpdate tasks.md checkboxes + ",{"type":51,"tag":88,"props":2533,"children":2535},{"className":2534},[],[2536],{"type":56,"value":1297},{"type":56,"value":2538}," after every step.",{"type":51,"tag":972,"props":2540,"children":2541},{},[],{"type":51,"tag":59,"props":2543,"children":2545},{"id":2544},"context-persistence-atxcontextjson",[2546],{"type":56,"value":2547},"Context persistence (.atx\u002Fcontext.json)",{"type":51,"tag":66,"props":2549,"children":2550},{},[2551,2553,2558,2560,2566,2567,2572,2573,2578,2579,2585,2586,2592,2593,2598,2599,2605,2607,2611],{"type":56,"value":2552},"Save ",{"type":51,"tag":88,"props":2554,"children":2556},{"className":2555},[],[2557],{"type":56,"value":1297},{"type":56,"value":2559}," IMMEDIATELY after completing each phase — before presenting results to the user. Every phase transition must have a context save between them. Top-level keys: ",{"type":51,"tag":88,"props":2561,"children":2563},{"className":2562},[],[2564],{"type":56,"value":2565},"phase",{"type":56,"value":95},{"type":51,"tag":88,"props":2568,"children":2570},{"className":2569},[],[2571],{"type":56,"value":1653},{"type":56,"value":95},{"type":51,"tag":88,"props":2574,"children":2576},{"className":2575},[],[2577],{"type":56,"value":1853},{"type":56,"value":95},{"type":51,"tag":88,"props":2580,"children":2582},{"className":2581},[],[2583],{"type":56,"value":2584},"spec",{"type":56,"value":95},{"type":51,"tag":88,"props":2587,"children":2589},{"className":2588},[],[2590],{"type":56,"value":2591},"workStyle",{"type":56,"value":95},{"type":51,"tag":88,"props":2594,"children":2596},{"className":2595},[],[2597],{"type":56,"value":2242},{"type":56,"value":95},{"type":51,"tag":88,"props":2600,"children":2602},{"className":2601},[],[2603],{"type":56,"value":2604},"updatedAt",{"type":56,"value":2606},". See ",{"type":51,"tag":260,"props":2608,"children":2609},{"href":1507},[2610],{"type":56,"value":1510},{"type":56,"value":2612}," for the full schema.",{"type":51,"tag":66,"props":2614,"children":2615},{},[2616,2618,2623],{"type":56,"value":2617},"Resume: read ",{"type":51,"tag":88,"props":2619,"children":2621},{"className":2620},[],[2622],{"type":56,"value":2565},{"type":56,"value":2624},", pick up from that phase.",{"type":51,"tag":972,"props":2626,"children":2627},{},[],{"type":51,"tag":59,"props":2629,"children":2631},{"id":2630},"constraints",[2632],{"type":56,"value":2633},"Constraints",{"type":51,"tag":371,"props":2635,"children":2636},{},[2637,2642,2647,2652,2670,2675,2680,2685,2690,2709,2714,2719,2724,2729,2831,2836,2841,2846,2851,2861,2866],{"type":51,"tag":375,"props":2638,"children":2639},{},[2640],{"type":56,"value":2641},"MUST use product, capability, and step names exactly as defined in this document. Never paraphrase or invent terminology. When describing this skill's capabilities, use: \"Migrate, modernize, and upgrade codebases — .NET, mainframe COBOL, VMware, databases, and language\u002FSDK upgrades — using AWS Transform CLI and Managed Agents, directly from your IDE.\"",{"type":51,"tag":375,"props":2643,"children":2644},{},[2645],{"type":56,"value":2646},"MUST present user choices as an explicit selectable list — never bury options in prose or proceed on an inferred answer",{"type":51,"tag":375,"props":2648,"children":2649},{},[2650],{"type":56,"value":2651},"MUST run CLI commands in background — never block the conversation",{"type":51,"tag":375,"props":2653,"children":2654},{},[2655,2657,2662,2663,2668],{"type":56,"value":2656},"MUST discover agents dynamically via ",{"type":51,"tag":88,"props":2658,"children":2660},{"className":2659},[],[2661],{"type":56,"value":1690},{"type":56,"value":1692},{"type":51,"tag":88,"props":2664,"children":2666},{"className":2665},[],[2667],{"type":56,"value":1698},{"type":56,"value":2669}," (paginated) — do not hardcode agent names",{"type":51,"tag":375,"props":2671,"children":2672},{},[2673],{"type":56,"value":2674},"MUST create jobs with orchestrator agents — sub-agents are invoked by the orchestrator, not directly",{"type":51,"tag":375,"props":2676,"children":2677},{},[2678],{"type":56,"value":2679},"MUST refer to resources by name, not ID. When referencing a workspace, job, agent, or artifact in user-facing messages, use its human-readable name. Never surface raw UUIDs in prose. If a resource has no name, use a descriptive phrase (\"your .NET modernization job\") rather than the ID.",{"type":51,"tag":375,"props":2681,"children":2682},{},[2683],{"type":56,"value":2684},"MUST NOT expose internal mechanics to the user — do not name tools (get_status, list_resources), do not cite step numbers, do not reference files you are reading, and do not narrate what you are about to do. Just do it silently and present the outcome in user terms.",{"type":51,"tag":375,"props":2686,"children":2687},{},[2688],{"type":56,"value":2689},"MUST NOT mix workflow descriptions with actual questions in the same numbered list, and never use count language like \"two questions\" when some items are informational steps rather than questions. Keep what-I-will-do separate from what-I-need-from-you.",{"type":51,"tag":375,"props":2691,"children":2692},{},[2693,2695,2700,2702,2707],{"type":56,"value":2694},"MUST NOT frame HITL checkpoints, agent questions, or pending decisions as coming from \"the web app\", \"the webapp\", \"the web UI\", or a third-party \"the agent is asking \u002F the agent needs \u002F the agent wants\". The user is working with you in the IDE — you own the interaction. Present every checkpoint as your own first-person request, not a relayed message from elsewhere. ",{"type":51,"tag":70,"props":2696,"children":2697},{},[2698],{"type":56,"value":2699},"Wrong:",{"type":56,"value":2701}," \"The web app is asking how you want to deploy the landing zone.\" \u002F \"The agent is now asking about the replication subnet configuration.\" ",{"type":51,"tag":70,"props":2703,"children":2704},{},[2705],{"type":56,"value":2706},"Right:",{"type":56,"value":2708}," \"The next step is to choose how to deploy the landing zone.\" \u002F \"I need the replication subnet configuration to continue.\"",{"type":51,"tag":375,"props":2710,"children":2711},{},[2712],{"type":56,"value":2713},"MUST NOT explain what this skill does",{"type":51,"tag":375,"props":2715,"children":2716},{},[2717],{"type":56,"value":2718},"MUST NOT create requirements from discovery — wait for assessment",{"type":51,"tag":375,"props":2720,"children":2721},{},[2722],{"type":56,"value":2723},"MUST NOT skip from discovery to execution",{"type":51,"tag":375,"props":2725,"children":2726},{},[2727],{"type":56,"value":2728},"MUST NOT modify code, upgrade dependencies, or run analysis manually — always use AWS Transform tooling",{"type":51,"tag":375,"props":2730,"children":2731},{},[2732,2734,2740,2742,2748,2750,2756,2757,2763,2764,2770,2771,2777,2779,2785,2787,2793,2795,2801,2802,2807,2809,2815,2817,2822,2824,2829],{"type":56,"value":2733},"MUST NOT probe ",{"type":51,"tag":88,"props":2735,"children":2737},{"className":2736},[],[2738],{"type":56,"value":2739},"--help",{"type":56,"value":2741}," to figure out a CLI invocation that the reference files already document. The capability-specific reference files in ",{"type":51,"tag":88,"props":2743,"children":2745},{"className":2744},[],[2746],{"type":56,"value":2747},"references\u002F",{"type":56,"value":2749}," (e.g. ",{"type":51,"tag":88,"props":2751,"children":2753},{"className":2752},[],[2754],{"type":56,"value":2755},"continuous-modernization-source.md",{"type":56,"value":95},{"type":51,"tag":88,"props":2758,"children":2760},{"className":2759},[],[2761],{"type":56,"value":2762},"continuous-modernization-analysis.md",{"type":56,"value":95},{"type":51,"tag":88,"props":2765,"children":2767},{"className":2766},[],[2768],{"type":56,"value":2769},"continuous-modernization-remediation.md",{"type":56,"value":95},{"type":51,"tag":88,"props":2772,"children":2774},{"className":2773},[],[2775],{"type":56,"value":2776},"custom-cli-reference.md",{"type":56,"value":2778},") contain the canonical ",{"type":51,"tag":88,"props":2780,"children":2782},{"className":2781},[],[2783],{"type":56,"value":2784},"atx ct …",{"type":56,"value":2786}," and ",{"type":51,"tag":88,"props":2788,"children":2790},{"className":2789},[],[2791],{"type":56,"value":2792},"atx custom …",{"type":56,"value":2794}," commands with every required flag and example invocations — read the matching file and lift the command verbatim. The orchestrating files (",{"type":51,"tag":88,"props":2796,"children":2798},{"className":2797},[],[2799],{"type":56,"value":2800},"continuous-modernization-guide.md",{"type":56,"value":95},{"type":51,"tag":88,"props":2803,"children":2805},{"className":2804},[],[2806],{"type":56,"value":823},{"type":56,"value":2808},") explicitly point at them (\"Use the ",{"type":51,"tag":88,"props":2810,"children":2812},{"className":2811},[],[2813],{"type":56,"value":2814},"\u002Fsource",{"type":56,"value":2816}," skill for the exact commands\"). ",{"type":51,"tag":88,"props":2818,"children":2820},{"className":2819},[],[2821],{"type":56,"value":2739},{"type":56,"value":2823}," is a fallback used ONLY when (a) no reference file covers the capability, or (b) a documented command demonstrably fails because the installed CLI version diverges from the reference. Treat ",{"type":51,"tag":88,"props":2825,"children":2827},{"className":2826},[],[2828],{"type":56,"value":2739},{"type":56,"value":2830}," probes the user can see as a signal that the agent didn't read its own skill — that is the failure mode this rule prevents.",{"type":51,"tag":375,"props":2832,"children":2833},{},[2834],{"type":56,"value":2835},"MUST NOT make decisions on behalf of the user",{"type":51,"tag":375,"props":2837,"children":2838},{},[2839],{"type":56,"value":2840},"MUST NOT editorialize or use subjective language — no \"interesting\", \"fascinating\", \"notably\", \"impressive\", \"remarkable\". State findings as facts.",{"type":51,"tag":375,"props":2842,"children":2843},{},[2844],{"type":56,"value":2845},"MUST NOT prompt for authentication before the user has declared an intent. Auth prompts come from the tool a chosen action needs, framed around that action.",{"type":51,"tag":375,"props":2847,"children":2848},{},[2849],{"type":56,"value":2850},"MUST NOT overclaim freshness. If you did NOT fetch a resource this turn, lead with \"last I checked\" (past tense throughout) and offer to refresh. Never promise proactive surfacing (\"I'll let you know when…\") unless actively polling — make the reactive model explicit.",{"type":51,"tag":375,"props":2852,"children":2853},{},[2854,2856,2860],{"type":56,"value":2855},"MUST NOT infer one resource's state from another — each MCP resource (job, tasks, artifacts) is its own source of truth. A job in an active state does NOT imply no pending user tasks. Fetch each resource directly when relevant. See ",{"type":51,"tag":260,"props":2857,"children":2858},{"href":1507},[2859],{"type":56,"value":1510},{"type":56,"value":153},{"type":51,"tag":375,"props":2862,"children":2863},{},[2864],{"type":56,"value":2865},"MUST NOT mix unrelated transformation goals in the same chat without warning. On every shift to a different goal, suggest the user start a new chat session (they start it themselves). Keep re-offers terse. If the user declines, proceed to answer their question about the other job — do not refuse or redirect back to the original goal. Just avoid mixing cached state (e.g., don't apply VMware findings to the .NET question).",{"type":51,"tag":375,"props":2867,"children":2868},{},[2869,2871],{"type":56,"value":2870},"MUST store state in ",{"type":51,"tag":88,"props":2872,"children":2874},{"className":2873},[],[2875],{"type":56,"value":1297},{"type":51,"tag":972,"props":2877,"children":2878},{},[],{"type":51,"tag":59,"props":2880,"children":2882},{"id":2881},"reference",[2883],{"type":56,"value":2884},"Reference",{"type":51,"tag":76,"props":2886,"children":2888},{"id":2887},"core",[2889],{"type":56,"value":2890},"Core",{"type":51,"tag":166,"props":2892,"children":2893},{},[2894,2910],{"type":51,"tag":170,"props":2895,"children":2896},{},[2897],{"type":51,"tag":174,"props":2898,"children":2899},{},[2900,2905],{"type":51,"tag":178,"props":2901,"children":2902},{},[2903],{"type":56,"value":2904},"Topic",{"type":51,"tag":178,"props":2906,"children":2907},{},[2908],{"type":56,"value":2909},"File",{"type":51,"tag":189,"props":2911,"children":2912},{},[2913,2928,2944],{"type":51,"tag":174,"props":2914,"children":2915},{},[2916,2921],{"type":51,"tag":196,"props":2917,"children":2918},{},[2919],{"type":56,"value":2920},"Authentication (sign-in, AWS credentials, CLI credentials, errors)",{"type":51,"tag":196,"props":2922,"children":2923},{},[2924],{"type":51,"tag":260,"props":2925,"children":2926},{"href":1645},[2927],{"type":56,"value":1645},{"type":51,"tag":174,"props":2929,"children":2930},{},[2931,2936],{"type":51,"tag":196,"props":2932,"children":2933},{},[2934],{"type":56,"value":2935},"Tools (MCP tools, CLI commands, connectors, HITL, troubleshooting)",{"type":51,"tag":196,"props":2937,"children":2938},{},[2939],{"type":51,"tag":260,"props":2940,"children":2942},{"href":2941},"references\u002Ftools.md",[2943],{"type":56,"value":2941},{"type":51,"tag":174,"props":2945,"children":2946},{},[2947,2952],{"type":51,"tag":196,"props":2948,"children":2949},{},[2950],{"type":56,"value":2951},"Workflow (discovery, transforms, execution, planning, context, display)",{"type":51,"tag":196,"props":2953,"children":2954},{},[2955],{"type":51,"tag":260,"props":2956,"children":2957},{"href":1507},[2958],{"type":56,"value":1507},{"type":51,"tag":76,"props":2960,"children":2962},{"id":2961},"workload-types",[2963],{"type":56,"value":2964},"Workload Types",{"type":51,"tag":166,"props":2966,"children":2967},{},[2968,2983],{"type":51,"tag":170,"props":2969,"children":2970},{},[2971],{"type":51,"tag":174,"props":2972,"children":2973},{},[2974,2978],{"type":51,"tag":178,"props":2975,"children":2976},{},[2977],{"type":56,"value":182},{"type":51,"tag":178,"props":2979,"children":2980},{},[2981],{"type":56,"value":2982},"Files",{"type":51,"tag":189,"props":2984,"children":2985},{},[2986,3002,3019,3036,3052],{"type":51,"tag":174,"props":2987,"children":2988},{},[2989,2993],{"type":51,"tag":196,"props":2990,"children":2991},{},[2992],{"type":56,"value":93},{"type":51,"tag":196,"props":2994,"children":2995},{},[2996],{"type":51,"tag":88,"props":2997,"children":2999},{"className":2998},[],[3000],{"type":56,"value":3001},"references\u002Fdotnet*.md",{"type":51,"tag":174,"props":3003,"children":3004},{},[3005,3010],{"type":51,"tag":196,"props":3006,"children":3007},{},[3008],{"type":56,"value":3009},"SQL\u002FDatabase",{"type":51,"tag":196,"props":3011,"children":3012},{},[3013],{"type":51,"tag":88,"props":3014,"children":3016},{"className":3015},[],[3017],{"type":56,"value":3018},"references\u002Fsql*.md",{"type":51,"tag":174,"props":3020,"children":3021},{},[3022,3027],{"type":51,"tag":196,"props":3023,"children":3024},{},[3025],{"type":56,"value":3026},"Mainframe",{"type":51,"tag":196,"props":3028,"children":3029},{},[3030],{"type":51,"tag":88,"props":3031,"children":3033},{"className":3032},[],[3034],{"type":56,"value":3035},"references\u002Fmainframe*.md",{"type":51,"tag":174,"props":3037,"children":3038},{},[3039,3043],{"type":51,"tag":196,"props":3040,"children":3041},{},[3042],{"type":56,"value":101},{"type":51,"tag":196,"props":3044,"children":3045},{},[3046],{"type":51,"tag":88,"props":3047,"children":3049},{"className":3048},[],[3050],{"type":56,"value":3051},"references\u002Fvmware*.md",{"type":51,"tag":174,"props":3053,"children":3054},{},[3055,3059],{"type":51,"tag":196,"props":3056,"children":3057},{},[3058],{"type":56,"value":367},{"type":51,"tag":196,"props":3060,"children":3061},{},[3062],{"type":51,"tag":88,"props":3063,"children":3065},{"className":3064},[],[3066],{"type":56,"value":3067},"references\u002Fcontinuous-modernization*.md",{"type":51,"tag":66,"props":3069,"children":3070},{},[3071,3073,3078,3079,3085],{"type":56,"value":3072},"Each workload type has a root reference file with its capabilities, workflow, and agent details. Additional files with the same prefix provide deeper guidance (e.g., ",{"type":51,"tag":88,"props":3074,"children":3076},{"className":3075},[],[3077],{"type":56,"value":823},{"type":56,"value":95},{"type":51,"tag":88,"props":3080,"children":3082},{"className":3081},[],[3083],{"type":56,"value":3084},"continuous-modernization-discovery.md",{"type":56,"value":1818},{"type":51,"tag":3087,"props":3088,"children":3089},"style",{},[3090],{"type":56,"value":3091},"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":3093,"total":3198},[3094,3111,3131,3143,3160,3173,3183],{"slug":3095,"name":3095,"fn":3096,"description":3097,"org":3098,"tags":3099,"stars":29,"repoUrl":30,"updatedAt":3110},"amazon-location-service","integrate Amazon Location Service maps","Integrates Amazon Location Service APIs for AWS applications. Use this skill when users want to add maps (interactive MapLibre or static images); geocode addresses to coordinates or reverse geocode coordinates to addresses; calculate routes, travel times, or service areas; find places and businesses through text search, nearby search, or autocomplete suggestions; retrieve detailed place information including hours, contacts, and addresses; monitor geographical boundaries with geofences; or track device locations. Covers authentication, SDK integration, and all Amazon Location Service capabilities.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3100,3103,3104,3107],{"name":3101,"slug":3102,"type":16},"API Development","api-development",{"name":27,"slug":28,"type":16},{"name":3105,"slug":3106,"type":16},"Maps","maps",{"name":3108,"slug":3109,"type":16},"Navigation","navigation","2026-07-12T08:39:49.88311",{"slug":3112,"name":3112,"fn":3113,"description":3114,"org":3115,"tags":3116,"stars":29,"repoUrl":30,"updatedAt":3130},"amplify-workflow","build and deploy apps with AWS Amplify","Build and deploy full-stack web and mobile apps with AWS Amplify Gen2 (TypeScript code-first). Covers auth (Cognito), data (AppSync\u002FDynamoDB including schema modeling, enum types, relationships, authorization rules), storage (S3), functions, APIs, and AI (Amplify AI Kit with Bedrock). Supports React, Next.js, Vue, Angular, React Native, Flutter, Swift, and Android. Always use this skill for Amplify Gen2 topics — even for questions you think you know — it contains validated, version-specific patterns that prevent common mistakes. TRIGGER when: user mentions Amplify Gen2; project has amplify\u002F directory or amplify_outputs; code imports @aws-amplify packages; user asks about defineBackend, defineAuth, defineData, defineStorage, or npx ampx. SKIP: Amplify Gen1 (amplify CLI v6), standalone SAM\u002FCDK without Amplify (use aws-serverless), direct Bedrock without Amplify AI Kit (use bedrock).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3117,3120,3121,3124,3127],{"name":3118,"slug":3119,"type":16},"Auth","auth",{"name":27,"slug":28,"type":16},{"name":3122,"slug":3123,"type":16},"Database","database",{"name":3125,"slug":3126,"type":16},"Deployment","deployment",{"name":3128,"slug":3129,"type":16},"TypeScript","typescript","2026-07-12T08:39:43.500162",{"slug":3132,"name":3132,"fn":3133,"description":3134,"org":3135,"tags":3136,"stars":29,"repoUrl":30,"updatedAt":3142},"api-gateway","build and manage Amazon API Gateway APIs","Build, manage, and operate APIs with Amazon API Gateway (REST, HTTP, and WebSocket). Triggers on phrases like: API Gateway, REST API, HTTP API, WebSocket API, custom domain, Lambda authorizer, usage plan, throttling, CORS, VPC link, private API. Also covers troubleshooting API Gateway errors (4xx, 5xx, timeout, CORS failures) and IaC templates containing API Gateway resources. For general REST API design unrelated to AWS, do not trigger.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3137,3138,3139],{"name":3101,"slug":3102,"type":16},{"name":27,"slug":28,"type":16},{"name":3140,"slug":3141,"type":16},"REST API","rest-api","2026-07-12T08:39:00.149339",{"slug":3144,"name":3144,"fn":3145,"description":3146,"org":3147,"tags":3148,"stars":29,"repoUrl":30,"updatedAt":3159},"aws-architecture-diagram","generate AWS architecture diagrams","Generate validated AWS architecture diagrams as draw.io XML using official AWS4 icon libraries. Use this skill whenever the user wants to create, generate, or design AWS architecture diagrams, cloud infrastructure diagrams, or system design visuals. Also triggers for requests to visualize existing infrastructure from CloudFormation, CDK, or Terraform code. Supports two modes: analyze an existing codebase to auto-generate diagrams, or brainstorm interactively from scratch. Exports .drawio files with optional PNG\u002FSVG\u002FPDF export via draw.io desktop CLI.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3149,3152,3153,3156],{"name":3150,"slug":3151,"type":16},"Architecture","architecture",{"name":27,"slug":28,"type":16},{"name":3154,"slug":3155,"type":16},"Design","design",{"name":3157,"slug":3158,"type":16},"Diagrams","diagrams","2026-07-12T08:37:11.012278",{"slug":3161,"name":3161,"fn":3162,"description":3163,"org":3164,"tags":3165,"stars":29,"repoUrl":30,"updatedAt":3172},"aws-lambda","build and deploy AWS Lambda functions","Design, build, deploy, test, and debug serverless applications with AWS Lambda. Triggers on phrases like: Lambda function, event source, serverless application, API Gateway, EventBridge, Step Functions, serverless API, event-driven architecture, Lambda trigger. For deploying non-serverless apps to AWS, use deploy-on-aws plugin instead.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3166,3167,3168,3169],{"name":3101,"slug":3102,"type":16},{"name":27,"slug":28,"type":16},{"name":3125,"slug":3126,"type":16},{"name":3170,"slug":3171,"type":16},"Serverless","serverless","2026-07-12T08:38:58.598492",{"slug":3174,"name":3174,"fn":3175,"description":3176,"org":3177,"tags":3178,"stars":29,"repoUrl":30,"updatedAt":3182},"aws-lambda-durable-functions","build resilient AWS Lambda durable functions","Build resilient, long-running, multi-step applications with AWS Lambda durable functions with automatic state persistence, retry logic, and orchestration for long-running executions. Covers the critical replay model, step operations, wait\u002Fcallback patterns, error handling with saga pattern, testing with LocalDurableTestRunner. Triggers on phrases like: lambda durable functions, workflow orchestration, state machines, retry\u002Fcheckpoint patterns, long-running stateful Lambda functions, saga pattern, human-in-the-loop callbacks, and reliable serverless applications.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3179,3180,3181],{"name":3150,"slug":3151,"type":16},{"name":27,"slug":28,"type":16},{"name":3170,"slug":3171,"type":16},"2026-07-12T08:39:05.546173",{"slug":3184,"name":3184,"fn":3185,"description":3186,"org":3187,"tags":3188,"stars":29,"repoUrl":30,"updatedAt":3197},"aws-lambda-managed-instances","configure AWS Lambda Managed Instances","Evaluate, configure, and migrate workloads to AWS Lambda Managed Instances (LMI). Triggers on: Lambda Managed Instances, LMI, capacity provider, multi-concurrency Lambda, dedicated instance Lambda, EC2-backed Lambda, cold start elimination, Graviton Lambda, instance type for Lambda, scheduled scaling for LMI, Lambda cost optimization with Reserved Instances or Savings Plans. Also trigger when users describe high-volume predictable workloads seeking cost savings, want to scale LMI capacity on a schedule, or compare Lambda vs EC2 for steady-state traffic. For standard Lambda without LMI, use the aws-lambda skill instead.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3189,3190,3191,3194],{"name":27,"slug":28,"type":16},{"name":3125,"slug":3126,"type":16},{"name":3192,"slug":3193,"type":16},"Infrastructure","infrastructure",{"name":3195,"slug":3196,"type":16},"Performance","performance","2026-07-12T08:39:07.007071",33,{"items":3200,"total":3370},[3201,3220,3235,3245,3256,3269,3279,3289,3310,3325,3340,3355],{"slug":3202,"name":3202,"fn":3203,"description":3204,"org":3205,"tags":3206,"stars":3217,"repoUrl":3218,"updatedAt":3219},"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},[3207,3208,3211,3214],{"name":27,"slug":28,"type":16},{"name":3209,"slug":3210,"type":16},"Debugging","debugging",{"name":3212,"slug":3213,"type":16},"Logs","logs",{"name":3215,"slug":3216,"type":16},"Observability","observability",9427,"https:\u002F\u002Fgithub.com\u002Fawslabs\u002Fmcp","2026-07-12T08:37:22.601527",{"slug":3221,"name":3222,"fn":3223,"description":3224,"org":3225,"tags":3226,"stars":3217,"repoUrl":3218,"updatedAt":3234},"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},[3227,3229,3230,3231,3232],{"name":116,"slug":3228,"type":16},"aurora",{"name":27,"slug":28,"type":16},{"name":3122,"slug":3123,"type":16},{"name":3170,"slug":3171,"type":16},{"name":3233,"slug":294,"type":16},"SQL","2026-07-12T08:36:45.053393",{"slug":3236,"name":3237,"fn":3223,"description":3224,"org":3238,"tags":3239,"stars":3217,"repoUrl":3218,"updatedAt":3244},"aurora-dsql","aurora dsql",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3240,3241,3242,3243],{"name":27,"slug":28,"type":16},{"name":3122,"slug":3123,"type":16},{"name":3170,"slug":3171,"type":16},{"name":3233,"slug":294,"type":16},"2026-07-12T08:36:42.694299",{"slug":3246,"name":3247,"fn":3223,"description":3224,"org":3248,"tags":3249,"stars":3217,"repoUrl":3218,"updatedAt":3255},"aws-dsql","aws dsql",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3250,3251,3252,3253,3254],{"name":27,"slug":28,"type":16},{"name":3122,"slug":3123,"type":16},{"name":21,"slug":22,"type":16},{"name":3170,"slug":3171,"type":16},{"name":3233,"slug":294,"type":16},"2026-07-12T08:36:38.584057",{"slug":3257,"name":3258,"fn":3223,"description":3224,"org":3259,"tags":3260,"stars":3217,"repoUrl":3218,"updatedAt":3268},"distributed-postgres","distributed postgres",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3261,3262,3263,3266,3267],{"name":27,"slug":28,"type":16},{"name":3122,"slug":3123,"type":16},{"name":3264,"slug":3265,"type":16},"PostgreSQL","postgresql",{"name":3170,"slug":3171,"type":16},{"name":3233,"slug":294,"type":16},"2026-07-12T08:36:46.530743",{"slug":3270,"name":3271,"fn":3223,"description":3224,"org":3272,"tags":3273,"stars":3217,"repoUrl":3218,"updatedAt":3278},"distributed-sql","distributed sql",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3274,3275,3276,3277],{"name":27,"slug":28,"type":16},{"name":3122,"slug":3123,"type":16},{"name":3170,"slug":3171,"type":16},{"name":3233,"slug":294,"type":16},"2026-07-12T08:36:48.104182",{"slug":3280,"name":3280,"fn":3223,"description":3224,"org":3281,"tags":3282,"stars":3217,"repoUrl":3218,"updatedAt":3288},"dsql",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[3283,3284,3285,3286,3287],{"name":27,"slug":28,"type":16},{"name":3122,"slug":3123,"type":16},{"name":21,"slug":22,"type":16},{"name":3170,"slug":3171,"type":16},{"name":3233,"slug":294,"type":16},"2026-07-12T08:36:36.374512",{"slug":3290,"name":3290,"fn":3291,"description":3292,"org":3293,"tags":3294,"stars":3307,"repoUrl":3308,"updatedAt":3309},"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},[3295,3298,3301,3304],{"name":3296,"slug":3297,"type":16},"Accounting","accounting",{"name":3299,"slug":3300,"type":16},"Analytics","analytics",{"name":3302,"slug":3303,"type":16},"Cost Optimization","cost-optimization",{"name":3305,"slug":3306,"type":16},"Finance","finance",3176,"https:\u002F\u002Fgithub.com\u002Fawslabs\u002Fagentcore-samples","2026-07-12T08:40:03.29555",{"slug":3311,"name":3311,"fn":3312,"description":3313,"org":3314,"tags":3315,"stars":3307,"repoUrl":3308,"updatedAt":3324},"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},[3316,3317,3318,3321],{"name":27,"slug":28,"type":16},{"name":3305,"slug":3306,"type":16},{"name":3319,"slug":3320,"type":16},"Management","management",{"name":3322,"slug":3323,"type":16},"Reporting","reporting","2026-07-12T08:40:02.066471",{"slug":3326,"name":3326,"fn":3327,"description":3328,"org":3329,"tags":3330,"stars":3307,"repoUrl":3308,"updatedAt":3339},"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},[3331,3332,3333,3336],{"name":3299,"slug":3300,"type":16},{"name":3305,"slug":3306,"type":16},{"name":3334,"slug":3335,"type":16},"Financial Statements","financial-statements",{"name":3337,"slug":3338,"type":16},"Variance Analysis","variance-analysis","2026-07-12T08:40:00.79141",{"slug":3341,"name":3341,"fn":3342,"description":3343,"org":3344,"tags":3345,"stars":3307,"repoUrl":3308,"updatedAt":3354},"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},[3346,3349,3352],{"name":3347,"slug":3348,"type":16},"Automation","automation",{"name":3350,"slug":3351,"type":16},"Documents","documents",{"name":3353,"slug":3341,"type":16},"PDF","2026-07-12T08:41:44.135656",{"slug":3356,"name":3356,"fn":3357,"description":3358,"org":3359,"tags":3360,"stars":3307,"repoUrl":3308,"updatedAt":3369},"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},[3361,3362,3365,3366],{"name":3296,"slug":3297,"type":16},{"name":3363,"slug":3364,"type":16},"Data Analysis","data-analysis",{"name":3305,"slug":3306,"type":16},{"name":3367,"slug":3368,"type":16},"KPI","kpi","2026-07-12T08:39:59.54971",150]