[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-pulumi-pulumi-context-api":3,"mdc-1vc9y8-key":30,"related-org-pulumi-pulumi-context-api":511,"related-repo-pulumi-pulumi-context-api":678},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":20,"repoUrl":21,"updatedAt":22,"license":23,"forks":24,"topics":25,"repo":26,"sourceUrl":28,"mdContent":29},"pulumi-context-api","query infrastructure relationships via Pulumi","Query the Pulumi Context API, a graph query interface over an\norganization's infrastructure in Pulumi Cloud. Use when a question is\nabout relationships or reachability across resources and stacks: the\nimpact of a change (\"what breaks if I change this?\", blast radius), what\ndepends on a resource or a stack's outputs, which provider instances\nmanage which resources and at what versions, orphaned or unreferenced\nresources, or references that cross stacks and cloud accounts, including\nresources Pulumi doesn't manage. Don't load it for finding a single\nresource by name, type, or property (Resource Search covers that), or for\nupdate history and failure debugging (use skill\n`pulumi-debug-failed-operation`).\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],{"name":9,"slug":8,"type":13},"tag",{"name":15,"slug":16,"type":13},"Cloud","cloud",{"name":18,"slug":19,"type":13},"Infrastructure","infrastructure",63,"https:\u002F\u002Fgithub.com\u002Fpulumi\u002Fagent-skills","2026-08-31T09:19:31.310732",null,4,[],{"repoUrl":21,"stars":20,"forks":24,"topics":27,"description":23},[],"https:\u002F\u002Fgithub.com\u002Fpulumi\u002Fagent-skills\u002Ftree\u002FHEAD\u002Fpulumi\u002Fskills\u002Fpulumi-context-api","---\nname: pulumi-context-api\ndescription: |\n    Query the Pulumi Context API, a graph query interface over an\n    organization's infrastructure in Pulumi Cloud. Use when a question is\n    about relationships or reachability across resources and stacks: the\n    impact of a change (\"what breaks if I change this?\", blast radius), what\n    depends on a resource or a stack's outputs, which provider instances\n    manage which resources and at what versions, orphaned or unreferenced\n    resources, or references that cross stacks and cloud accounts, including\n    resources Pulumi doesn't manage. Don't load it for finding a single\n    resource by name, type, or property (Resource Search covers that), or for\n    update history and failure debugging (use skill\n    `pulumi-debug-failed-operation`).\n---\n\n# Query the Pulumi Context API\n\nThe Context API answers questions about an organization's cloud infrastructure\nas a graph: what exists, what depends on what, what a change would affect. It\ncovers resources found through Pulumi Discovery, not just Pulumi-managed ones.\n\nPrefer it over Resource Search whenever the question involves relationships.\nResource Search finds individual resources but cannot follow edges, so\nanswering \"what depends on X\" with repeated searches is slow and usually\nincomplete.\n\nPublic preview, for organizations on the Enterprise and Business Critical\neditions. Needs Pulumi CLI v3.243.0 or newer, an active `pulumi login`, and a\nrole granting `resources:search` (the default Member and Admin roles do).\n\n## Step 1: fetch the primer, always\n\n`pulumi whoami -v` lists every organization the login can reach. Ask which one\nthe question is about rather than assuming the default org — that is often an\nindividual account with no entitlement.\n\n```bash\npulumi api GetGraphSchema -F orgName=\u003Corg>\n```\n\nThis returns a self-contained guide to composing selectors — vocabulary, edge\ntypes, engine caps, worked examples, pagination, completeness rules, and the\ntraps that produce a confident wrong answer instead of an error. It is served\nby the deployment that answers your queries, so it is the contract, and it\nmoves between schema versions. This skill bootstraps you to it and stops there;\neverything below defers to it. Fetch it fresh in every session and for every\norg you query — a primer remembered from earlier may describe a schema this\ndeployment no longer serves.\n\n**Read it in full — never truncate it with `head`, `tail`, or a byte cap.** A\nclipped primer means malformed selectors and rejected queries.\n\n### If this call fails\n\nYou have no primer yet, so handle it here rather than looking it up there:\n\n| Response | Meaning |\n|---|---|\n| `402 Payment Required` | the org's edition doesn't include the Context API |\n| `409 Conflict` | a self-hosted install whose license doesn't enable it |\n| `404 Not Found: '\u003Corg>' not found` | bad org name, or the caller lacks permission on it |\n| `404 Not Found`, detail-free | a wrong path or method name, or a deployment without the endpoint |\n| `503 Service Unavailable` | transient — retry |\n\nReport the gate to the user instead of retrying anything but the 503. If\n`pulumi api` doesn't know `GetGraphSchema` at all, that is not a gate: run\n`pulumi api list --refresh-spec` to refresh the cached spec, then retry the\nfetch.\n\n## Step 2: query\n\n```bash\npulumi api GraphQuery -F orgName=\u003Corg> --input selector.json\n```\n\nThe body is a JSON selector, not query text. Compose it from the primer you\njust read, not from memory or from a grammar you recall from another session.\n\n## Step 3: apply the primer's completeness rules before answering\n\nEvery response carries fidelity signals — currently `meta.resultMode`,\n`meta.visibility`, and `pageInfo.continuationToken`; the primer names the\nauthoritative set. Read the primer's rules for them and follow them; the\nremedies differ per signal and a stale paraphrase here would be worse than\nnone.\n\nWhat matters most: **a completeness claim needs all of them clean.** Impact\nanalysis, \"nothing depends on this\", an exhaustive cleanup list, a total across\ngroups — none of these survive a truncated result, a trimmed traversal, or an\nundrained page. When you can't get there, say what the answer does cover.\n\n## Scope of the graph\n\nResources, stacks, and the relationships between them, trimmed to the stacks\nand accounts the caller can see. The primer's \"What it cannot answer yet\"\nsection is the live boundary — check it before concluding a question is\nunanswerable, and reach for a different API rather than approximating one of\nthose gaps with a graph query.\n\nOne boundary worth knowing up front, because it decides which API to use: the\ngraph returns a schema-declared subset of fields per node type, not full\nresource property bags. The primer lists which fields each node type can match\non and which it can return; when the question needs the property values\nthemselves, they come back from Resource Search.\n\nHuman-readable reference:\n[Context API overview](https:\u002F\u002Fwww.pulumi.com\u002Fdocs\u002Finsights\u002Fcontext-api\u002F) and\n[query guide](https:\u002F\u002Fwww.pulumi.com\u002Fdocs\u002Finsights\u002Fguides\u002Fcontext-api\u002F).\n",{"data":31,"body":32},{"name":4,"description":6},{"type":33,"children":34},"root",[35,44,50,55,77,84,95,160,165,192,199,204,319,348,354,412,417,423,452,464,470,475,480,505],{"type":36,"tag":37,"props":38,"children":40},"element","h1",{"id":39},"query-the-pulumi-context-api",[41],{"type":42,"value":43},"text","Query the Pulumi Context API",{"type":36,"tag":45,"props":46,"children":47},"p",{},[48],{"type":42,"value":49},"The Context API answers questions about an organization's cloud infrastructure\nas a graph: what exists, what depends on what, what a change would affect. It\ncovers resources found through Pulumi Discovery, not just Pulumi-managed ones.",{"type":36,"tag":45,"props":51,"children":52},{},[53],{"type":42,"value":54},"Prefer it over Resource Search whenever the question involves relationships.\nResource Search finds individual resources but cannot follow edges, so\nanswering \"what depends on X\" with repeated searches is slow and usually\nincomplete.",{"type":36,"tag":45,"props":56,"children":57},{},[58,60,67,69,75],{"type":42,"value":59},"Public preview, for organizations on the Enterprise and Business Critical\neditions. Needs Pulumi CLI v3.243.0 or newer, an active ",{"type":36,"tag":61,"props":62,"children":64},"code",{"className":63},[],[65],{"type":42,"value":66},"pulumi login",{"type":42,"value":68},", and a\nrole granting ",{"type":36,"tag":61,"props":70,"children":72},{"className":71},[],[73],{"type":42,"value":74},"resources:search",{"type":42,"value":76}," (the default Member and Admin roles do).",{"type":36,"tag":78,"props":79,"children":81},"h2",{"id":80},"step-1-fetch-the-primer-always",[82],{"type":42,"value":83},"Step 1: fetch the primer, always",{"type":36,"tag":45,"props":85,"children":86},{},[87,93],{"type":36,"tag":61,"props":88,"children":90},{"className":89},[],[91],{"type":42,"value":92},"pulumi whoami -v",{"type":42,"value":94}," lists every organization the login can reach. Ask which one\nthe question is about rather than assuming the default org — that is often an\nindividual account with no entitlement.",{"type":36,"tag":96,"props":97,"children":102},"pre",{"className":98,"code":99,"language":100,"meta":101,"style":101},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pulumi api GetGraphSchema -F orgName=\u003Corg>\n","bash","",[103],{"type":36,"tag":61,"props":104,"children":105},{"__ignoreMap":101},[106],{"type":36,"tag":107,"props":108,"children":111},"span",{"class":109,"line":110},"line",1,[112,117,123,128,133,138,144,149,155],{"type":36,"tag":107,"props":113,"children":115},{"style":114},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[116],{"type":42,"value":8},{"type":36,"tag":107,"props":118,"children":120},{"style":119},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[121],{"type":42,"value":122}," api",{"type":36,"tag":107,"props":124,"children":125},{"style":119},[126],{"type":42,"value":127}," GetGraphSchema",{"type":36,"tag":107,"props":129,"children":130},{"style":119},[131],{"type":42,"value":132}," -F",{"type":36,"tag":107,"props":134,"children":135},{"style":119},[136],{"type":42,"value":137}," orgName=",{"type":36,"tag":107,"props":139,"children":141},{"style":140},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[142],{"type":42,"value":143},"\u003C",{"type":36,"tag":107,"props":145,"children":146},{"style":119},[147],{"type":42,"value":148},"or",{"type":36,"tag":107,"props":150,"children":152},{"style":151},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[153],{"type":42,"value":154},"g",{"type":36,"tag":107,"props":156,"children":157},{"style":140},[158],{"type":42,"value":159},">\n",{"type":36,"tag":45,"props":161,"children":162},{},[163],{"type":42,"value":164},"This returns a self-contained guide to composing selectors — vocabulary, edge\ntypes, engine caps, worked examples, pagination, completeness rules, and the\ntraps that produce a confident wrong answer instead of an error. It is served\nby the deployment that answers your queries, so it is the contract, and it\nmoves between schema versions. This skill bootstraps you to it and stops there;\neverything below defers to it. Fetch it fresh in every session and for every\norg you query — a primer remembered from earlier may describe a schema this\ndeployment no longer serves.",{"type":36,"tag":45,"props":166,"children":167},{},[168,190],{"type":36,"tag":169,"props":170,"children":171},"strong",{},[172,174,180,182,188],{"type":42,"value":173},"Read it in full — never truncate it with ",{"type":36,"tag":61,"props":175,"children":177},{"className":176},[],[178],{"type":42,"value":179},"head",{"type":42,"value":181},", ",{"type":36,"tag":61,"props":183,"children":185},{"className":184},[],[186],{"type":42,"value":187},"tail",{"type":42,"value":189},", or a byte cap.",{"type":42,"value":191}," A\nclipped primer means malformed selectors and rejected queries.",{"type":36,"tag":193,"props":194,"children":196},"h3",{"id":195},"if-this-call-fails",[197],{"type":42,"value":198},"If this call fails",{"type":36,"tag":45,"props":200,"children":201},{},[202],{"type":42,"value":203},"You have no primer yet, so handle it here rather than looking it up there:",{"type":36,"tag":205,"props":206,"children":207},"table",{},[208,227],{"type":36,"tag":209,"props":210,"children":211},"thead",{},[212],{"type":36,"tag":213,"props":214,"children":215},"tr",{},[216,222],{"type":36,"tag":217,"props":218,"children":219},"th",{},[220],{"type":42,"value":221},"Response",{"type":36,"tag":217,"props":223,"children":224},{},[225],{"type":42,"value":226},"Meaning",{"type":36,"tag":228,"props":229,"children":230},"tbody",{},[231,249,266,283,302],{"type":36,"tag":213,"props":232,"children":233},{},[234,244],{"type":36,"tag":235,"props":236,"children":237},"td",{},[238],{"type":36,"tag":61,"props":239,"children":241},{"className":240},[],[242],{"type":42,"value":243},"402 Payment Required",{"type":36,"tag":235,"props":245,"children":246},{},[247],{"type":42,"value":248},"the org's edition doesn't include the Context API",{"type":36,"tag":213,"props":250,"children":251},{},[252,261],{"type":36,"tag":235,"props":253,"children":254},{},[255],{"type":36,"tag":61,"props":256,"children":258},{"className":257},[],[259],{"type":42,"value":260},"409 Conflict",{"type":36,"tag":235,"props":262,"children":263},{},[264],{"type":42,"value":265},"a self-hosted install whose license doesn't enable it",{"type":36,"tag":213,"props":267,"children":268},{},[269,278],{"type":36,"tag":235,"props":270,"children":271},{},[272],{"type":36,"tag":61,"props":273,"children":275},{"className":274},[],[276],{"type":42,"value":277},"404 Not Found: '\u003Corg>' not found",{"type":36,"tag":235,"props":279,"children":280},{},[281],{"type":42,"value":282},"bad org name, or the caller lacks permission on it",{"type":36,"tag":213,"props":284,"children":285},{},[286,297],{"type":36,"tag":235,"props":287,"children":288},{},[289,295],{"type":36,"tag":61,"props":290,"children":292},{"className":291},[],[293],{"type":42,"value":294},"404 Not Found",{"type":42,"value":296},", detail-free",{"type":36,"tag":235,"props":298,"children":299},{},[300],{"type":42,"value":301},"a wrong path or method name, or a deployment without the endpoint",{"type":36,"tag":213,"props":303,"children":304},{},[305,314],{"type":36,"tag":235,"props":306,"children":307},{},[308],{"type":36,"tag":61,"props":309,"children":311},{"className":310},[],[312],{"type":42,"value":313},"503 Service Unavailable",{"type":36,"tag":235,"props":315,"children":316},{},[317],{"type":42,"value":318},"transient — retry",{"type":36,"tag":45,"props":320,"children":321},{},[322,324,330,332,338,340,346],{"type":42,"value":323},"Report the gate to the user instead of retrying anything but the 503. If\n",{"type":36,"tag":61,"props":325,"children":327},{"className":326},[],[328],{"type":42,"value":329},"pulumi api",{"type":42,"value":331}," doesn't know ",{"type":36,"tag":61,"props":333,"children":335},{"className":334},[],[336],{"type":42,"value":337},"GetGraphSchema",{"type":42,"value":339}," at all, that is not a gate: run\n",{"type":36,"tag":61,"props":341,"children":343},{"className":342},[],[344],{"type":42,"value":345},"pulumi api list --refresh-spec",{"type":42,"value":347}," to refresh the cached spec, then retry the\nfetch.",{"type":36,"tag":78,"props":349,"children":351},{"id":350},"step-2-query",[352],{"type":42,"value":353},"Step 2: query",{"type":36,"tag":96,"props":355,"children":357},{"className":98,"code":356,"language":100,"meta":101,"style":101},"pulumi api GraphQuery -F orgName=\u003Corg> --input selector.json\n",[358],{"type":36,"tag":61,"props":359,"children":360},{"__ignoreMap":101},[361],{"type":36,"tag":107,"props":362,"children":363},{"class":109,"line":110},[364,368,372,377,381,385,389,393,397,402,407],{"type":36,"tag":107,"props":365,"children":366},{"style":114},[367],{"type":42,"value":8},{"type":36,"tag":107,"props":369,"children":370},{"style":119},[371],{"type":42,"value":122},{"type":36,"tag":107,"props":373,"children":374},{"style":119},[375],{"type":42,"value":376}," GraphQuery",{"type":36,"tag":107,"props":378,"children":379},{"style":119},[380],{"type":42,"value":132},{"type":36,"tag":107,"props":382,"children":383},{"style":119},[384],{"type":42,"value":137},{"type":36,"tag":107,"props":386,"children":387},{"style":140},[388],{"type":42,"value":143},{"type":36,"tag":107,"props":390,"children":391},{"style":119},[392],{"type":42,"value":148},{"type":36,"tag":107,"props":394,"children":395},{"style":151},[396],{"type":42,"value":154},{"type":36,"tag":107,"props":398,"children":399},{"style":140},[400],{"type":42,"value":401},">",{"type":36,"tag":107,"props":403,"children":404},{"style":119},[405],{"type":42,"value":406}," --input",{"type":36,"tag":107,"props":408,"children":409},{"style":119},[410],{"type":42,"value":411}," selector.json\n",{"type":36,"tag":45,"props":413,"children":414},{},[415],{"type":42,"value":416},"The body is a JSON selector, not query text. Compose it from the primer you\njust read, not from memory or from a grammar you recall from another session.",{"type":36,"tag":78,"props":418,"children":420},{"id":419},"step-3-apply-the-primers-completeness-rules-before-answering",[421],{"type":42,"value":422},"Step 3: apply the primer's completeness rules before answering",{"type":36,"tag":45,"props":424,"children":425},{},[426,428,434,436,442,444,450],{"type":42,"value":427},"Every response carries fidelity signals — currently ",{"type":36,"tag":61,"props":429,"children":431},{"className":430},[],[432],{"type":42,"value":433},"meta.resultMode",{"type":42,"value":435},",\n",{"type":36,"tag":61,"props":437,"children":439},{"className":438},[],[440],{"type":42,"value":441},"meta.visibility",{"type":42,"value":443},", and ",{"type":36,"tag":61,"props":445,"children":447},{"className":446},[],[448],{"type":42,"value":449},"pageInfo.continuationToken",{"type":42,"value":451},"; the primer names the\nauthoritative set. Read the primer's rules for them and follow them; the\nremedies differ per signal and a stale paraphrase here would be worse than\nnone.",{"type":36,"tag":45,"props":453,"children":454},{},[455,457,462],{"type":42,"value":456},"What matters most: ",{"type":36,"tag":169,"props":458,"children":459},{},[460],{"type":42,"value":461},"a completeness claim needs all of them clean.",{"type":42,"value":463}," Impact\nanalysis, \"nothing depends on this\", an exhaustive cleanup list, a total across\ngroups — none of these survive a truncated result, a trimmed traversal, or an\nundrained page. When you can't get there, say what the answer does cover.",{"type":36,"tag":78,"props":465,"children":467},{"id":466},"scope-of-the-graph",[468],{"type":42,"value":469},"Scope of the graph",{"type":36,"tag":45,"props":471,"children":472},{},[473],{"type":42,"value":474},"Resources, stacks, and the relationships between them, trimmed to the stacks\nand accounts the caller can see. The primer's \"What it cannot answer yet\"\nsection is the live boundary — check it before concluding a question is\nunanswerable, and reach for a different API rather than approximating one of\nthose gaps with a graph query.",{"type":36,"tag":45,"props":476,"children":477},{},[478],{"type":42,"value":479},"One boundary worth knowing up front, because it decides which API to use: the\ngraph returns a schema-declared subset of fields per node type, not full\nresource property bags. The primer lists which fields each node type can match\non and which it can return; when the question needs the property values\nthemselves, they come back from Resource Search.",{"type":36,"tag":45,"props":481,"children":482},{},[483,485,494,496,503],{"type":42,"value":484},"Human-readable reference:\n",{"type":36,"tag":486,"props":487,"children":491},"a",{"href":488,"rel":489},"https:\u002F\u002Fwww.pulumi.com\u002Fdocs\u002Finsights\u002Fcontext-api\u002F",[490],"nofollow",[492],{"type":42,"value":493},"Context API overview",{"type":42,"value":495}," and\n",{"type":36,"tag":486,"props":497,"children":500},{"href":498,"rel":499},"https:\u002F\u002Fwww.pulumi.com\u002Fdocs\u002Finsights\u002Fguides\u002Fcontext-api\u002F",[490],[501],{"type":42,"value":502},"query guide",{"type":42,"value":504},".",{"type":36,"tag":506,"props":507,"children":508},"style",{},[509],{"type":42,"value":510},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":512,"total":677},[513,533,548,561,575,590,605,617,632,638,651,666],{"slug":514,"name":514,"fn":515,"description":516,"org":517,"tags":518,"stars":20,"repoUrl":21,"updatedAt":532},"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},[519,522,525,528,531],{"name":520,"slug":521,"type":13},"AWS","aws",{"name":523,"slug":524,"type":13},"Deployment","deployment",{"name":526,"slug":527,"type":13},"Infrastructure as Code","infrastructure-as-code",{"name":529,"slug":530,"type":13},"Migration","migration",{"name":9,"slug":8,"type":13},"2026-04-06T18:50:36.677615",{"slug":534,"name":534,"fn":535,"description":536,"org":537,"tags":538,"stars":20,"repoUrl":21,"updatedAt":547},"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},[539,542,543,546],{"name":540,"slug":541,"type":13},"Audit","audit",{"name":526,"slug":527,"type":13},{"name":544,"slug":545,"type":13},"Operations","operations",{"name":9,"slug":8,"type":13},"2026-07-24T05:37:48.019964",{"slug":549,"name":549,"fn":550,"description":551,"org":552,"tags":553,"stars":20,"repoUrl":21,"updatedAt":560},"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},[554,557,558,559],{"name":555,"slug":556,"type":13},"DevOps","devops",{"name":526,"slug":527,"type":13},{"name":529,"slug":530,"type":13},{"name":9,"slug":8,"type":13},"2026-06-04T07:58:58.874758",{"slug":562,"name":562,"fn":563,"description":564,"org":565,"tags":566,"stars":20,"repoUrl":21,"updatedAt":574},"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},[567,570,571,572,573],{"name":568,"slug":569,"type":13},"Azure","azure",{"name":523,"slug":524,"type":13},{"name":526,"slug":527,"type":13},{"name":529,"slug":530,"type":13},{"name":9,"slug":8,"type":13},"2026-04-06T18:50:35.384851",{"slug":576,"name":576,"fn":577,"description":578,"org":579,"tags":580,"stars":20,"repoUrl":21,"updatedAt":589},"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},[581,584,587,588],{"name":582,"slug":583,"type":13},"API Development","api-development",{"name":585,"slug":586,"type":13},"Automation","automation",{"name":526,"slug":527,"type":13},{"name":9,"slug":8,"type":13},"2026-06-04T07:59:00.113998",{"slug":591,"name":591,"fn":592,"description":593,"org":594,"tags":595,"stars":20,"repoUrl":21,"updatedAt":604},"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},[596,597,598,601],{"name":526,"slug":527,"type":13},{"name":9,"slug":8,"type":13},{"name":599,"slug":600,"type":13},"Python","python",{"name":602,"slug":603,"type":13},"TypeScript","typescript","2026-06-03T07:52:43.916562",{"slug":606,"name":606,"fn":607,"description":608,"org":609,"tags":610,"stars":20,"repoUrl":21,"updatedAt":616},"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},[611,612,613,614,615],{"name":520,"slug":521,"type":13},{"name":523,"slug":524,"type":13},{"name":526,"slug":527,"type":13},{"name":529,"slug":530,"type":13},{"name":9,"slug":8,"type":13},"2026-04-06T18:50:39.23999",{"slug":618,"name":618,"fn":619,"description":620,"org":621,"tags":622,"stars":20,"repoUrl":21,"updatedAt":631},"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},[623,626,629,630],{"name":624,"slug":625,"type":13},"Architecture","architecture",{"name":627,"slug":628,"type":13},"Engineering","engineering",{"name":526,"slug":527,"type":13},{"name":9,"slug":8,"type":13},"2026-06-04T07:58:57.625622",{"slug":4,"name":4,"fn":5,"description":6,"org":633,"tags":634,"stars":20,"repoUrl":21,"updatedAt":22},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[635,636,637],{"name":15,"slug":16,"type":13},{"name":18,"slug":19,"type":13},{"name":9,"slug":8,"type":13},{"slug":639,"name":639,"fn":640,"description":641,"org":642,"tags":643,"stars":20,"repoUrl":21,"updatedAt":650},"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},[644,647,648,649],{"name":645,"slug":646,"type":13},"Debugging","debugging",{"name":523,"slug":524,"type":13},{"name":526,"slug":527,"type":13},{"name":9,"slug":8,"type":13},"2026-08-15T03:23:28.157662",{"slug":652,"name":652,"fn":653,"description":654,"org":655,"tags":656,"stars":20,"repoUrl":21,"updatedAt":665},"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},[657,660,661,662],{"name":658,"slug":659,"type":13},"Configuration","configuration",{"name":526,"slug":527,"type":13},{"name":9,"slug":8,"type":13},{"name":663,"slug":664,"type":13},"Security","security","2026-07-24T05:37:47.044405",{"slug":667,"name":667,"fn":668,"description":669,"org":670,"tags":671,"stars":20,"repoUrl":21,"updatedAt":676},"pulumi-migrate-from-discovered-stack","migrate CloudFormation or ARM stacks to Pulumi","Migrate a CloudFormation or ARM stack into a Pulumi stack, sourced from a\nstack that Pulumi Cloud's Discovery feature has already found and exposed\nvia the discovered-stacks API. Load this skill when the user has a\ndiscovered stack in Pulumi Cloud and wants to bring its resources under\nPulumi management. Do NOT load for greenfield Pulumi authoring, raw\ntemplate conversion with no discovered-stack counterpart (i.e. no matching\nentry from the discovered-stacks API), or Terraform migration.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[672,673,674,675],{"name":15,"slug":16,"type":13},{"name":526,"slug":527,"type":13},{"name":529,"slug":530,"type":13},{"name":9,"slug":8,"type":13},"2026-08-06T06:09:23.16972",14,{"items":679,"total":677},[680,688,695,702,710,717,724],{"slug":514,"name":514,"fn":515,"description":516,"org":681,"tags":682,"stars":20,"repoUrl":21,"updatedAt":532},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[683,684,685,686,687],{"name":520,"slug":521,"type":13},{"name":523,"slug":524,"type":13},{"name":526,"slug":527,"type":13},{"name":529,"slug":530,"type":13},{"name":9,"slug":8,"type":13},{"slug":534,"name":534,"fn":535,"description":536,"org":689,"tags":690,"stars":20,"repoUrl":21,"updatedAt":547},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[691,692,693,694],{"name":540,"slug":541,"type":13},{"name":526,"slug":527,"type":13},{"name":544,"slug":545,"type":13},{"name":9,"slug":8,"type":13},{"slug":549,"name":549,"fn":550,"description":551,"org":696,"tags":697,"stars":20,"repoUrl":21,"updatedAt":560},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[698,699,700,701],{"name":555,"slug":556,"type":13},{"name":526,"slug":527,"type":13},{"name":529,"slug":530,"type":13},{"name":9,"slug":8,"type":13},{"slug":562,"name":562,"fn":563,"description":564,"org":703,"tags":704,"stars":20,"repoUrl":21,"updatedAt":574},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[705,706,707,708,709],{"name":568,"slug":569,"type":13},{"name":523,"slug":524,"type":13},{"name":526,"slug":527,"type":13},{"name":529,"slug":530,"type":13},{"name":9,"slug":8,"type":13},{"slug":576,"name":576,"fn":577,"description":578,"org":711,"tags":712,"stars":20,"repoUrl":21,"updatedAt":589},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[713,714,715,716],{"name":582,"slug":583,"type":13},{"name":585,"slug":586,"type":13},{"name":526,"slug":527,"type":13},{"name":9,"slug":8,"type":13},{"slug":591,"name":591,"fn":592,"description":593,"org":718,"tags":719,"stars":20,"repoUrl":21,"updatedAt":604},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[720,721,722,723],{"name":526,"slug":527,"type":13},{"name":9,"slug":8,"type":13},{"name":599,"slug":600,"type":13},{"name":602,"slug":603,"type":13},{"slug":606,"name":606,"fn":607,"description":608,"org":725,"tags":726,"stars":20,"repoUrl":21,"updatedAt":616},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[727,728,729,730,731],{"name":520,"slug":521,"type":13},{"name":523,"slug":524,"type":13},{"name":526,"slug":527,"type":13},{"name":529,"slug":530,"type":13},{"name":9,"slug":8,"type":13}]