plugins/aws-transform/skills/aws-transform/SKILL.md
Migrate, modernize, and upgrade codebases to AWS. Transforms .NET Framework to .NET 8/10, mainframe COBOL to Java, VMware VMs to EC2, SQL Server to Aurora, and upgrades Java/Python/Node.js versions and AWS SDKs. Use when the user says "migrate .NET to AWS", "upgrade Java to 17/21", "modernize COBOL", "modernize mainframe", "move VMware to EC2", "convert SQL Server to Aurora", "upgrade Python version", "migrate AWS SDK", or "transform this codebase". Don't use for infrastructure provisioning, CI/CD pipelines, or general coding tasks.
npx skillsauth add awslabs/agent-plugins aws-transformInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Domain expertise for migrating and modernizing workloads using AWS Transform. Covers .NET Framework to .NET 8/10, 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.
This skill requires the AWS Transform MCP server (aws-transform-mcp). Configure it in your agent's MCP settings:
{
"mcpServers": {
"aws-transform-mcp": {
"command": "uvx",
"args": [
"awslabs.aws-transform-mcp-server@latest"
]
}
}
}
The AWS Transform CLI is also required for custom transformations. Install via:
curl -fsSL https://transform-cli.awsstatic.com/install.sh | bash
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.
Resume → Check .atx/context.json
Intent → Ask user what they want to do
Discovery → Scan workspace + query available agents
Scope → User selects what to modernize (GATE 1)
Assessment → Run workload assessment (NOT optional)
Requirements → Draft from assessment report
Approval → User approves requirements (GATE 2)
Tasks → Generate tasks.md
Execute → Run transforms, monitor, review diffs
Discovery finds opportunities. Assessment produces detailed findings. Requirements come from the assessment — NOT from discovery.
You MUST NOT create requirements without an assessment report. You MUST NOT start execution without requirements.md and tasks.md.
Check for .atx/context.json (workspace-relative). NEVER read ~/.aws/atx/kiro-power-context.json.
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.
No context found: Proceed directly to intent. Produce no user-visible output for this step.
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:
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.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:
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/context.json, .atx/discovery.json, .atx/assessment-report/, and .atx/specs/, then proceed to intent. Otherwise follow the resume logic in workflow reference.
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.
With projects: [Discover This Workspace] [Browse My Jobs] [Start a Specific Transform] No projects: [Browse My Jobs] [Open a Project Folder] [Start from Scratch]
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.
See auth reference for the MCP-vs-CLI auth split and how to present sign-in options.
Fast scan (~10 sec). Three things happen in parallel:
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:
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.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 list_resources returns NOT_CONFIGURED, prompt the user to sign in for the auth system needed — do not demand both.
Then 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/discovery.json — include the orchestrator → sub-agent hierarchy so later steps know what deeper capabilities are available.
See workflow reference for the workspace scanning framework.
Discovery is NOT assessment. Discovery identifies opportunities and matches them to available agents. Assessment produces the detailed findings.
For each matched workload type, read ALL reference files with its prefix (e.g., dotnet). 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.
Show migration table, then let the user select with multiSelect:
| Risk | Why | Component | Current | Target | AWS Target | Recommended Approach |
Always explain risk in plain language in the "Why" column — use the user-facing phrases from the Risk Classification table in workflow reference. Never show a bare HIGH/MED/LOW label without explanation.
User selects what to modernize.
This is NOT optional. Run the workload's assessment BEFORE creating requirements.
Tell the user: "I'll assess your workload. The assessment report drives the migration plan."
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.
General pattern for agent-based assessment:
create_job; use control_job to restart if stopped)categoryType: "CUSTOMER_INPUT".get_resource resource="artifact".atx/assessment-report/Rule: NEVER batch workspace creation, job creation, and uploads into a single turn without user confirmation at each decision point.
Use 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.
Update .atx/context.json with phase: "assessed", workspace ID, job ID.
Now create .atx/specs/requirements.md using the assessment report — NOT discovery findings.
.atx/assessment-report/ for detailed findingsDo NOT create tasks.md yet.
Show requirements summary and let the user choose: [Looks Good] [Edit] [Add Component]
Ask the user: "Requirements finalized. Ready to create the execution plan?" [Create Plan] [Edit More]
Generate tasks.md from approved requirements:
Present options: [Start Execution] [Review Tasks] [Modify]
See workflow reference for full details.
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.
General pattern for agent-based execution:
When creating new jobs, always:
create_job — what to transform, from what, to whatsend_message — project specifics, discovery findings, blockerscategoryType: "CUSTOMER_INPUT"When the AWS Transform agent asks for input, needs files, or hits a checkpoint:
Always use categoryType: "CUSTOMER_INPUT" when uploading files to an agent:
upload_artifact(
workspaceId="...", jobId="...",
content="/path/to/source.zip",
fileType="ZIP",
categoryType="CUSTOMER_INPUT"
)
| categoryType | When to Use |
| ----------------- | --------------------------------------------------------- |
| CUSTOMER_INPUT | Uploading files TO the agent (source code, configs, data) |
| CUSTOMER_OUTPUT | Downloading files FROM the agent (reports, migrated code) |
| HITL_FROM_USER | User responses to agent HITL tasks |
See workflow reference for agent request handling patterns.
Review diffs after every code change. User must approve.
Update tasks.md checkboxes + .atx/context.json after every step.
Save .atx/context.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 for the full schema.
Resume: read phase, pick up from that phase.
list_resources with resource: "agents" (paginated) — do not hardcode agent names.atx/context.json| Topic | File | | ----------------------------------------------------------------------- | ------------------------------------------------ | | Authentication (sign-in, AWS credentials, CLI credentials, errors) | references/auth.md | | Tools (MCP tools, CLI commands, connectors, HITL, troubleshooting) | references/tools.md | | Workflow (discovery, transforms, execution, planning, context, display) | references/workflow.md |
| Workload | Files |
| ------------ | -------------------------- |
| .NET | references/dotnet*.md |
| SQL/Database | references/sql*.md |
| Mainframe | references/mainframe*.md |
| VMware | references/vmware*.md |
| Custom | references/custom*.md |
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., custom-cli-reference.md, custom-repo-analysis.md).
development
Build workflows with AWS Step Functions state machines using the JSONata query language. Covers Amazon States Language (ASL) structure, state types, variables, data transformation, error handling, AWS service integration, and migrating from the JSONPath to the JSONata query language.
tools
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.
development
Validates the user's environment for SageMaker AI operations — checks SDK version, AWS region, and execution role. Use when the user says "set up", "getting started", "check my environment", "configure SDK", or as the first step in any plan involving SageMaker/Bedrock training, evaluation, or deployment.
data-ai
Selects a base model for the user's use case by querying SageMaker Hub. Use when the user asks which model to use, wants to select or change their base model, mentions a model name or family (e.g., "Llama", "Mistral", "Nova"), or wants to evaluate a base model — always activate even for known model names because the exact Hub model ID must be resolved. Queries available models, presents benchmarks and licenses, and confirms selection.