- Use the org-agnostic GetGraphQuerySchema primer operation
- Move org selection and entitlement handling to GraphQuery
- Bump Pulumi plugin manifests for the shipped skill change
Adds a pulumi-context-api skill that routes infrastructure relationship and impact-analysis questions to Context API graph queries. It guides agents to select the target organization, fetch the deployment's current schema primer before querying, handle availability and access failures, and verify result completeness before making blast-radius or absence claims.
Also wires the skill into Pulumi plugin routing and documentation, bumps the affected plugin versions, and scales the routing test's output limit with the number of installed skills.
The paragraph added in #52 was wordy and led with a prohibition. Condense it to
the agreed wording from the PR review thread: state why guessing fails (the real
error lives in the log of whatever the resource shelled out to, not in the
record), tell the model to read that log, and stop only when reaching it needs
access it doesn't have. Drop the specific tool examples to avoid overfitting, per
review feedback.
Patch-bump the pulumi and root combined plugin manifests (and the skill
frontmatter) so installed users receive the change.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The paragraph added in #52 was wordy and led with a prohibition. Condense it to
the agreed wording from the PR review thread: state why guessing fails (the real
error lives in the log of whatever the resource shelled out to, not in the
record), tell the model to read that log, and stop only when reaching it needs
access it doesn't have. Drop the specific tool examples to avoid overfitting, per
review feedback.
Patch-bump the pulumi and root combined plugin manifests (and the skill
frontmatter) so installed users receive the change.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* debug-failed-operation: surface a missing/blocked diagnostic to the user
The skill's premise is that Pulumi recorded the error, so you can read it from
the update record without re-running anything. That breaks when the only
recorded diagnostic is a bare `error: exit status 1` — e.g. a docker-build
`Image` built with `exec: true`, whose real build log lives in the external
builder, not the update record. A Neo task hit exactly this and spent 200
iterations / 33 min inferring by archaeology with nothing to read
(pulumi/pulumi-service#47660).
Add a "When the record has no readable error" section: when the diagnostic
carries no actionable error, or repeated attempts to reach the real error keep
failing on auth/not-found, stop inferring and tell the user what you're blocked
on and the one thing you need from them.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* debug-failed-operation: generalize the missing-diagnostic guidance
Drop the docker-build/exec:true/Depot/GitHub-Actions specifics from the
"no readable error" section — they read as overfit to one incident. Keep
the general principle: when the record has no actionable error, or repeated
attempts to reach the real error keep failing, stop inferring and reach the
user instead of guessing again.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* debug-failed-operation: fold the no-readable-error guidance into "Find the cause"
Move the missing/blocked-diagnostic paragraph out of its own section and
under "Find the cause and where the fix belongs", where the triage lives.
Also drop the "hundreds of iterations" language into place.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* Bump pulumi plugin manifests for the debug-failed-operation skill change
AGENTS.md requires a plugin version bump for any shipped-skill change. Patch
bump the pulumi/ group manifests (1.0.0 -> 1.0.1) and the root combined
manifests that also ship this skill (2.0.0 -> 2.0.1), in both the Claude and
Codex ecosystems.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* Add combined pulumi plugin for one-install marketplace distribution
The Claude marketplace 'pulumi' entry now points at a combined plugin
defined at the repo root, whose skills field bundles the authoring,
migration, and delegation skill groups. A single '/plugin install pulumi'
covers all 14 end-user skills; granular plugins remain for subset
installs. Also adds the official square logo asset for marketplace
listings, raises pulumi-delegation to three Codex starter prompts, and
updates the install docs.
* Review fixes: version 2.0.0 + displayName, doc counts, missing skill listing
Bump the combined plugin to 2.0.0 since it replaces the granular
'pulumi' plugin (also 1.0.0) with different contents, and add a
displayName. Fix the README wording that implied pulumi-package-
maintenance is part of the combined plugin. Correct stale skill counts
(migration 4 to 5, pulumi 7 to 8) and list pulumi-debug-failed-operation
in both docs; it was missing from README and AGENTS.md.
* Reword combined plugin description to say what Pulumi is
* Add HCL to the combined plugin language list
* Extend the combined pulumi plugin to Codex with a root .codex-plugin manifest
The Codex catalog still pointed the pulumi entry at ./pulumi (8 skills)
while the Claude marketplace pointed it at ./ (14 skills), so the same
plugin name installed different contents per ecosystem. Add a root
.codex-plugin/plugin.json mirroring the combined Claude manifest and
point the catalog at ./.
Verified with codex-cli 0.146.0: the skills array registers all 14
skills under the pulumi namespace (checked via codex debug
prompt-input). Manifest tests now cover the root manifests and accept
both string and array skills fields.
pulumi/pulumi-service#47223 changed discovery to group Azure/ARM resources
by resource group instead of by ARM deployment, and added a "placeholder"
resource shape (deploymentName empty) for resources whose deployment
history aged out of Azure's retention window. This skill was published
(#46/#47) before that change landed, so its description of resource.inputs.arm
was already stale. Ports the doc update from that internal PR.
Migrates a CloudFormation or ARM stack that Pulumi Cloud's Discovery
feature has already scanned and exposed via the discovered-stacks API
into a managed Pulumi stack (cloud-state-first: import from discovered
state, then optional refactor), as opposed to the template-first
workflow the existing cloudformation-to-pulumi / pulumi-arm-to-pulumi
skills use.
The skill documented raw HTTP endpoints, leaving it to the agent to
figure out how to issue the requests. The `pulumi api` subcommand is the
supported way to call the Pulumi Cloud API from a shell: it handles
auth, the backend URL, and JSON output. Rewrite the API reference in
those terms and note that omitting the name filter lists all packages
visible to the org, for questions that don't name a specific package.
Adds two real-world upgrade findings to the `pulumi-upgrade-provider` errors reference, drawn from recent manual upgrades of pulumi-vault and pulumi-venafi.
- **SDKv2→Plugin Framework migration** (from pulumi/pulumi-vault#1078): when upstream moves a resource to the Plugin Framework, tfgen reports the resource's token mapping as missing and suggests removing it — following that suggestion silently drops a resource users depend on. Documents the "remove the mapping" trap, the removed-vs-migrated triage, and the concrete muxing wiring (exported Framework constructor shim, `MuxShimWithPF` with a shared primary, `MainWithMuxer`).
- **Docs-only patch conflict** (from pulumi/pulumi-venafi#840): a small single-purpose docs patch that only removes an untranslatable section (e.g. `## Import`) can be retired for a targeted `SkipSectionByHeader` docs edit rule, which can also drop the `upstream` submodule. Includes the caveat that this is not a default tactic — multi-file or substantive patches should be resolved in place, and edit rules should stay small.
Also adds matching `use_cases.yaml` routing queries and bumps the plugin patch version to 1.0.4 in both ecosystem manifests.
## Test plan
- `uv run pytest tests/test_manifests.py -v`
- `uv run pytest tests/test_skill_selection_accuracy.py -v`
- `uv run pytest tests/test_skill_quality.py -v -s`
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01158iavPo5xrJM3Et3exP93
* feat(package-maintenance): review upgrades before submission
Summary:
- run upgrade-provider with --no-submit and review bounded local output
before publishing provider upgrade branches
- document safe interrupted-patch recovery and destructive discard
boundaries in both package-maintenance skills
- update routing prompts and bump package-maintenance to version 1.0.2
Rationale:
- let agents fix and validate generated upgrades before creating a PR
- prevent unrelated files and ambiguous patch state from being published
Tests:
- uv run pytest tests/test_manifests.py -v
- frontmatter and YAML parsing checks
- git diff --check
* fix(package-maintenance): make upgrade baseline advisory
Summary:
- record pre-existing provider-repo changes in an out-of-tree baseline
- cross-check that baseline after the local upgrade instead of blocking it
- clarify that unstaging or a same-branch commit does not isolate PR changes
Rationale:
- let upgrades proceed in prepared agent workspaces while retaining a reliable
final check for unrelated files swept into generated commits
Tests:
- frontmatter parsing check
- git diff --check
* fix(package-maintenance): handle framework migrations
Summary:
- route SDKv2-to-Plugin-Framework failures to maintained bridge guides
- preserve tool-proposed release labels based on upstream version changes
- narrow human-judgment stops and add a framework migration use case
- bump the package-maintenance plugin manifests to 1.0.3
Rationale:
- prevent mechanical framework migrations from being over-escalated
- keep provider release levels aligned with their upstream versions
Tests:
- uv run pytest tests/test_manifests.py -v
- JSON and YAML parsing checks
- git diff --check
- guide link HTTP checks
LLM routing and quality tests were not run because ANTHROPIC_API_KEY
is unavailable.
* fix(package-maintenance): handle no-op provider upgrades
Summary:
- detect successful upgrade-provider runs that report no actions needed
- stop before local review or submission when no upgrade was produced
- add a representative no-op routing case
Rationale:
- avoid retrying or failing when the provider is already current
Tests:
- use_cases.yaml parsing check
- no-op detection shell check
- git diff --check
* Add pulumi-debug-failed-operation skill
* pulumi-debug: lead with user-supplied operation, demote auto-discovery
Restructure the skill so the primary flow is working from the org/project/
stack/version fields the user supplies in prose. Move the whoami + walk-back
discovery heuristic to a backup section used only when nothing is given, and
clarify that pulumi api targets a stack by explicit path (no local selection
needed to read its record).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Venelin Martinov <venelin@pulumi.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
## Summary
- Add a post-run audit for unresolved `TODO` placeholders in `provider/replacements.json` after `upgrade-provider` creates a PR.
- Clarify that generated replacement TODOs are post-upgrade blockers because they can render into docs.
- Scope commit guardrails to the upgrade-provider run loop and explicitly permit post-PR follow-up commits for post-run fixes.
- Add a routing use case for PR review feedback about replacements TODO placeholders.
- Bump the package-maintenance plugin manifests to `1.0.1` for Claude and Codex distribution.
- Update contributor and agent docs so future skill changes include the required plugin version bump.
## Versioning
Bumped `pulumi-package-maintenance` from `1.0.0` to `1.0.1` in both manifests. Claude Code docs explicitly state that when a plugin manifest has a `version`, users only receive updates when that field is bumped. Codex docs show plugin manifests carrying a version and advise making the plugin version ready before marketplace publication; installed Codex plugin caches are also version-keyed, so this patch bump is the safest release signal for installed users.
## Validation
- `git diff --check`
- `uv run pytest tests/test_manifests.py -v`
Attempted but not completed locally:
- `uv run pytest tests/test_skill_selection_accuracy.py -v` failed before evaluation because `ANTHROPIC_API_KEY` was not configured: `Could not resolve authentication method`.
* pulumi-esc: add credential-error and environment-selection guardrails
A Neo task mishandled ESC: after an expired-SSO error during a Pulumi
operation, the agent selected an unrelated workshop ESC environment by name
(it authenticated to a different AWS account and role), linked it to the stack
with `pulumi config env add --yes` without confirmation, and reported success
without verifying. The user reverted it and refreshed SSO instead.
Adds a 'Handling Credential Errors and Existing Environments' section plus a
Best Practices backstop covering: starting from the error's own remediation,
never selecting an environment by name, confirming before linking (never
--yes), and verifying before claiming success.
* pulumi-esc: add pulumi-stacks schema and console URL format
Adds the fn::open::pulumi-stacks shape (single project-qualified stack: field,
outputs referenced directly with no .outputs. level) and the Pulumi Cloud
console URL format (/esc/, not /environments/) — the two ESC mistakes a user
hit on a Neo task that the credential guardrails above don't cover.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: aminix <755817+aminix@users.noreply.github.com>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* Add pulumi-agent-context plugin with Pulumi router skill
Introduces a new plugin and accompanying skill that gives AI coding agents
the context they need to use Pulumi across its three operational surfaces:
`pulumi do` (L1, in-flight CLI), Pulumi projects (L2), and Pulumi Cloud
governance and operations (L3). The skill routes to specialized skills
(pulumi-best-practices, pulumi-esc, pulumi-migration) when deeper
expertise is needed, rather than duplicating their content.
* Apply suggestion from @corymhall
Co-authored-by: Cory Hall <43035978+corymhall@users.noreply.github.com>
* Apply suggestion from @corymhall
Co-authored-by: Cory Hall <43035978+corymhall@users.noreply.github.com>
* Apply suggestion from @corymhall
Co-authored-by: Cory Hall <43035978+corymhall@users.noreply.github.com>
* Apply suggestion from @corymhall
Co-authored-by: Cory Hall <43035978+corymhall@users.noreply.github.com>
* Rename BucketV2 to Bucket and add use_cases for tests
* Route general infrastructure queries to agent-context
The agent-context skill is the first router-style skill in the repo and
owns general cloud infra phrasings that don't name Pulumi. Drop the
"general infra needs no skills" guideline (and the matching Example 4)
so the routing judge routes "provision a database", "stand up a VPC",
"create an S3 bucket", and similar to agent-context as the skill's
description already claims.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* Fix read config instructions
* Rename skill to pulumi and plugin to pulumi-overview
* Unify authoring and overview into a single pulumi plugin.
Merge the entry-point skill as pulumi-overview under pulumi/, rename the
former authoring plugin and marketplace entry to pulumi, and update docs
and routing tests so one install delivers overview plus specialized skills.
Co-authored-by: Cursor <cursoragent@cursor.com>
* address skill quality comments
* tighten use cases
* address patch comment
* Update pulumi/skills/pulumi-overview/SKILL.md
Co-authored-by: Fraser Ashyggton <frassle@gmail.com>
* Update pulumi/skills/pulumi-overview/SKILL.md
Co-authored-by: Fraser Ashyggton <frassle@gmail.com>
* Update pulumi/skills/pulumi-overview/SKILL.md
Co-authored-by: Fraser Ashyggton <frassle@gmail.com>
* Update pulumi/skills/pulumi-overview/SKILL.md
Co-authored-by: Fraser Ashyggton <frassle@gmail.com>
* Update pulumi/skills/pulumi-overview/SKILL.md
Co-authored-by: Fraser Ashyggton <frassle@gmail.com>
* Update pulumi/skills/pulumi-overview/SKILL.md
Co-authored-by: Fraser Ashyggton <frassle@gmail.com>
* Address Frassle review: fix pulumi do command surface in pulumi-overview
Correct the L1 pulumi do section to match the shipping command surface:
- Standardize on colon-form <pkg:mod:type> across all examples
- Use --input-file for body input; drop unsupported stdin
- Flags set top-level scalar properties only; nested values via body file
- Flatten output JSON (top-level properties with id/urn, no type/name/outputs)
* Rewrite pulumi do (Level 1) to stateless model; fix L2/L3 accuracy
Reworked the Level 1 `pulumi do` section to match the merged, stateless,
one-shot command surface (verified against pulumi master and the built CLI):
- Command shape drops the positional <name>; create takes no positional,
read/patch/delete take a cloud <id>. Logical names are synthesized.
- Stateless framing: no state file, no resource graph, no ${name.output}
cross-resource references. Connect resources by capturing an output and
passing it as a literal flag.
- create/patch/delete require --yes in non-interactive (agent) contexts;
added to every create example.
- PCL is the default body format; --input yaml needs a converter plugin.
- patch updates in place and cannot replace; corrected the wording.
- Output is flat properties plus id (no urn, no outputs wrapper); list
returns an array.
- Corrected signup behavior, the agent credentials path (/tmp/.pulumi),
and restored the verified 3-day/30-day token TTLs.
- Replaced the non-routable S3 CNAME example with an EIP -> Cloudflare A record.
Level 3 fixes (were never source-verified):
- stack schedule new requires --kind; use --kind drift for scheduled drift.
- env schedule new takes a single env ref and has no --action flag.
- policy new takes a policy-pack template name, not the pack name.
- Added a guardrail note that schedules are standing automation.
Standards: removed em dashes from the description, aligned inline
cross-skill references to the `use skill <name>` convention, and added
migration routing, env-open secret, and deployment-run cautions.
* Drop the --force-destroy example from pulumi-overview
A bool flag shown with a value invites the `--force-destroy true` form,
which the CLI parses as a stray positional and rejects. Remove the example
and make the boolean-flag guidance generic so it warns about the pitfall
without modeling it on a real flag.
* Caveat `do list` on bridged providers; verify cross-provider example
- list: note that Terraform-bridged providers (aws, azure, gcp) generally
do not implement listing, so `pulumi do <type> list` is mostly a
native-provider feature and bridged types reject the verb. Confirmed by
running it: aws:s3:Bucket / aws:ec2:Vpc / aws:ec2:Instance all return
"unknown command list".
- Replace the unverifiable EIP -> Cloudflare cross-provider example with a
random -> AWS one (RandomPet name feeds an S3 bucket name), which is
verified end-to-end with the built CLI.
* Drop shell plumbing from connecting-resources examples
The cross-resource examples used bash command substitution and `jq`
(`VPC_ID=$(... | jq -r '.id')`), which assumes bash and a jq install and
teaches shell scripting rather than Pulumi. Show the real commands with a
comment naming the field to carry over; the agent reads the JSON itself.
* Address Joe's review; trim backend/property-input altitude
- ESC: soften "always vend through OIDC" to "where the provider supports
it" (joeduffy: not all providers support OIDC).
- Provider creds: on a provider authorization error, look up the provider's
required config and have the user supply it, with ESC as the durable home
(joeduffy: hit this with the Supabase token).
- Remove the Pulumi Cloud-centric "default to whatever backend they point
at" sentence; it doesn't generalize to self-managed backends.
- Condense the Property input section to a higher altitude (intro + one PCL
example + get-schema), matching the original PR's level of detail.
* Scope the signup section to pulumi do; tighten prose
- Reframe the signup paragraph as `pulumi do`'s own behavior (it reaches
Pulumi Cloud via package resolution) instead of listing non-do commands
(`stack init`, `up`), which read as out of place under Level 1.
- Drop the `npx`-prefix aside and the awkward "account there" phrasing.
* Describe how to eject from Level 1 to Level 2
Joe asked the Graduating section to describe how to eject, not just name
the mechanism. Spell out the steps: from a project, `pulumi import` each
resource by its full type token, a logical name, and the cloud id from
`create`; import records it in state and generates the program code. Note
the short-vs-full token gotcha (`aws:s3:Bucket` vs `aws:s3/bucket:Bucket`).
* Add graceful fallback when routed-to skills aren't installed
Addresses PR feedback that pulumi-overview routes to skills the user
may not have installed. The note clarifies which specialized skills ship
in the same pulumi plugin versus the separate pulumi-migration plugin,
and tells the agent to continue with in-skill guidance and docs rather
than stall when a referenced skill is absent.
* Address Cory and Robert review feedback
- Split provider-repo maintainer skills (pulumi-upgrade-provider,
upstream-patches) into a new pulumi-package-maintenance plugin,
disambiguating from the end-user provider-upgrade skill
- Reverse the bridged-provider `do list` framing: bridged providers
do support list, but coverage varies by resource type
- Lead schema lookup with `pulumi package info` (one resource) and
caveat `get-schema` size; the full aws schema is tens of MB
- Note resource verbs require CLI v3.243.0 (where `pulumi do` gained
resource support), not v3.242.0
- Add package-usage to the router table, README, and AGENTS lists;
reach the Codex marketplace via `/plugins`
---------
Co-authored-by: Amina <755817+aminix@users.noreply.github.com>
Co-authored-by: Cory Hall <43035978+corymhall@users.noreply.github.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Fraser Ashyggton <frassle@gmail.com>
* Add pulumi-neo-handoff skill in new delegation plugin
Introduces a third plugin group, `delegation/`, with a single skill
that lets coding agents transfer in-progress work to a new Pulumi Neo
task. The skill is user-invoked: it packages the goal, repository
pointers, and a compacted conversation summary, then shells out to
`pulumi neo` to launch the task. One-way handoff — control passes to
Neo and does not return to the calling agent.
The pattern aligns with the OpenAI Agents SDK `handoff()` primitive
and Codex's Local↔Worktree handoff: structured payload, compacted
context, one-way semantics.
* Document why pulumi neo uses positional prompt + command substitution
Warns future reviewers not to "fix" the invocation to --file or stdin
redirect, since pulumi neo has no file flag and stdin redirection
launches the TUI instead of consuming the prompt.
Ship Codex manifests alongside the existing Claude ones so the same skills
work in both ecosystems. Each plugin group now has a `.codex-plugin/plugin.json`
in addition to its `.claude-plugin/plugin.json`, and the repo carries a Codex
marketplace catalog at `.agents/plugins/marketplace.json`. The skill content
is unchanged.
Adds `tests/test_manifests.py` and a `manifests` CI job that validate every
manifest parses, has the required fields, and that marketplace catalogs
reference real plugin directories. The job runs offline so PRs from forks
get fast feedback before the LLM-driven jobs.
Updates README and AGENTS.md with the Codex install command and a parallel
walk-through for adding the second manifest type when creating a new plugin
group.
* fix: address HIGH issues in package-usage skill quality review
- Add output format template (markdown table with status)
- Add guidance to ask user for org name when not resolvable
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* chore: make org name guidance more concise
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
## Summary
- Add troubleshooting guidance for ignored upstream replace directives, vendored dependency module graph issues, and .NET duplicate file generation failures
- Clarify target-version retries so `--major` is only used for actual major upgrades
- Add pulumi-upgrade-provider routing use cases
Tighten descriptions so the router sends provider-upgrade queries (npm/pip/go
package bumps, post-upgrade resource breakage, "across my stacks" upgrade
phrasing) to provider-upgrade, and limits package-usage to its unique cross-
stack audit scope. Also remove the contradicting "Upgrade a package in a
stack" workflow from package-usage body, replacing it with a hand-off note.
The skill-selection accuracy test for provider-upgrade has been failing on
main since PR #21 (2026-04-01) at 79% (15/19). With this change it passes
at 100% without touching use_cases.yaml.
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
## Summary
- replace the existing draft `provider-upgrade` skill with the fuller version from `pulumi-service` and add the `references/diagnostic-toolbox.md` reference doc
- generalize the skill content for this repo by removing Neo-specific tool assumptions, expanding the routing examples, and documenting the skill in `README.md`, `AGENTS.md`, and the authoring plugin metadata
- switch the preview guidance to direct CLI usage with `pulumi preview --refresh --run-program`
Copy both skills from pulumi-skills-internal to the authoring plugin group.
These skills automate Pulumi provider repo upgrades and manage upstream
Terraform patch stacks respectively.
Otherwise it is cumbersome to select all skills in the wizard.
It is still useful to let users select which agents to target
in the wizard.
Wildcard support was recently added in:
https://github.com/vercel-labs/skills/pull/191
Remove all Gemini CLI-specific configuration and documentation:
- Delete gemini-extension.json from both migration and authoring plugins
- Delete GEMINI.md context files from both plugins
- Remove Gemini CLI references from README.md
The repository now supports:
- Claude Code (via .claude-plugin/)
- Universal installation via npx skills add (agentskills.io standard)
All 11 skills remain functional and discoverable.
Consolidate from 3 plugins to 2 by moving the single ESC skill from the
configuration plugin into the authoring plugin. This creates a more balanced
structure and better thematic grouping.
## Changes
- Move pulumi-esc skill from configuration/skills/ to authoring/skills/
- Remove configuration plugin from marketplace.json
- Delete configuration/ directory entirely (plugin.json, gemini-extension.json, GEMINI.md)
- Update authoring plugin configs to include ESC keywords and updated description
- Update all documentation (README, AGENTS, CONTRIBUTING) to reflect 2-plugin structure
## New Structure
- Migration plugin: 7 skills (Terraform, CDK, ARM, CloudFormation conversions)
- Authoring plugin: 4 skills (best practices, component, automation API, ESC)
## Installation
Users can now install:
- All skills: npx skills add pulumi/agent-skills
- Individual plugins: npx skills add pulumi/agent-skills/migration
ESC fits thematically with authoring as it's fundamentally about writing
Pulumi programs with proper secrets and configuration management.
New skills:
- pulumi-automation-api: Programmatic orchestration of Pulumi operations
Updates:
- Fix installation instructions to use npx add-skill
- Add support for Claude Code, Cursor, GitHub Copilot, Codex, and Gemini CLI