AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
Agent Advisor provides a structured, multi-phase workflow to help users determine the optimal AWS runtime for their AI agents. It uses a deterministic scoring engine to evaluate requirements and guides users through a process that includes discovery, architectural design, cost estimation, and the creation of an executable proof-of-concept. The skill supports various AWS compute options, including AgentCore, ECS, EKS, and Lambda, and integrates with migration engines for existing workloads.
What it does
- Recommends AWS runtimes for AI agents based on technical requirements.
- Generates migration plans for existing AI workloads moving to AWS.
- Provides architectural guidance for agentic systems.
- Assembles executable proof-of-concept scaffolding.
- Estimates coarse cost magnitudes for proposed agent deployments.
- Integrates with external migration engines for workload transitions.
When to use it
- When you need to decide which AWS runtime is best for a new AI agent.
- When migrating an existing AI agent workload to AWS.
- When you need to add services like memory, identity, or observability to an existing AWS agent.
- When you require a structured plan and POC for deploying agents on AWS.
Advantages
- Provides a deterministic, repeatable recommendation process.
- Supports a wide range of AWS compute environments.
- Offers a unified flow from initial idea to executable POC.
- Adapts to both technical and business-focused user backgrounds.
Usage examples
- “I have an agent idea, what do I build?”
- The agent initiates the intake process to clarify your requirements and recommend an appropriate AWS architecture.
- “Move my agents to AWS.”
- The agent triggers the migration workflow to assess your existing workload and plan the transition to an AWS runtime.
- “Which runtime for my agent, AgentCore vs ECS vs EKS vs Lambda?”
- The agent runs a scoring analysis to compare these runtimes against your specific agentic needs.
- “Add AgentCore services to an agent already on AWS.”
- The agent enters the add-capabilities branch to guide you through integrating memory, gateway, and observability services.
Install
Download the skill as a ZIP:
https://autogineer.com/agent-skills/aws/agent-advisor/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip agent-advisor.zip -d .agents/skills
Documentation by AWS
AWS Agent Advisor
Helps startups decide how and where to run AI agents on AWS. Deterministic scoring recommends a runtime; the conversation adapts to the user's technical background.
Definitions
"Load" = Read the file with the Read tool and follow it. Do not summarize or skip.
$RUN_DIR= the run directory under.agent-advisor/(e.g..agent-advisor/0630-1430/), created in Intake.$PLUGIN=${CLAUDE_PLUGIN_ROOT}(the installed plugin root). On Claude Code this token substitutes inline. If${CLAUDE_PLUGIN_ROOT}does not resolve (some Cursor/Codex builds, or a literal${CLAUDE_PLUGIN_ROOT}string showing up in a path error), fall back to the skill's own directory: this SKILL.md lives at<plugin>/skills/agent-advisor/SKILL.md, so the engine and its data are all inside this skill — scripts at./scripts/..., runtime profiles at./references/runtimes/..., and decision refs at./references/decision-refs/...relative to it. Prefer${CLAUDE_PLUGIN_ROOT}/skills/agent-advisor/...; use the relative fallback only when it fails to resolve.
Prerequisites
uvavailable (for scoring). Check:uv --version. If missing, tell the user to install it from the official install guide (https://docs.astral.sh/uv/getting-started/installation/ — e.g.brew install uvorpipx install uv) and stop.
Phase Structure (frontmatter)
Phase, fragment, and assembler files carry a YAML frontmatter block that declares how each
phase is composed — its inputs, triggers, fragments, assembler, artifacts, gates, and
ordering. The execution contract is the vendored references/vendored/dsl/INTERPRETER.md:
it defines every frontmatter key, the fragment/assembler model, the gate protocol
(HANDOFF_OK / GATE_FAIL), and the interpreter loop. Load it first (once, at the
start of a run), then execute each phase file's prose body. Elsewhere in this skill,
INTERPRETER.md (without a path) refers to this loaded contract.
Execution
This skill is driven by the interpreter loop in INTERPRETER.md (§ The interpreter loop):
it reads .phase-status.json, determines the current phase, runs each phase's
_preconditions / fragments / _assemble / _postconditions, advances on HANDOFF_OK
via _advances_to, and validates state. The backbone (intake → discover → clarify →
confirm → design → estimate → generate → migration-plan → poc → complete) and the
one sidebar branch (add-capabilities) are derived
from the phase files' frontmatter — they are not restated here.
Cold start (entry phase). With no run under .agent-advisor/ carrying a
.phase-status.json, begin at references/phases/intake/intake.md — this skill's entry
phase (the one carrying _init: true). On a warm start, current_phase in
.phase-status.json is authoritative (INTERPRETER.md § The interpreter loop).
Skill bindings (INTERPRETER.md § Skill bindings). This skill declares:
Run root:
.agent-advisor/—$RUN_DIRis this skill's name for the run directory (.agent-advisor/[MMDD-HHMM]/). Intake's own prose performs the_initbootstrap.State shape: § State file below (advisor-specific keys such as
entry_point,audience,recommendation_reviewed,migration_plan_ctx,migration_plan_unavailable); the shared state schema is not vendored.Run seed (optional):
$RUN_DIR/seed.json, else.agent-advisor/seed.jsonat the run root (schemascripts/schemas/seed.json) supplies machine-readable answers for a non-interactive run — the Clarify dimensions, the two gate answers, the POC mode, the live-probe answer, and aco_recommendtie-break. It is the HIGHEST-precedence source for every value it carries (clarify.md Step 2.5), which is what makes a repeated run's score comparable: the deterministic engine gets byte-identical input. A gate the seed omits is declined; a dimension the seed omits falls through to detection, then prose, then anassumedvalue that MUST be recorded in$RUN_DIR/UNANSWERED.md. With no seed, the interactive flow is unchanged.Resolved statuses:
skipped(routing resolved the phase without running it), plusnot_applicableformigration_planonly.Conditional backbone routing: the entry-point routing below. When a routing rule marks a phase not-applicable, set it
skippedand advance through its_advances_toin the same state write.
Routing & gates (orchestration)
Sidebar placement and conditional backbone routing are orchestration prose owned by
this file (INTERPRETER.md § Skill bindings, § Backbone vs sidebar).
Entry-point routing:
build_scratch→ skip Discover; Clarify → Confirm → Design → Estimate → Generate → Gate 2 → POC (any winning runtime). No migration plan (nothing existing to migrate).build_deploy→ Discover (if code) → Clarify → Confirm → Design → Estimate → Generate → Gate 1 → Migration Plan (if existing non-AWS AI workload detected and user confirms) → Gate 2 → POC (any winning runtime).migrate→ Discover (if code) → Clarify → Confirm → Design → Estimate (target-state run cost; migration TCO comparison stays with the Migration Plan engine) → Generate → Gate 1 → Migration Plan (in-skill, reusing the siblinggcp-to-awsskill) → Gate 2 → POC (any winning runtime, when the plan was produced). Declining Gate 1 keeps the classic handoff: pointer to/aws-startup-advisor:llm-to-bedrockwithhandoff-summary.md.add_capabilities→ loadreferences/phases/add-capabilities/add-capabilities.mdand follow it (no runtime scoring; writescapabilities-recommendation.md). This is a self-contained branch — it does NOT pass through Clarify / Confirm / Design / Estimate / Generate, so the phase gate below never applies to it.Temporal detection routes into
migratewith temporal units pre-seeded (see discover).
Gate semantics (backbone tail):
Gate 1 →
migration_planruns only whengenerateis done ANDrecommendation_reviewed == true(generate.md Step 5.5) AND entry point ∈ {migrate, build_deploy} AND the run is migration-eligible (generate.md Step 6) AND the user confirmed Gate 1. Otherwise resolve it:not_applicable(build_scratch / no migratable workload) orskipped(declined) — and advance.Gate 2 →
pocruns only whenphases.poc == "in_progress"(set when the user answers Gate 2 "yes" — asked in generate.md Step 7 or migration-plan.md Step 6) ANDrecommendation_reviewed == true. Any winning runtime (agentcore / ecs / eks / lambda / lambda_microvms) — the POC shape follows the verdict (poc.md Step 3 dispatch onreferences/decision-refs/poc-shapes.md). Gate 2 is only offered whenmigration_plan∈ {completed, skipped, not_applicable} — orin_progresson build_deploy only (Stage 2 failed/aborted; fallback POC from design.json per migration-plan.md failure handling); for entry pointmigrate, only whenmigration_plan == "completed"(the POC implements the plan) OR when the stage resolvednot_applicablewithmigration_plan_unavailable == "engine_absent"— a standalone deployment that does not bundle the migration engine, where Gate 2 is offered by migration-plan.md Step -1 and the POC is design-backed. A migrate-POC with no plan for any OTHER reason (the user declined) has nothing to implement.Persisting Gate 2 as
phases.poc = "in_progress"BEFORE poc.md loads makes the confirmation resumable: if the session breaks between the "yes" and the load, the interpreter re-enterspocwithout re-asking. (A declared deviation fromINTERPRETER.md§ The interpreter loop step 5's gate-then-in_progressordering — the user's confirmation is the entry event worth persisting.)
Phase gate: Do NOT load design.md / estimate.md / generate.md unless
$RUN_DIR/.phase-status.json exists and BOTH phases.clarify == "completed" AND
phases.confirm == "completed". Confirm confirms the deployment model, the service
set, and (for a co_recommend tie) the user's chosen_runtime — Design and the diagram depend on
its confirm.json output, so it must not be skipped. If the user asks to skip Clarify or Pass 2,
refuse briefly and run it.
State file (.phase-status.json)
{
"run_id": "0630-1430",
"entry_point": "build_scratch",
"audience": "technical",
"current_phase": "clarify",
"phases": {
"intake": "completed",
"discover": "skipped",
"clarify": "in_progress",
"confirm": "pending",
"design": "pending",
"estimate": "pending",
"generate": "pending",
"migration_plan": "pending",
"poc": "pending"
}
}Status values: pending → in_progress → completed, plus skipped. Use read-merge-write:
read before each update, change only the advancing keys, keep prior phases.
recommendation_reviewed (top level, boolean) is set to true by generate.md Step 5.5 when
the user explicitly confirms they have seen the recommendation. Gate 1, Gate 2, and the
migration_plan / poc states all require it — no gate may be asked while it is absent.
migration_plan additionally uses not_applicable (build_scratch, or no migratable workload
detected). When Stage 2 runs, migration_plan_ctx is added at the top level:
{"repo": "<abs path to target repo>", "migration_dir": "<abs path to .migration/<id>/>"} —
Stage 3 reads gcp-to-aws artifacts ONLY via this recorded path, never by re-globbing.
Files
| File | Purpose |
|---|---|
references/vendored/dsl/INTERPRETER.md | Vendored DSL execution contract (interpreter loop + gate protocol) |
references/phases/intake/intake.md | Entry point + technical background + open context |
references/phases/discover/discover.md | Lightweight code detection |
references/phases/clarify/clarify.md | Clarify orchestrator + answer mapping to scoring keys |
references/phases/clarify/clarify-technical.md | Technical-background question wording |
references/phases/clarify/clarify-business.md | Business-background question wording |
references/phases/confirm/confirm.md | Winner-specific follow-ups |
references/phases/design/design.md | Assemble recommendation; Migrate handoff branch |
references/phases/estimate/estimate.md | Coarse cost magnitude |
references/phases/generate/generate.md | Layered recommendation doc + scaffolding |
references/phases/migration-plan/migration-plan.md | Stage 2: full migration plan via the sibling gcp-to-aws engine |
references/decision-refs/temporal.md | Temporal rules: Tier 1/2 tables, adapter, runbooks, commercials (consumed by discover/clarify/design/generate) |
references/decision-refs/poc-shapes.md | Per-runtime POC deploy shapes (ECS/EKS/Lambda/MicroVMs/Temporal) |
references/decision-refs/*.md | Runtime service cards, model defaults, freshness |
references/decision-refs/workload-classes.md | Deterministic verdicts for non-agent workload units (batch/service/io) |
references/runtimes/*.json | Runtime registry (read by scoring.py) |
scripts/scoring.py | Deterministic scoring engine |
scripts/test_temporal_decision_refs.py | Content lock for the Temporal decision reference |
scripts/test_poc_shapes.py | Content lock for the POC deploy shapes |
scripts/test_workload_classes.py | Content lock for workload-classes.md (verdicts table) |
scripts/test_unit_grouping.py | Unit grouping + pattern matching (workload-class assignment) |
scripts/test_collapse_invariant.py | Collapse-invariant ordering enforcement (A→B implies [B] ⊆ [A] outputs) |
Maturity and readiness contract
Intake persists target_maturity (prototype, private_beta, or production) in run state. Clarify carries it and the readable readiness record into answers.json. Current-run verification evidence remains exclusively in the sibling $RUN_DIR/current-run-verifications.json artifact: never copy it into seed.json or answers.json. Design and Generate may consume that artifact only after validating its schema and matching run_id, and may carry forward verified outcomes but not the raw evidence records. Load references/decision-refs/maturity-readiness.md whenever target maturity is selected. A cached volatile fact may inform discovery, but only a record verified in this run can make a verification-required constraint final; otherwise the score remains provisional with deferred verification requirements.
Contextual offers (final step)
Before you finish: your answer is not complete until you have run the Contextual offers (final step) below.
This is a mandatory closing step of every final recommendation — complete it before you consider your answer done. Run this offer check inline yourself; do not depend on loading another skill. The recommendation is decided on merit first; this step never changes, re-ranks, or re-opens it, and the offer is looked up only after the advice is final.
Read
../knowledge-base-for-startups/references/offers.md— the offer index (Offer · Summary · Keywords), one row per offer.Judge relevance against what the founder actually surfaced this session. Surface an offer only if one holds: a named-product match (you recommended a specific partner product by name and it has a row); a direct intent/component match (an offer's Keywords directly serve a concrete workload, a component in the final recommendation, or a need the founder raised). Keep a high bar — if the match is weak, or you would be inferring an unstated need, append nothing. Never surface an offer that competes with a product or provider the founder already uses or decided to keep (e.g. existing auth provider → no Auth0 unless they are already on Auth0, and then only as a credit on it; existing vector DB such as Pinecone → no Qdrant).
If (and only if) one offer clears the bar, open only its detail file
../knowledge-base-for-startups/references/offers/<slug>.mdand append exactly one quiet, dismissible italic line — stating the value and condensing eligibility faithfully from that file (drop no qualifying criterion; never fabricate), with the redeem link built from the canonicalsource_urlplus asourceattribution param — append?source=ide-startupAdvisor-<host>(or&source=...if the url already has a query string), filling<host>from your execution environment (Claude Code →claude; AWS Startup Advisor IDE extension / VS Code →vscode; Cursor →cursor; Kiro →kiro; Codex →codex), or the genericide-startupAdvisorwhen you cannot tell. Only append the query param; never change the destination. When an offer clears the bar you MUST append that single offer line as the last step; do not omit it. The offer is never the pick — only a line under the AWS pick — and stage gates in the references apply (e.g. no Datadog line for an early-stage founder; see../architect-for-startups/references/observability.md). For a single-service pick (auth, payments, vector DB, observability, etc.) where missing budget/team/traffic inputs would not change the pick, assume an early-stage (pre-PMF) startup unless the founder says otherwise and answer in one turn without a stage-only question; this only removes a stage-only question and never skips the Intake/Clarify/Confirm gates before final advice or the POC. Show exactly one, never a list. If none clears the bar, append nothing and do not mention offers, partner alternatives, or why none appeared.
Standard line:
***<Offer>** has an exclusive offer via AWS Activate — <value>, <eligibility>. [Redeem →](<source_url>?source=ide-startupAdvisor-<host>)*Caps and control: at most one offer per response and often none; no more than one per five messages and two per session; show a given offer at most once per session and never one already shown, claimed, or dismissed; if the founder has muted offers, skip this step entirely. These per-five-messages, per-session, and already-shown caps are session-state limits; in a fresh session with no prior offers they are non-binding, so do not withhold an otherwise-qualifying offer merely because you cannot verify session history. See ../contextual-offers-for-startups/SKILL.md for the full rules — but perform the check inline; it must not depend on that skill being loaded.
Files
- ATTRIBUTION.mdAdded by AutoGineer907 B
- LICENSELicence file added by AutoGineer9.9 KiB
- NOTICELicence file added by AutoGineer67 B
- SKILL.md19.2 KiB
- references/decision-refs/agentcore.md5.4 KiB
- references/decision-refs/batch.md2.3 KiB
- references/decision-refs/cost-levers.md1.8 KiB
- references/decision-refs/ecs.md1.4 KiB
- references/decision-refs/eks.md1.1 KiB
- references/decision-refs/freshness.md10.7 KiB
- references/decision-refs/lambda-microvms.md1.9 KiB
- references/decision-refs/lambda.md1.1 KiB
- references/decision-refs/managed-alternatives.md1.9 KiB
- references/decision-refs/maturity-readiness.md2.8 KiB
- references/decision-refs/model-selection.md4.2 KiB
- references/decision-refs/poc-shapes.md15.5 KiB
- references/decision-refs/temporal.md17.5 KiB
- references/decision-refs/workload-classes.md2.2 KiB
- references/diagram/build-diagram.md5.1 KiB
- references/handoff/handoff-migration.md2.1 KiB
- references/output-templates/recommendation-doc.md5.1 KiB
- references/phases/add-capabilities/add-capabilities-assemble.md951 B
- references/phases/add-capabilities/add-capabilities.md4.6 KiB
- references/phases/clarify/clarify-assemble.md1.4 KiB
- references/phases/clarify/clarify-business.md3.3 KiB
- references/phases/clarify/clarify-technical.md2.7 KiB
- references/phases/clarify/clarify.md26.5 KiB
- references/phases/confirm/confirm-assemble.md1019 B
- references/phases/confirm/confirm.md15.1 KiB
- references/phases/design/design-assemble.md1.7 KiB
- references/phases/design/design.md26.9 KiB
- references/phases/discover/discover-assemble.md1.2 KiB
- references/phases/discover/discover.md10.0 KiB
- references/phases/estimate/estimate-assemble.md780 B
- references/phases/estimate/estimate.md19.0 KiB
- references/phases/generate/generate-assemble.md1.0 KiB
- references/phases/generate/generate-report.md45.6 KiB
- references/phases/generate/generate.md15.7 KiB
- references/phases/intake/intake-assemble.md991 B
- references/phases/intake/intake.md5.6 KiB
- references/phases/migration-plan/migration-plan-assemble.md1.2 KiB
- references/phases/migration-plan/migration-plan-gcp-constraints.md3.9 KiB
- references/phases/migration-plan/migration-plan.md32.1 KiB
- references/phases/model-recommend/model-recommend-assemble.md937 B
- references/phases/model-recommend/model-recommend.md17.2 KiB
- references/phases/poc/poc-assemble.md1.0 KiB
- references/phases/poc/poc-report.md12.6 KiB
- references/phases/poc/poc.md44.8 KiB
- references/report-help-banner.md6.0 KiB
- references/report-shell.md12.3 KiB
- references/runtimes/agentcore.json3.1 KiB
- references/runtimes/ecs.json1.5 KiB
- references/runtimes/eks.json1.4 KiB
- references/runtimes/lambda.json2.4 KiB
- references/runtimes/lambda_microvms.json3.3 KiB
- references/vendored/README.md2.0 KiB
- references/vendored/ai/bedrock-pricing-cache.md57.2 KiB
- references/vendored/ai/models/anthropic-bedrock.json8.6 KiB
- references/vendored/ai/models/openai-bedrock.json28.0 KiB
- references/vendored/dsl/INTERPRETER.md51.8 KiB
- scripts/anthropic_model_recommendation.pyScript35.0 KiB
- scripts/build_diagram.pyScript21.2 KiB
- scripts/model_recommendation.pyScript8.8 KiB
- scripts/openai_model_recommendation.pyScript58.1 KiB
- scripts/pyproject.toml170 B
- scripts/schemas/current-run-verifications.json1.1 KiB
- scripts/schemas/model-recommendation-input.json5.4 KiB
- scripts/schemas/model-recommendation.json13.1 KiB
- scripts/schemas/model-verification.json2.5 KiB
- scripts/schemas/scoring-result.json3.5 KiB
- scripts/schemas/seed.json5.6 KiB
- scripts/score_units.pyScript2.9 KiB
- scripts/scoring.pyScript16.5 KiB
- scripts/test_build_diagram.pyScript21.8 KiB
- scripts/test_collapse_invariant.pyScript2.0 KiB
- scripts/test_cost_levers.pyScript1.7 KiB
- scripts/test_model_recommendation.pyScript13.9 KiB
- scripts/test_openai_model_recommendation.pyScript46.5 KiB
- scripts/test_opus55_generation_contracts.pyScript20.8 KiB
- scripts/test_opus55_integration.pyScript21.5 KiB
- scripts/test_poc_shapes.pyScript14.2 KiB
- scripts/test_scoring.pyScript35.3 KiB
- scripts/test_temporal_decision_refs.pyScript7.4 KiB
- scripts/test_unit_grouping.pyScript71.7 KiB
- scripts/test_verify_model_path.pyScript25.8 KiB
- scripts/test_workload_classes.pyScript5.2 KiB
- scripts/uv.lock97.8 KiB
- scripts/verify_model_path.pyScript10.9 KiB
references/phases/migration-plan/migration-plan.md
_phase: migration-plan _title: "Migration Plan — inline execution of gcp-to-aws phases" _requires_phase: generate _input:
design.json
confirm.json
answers.json _fragments:
_id: migration-plan-gcp-constraints _trigger: { _when: "always (gcp-to-aws is the migration engine)" } _file: phases/migration-plan/migration-plan-gcp-constraints.md _assemble: _file: phases/migration-plan/migration-plan-assemble.md _produces:
{ file: migration-plan-injection.json, _when: "the target repo exists (not an idea-only migrate — otherwise migration_plan is not_applicable and the phase stops)" } _advances_to: poc _preconditions:
_check_phase_completed: generate _on_failure: _halt_and_inform _postconditions:
_assert: "unless migration_plan was set not_applicable (idea-only) — migration-plan-injection.json exists and is valid JSON, carrying the translated injected constraints, the advisor rationale, and the absolute repo + migration_dir paths" _on_failure: _halt_and_inform
_assert: "the inline engine's Generate phase reached HANDOFF_OK (aws-design-ai.json exists with a non-empty ai_architecture in the recorded migration_dir), and migration_plan_ctx {repo, migration_dir} was recorded in .phase-status.json" _on_failure: _halt_and_inform
_assert: "model contract validation (Step 3.5) is settled — every model-bearing unit's plan output matches the advisor-confirmed model and api_path, or the phase halted with a mismatch that must be resolved by changing Model Recommend inputs and rerunning its deterministic engine; migration-plan never rewrote design.json model decisions" _on_failure: _halt_and_inform
Phase: Migration Plan — inline execution of gcp-to-aws phases
Reached after Generate when the user confirmed Gate 1 (offered in generate.md Step 6).
This phase produces a complete migration plan by directly reading and executing
the sibling gcp-to-aws skill's phase instruction files — no Skill tool call, no turn
boundary. Everything runs inside the current agent-advisor session, so Steps 5–6
(record artifacts, offer Gate 2) execute in the same turn without interruption.
gcp-to-aws files are read-only: this phase never edits them.
Path definitions (resolve first, before any other step)
$GCP_BASE = ${CLAUDE_PLUGIN_ROOT}/skills/gcp-to-awsIf ${CLAUDE_PLUGIN_ROOT} does not resolve (a literal ${CLAUDE_PLUGIN_ROOT} string
showing up in a path error, or some Cursor/Codex/other-agent builds) — this happens under a
single-skill or npx skills add install, where there is no shared plugin root at all — fall
back to locating gcp-to-aws as a sibling of this skill's own installed directory: this
SKILL.md's own containing folder is named agent-advisor under any install layout, so
gcp-to-aws — when installed — sits at the same level as that folder:
$GCP_BASE = <the directory containing this skill's own "agent-advisor" folder>/gcp-to-awsThis formula resolves correctly under both layouts because it only depends on gcp-to-aws
being installed as a sibling of agent-advisor — which install path put it there is
irrelevant, only the folder structure matters.
Step -1 — Engine presence check (capability gate)
This phase is the ONLY place in this skill that reads a sibling skill, so it is the only
place that can fail when the skill is deployed on its own. In the full plugin the engine is
always installed. It can be absent in two cases: a standalone bundle that ships this skill and
nothing else, or a partial npx skills add install that installed agent-advisor without also
installing gcp-to-aws.
With $GCP_BASE resolved per the section above, check whether
$GCP_BASE/references/phases/design/design.md exists. If it does not:
Read-merge-write
$RUN_DIR/.phase-status.json: setphases.migration_plan = "not_applicable"ANDmigration_plan_unavailable = "engine_absent", then advancecurrent_phasethrough_advances_to(poc) in the SAME state write (INTERPRETER.md§ Skill bindings — resolved statuses). Themigration_plan_unavailablemarker is what distinguishes "this deployment cannot produce a plan" from "the user declined one" — Gate 2 and poc.md both key on it.Tell the user plainly, without blaming them: the full migration plan is produced by the
gcp-to-awsengine, which this deployment does not bundle. Everything through the recommendation (runtime verdict, deployment model, service set, model + API path, cost magnitude, and the generated documents) is unaffected — only the migration plan stage is unavailable here. If they installed vianpx skills add, tell them to also installgcp-to-aws(same--agent/scope) and restart their agent to get the plan; otherwise point them at thegcp-to-awsskill in this plugin.Still offer Gate 2 — a missing plan does not remove the POC. Ask it exactly as Step 6 below does (same wording, same
phases.poc = "in_progress"persistence before poc.md loads), but say the POC will be design-backed (built fromdesign.json, labelled "not plan-backed") rather than plan-backed. In a non-interactive run take the answer from$RUN_DIR/seed.json'sgates.poc(clarify.md Step 2.5); a seed that omits it declines.Stop executing this phase. Do not read any gcp-to-aws file, do not create
migration-plan-injection.json, and do not run any step below. The_postconditionsabove are satisfied by thenot_applicableresolution exactly as they are for an idea-only migrate.
Only continue past this point when the engine is present.
IMPORTANT — relative path resolution table: gcp-to-aws
instruction files use several relative path prefixes. Resolve each as follows (the only path
that does NOT go under $GCP_BASEis$MIGRATION_DIR, which stays under the target repo per Step 1):
| Path prefix in instruction | Resolves to |
|---|---|
references/shared/... | $GCP_BASE/references/shared/... |
references/design-refs/... | $GCP_BASE/references/design-refs/... |
references/clustering/... | $GCP_BASE/references/clustering/... |
references/phases/... | $GCP_BASE/references/phases/... |
shared/... (short form) | $GCP_BASE/references/shared/... |
design-refs/... (short form) | $GCP_BASE/references/design-refs/... |
data/... | $GCP_BASE/data/... (not under references/) |
phases/... (short form) | $GCP_BASE/references/phases/... |
Examples:
shared/pricing-cache.md→$GCP_BASE/references/shared/pricing-cache.mdreferences/vendored/ai/sdk-capability-map.json→$GCP_BASE/references/vendored/ai/sdk-capability-map.jsonreferences/clustering/terraform/classification-rules.md→$GCP_BASE/references/clustering/terraform/classification-rules.md
Step 0 — Update agent-advisor state immediately
Before doing anything else, read-merge-write agent-advisor's .phase-status.json:
current_phase="migration_plan"phases.migration_plan="in_progress"
This must happen first so that if the session is interrupted at any point, the advisor resumes at migration-plan.md rather than at generate.md.
Step 1 — Resolve the target repo and set $MIGRATION_DIR
The plan needs the repo containing the workload to migrate. If Discover ran (phases.discover == "completed"), reuse the repo path the user gave then (from context-notes.md or
context-signals.json). Otherwise ask for it now. Resolve to an absolute path ($REPO).
If the user has no code (idea-only migrate), STOP: tell them a migration plan needs an
existing workload, set phases.migration_plan = "not_applicable", and continue to the Gate
2 branch in generate.md Step 7.
Set $MIGRATION_DIR using the gcp-to-aws convention: $REPO/.migration/<MMDD-HHMM>/
(current timestamp). Create the directory and .migration/.gitignore (*\n!.gitignore).
All gcp-to-aws artifacts are written here.
Step 2 — Assemble the injection context
Read ALL of: $RUN_DIR/answers.json, $RUN_DIR/design.json, $RUN_DIR/confirm.json, and
$RUN_DIR/handoff-summary.md. If handoff-summary.md does not exist (build_deploy path),
write it first by following references/handoff/handoff-migration.md Step 1, then return.
answers.json is nested: shape is {"entry_point": "...", "answers": {...}}.
Every answer key is read from the inner answers object.
Build the injection context — this is carried forward into every gcp-to-aws phase execution
as the set of already-determined constraints. Translate per this table (never inject unknown).
The translated constraint fields derive from the PRIMARY unit (answers.json.primary_unit) —
consistent with design.json's legacy mirror; gcp's existing consumption is unchanged:
| Source | Inject as (gcp-to-aws field) | Translation |
|---|---|---|
design.json.deployment_model == "harness" | ai_constraints.agentic.migration_approach | "harness" |
deployment_model == "framework_on_runtime" AND .answers.framework == "strands" | same | "strands" |
deployment_model == "framework_on_runtime" (langgraph/crewai/custom) | same | "retarget" |
| winning runtime NOT agentcore (ecs/eks/lambda/lambda_microvms/batch/fargate) | same | "retarget" + compute note |
.answers.memory_needs | ai_constraints.agentic.memory_requirement | cross_session→"cross_session", session_only→"session", none→"none" |
.answers.session_duration | ai_constraints.agentic.task_duration | under_15min→"medium", 15min_to_8hr→"long", over_8hr→"very_long" |
.answers.region — only when a specific region was named | design_constraints.target_region | pass through; bare single/multi/global → do not inject |
ai_constraints.agentic.incremental_migration | — | never injected |
Non-AgentCore verdicts: inject migration_approach: "retarget" and add a note:
"Compute target is <runtime> per agent-advisor scoring — do not recommend AgentCore
Runtime as the compute layer."
Consolidated platform overrides the top-level approach. The table above reads the
top-level legacy mirror (the PRIMARY unit's fields). When design.json.platform.mode == "consolidated", the whole system deploys on platform.runtime (the superset), NOT the
primary unit's own verdict/deployment_model. So when consolidated:
Derive
migration_approachfromplatform.runtime, not the primary unit'sdeployment_model: any non-AgentCore superset (ecs/eks/lambda/lambda_microvms) →"retarget"+ the compute note ("Compute target is<platform.runtime>for ALL units per the consolidation decision — do not recommend AgentCore Runtime"). Only inject"harness"/"strands"when the superset is itself AgentCore (rare — consolidation is usually onto ECS/EKS). The rule is: harness/strands ONLY whenplatform.runtime == "agentcore", else retarget — so a primary unit that scored AgentCore never leaks harness into a Lambda/MicroVMs consolidation.The AgentCore endpoint/services note follows
platform.runtime, NOT the primary unit's raw verdict: inject it ONLY whenplatform.runtime == "agentcore"(a consolidation onto AgentCore — still tell the engine to implementPOST /invocations+GET /pingand the confirmed services). When the superset is NOT AgentCore (ecs/eks/lambda/lambda_microvms), do NOT inject the AgentCore note even if the primary unit scored AgentCore — its AgentCore services do not apply on the superset. (Split mode is unchanged: the note follows each unit's own runtime.)
This keeps the top-level injection consistent with the per-unit rows (which already use each
unit's effective_runtime as target_runtime) and with what the POC actually deploys.
AgentCore endpoint note — PER UNIT, keyed on each unit's effective_runtime: attach the
deployment-target note to EVERY unit whose effective_runtime == "agentcore", NOT just the
primary/winning unit. (This is a serving requirement of the target runtime, NOT a
migration-approach constraint — it does not conflict with retarget.) The note text: "The app
will be deployed on AgentCore Runtime, which invokes it via POST /invocations and health-checks
it via GET /ping. The Design phase's code_migration output should account for exposing these
entrypoints alongside the app's existing interface." Because gcp-to-aws has no per-unit schema
field for this, carry it inline on that unit's row (an endpoint_contract string on the row, or
appended to the row's context) — do NOT collapse it to a single top-level note keyed on the
primary. So in a split system with primary=Lambda + a secondary AgentCore unit, the AgentCore
unit STILL gets the /invocations+/ping note while the Lambda unit does not; under a
consolidation the note appears iff platform.runtime == "agentcore" (every unit's
effective_runtime is then agentcore). The POC phase tolerates the note's absence from
aws-design-ai.json and applies the standard AgentCore contract regardless.
Inject the FULL unit set: for each design.json.units[] entry, one AI-architecture
input row — using unit.effective_runtime as target_runtime (Design already resolved it:
platform.runtime when consolidated, else the unit's resolved verdict — never co_recommend),
unit.model_recommendation (→ model), and unit.agentcore_services (→ services).
deployment_model MUST be consistent with target_runtime, not carried raw. A raw
deployment_model: "harness" comes from an AgentCore verdict; if the unit's effective runtime
is NOT agentcore (e.g. consolidated onto ECS, or a co_recommend pick that landed on Lambda),
harness is meaningless there. Rule: inject deployment_model only when target_runtime == "agentcore"; otherwise inject "framework_on_runtime" (the code runs as-is on the container/
function runtime — a container image or zip, no Harness). Never emit target_runtime: ecs
with deployment_model: harness.
The unit's raw verdict still rides along in raw_verdict so the report can show what
consolidation traded away. Each row also carries "evidence": "<path>" from the matching
context-signals.json.units[] entry (matched by unit.id) — this is the correlation key
that enables Tier 2 alignment (evidence paths are how gcp workloads are joined to units).
The platform block rides along (consolidated/split, interconnect).
gcp-to-aws still runs ONCE for the whole system — units are inputs to its AI-architecture
sections, not separate engine runs. Single unit: identical to today's injection plus the
one-row table.
Write the injection context to $RUN_DIR/migration-plan-injection.json:
{
"injected_constraints": {/* the translated fields above */},
"deployment_target_note": "<system-level AgentCore entrypoint note: set only when platform.runtime==agentcore (consolidation onto AgentCore); null otherwise. Per-unit AgentCore units carry their own note in units[].endpoint_contract — do NOT rely on this top-level field for a split system's secondary AgentCore unit>",
"units": [
{
"unit_id": "<from design.json.units[].id>",
"workload_class": "<from unit.workload_class>",
"target_runtime": "<effective runtime: platform.runtime when platform.mode==consolidated, else unit.verdict>",
"raw_verdict": "<from unit.verdict — the split-mode verdict, for report trade-off display>",
"deployment_model": "<unit.deployment_model when target_runtime==agentcore, else 'framework_on_runtime'>",
"endpoint_contract": "<the POST /invocations + GET /ping note when target_runtime==agentcore, else null — PER UNIT, so a secondary AgentCore unit in a split system still carries it>",
"model": "<from unit.model_recommendation.model>",
"api_path": "<from unit.model_recommendation.api_path>",
"invocation_model_id": "<from unit.model_recommendation.invocation_model_id; null until resolved>",
"source": "<from unit.model_recommendation.source>",
"services": "<from unit.agentcore_services[]>",
"evidence": "<from context-signals.json.units[].evidence, matched by unit.id>"
}
],
"platform": {
"mode": "<from design.json.platform.mode>",
"interconnect": "<from design.json.platform.interconnect>"
},
"advisor_rationale": "<top 3 scoring signals from handoff-summary.md>",
"repo": "<abs $REPO>",
"migration_dir": "<abs $MIGRATION_DIR>"
}Suppression is best-effort: gcp-to-aws's Clarify may still ask questions whose answers were injected — present the injected value as the pre-selected default so the user can confirm with one keypress.
Step 2.5 — Load global constraints
Read references/phases/migration-plan/migration-plan-gcp-constraints.md and follow everything in it
for the duration of this phase. It covers: design principles (dev sizing, no human costs,
re-platform default, BigQuery gate), context loading budget, conditional file table,
feedback sidebar auto-skip, and hybrid stack warning.
Step 3 — Announce the transition
Tell the user:
"I'm now generating the full migration plan. I'll run the migration analysis directly (Discover → Clarify → Design → Estimate → Generate) in this same session, so your runtime and deployment choices carry over — you won't be asked those again. It may ask a few additional questions that weren't covered above, such as monthly AI spend and migration priority."
Step 4 — Execute gcp-to-aws phases in order
Execute each phase by reading its instruction file and following it exactly as if it
were loaded by gcp-to-aws's own state machine. The path rule from the header applies: all
relative references in those files resolve from $GCP_BASE.
Two separate state files — do NOT mix them up:
$MIGRATION_DIR/.phase-status.json— gcp-to-aws's own state. Each phase file (discover.md, clarify.md, etc.) writes and reads this file itself per its own protocol. migration-plan.md does NOT touch it — let each phase file manage it.$RUN_DIR/.phase-status.json— agent-advisor's state. Already set tocurrent_phase = "migration_plan"in Step 0 and NOT touched again until Step 5. gcp-to-aws's files never read or write this file (they only know about$MIGRATION_DIR).
This separation is what keeps the two state machines independent. After each phase's
HANDOFF_OK, simply proceed to the next phase — no extra state writes needed.
Phase A — Discover
Read and execute: $GCP_BASE/references/phases/discover/discover.md
Key behaviors:
$MIGRATION_DIRis already created (Step 1) — when discover.md Step 0 checks for existing runs, the directory exists but has no.phase-status.jsonyet → treat as fresh run (skip the resume/fresh/cancel prompt)discover.md writes its own
.phase-status.jsonto$MIGRATION_DIR— let it do soInjection context is NOT applied at this stage; it's carried as live context for Clarify
On
HANDOFF_OK:ai-workload-profile.json(and/or IaC artifacts) present in$MIGRATION_DIR
Phase B — Clarify
Read and execute: $GCP_BASE/references/phases/clarify/clarify.md
(which in turn loads clarify-ai-only.md or clarify-ai.md as appropriate)
Key behavior — apply injection context:
When Clarify asks a question whose answer is already in the injection context (Step 2),
treat it as extracted (chosen_by: "extracted") and do NOT re-ask it — present it in the
detection summary as pre-filled. Only ask what remains (typically: monthly AI spend, migration
priority, cross-cloud preference).
Also inject design_constraints.target_region into preferences.json directly when a
specific region was named (mark chosen_by: "extracted").
On HANDOFF_OK: preferences.json present in $MIGRATION_DIR.
Phase C — Design
Read and execute: $GCP_BASE/references/phases/design/design.md
(which routes to design-ai.md, design-infra.md, etc.)
Key behavior — unit correlation (multi-unit runs only):
After design-ai reaches HANDOFF_OK and writes aws-design-ai.json to $MIGRATION_DIR,
YOU (the advisor's migration-plan interpreter) annotate each design_block with advisor
unit context — this is a post-write annotation of the artifact FILE; gcp's instructions
are not modified and gcp never sees this step:
Read
aws-design-ai.json→design_blocks[](gcp's per-workload design output)For each design_block, match its
source_paths[]against the injected units'evidencefields (from Step 2)If a match is found (any source path overlaps with evidence): ANNOTATE the design_block with ADDITIVE keys:
"advisor_unit": "<unit_id>""advisor_target_runtime": "<target_runtime>"For non-agent units:
"advisor_compute_note": "compute layer fixed to <target_runtime> per agent-advisor (rule cited in design.json); do not re-map"
If no match is found (no evidence overlap): annotate
"advisor_unit": null— visible, not guessedWhen agent-class units have DIFFERING migration approaches (multiple agent units with different
deployment_modelvalues), record on the non-primary unit's block:"advisor_approach_note": "this unit's approach is <deployment_model> per advisor; the plan's code_migration follows the primary unit — see Tier-1 proposal"
Additive-only rule: These annotations are purely ADDITIVE — never modify or remove any gcp-written fields. gcp's own validation checklists must keep passing.
Step 3.5 — Validate the advisor model/path contract (advisor wins)
For every matched, model-bearing unit, compare the plan's model and migration path with
that unit's design.json model contract, including its separate invocation_model_id.
Carry the injected invocation identifier into the corresponding GCP aws_model_id unchanged.
For a proprietary GPT runtime_converse decision, GCP represents the same API as
migration_path: "runtime_openai_cris" with required_client_api: "converse" on the matched model row.
An absent runtime_api on a legacy runtime plan means Converse; an explicit Chat/Responses
choice is not equivalent. Do not replace a confirmed Global profile with US Geo or strip an ARN.
Read each matched model row's migration_path and required_client_api; use legacy runtime_api and the code_migration
defaults only for a single-unit legacy plan. A secondary unit must not inherit the primary's
API or invocation profile. Missing per-unit data requires re-running Design with the injection.
Pass the resolved per-model API to runtime_api below. A current Design plan with no
explicit API defaults to Responses and cannot satisfy an advisor Converse decision.
Use this comparison for each unit (including the single-unit case). It separates logical model identity from the invocation identifier while preserving the existing exact comparison for other paths:
def matches_advisor_model(advisor, plan_model, migration_path, runtime_api=None):
model = advisor["model"]
proprietary_runtime = model.startswith(("openai.gpt-6", "openai.gpt-5.6-"))
if advisor["api_path"] == "runtime_converse" and proprietary_runtime:
invocation = advisor.get("invocation_model_id")
if not invocation:
return False
profile_id = invocation.rsplit("/", 1)[-1]
logical_model = (profile_id.split(".", 1)[1]
if profile_id.startswith(("us.", "in.", "global.")) else profile_id)
return (logical_model == model and plan_model == invocation
and migration_path == "runtime_openai_cris"
and (runtime_api or "converse") == "converse")
return plan_model == model and migration_path == advisor["api_path"]If the comparison matches, annotate the design block with
"advisor_model_contract": "validated"and continue.If model, API or invocation profile differs (or the required profile is unresolved), do not rewrite
design.json, the recommendation, or the report. Record the proposed value and rationale in the design block asplan_model_mismatch, then STOP with_halt_and_inform. Tell the user which requirement or account/region probe caused the mismatch. Resolution MUST return to Model Recommend, updatemodel-recommendation-input.json, rerunmodel_recommendation.py, and reconfirm the new result. A migration engine is a consumer of the advisor contract, not a second selector.A live probe may invalidate availability, but it still does not authorize silent substitution. Probe failure blocks runnable implementation claims. Resolve credentials, IAM, profile ID, region, or model access first; return to Model Recommend only when the accepted requirement, model, path, or profile must change.
Single-unit runs: SKIP the unit-correlation overlay above (steps 1–5) — the collapse invariant means zero annotation behavior change when there's only one unit. Step 3.5 contract validation still applies to that one unit.
On HANDOFF_OK: aws-design-ai.json (and/or other design artifacts) present, with unit annotations when multi-unit.
Phase D — Estimate
Read and execute: $GCP_BASE/references/phases/estimate/estimate.md
On HANDOFF_OK: estimation-ai.json (and/or other estimate artifacts) present.
Phase E — Generate
Read and execute: $GCP_BASE/references/phases/generate/generate.md
(which routes to generate-ai.md, generate-artifacts-ai.md, etc.)
Context firewall (important — gcp-to-aws is read-only and owns its own output). Every
artifact this phase produces — including migration-report.html — is rendered ENTIRELY by
gcp-to-aws's own generator templates, exactly as if gcp-to-aws ran standalone. Do NOT apply
agent-advisor's references/report-shell.md (its .doc-head, --ink tokens, numbered
document sections, unit cards, etc.) to any gcp artifact. The v3 document shell is for
agent-advisor's OWN recommendation-report.html only; migration-report.html must keep
gcp-to-aws's native layout (its "GCP to AWS Migration Assessment" header, Executive Summary,
verdict badge, Appendix A–G). If the advisor shell is still in your context from this run's
earlier Generate, discard it here — follow gcp's report instructions verbatim.
The MIGRATION_GUIDE's AI sections carry the unit annotations through: each annotated
workload section names its advisor_unit and target runtime (from the design_blocks[]
annotations in Phase C).
Skip the Feedback phase — feedback is optional user telemetry and produces no data
artifacts needed by the POC. After generate's HANDOFF_OK, go directly to Step 5 below
— do NOT load $GCP_BASE/references/phases/feedback/feedback.md.
On HANDOFF_OK: generation-ai.json + MIGRATION_GUIDE.md + README.md + artifact
files present in $MIGRATION_DIR.
Step 5 — Record context and validate artifacts
Read-merge-write $RUN_DIR/.phase-status.json:
phases.migration_plan="completed"migration_plan_ctx={"repo": "<abs $REPO>", "migration_dir": "<abs $MIGRATION_DIR>"}
Verify $MIGRATION_DIR/aws-design-ai.json exists and has a non-empty ai_architecture.
If missing → AI path did not complete; show the error, set phases.migration_plan = "in_progress", and stop. estimation-ai.json may be absent on some routes — note it,
don't fail.
Verdict check: if agent-advisor's winning runtime is NOT agentcore but the produced plan centers AgentCore as the compute layer, surface the disagreement explicitly: show both choices, state that agent-advisor's deterministic scoring is authoritative, and let the user decide.
Step 5.5 — Regenerate the architecture diagram (plan-backed)
The diagram written during Generate is the generic Path 1 selection diagram — it does not
show the app's real components. Now that aws-design-ai.json exists, re-generate it as the
Path 2 plan-backed app architecture: load references/diagram/build-diagram.md and
follow its Path 2, overwrite $RUN_DIR/diagram.md, and re-embed the new diagram into
Section 4 of $RUN_DIR/recommendation.md (replacing the Path 1 diagram). If an HTML report
was already generated, note that it will show the updated diagram only if regenerated — it
is acceptable to leave the HTML report's diagram as-is (it links to recommendation.md for
the authoritative version).
Step 5.6 — Inject the help banner into the migration report (post-process)
gcp-to-aws's Generate produces $MIGRATION_DIR/migration-report.html in gcp-to-aws's OWN
native format (see the Context firewall in Phase E — do not restyle it). gcp-to-aws is
read-only, so do NOT edit its report generator. This step is a SURGICAL, ADDITIVE-ONLY
post-process of the OUTPUT file — inject ONLY the help banner, change NOTHING else:
load references/report-help-banner.md and check its banner_status FIRST. While
banner_status reads SUPPRESSED (current state — the support page is not launched), SKIP
this injection entirely: inject NO CSS and NO HTML, leave migration-report.html untouched.
Only when it reads LIVE do the following: if migration-report.html exists, inject the
banner's CSS rules before </style> (or add a new <style> before </head> if none) and
the banner's HTML block at the TOP — right after the opening <body> / the report's header,
before the first content block, substituting {{ HELP_URL }}. Do NOT touch the report's
existing markup, sections, classes, or CSS tokens — the banner is a self-contained addition.
This gives the migration report the same top-of-page "Need help?" CTA as the recommendation
and POC reports, without touching gcp-to-aws or its layout. If the file doesn't exist (report
generation was skipped), skip this step silently.
Step 6 — Offer Gate 2 (immediately after gcp-to-aws Generate's own summary)
gcp-to-aws's generate.md already outputs a full structured summary (artifacts produced,
timelines, risks, TODOs, next steps) — that IS the plan summary. Do not re-summarize it.
Immediately after that summary, add ONE follow-up message that contains:
The recommendation one-liner: "Recommendation:
<runtime>+<deployment model>, model<model>"Gate 2 via AskUserQuestion:
"Do you want a deployable proof-of-concept for this recommendation? I'll generate the agent code, deployment plan, and scripts."
Yes → set
phases.poc = "in_progress", loadreferences/phases/poc/poc.mdNo → set
phases.poc = "skipped"— flow complete
Gate 2 is asked for the primary unit's effective_runtime (agentcore / ecs / eks / lambda /
lambda_microvms — the primary is always an agent unit per Clarify's scope gate). Each non-primary
unit still gets its own POC per poc.md Step 3 dispatch, whose shape follows that unit's
effective_runtime (incl. batch / fargate / serverless_workers).
Failure handling
If any phase fails mid-execution (error in a tool call, user aborts): keep all previously
written artifacts, set phases.migration_plan = "in_progress" (resumable — re-entering
this phase checks $MIGRATION_DIR/.phase-status.json and resumes from the last completed
phase). Then, by entry point:
build_deploy: offer Gate 2 with the fallback clearly labeled — POC fromdesign.jsononly, not plan-backed.migrate: no fallback POC. Offer to resume the migration plan later, or end with Stage 1 outputs +handoff-summary.md.
Requirements and compatibility
Written for: Claude Code
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Names Claude Code tools, Needs Python
Security
What our scanner noticed· Low risk
- Scripts that your agent may run
This skill includes scripts that your agent may run. Read them before you use it.
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Published by
- AWS
- Publisher
- AWS (Official)
- Source
- aws/agent-toolkit-for-aws · plugins/aws-startup-advisor/skills/agent-advisor · commit 0a218f8
- Licence
- Apache License 2.0 (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE)
- NOTICE (added by AutoGineer from NOTICE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by AWS or AWS.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download agent-advisor.zip