Best for
- Use when the user says "migrate .
awslabs/agent-plugins/plugins/aws-transform/skills/aws-transform/SKILL.md
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/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",
Decision brief
Migrate, modernize, and upgrade codebases to AWS. Run analysis on repos for tech debt, security vulnerabilities, and modernization opportunities.
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/awslabs/agent-plugins --skill "plugins/aws-transform/skills/aws-transform"Inspect the Agent Skill "aws-transform" from https://github.com/awslabs/agent-plugins/blob/a35c295c62452468446d3a3fa7e2590cd27474ab/plugins/aws-transform/skills/aws-transform/SKILL.md at commit a35c295c62452468446d3a3fa7e2590cd27474ab. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
Look for an explicit workload signal in the user's request — a named technology (.NET, VMware, SQL Server/Aurora/Oracle/MySQL, mainframe/COBOL), workload-specific terminology (Hyper-V, EC2 rehost, stored procs, CICS, JCL), or file/project signals already in the conversation. If…
Workload-specific rules ALWAYS win over the keyword list in Step C. Do not let "analysis" or "tech debt" phrasing override these.
This 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.
1. 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:
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.
Permission review
The documentation includes network, browsing, or remote request actions.
INSTALLED=$(atx ct --version | head -1); LATEST=$(curl -fsSL "https://transform-cli.awsstatic.com/index.json" 2>/dev/null | grep -o '"latest"[[:space:]]*:[[:space:]]*"[^"]*"' | sed 's/.*"latest"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/'); The documentation asks the agent to read local files, directories, or repositories.
*Remote analysis has THREE compute modes** (`atx ct remote analysis --mode <ec2|batch|aws-managed>`). `aws-managed` runs on the **AWS-managed fleet with NO customer infrastructure** — no VPC, no CloudFormation, no EC2/Batch stack, no provisThe documentation includes network, browsing, or remote request actions.
curl -fsSL https://transform-cli.awsstatic.com/install.sh | bashThe documentation asks the agent to read local files, directories, or repositories.
No projects: [Browse My Jobs] [Open a Project Folder] [Start from Scratch] [Analyze for findings]The documentation asks the agent to run terminal commands or scripts.
MUST run CLI commands in background — never block the conversationEvidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 93/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 868 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
STOP. Before reading files, analyzing code, or starting any workflow, identify the workload first, then route.
Look for an explicit workload signal in the user's request — a named technology (.NET, VMware, SQL Server/Aurora/Oracle/MySQL, mainframe/COBOL), workload-specific terminology (Hyper-V, EC2 rehost, stored procs, CICS, JCL), or file/project signals already in the conversation. If no signal is present, treat the request as workload-unspecified.
Workload-specific rules ALWAYS win over the keyword list in Step C. Do not let "analysis" or "tech debt" phrasing override these.
| Workload | Route |
|---|---|
| .NET | Ask the user via AskUserQuestion: "For your .NET work, are you looking to modernize to .NET 8/10 (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 / security / CVEs" → route to continuous modernization (see Step D). |
| 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. |
| SQL / Database | Proceed to the Overview section. NEVER route SQL/database requests to continuous modernization — SQL Server, Oracle, MySQL, and Aurora migrations are handled by the SQL workload agent, see sql. |
| Mainframe / COBOL | Proceed to the Overview section. NEVER route mainframe requests to continuous modernization — COBOL/CICS/JCL transformations are handled by the mainframe workload agent, see mainframe. |
| Workload-unspecified | Continue to Step C. |
This 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.
If the user's workload-unspecified request matches any of these intents, route to continuous modernization — do NOT scan files yourself:
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:
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.
Show it exactly once per session. Do NOT repeat it on subsequent continuous modernization requests in the same session.
Telemetry opt-out. If the user explicitly asks to disable telemetry during the chat session:
--telemetry for the rest of the session (see each sub-skill's Telemetry section for the flag format).ATX_DISABLE_TELEMETRY=true inline on every atx ct command for the rest of the session — not only analysis/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 ...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.
Verify local CLI dispatch before checking versions or AWS configuration. Run this without redirecting stderr:
atx ct --version
Classify failures before continuing:
atx: command not found, install the AWS Transform CLI: curl -fsSL https://transform-cli.awsstatic.com/install.sh | bash, then restart the shell or source its profile.atx process runs but reports unknown command 'ct', do NOT reinstall blindly or investigate AWS credentials/region. Follow the command-resolution troubleshooting first.Check whether the working CLI is up to date:
INSTALLED=$(atx ct --version | head -1); LATEST=$(curl -fsSL "https://transform-cli.awsstatic.com/index.json" 2>/dev/null | grep -o '"latest"[[:space:]]*:[[:space:]]*"[^"]*"' | sed 's/.*"latest"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/'); echo "Installed: ${INSTALLED:-not found}, Latest: ${LATEST:-unknown}"
If LATEST is known and newer than INSTALLED, update with curl -fsSL https://transform-cli.awsstatic.com/install.sh | bash, then restart the shell or source its profile.
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:
aws sts get-caller-identity
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.
If local atx ct dispatch succeeded but a later command fails, then check runtime configuration:
AWS_PROFILE points at a valid account with refreshed credentialsAWS_REGION is set to a supported regionATX_CUSTOM_ENDPOINT is set in the environment (only if you use a custom endpoint)An unknown command 'ct' failure is a local command-resolution problem, not an AWS configuration problem; return to Step 3 instead.
Ensure a supported region has been selected (see continuous-modernization-setup.md "Choose your region") and prefixed inline (AWS_REGION=$ATX_REGION) on every atx ct command.
Then use the appropriate continuous modernization skill — see continuous-modernization. Recurring/scheduled intent ("weekly scan", "every Monday", "on a schedule", "cron") routes to continuous-modernization-schedule: scheduling is a real, shipped capability (atx ct schedule create/list/get/enable/disable/delete) that runs remotely ONLY — either an EventBridge schedule on the customer's EC2/Batch stack, or an AWS-managed server-side schedule (--mode aws-managed, no customer infrastructure). For recurring intent with no infrastructure ("no infra", "don't want to manage/provision anything"), the answer is atx ct schedule create --mode aws-managed --execution-role <arn> (server-side, nothing to provision) — offer this; do NOT tell the user that recurring analyses require deploying infrastructure. Never claim it doesn't exist, and never offer a local cron/systemd/launchd entry as a substitute or fallback.
Remote analysis has THREE compute modes (atx ct remote analysis --mode <ec2|batch|aws-managed>). aws-managed runs on the AWS-managed fleet with NO customer infrastructure — no VPC, no CloudFormation, no EC2/Batch stack, no provisioning or permission-consent step. When the user asks to run remotely/on AWS but says "no infrastructure", "don't want to set up / manage / provision anything", "no EC2", "no Batch stack", "fully managed", or "just run it for me", the answer is --mode aws-managed — route to continuous-modernization-aws-managed-execution and read that file before answering. --mode aws-managed is real and shipped; NEVER tell the user it doesn't exist or that "all remote options require infrastructure", and do NOT probe --help to decide — the reference file documents it. ec2/batch are the customer-owned options (they DO deploy a stack); Batch/Fargate is not the no-infrastructure option.
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 / security / 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.
Do NOT quote specific dollar amounts, hourly rates, or time estimates for AWS resources or analyses. This includes:
Instead:
This applies to all responses, all skills, and all situations.
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.
If Step A/B 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. 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.
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.
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] [Analyze for findings] No projects: [Browse My Jobs] [Open a Project Folder] [Start from Scratch] [Analyze for findings]
Custom vs continuous modernization routing. When the user's intent is clear, route to the correct skill set using the decision table in continuous-modernization reference. Key rule: named transformation AND no prior continuous modernization findings → Custom. Analysis/reporting/remediation of existing findings → continuous modernization. When in doubt → continuous modernization.
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--help to figure out a CLI invocation that the reference files already document. The capability-specific reference files in references/ (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 /source 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..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 |
| continuous modernization | references/continuous-modernization*.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., continuous-modernization-setup.md, continuous-modernization-discovery.md).
Frequently asked questions
Migrate, modernize, and upgrade codebases to AWS. Run analysis on repos for tech debt, security vulnerabilities, and modernization opportunities.
The source record exposes this install command: npx skills add https://github.com/awslabs/agent-plugins --skill "plugins/aws-transform/skills/aws-transform". Inspect the command and pinned source before running it.
Static rules flagged network, read-files, exec-script in the source; the page lists the matching lines and excerpts.
Alternatives
K-Dense-AI/scientific-agent-skills
Distributed computing for larger-than-RAM pandas/NumPy workflows. Use when you need to scale existing pandas/NumPy code beyond memory or across clusters. Best for parallel file processing, distributed ML, integration with existing pandas code. For out-of-core analytics on single machine use vaex; for in-memory speed use polars.
elementalsouls/Claude-BugHunter
Local-tooling companion to the bug-bounty orchestrator — carries the SAME complete bug-bounty workflow, but reach for THIS variant when you also need to resolve where tools, wordlists, and clones are installed on the local machine (jhaddix, SecLists, trufflehog, ffuf, dalfox, ghauri); for pure orchestration/routing use the bug-bounty skill. Workflow it covers — recon (subdomain enumeration, asset discovery, fingerprinting, HackerOne scope, source code audit), pre-hunt learning (disclosed reports
elementalsouls/Claude-BugHunter
Complete bug bounty workflow — recon (subdomain enumeration, asset discovery, fingerprinting, HackerOne scope, source code audit), pre-hunt learning (disclosed reports, tech stack research, mind maps, threat modeling), vulnerability hunting (IDOR, SSRF, XSS, auth bypass, CSRF, race conditions, SQLi, XXE, file upload, business logic, GraphQL, HTTP smuggling, cache poisoning, OAuth, timing side-channels, OIDC, SSTI, subdomain takeover, cloud misconfig, ATO chains, agentic AI), LLM/AI security test
synthetic-sciences/openscience
Distributed computing for larger-than-RAM pandas/NumPy workflows. Use when you need to scale existing pandas/NumPy code beyond memory or across clusters. Best for parallel file processing, distributed ML, integration with existing pandas code. For out-of-core analytics on single machine use vaex; for in-memory speed use polars.