[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-pulumi-pulumi-debug-failed-operation":3,"mdc-f7prhv-key":33,"related-org-pulumi-pulumi-debug-failed-operation":401,"related-repo-pulumi-pulumi-debug-failed-operation":565},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":29,"sourceUrl":31,"mdContent":32},"pulumi-debug-failed-operation","debug failed Pulumi operations","Debug a Pulumi update or preview that failed: read the failure Pulumi already\nrecorded, find what caused it, and fix it. Load this skill when the user asks\nto debug, diagnose, or fix a failed update or preview, or points at a failing\n`pulumi up` or `pulumi preview`. Don't load it for authoring new\ninfrastructure, migrations, or provider upgrades; those have their own skills.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"pulumi","Pulumi","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fpulumi.png",[12,14,17,20],{"name":9,"slug":8,"type":13},"tag",{"name":15,"slug":16,"type":13},"Deployment","deployment",{"name":18,"slug":19,"type":13},"Infrastructure as Code","infrastructure-as-code",{"name":21,"slug":22,"type":13},"Debugging","debugging",63,"https:\u002F\u002Fgithub.com\u002Fpulumi\u002Fagent-skills","2026-07-08T05:47:02.688144",null,4,[],{"repoUrl":24,"stars":23,"forks":27,"topics":30,"description":26},[],"https:\u002F\u002Fgithub.com\u002Fpulumi\u002Fagent-skills\u002Ftree\u002FHEAD\u002Fpulumi\u002Fskills\u002Fpulumi-debug-failed-operation","---\nname: pulumi-debug-failed-operation\nversion: 1.0.0\ndescription: |\n    Debug a Pulumi update or preview that failed: read the failure Pulumi already\n    recorded, find what caused it, and fix it. Load this skill when the user asks\n    to debug, diagnose, or fix a failed update or preview, or points at a failing\n    `pulumi up` or `pulumi preview`. Don't load it for authoring new\n    infrastructure, migrations, or provider upgrades; those have their own skills.\n---\n\n# Debug a failed Pulumi operation\n\nA Pulumi operation has failed. Find what caused it and fix it. The user usually\npoints you at it, so start by working out which operation to debug, and confirm it\nwith the user before doing anything else. Pulumi recorded the error when the\noperation failed, so once you know which operation it is you can read the error from\nthat record without running anything again.\n\nThe commands below reach Pulumi Cloud with `pulumi api`, a subcommand of the Pulumi\nCLI that you run in your shell. Each one targets a stack by the explicit\n`{orgName}\u002F{projectName}\u002F{stackName}` path you pass it, so you do not need that\nstack selected locally to read its record. Selecting the stack matters later, when\nyou go to apply a fix.\n\n## Start from the operation the user gave you\n\nThe user usually supplies the operation as a set of fields: the org, project, stack,\nand update version (or preview id) — most often stated in prose, for example \"debug\nupdate 161 of vvm-dev\". You need these to address the API: `{orgName}`,\n`{projectName}`, `{stackName}`, and the version or preview id.\n\nFill any missing field from context. Take the org, project, or stack from the\ncurrently selected stack (`pulumi stack --show-name`, `pulumi stack ls`) or\n`Pulumi.yaml`. A missing version means the most recent update on that stack.\n\nBriefly confirm which operation you landed on, its version or preview id and the\nstack, before reading further. Keep it lightweight; they already told you.\n\n## Read what failed\n\nA failed update and a failed preview both record engine events, and the error is in\nthe diagnostic messages inside those events. Using the fields you settled on above,\nfetch the events and pull the messages out.\n\nFor a failed update, use the `update` path with the version number:\n\n```\npulumi api \u002Fapi\u002Fstacks\u002F{orgName}\u002F{projectName}\u002F{stackName}\u002Fupdate\u002F\u003Cversion>\u002Fevents \\\n  | jq -r '.events[].diagnosticEvent | select(. != null) | \"[\\(.severity)] \\(.message)\"' \\\n  | sed 's\u002F\u003C{%reset%}>\u002F\u002Fg'\n```\n\nFor a failed preview, use the `preview` path with the preview id:\n\n```\npulumi api \u002Fapi\u002Fstacks\u002F{orgName}\u002F{projectName}\u002F{stackName}\u002Fpreview\u002F\u003Cpreview-id>\u002Fevents \\\n  | jq -r '.events[].diagnosticEvent | select(. != null) | \"[\\(.severity)] \\(.message)\"' \\\n  | sed 's\u002F\u003C{%reset%}>\u002F\u002Fg'\n```\n\nRead every message, not only the ones tagged `severity == \"error\"`. A provider\nerror carries that `error` tag, but a program error, which is the common case when\na preview fails, arrives as a stderr diagnostic tagged `info#err`. The trailing\n`sed` strips terminal color codes that Pulumi embeds in the text, which otherwise\nshow up as `\u003C{%reset%}>`.\n\n## Find the cause and where the fix belongs\n\nAn operation can fail with errors from more than one resource, so read all of the\ndiagnostics first, then work through each error. Trace every error back to the\nresource that raised it (its URN and type), to where that resource is declared in\nthe program, and to the inputs that feed it.\n\nThe error text tells you what kind of problem it is, and that points to where the\nfix belongs. A Pulumi fix lands in one of three places, and naming the right one\nkeeps you from editing code that was never the problem.\n\n- **The program.** The code is wrong: a bad reference, a wrong type, an input the\n  provider rejected, or a value used before it had resolved. This is what a failed\n  preview usually reports, because the plan could not be built. Fix it by editing\n  the code.\n- **The state.** The code is correct, but the stored state and the real cloud\n  resources disagree. Reconcile drift with `pulumi refresh`, and bring a resource\n  that already exists outside the state under management with `pulumi import`\n  rather than recreating it. Note that an operation which failed partway through\n  applying may have already changed some resources, so check the current state\n  before you decide.\n- **The environment.** The problem is outside Pulumi: credentials, permissions,\n  OIDC, or a quota. Fix the role, the ESC environment, or the capacity that the\n  provider rejected, rather than the resource code.\n\n## Fix the cause\n\nMake the smallest change that addresses the root cause. How you confirm the fix,\nand how you deliver it, whether as a local edit or as a pull request, follow your\nmode's workflow, not this skill.\n\n## If the user didn't say which operation\n\nWhen the user gives you nothing to go on, debug their most recent operation on the\nstack. The update list does not record who ran each update, so find it through the\nAPI:\n\n1. Run `pulumi whoami` to get the current user's login.\n2. Read the latest update and who requested it with\n   `pulumi api \u002Fapi\u002Fstacks\u002F{orgName}\u002F{projectName}\u002F{stackName}\u002Fupdates\u002Flatest`, and\n   compare its `requestedBy.githubLogin` to the login from step 1.\n3. If they match, that update is the one to debug. If they do not, walk back one\n   version at a time with\n   `pulumi api \u002Fapi\u002Fstacks\u002F{orgName}\u002F{projectName}\u002F{stackName}\u002Fupdates\u002F\u003Cn>` until\n   `requestedBy.githubLogin` matches the user.\n\nTell the user which operation you landed on, its version, kind, and result, and\nconfirm it is the one they mean before going further.\n",{"data":34,"body":36},{"name":4,"version":35,"description":6},"1.0.0",{"type":37,"children":38},"root",[39,48,54,76,83,112,140,145,151,156,169,181,194,203,248,254,259,264,316,322,327,333,338,396],{"type":40,"tag":41,"props":42,"children":44},"element","h1",{"id":43},"debug-a-failed-pulumi-operation",[45],{"type":46,"value":47},"text","Debug a failed Pulumi operation",{"type":40,"tag":49,"props":50,"children":51},"p",{},[52],{"type":46,"value":53},"A Pulumi operation has failed. Find what caused it and fix it. The user usually\npoints you at it, so start by working out which operation to debug, and confirm it\nwith the user before doing anything else. Pulumi recorded the error when the\noperation failed, so once you know which operation it is you can read the error from\nthat record without running anything again.",{"type":40,"tag":49,"props":55,"children":56},{},[57,59,66,68,74],{"type":46,"value":58},"The commands below reach Pulumi Cloud with ",{"type":40,"tag":60,"props":61,"children":63},"code",{"className":62},[],[64],{"type":46,"value":65},"pulumi api",{"type":46,"value":67},", a subcommand of the Pulumi\nCLI that you run in your shell. Each one targets a stack by the explicit\n",{"type":40,"tag":60,"props":69,"children":71},{"className":70},[],[72],{"type":46,"value":73},"{orgName}\u002F{projectName}\u002F{stackName}",{"type":46,"value":75}," path you pass it, so you do not need that\nstack selected locally to read its record. Selecting the stack matters later, when\nyou go to apply a fix.",{"type":40,"tag":77,"props":78,"children":80},"h2",{"id":79},"start-from-the-operation-the-user-gave-you",[81],{"type":46,"value":82},"Start from the operation the user gave you",{"type":40,"tag":49,"props":84,"children":85},{},[86,88,94,96,102,104,110],{"type":46,"value":87},"The user usually supplies the operation as a set of fields: the org, project, stack,\nand update version (or preview id) — most often stated in prose, for example \"debug\nupdate 161 of vvm-dev\". You need these to address the API: ",{"type":40,"tag":60,"props":89,"children":91},{"className":90},[],[92],{"type":46,"value":93},"{orgName}",{"type":46,"value":95},",\n",{"type":40,"tag":60,"props":97,"children":99},{"className":98},[],[100],{"type":46,"value":101},"{projectName}",{"type":46,"value":103},", ",{"type":40,"tag":60,"props":105,"children":107},{"className":106},[],[108],{"type":46,"value":109},"{stackName}",{"type":46,"value":111},", and the version or preview id.",{"type":40,"tag":49,"props":113,"children":114},{},[115,117,123,124,130,132,138],{"type":46,"value":116},"Fill any missing field from context. Take the org, project, or stack from the\ncurrently selected stack (",{"type":40,"tag":60,"props":118,"children":120},{"className":119},[],[121],{"type":46,"value":122},"pulumi stack --show-name",{"type":46,"value":103},{"type":40,"tag":60,"props":125,"children":127},{"className":126},[],[128],{"type":46,"value":129},"pulumi stack ls",{"type":46,"value":131},") or\n",{"type":40,"tag":60,"props":133,"children":135},{"className":134},[],[136],{"type":46,"value":137},"Pulumi.yaml",{"type":46,"value":139},". A missing version means the most recent update on that stack.",{"type":40,"tag":49,"props":141,"children":142},{},[143],{"type":46,"value":144},"Briefly confirm which operation you landed on, its version or preview id and the\nstack, before reading further. Keep it lightweight; they already told you.",{"type":40,"tag":77,"props":146,"children":148},{"id":147},"read-what-failed",[149],{"type":46,"value":150},"Read what failed",{"type":40,"tag":49,"props":152,"children":153},{},[154],{"type":46,"value":155},"A failed update and a failed preview both record engine events, and the error is in\nthe diagnostic messages inside those events. Using the fields you settled on above,\nfetch the events and pull the messages out.",{"type":40,"tag":49,"props":157,"children":158},{},[159,161,167],{"type":46,"value":160},"For a failed update, use the ",{"type":40,"tag":60,"props":162,"children":164},{"className":163},[],[165],{"type":46,"value":166},"update",{"type":46,"value":168}," path with the version number:",{"type":40,"tag":170,"props":171,"children":175},"pre",{"className":172,"code":174,"language":46},[173],"language-text","pulumi api \u002Fapi\u002Fstacks\u002F{orgName}\u002F{projectName}\u002F{stackName}\u002Fupdate\u002F\u003Cversion>\u002Fevents \\\n  | jq -r '.events[].diagnosticEvent | select(. != null) | \"[\\(.severity)] \\(.message)\"' \\\n  | sed 's\u002F\u003C{%reset%}>\u002F\u002Fg'\n",[176],{"type":40,"tag":60,"props":177,"children":179},{"__ignoreMap":178},"",[180],{"type":46,"value":174},{"type":40,"tag":49,"props":182,"children":183},{},[184,186,192],{"type":46,"value":185},"For a failed preview, use the ",{"type":40,"tag":60,"props":187,"children":189},{"className":188},[],[190],{"type":46,"value":191},"preview",{"type":46,"value":193}," path with the preview id:",{"type":40,"tag":170,"props":195,"children":198},{"className":196,"code":197,"language":46},[173],"pulumi api \u002Fapi\u002Fstacks\u002F{orgName}\u002F{projectName}\u002F{stackName}\u002Fpreview\u002F\u003Cpreview-id>\u002Fevents \\\n  | jq -r '.events[].diagnosticEvent | select(. != null) | \"[\\(.severity)] \\(.message)\"' \\\n  | sed 's\u002F\u003C{%reset%}>\u002F\u002Fg'\n",[199],{"type":40,"tag":60,"props":200,"children":201},{"__ignoreMap":178},[202],{"type":46,"value":197},{"type":40,"tag":49,"props":204,"children":205},{},[206,208,214,216,222,224,230,232,238,240,246],{"type":46,"value":207},"Read every message, not only the ones tagged ",{"type":40,"tag":60,"props":209,"children":211},{"className":210},[],[212],{"type":46,"value":213},"severity == \"error\"",{"type":46,"value":215},". A provider\nerror carries that ",{"type":40,"tag":60,"props":217,"children":219},{"className":218},[],[220],{"type":46,"value":221},"error",{"type":46,"value":223}," tag, but a program error, which is the common case when\na preview fails, arrives as a stderr diagnostic tagged ",{"type":40,"tag":60,"props":225,"children":227},{"className":226},[],[228],{"type":46,"value":229},"info#err",{"type":46,"value":231},". The trailing\n",{"type":40,"tag":60,"props":233,"children":235},{"className":234},[],[236],{"type":46,"value":237},"sed",{"type":46,"value":239}," strips terminal color codes that Pulumi embeds in the text, which otherwise\nshow up as ",{"type":40,"tag":60,"props":241,"children":243},{"className":242},[],[244],{"type":46,"value":245},"\u003C{%reset%}>",{"type":46,"value":247},".",{"type":40,"tag":77,"props":249,"children":251},{"id":250},"find-the-cause-and-where-the-fix-belongs",[252],{"type":46,"value":253},"Find the cause and where the fix belongs",{"type":40,"tag":49,"props":255,"children":256},{},[257],{"type":46,"value":258},"An operation can fail with errors from more than one resource, so read all of the\ndiagnostics first, then work through each error. Trace every error back to the\nresource that raised it (its URN and type), to where that resource is declared in\nthe program, and to the inputs that feed it.",{"type":40,"tag":49,"props":260,"children":261},{},[262],{"type":46,"value":263},"The error text tells you what kind of problem it is, and that points to where the\nfix belongs. A Pulumi fix lands in one of three places, and naming the right one\nkeeps you from editing code that was never the problem.",{"type":40,"tag":265,"props":266,"children":267},"ul",{},[268,280,306],{"type":40,"tag":269,"props":270,"children":271},"li",{},[272,278],{"type":40,"tag":273,"props":274,"children":275},"strong",{},[276],{"type":46,"value":277},"The program.",{"type":46,"value":279}," The code is wrong: a bad reference, a wrong type, an input the\nprovider rejected, or a value used before it had resolved. This is what a failed\npreview usually reports, because the plan could not be built. Fix it by editing\nthe code.",{"type":40,"tag":269,"props":281,"children":282},{},[283,288,290,296,298,304],{"type":40,"tag":273,"props":284,"children":285},{},[286],{"type":46,"value":287},"The state.",{"type":46,"value":289}," The code is correct, but the stored state and the real cloud\nresources disagree. Reconcile drift with ",{"type":40,"tag":60,"props":291,"children":293},{"className":292},[],[294],{"type":46,"value":295},"pulumi refresh",{"type":46,"value":297},", and bring a resource\nthat already exists outside the state under management with ",{"type":40,"tag":60,"props":299,"children":301},{"className":300},[],[302],{"type":46,"value":303},"pulumi import",{"type":46,"value":305},"\nrather than recreating it. Note that an operation which failed partway through\napplying may have already changed some resources, so check the current state\nbefore you decide.",{"type":40,"tag":269,"props":307,"children":308},{},[309,314],{"type":40,"tag":273,"props":310,"children":311},{},[312],{"type":46,"value":313},"The environment.",{"type":46,"value":315}," The problem is outside Pulumi: credentials, permissions,\nOIDC, or a quota. Fix the role, the ESC environment, or the capacity that the\nprovider rejected, rather than the resource code.",{"type":40,"tag":77,"props":317,"children":319},{"id":318},"fix-the-cause",[320],{"type":46,"value":321},"Fix the cause",{"type":40,"tag":49,"props":323,"children":324},{},[325],{"type":46,"value":326},"Make the smallest change that addresses the root cause. How you confirm the fix,\nand how you deliver it, whether as a local edit or as a pull request, follow your\nmode's workflow, not this skill.",{"type":40,"tag":77,"props":328,"children":330},{"id":329},"if-the-user-didnt-say-which-operation",[331],{"type":46,"value":332},"If the user didn't say which operation",{"type":40,"tag":49,"props":334,"children":335},{},[336],{"type":46,"value":337},"When the user gives you nothing to go on, debug their most recent operation on the\nstack. The update list does not record who ran each update, so find it through the\nAPI:",{"type":40,"tag":339,"props":340,"children":341},"ol",{},[342,355,376],{"type":40,"tag":269,"props":343,"children":344},{},[345,347,353],{"type":46,"value":346},"Run ",{"type":40,"tag":60,"props":348,"children":350},{"className":349},[],[351],{"type":46,"value":352},"pulumi whoami",{"type":46,"value":354}," to get the current user's login.",{"type":40,"tag":269,"props":356,"children":357},{},[358,360,366,368,374],{"type":46,"value":359},"Read the latest update and who requested it with\n",{"type":40,"tag":60,"props":361,"children":363},{"className":362},[],[364],{"type":46,"value":365},"pulumi api \u002Fapi\u002Fstacks\u002F{orgName}\u002F{projectName}\u002F{stackName}\u002Fupdates\u002Flatest",{"type":46,"value":367},", and\ncompare its ",{"type":40,"tag":60,"props":369,"children":371},{"className":370},[],[372],{"type":46,"value":373},"requestedBy.githubLogin",{"type":46,"value":375}," to the login from step 1.",{"type":40,"tag":269,"props":377,"children":378},{},[379,381,387,389,394],{"type":46,"value":380},"If they match, that update is the one to debug. If they do not, walk back one\nversion at a time with\n",{"type":40,"tag":60,"props":382,"children":384},{"className":383},[],[385],{"type":46,"value":386},"pulumi api \u002Fapi\u002Fstacks\u002F{orgName}\u002F{projectName}\u002F{stackName}\u002Fupdates\u002F\u003Cn>",{"type":46,"value":388}," until\n",{"type":40,"tag":60,"props":390,"children":392},{"className":391},[],[393],{"type":46,"value":373},{"type":46,"value":395}," matches the user.",{"type":40,"tag":49,"props":397,"children":398},{},[399],{"type":46,"value":400},"Tell the user which operation you landed on, its version, kind, and result, and\nconfirm it is the one they mean before going further.",{"items":402,"total":564},[403,419,434,447,461,476,491,503,518,525,540,550],{"slug":404,"name":404,"fn":405,"description":406,"org":407,"tags":408,"stars":23,"repoUrl":24,"updatedAt":418},"cloudformation-to-pulumi","migrate CloudFormation to Pulumi","Convert, migrate, or import AWS CloudFormation stacks or templates into Pulumi programs. Load this skill whenever a user wants to move from CloudFormation to Pulumi, convert a CFN template, import existing CloudFormation-managed resources into Pulumi, or asks about CloudFormation-to-Pulumi migration in any form. Also load when the user mentions cdk-importer in a migration context.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[409,412,413,414,417],{"name":410,"slug":411,"type":13},"AWS","aws",{"name":15,"slug":16,"type":13},{"name":18,"slug":19,"type":13},{"name":415,"slug":416,"type":13},"Migration","migration",{"name":9,"slug":8,"type":13},"2026-04-06T18:50:36.677615",{"slug":420,"name":420,"fn":421,"description":422,"org":423,"tags":424,"stars":23,"repoUrl":24,"updatedAt":433},"package-usage","audit Pulumi package usage across stacks","Track which stacks across a Pulumi organization use a specific package and at what versions. Use for cross-stack audits, identifying outdated or unmaintained package versions across many stacks, finding affected stacks before publishing breaking changes to a component package, or planning coordinated upgrade rollouts. Do NOT use for upgrading a cloud provider package (pulumi-aws, pulumi-azure-native, pulumi-gcp, pulumi-kubernetes, etc.) in a single project — use skill `provider-upgrade` instead. Do NOT use for general infrastructure creation, resource provisioning, or how-to questions about a package.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[425,428,429,432],{"name":426,"slug":427,"type":13},"Audit","audit",{"name":18,"slug":19,"type":13},{"name":430,"slug":431,"type":13},"Operations","operations",{"name":9,"slug":8,"type":13},"2026-07-24T05:37:48.019964",{"slug":435,"name":435,"fn":436,"description":437,"org":438,"tags":439,"stars":23,"repoUrl":24,"updatedAt":446},"provider-upgrade","upgrade and reconcile Pulumi providers","Upgrade any Pulumi provider to a newer version and reconcile the resulting diff. Use when users want to upgrade or update a provider (including editing package.json, requirements.txt, pyproject.toml, go.mod, or Pulumi.yaml to bump a provider SDK), check for breaking changes before or during an upgrade, fix resources that broke after a provider upgrade, or resolve unexpected replacements, creates, or deletes in a post-upgrade preview. Applies to all providers (aws, azure-native, gcp, kubernetes, aws-native, cloudflare, datadog, etc.) — not just Tier 1. Do NOT use for querying which stacks use what package versions; use skill `package-usage` for cross-stack audits. Do NOT use for general infrastructure tasks.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[440,443,444,445],{"name":441,"slug":442,"type":13},"DevOps","devops",{"name":18,"slug":19,"type":13},{"name":415,"slug":416,"type":13},{"name":9,"slug":8,"type":13},"2026-06-04T07:58:58.874758",{"slug":448,"name":448,"fn":449,"description":450,"org":451,"tags":452,"stars":23,"repoUrl":24,"updatedAt":460},"pulumi-arm-to-pulumi","migrate Azure ARM to Pulumi","Convert or migrate Azure ARM (Azure Resource Manager) templates, Bicep templates, or code to Pulumi, including importing existing Azure resources. This skill MUST be loaded whenever a user requests migration, conversion, or import of ARM templates, Bicep templates, ARM code, Bicep code, or Azure resources to Pulumi.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[453,456,457,458,459],{"name":454,"slug":455,"type":13},"Azure","azure",{"name":15,"slug":16,"type":13},{"name":18,"slug":19,"type":13},{"name":415,"slug":416,"type":13},{"name":9,"slug":8,"type":13},"2026-04-06T18:50:35.384851",{"slug":462,"name":462,"fn":463,"description":464,"org":465,"tags":466,"stars":23,"repoUrl":24,"updatedAt":475},"pulumi-automation-api","run Pulumi programs via Automation API","Load this skill when a user asks how to run Pulumi programmatically, embed Pulumi in an application, orchestrate multiple stacks in code, build a self-service infrastructure portal, replace pulumi CLI shell scripts with code, or use the Pulumi Automation API (LocalWorkspace, createOrSelectStack, inline programs). Also load for questions about multi-stack sequencing, parallel deployments, or passing outputs between stacks via code.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[467,470,473,474],{"name":468,"slug":469,"type":13},"API Development","api-development",{"name":471,"slug":472,"type":13},"Automation","automation",{"name":18,"slug":19,"type":13},{"name":9,"slug":8,"type":13},"2026-06-04T07:59:00.113998",{"slug":477,"name":477,"fn":478,"description":479,"org":480,"tags":481,"stars":23,"repoUrl":24,"updatedAt":490},"pulumi-best-practices","apply Pulumi best practices for infrastructure","Load when the user is writing, reviewing, or debugging Pulumi TypeScript\u002FPython programs; asks about Output\u003CT> or apply() usage; wants to create ComponentResource classes; needs to refactor resources without destroying them (aliases); is setting up secrets or config; or is configuring a pulumi preview\u002Fup CI workflow. Also load for questions about resource dependency order, parent\u002Fchild resource relationships, or pulumi.interpolate.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[482,483,484,487],{"name":18,"slug":19,"type":13},{"name":9,"slug":8,"type":13},{"name":485,"slug":486,"type":13},"Python","python",{"name":488,"slug":489,"type":13},"TypeScript","typescript","2026-06-03T07:52:43.916562",{"slug":492,"name":492,"fn":493,"description":494,"org":495,"tags":496,"stars":23,"repoUrl":24,"updatedAt":502},"pulumi-cdk-to-pulumi","migrate AWS CDK to Pulumi","Load this skill when a user wants to migrate, convert, port, translate, or move an AWS CDK application (including CDK stacks, constructs, or CloudFormation-synthesized templates) to Pulumi. Phrases such as \"convert CDK to Pulumi\", \"migrate CDK app\", \"port CDK stacks\", \"replace CDK with Pulumi\", \"stop using CDK\". Do NOT load for general CDK questions, CDK-only help, or CDK vs Pulumi comparisons where no migration is requested.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[497,498,499,500,501],{"name":410,"slug":411,"type":13},{"name":15,"slug":16,"type":13},{"name":18,"slug":19,"type":13},{"name":415,"slug":416,"type":13},{"name":9,"slug":8,"type":13},"2026-04-06T18:50:39.23999",{"slug":504,"name":504,"fn":505,"description":506,"org":507,"tags":508,"stars":23,"repoUrl":24,"updatedAt":517},"pulumi-component","author reusable Pulumi component resources","Guide for authoring Pulumi ComponentResource classes. Use when creating reusable infrastructure components, designing component interfaces, setting up multi-language support, or distributing component packages.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[509,512,515,516],{"name":510,"slug":511,"type":13},"Architecture","architecture",{"name":513,"slug":514,"type":13},"Engineering","engineering",{"name":18,"slug":19,"type":13},{"name":9,"slug":8,"type":13},"2026-06-04T07:58:57.625622",{"slug":4,"name":4,"fn":5,"description":6,"org":519,"tags":520,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[521,522,523,524],{"name":21,"slug":22,"type":13},{"name":15,"slug":16,"type":13},{"name":18,"slug":19,"type":13},{"name":9,"slug":8,"type":13},{"slug":526,"name":526,"fn":527,"description":528,"org":529,"tags":530,"stars":23,"repoUrl":24,"updatedAt":539},"pulumi-esc","manage secrets and configuration with Pulumi ESC","Guidance for working with Pulumi ESC (Environments, Secrets, and Configuration). Use when users ask about managing secrets, configuration, environments, short-term credentials, configuring OIDC for AWS, Azure, GCP, integrating with secret stores (AWS Secrets Manager, Azure Key Vault, HashiCorp Vault, 1Password), or using ESC with Pulumi stacks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[531,534,535,536],{"name":532,"slug":533,"type":13},"Configuration","configuration",{"name":18,"slug":19,"type":13},{"name":9,"slug":8,"type":13},{"name":537,"slug":538,"type":13},"Security","security","2026-07-24T05:37:47.044405",{"slug":541,"name":541,"fn":542,"description":543,"org":544,"tags":545,"stars":23,"repoUrl":24,"updatedAt":549},"pulumi-overview","manage cloud infrastructure with Pulumi","Use this skill for any task that creates, modifies, inspects, or destroys cloud infrastructure or SaaS configuration, from one-off CLI operations to full multi-resource projects, across providers in the Pulumi ecosystem. A typical project spans many providers (AWS or Azure or GCP, Kubernetes, Cloudflare, Auth0, Datadog, Vercel, and others), and Pulumi drives them through one CLI, one state model, and one credential layer. Trigger even when the user does not name Pulumi; phrasings like \"deploy this app,\" \"provision a database,\" \"stand up a VPC,\" \"configure Auth0,\" \"set up Datadog monitoring,\" or \"tear down staging\" qualify. Also trigger for tasks that migrate, port, or convert existing infrastructure code (Terraform, CloudFormation, CDK, Bicep, ARM) to Pulumi. Do not trigger for application runtime code that reads or writes data via cloud SDKs; that is application code, not infrastructure.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[546,547,548],{"name":15,"slug":16,"type":13},{"name":18,"slug":19,"type":13},{"name":9,"slug":8,"type":13},"2026-06-03T07:52:39.333565",{"slug":551,"name":551,"fn":552,"description":553,"org":554,"tags":555,"stars":23,"repoUrl":24,"updatedAt":563},"pulumi-terraform-to-pulumi","migrate Terraform to Pulumi","Migrate Terraform\u002FOpenTofu projects to Pulumi, including translating HCL source code and\u002For importing Terraform state into a Pulumi stack. Use when a user wants to convert Terraform to Pulumi, migrate from HCL, or import tfstate into Pulumi. Do NOT trigger for general Terraform-vs-Pulumi comparisons or questions about using both tools side-by-side.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[556,557,558,559,560],{"name":15,"slug":16,"type":13},{"name":18,"slug":19,"type":13},{"name":415,"slug":416,"type":13},{"name":9,"slug":8,"type":13},{"name":561,"slug":562,"type":13},"Terraform","terraform","2026-04-06T18:50:37.954346",12,{"items":566,"total":564},[567,575,582,589,597,604,611],{"slug":404,"name":404,"fn":405,"description":406,"org":568,"tags":569,"stars":23,"repoUrl":24,"updatedAt":418},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[570,571,572,573,574],{"name":410,"slug":411,"type":13},{"name":15,"slug":16,"type":13},{"name":18,"slug":19,"type":13},{"name":415,"slug":416,"type":13},{"name":9,"slug":8,"type":13},{"slug":420,"name":420,"fn":421,"description":422,"org":576,"tags":577,"stars":23,"repoUrl":24,"updatedAt":433},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[578,579,580,581],{"name":426,"slug":427,"type":13},{"name":18,"slug":19,"type":13},{"name":430,"slug":431,"type":13},{"name":9,"slug":8,"type":13},{"slug":435,"name":435,"fn":436,"description":437,"org":583,"tags":584,"stars":23,"repoUrl":24,"updatedAt":446},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[585,586,587,588],{"name":441,"slug":442,"type":13},{"name":18,"slug":19,"type":13},{"name":415,"slug":416,"type":13},{"name":9,"slug":8,"type":13},{"slug":448,"name":448,"fn":449,"description":450,"org":590,"tags":591,"stars":23,"repoUrl":24,"updatedAt":460},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[592,593,594,595,596],{"name":454,"slug":455,"type":13},{"name":15,"slug":16,"type":13},{"name":18,"slug":19,"type":13},{"name":415,"slug":416,"type":13},{"name":9,"slug":8,"type":13},{"slug":462,"name":462,"fn":463,"description":464,"org":598,"tags":599,"stars":23,"repoUrl":24,"updatedAt":475},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[600,601,602,603],{"name":468,"slug":469,"type":13},{"name":471,"slug":472,"type":13},{"name":18,"slug":19,"type":13},{"name":9,"slug":8,"type":13},{"slug":477,"name":477,"fn":478,"description":479,"org":605,"tags":606,"stars":23,"repoUrl":24,"updatedAt":490},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[607,608,609,610],{"name":18,"slug":19,"type":13},{"name":9,"slug":8,"type":13},{"name":485,"slug":486,"type":13},{"name":488,"slug":489,"type":13},{"slug":492,"name":492,"fn":493,"description":494,"org":612,"tags":613,"stars":23,"repoUrl":24,"updatedAt":502},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[614,615,616,617,618],{"name":410,"slug":411,"type":13},{"name":15,"slug":16,"type":13},{"name":18,"slug":19,"type":13},{"name":415,"slug":416,"type":13},{"name":9,"slug":8,"type":13}]