50 Commits

Author SHA1 Message Date
Derek e57d1d117b Update CODEOWNERS for ai-platform team (#59) 2026-09-10 14:12:22 -07:00
Levi Blackstone f6db4a8460 Update Context API schema routing guidance (#58)
- Use the org-agnostic GetGraphQuerySchema primer operation
- Move org selection and entitlement handling to GraphQuery
- Bump Pulumi plugin manifests for the shipped skill change
2026-09-10 11:11:22 -06:00
Michael Fallihee 681aafed85 Add pulumi-context-api skill (#56)
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.
2026-08-28 15:18:28 -06:00
Mark a09aa03409 Fix universal skill install instructions (#55) 2026-08-20 10:05:58 -06:00
Amina b490e6cec8 debug-failed-operation: condense the missing-diagnostic guidance (#54)
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>
2026-08-17 09:35:14 +01:00
Amina 641c2fe26d debug-failed-operation: condense the missing-diagnostic guidance (#54)
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>
2026-08-14 16:19:45 +01:00
Amina 6a89e29c81 debug-failed-operation: surface a missing/blocked diagnostic to the user (#52)
* 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>
2026-08-14 11:23:59 +01:00
Mark d083ad2cc8 Add combined pulumi plugin for one-install marketplace distribution (#50)
* 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.
2026-08-07 11:31:56 -06:00
Mark acd34dc899 Bump locked Pygments to 2.20.0 (GHSA-5239-wwwm-4pmq) (#51) 2026-08-07 10:30:19 -06:00
Alejandro Cotroneo 4be16bf770 Sync ARM resource-shape docs with resource-group-based discovery grouping (#49)
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.
2026-08-03 12:22:07 -03:00
Alejandro Cotroneo 0ac67d4fdf Add pulumi-migrate-from-discovered-stack migration skill (#47)
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.
2026-08-03 11:37:49 -03:00
Florian Stadler 49e2562105 package-usage: fetch data via the pulumi api CLI (#44)
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.
2026-07-22 11:44:17 +02:00
Guinevere Saenger 4b3bf4bdda Add SDKv2->PF migration and docs-patch conflict guidance to pulumi-upgrade-provider (#42)
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
2026-07-22 05:22:51 -04:00
Florian Stadler b001eb8e25 Update CODEOWNERS (#41)
Add the providers team as code owners of the package-maintenance plugin
2026-07-16 15:17:23 +02:00
Cory Hall 8880e3c307 Update provider upgrade skills for review-before-submit (#40)
* 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
2026-07-16 07:55:26 -04:00
dependabot[bot] a0ba4defd9 Bump idna from 3.11 to 3.15 in the uv group across 1 directory (#33)
Bumps the uv group with 1 update in the / directory: [idna](https://github.com/kjd/idna).


Updates `idna` from 3.11 to 3.15
- [Release notes](https://github.com/kjd/idna/releases)
- [Changelog](https://github.com/kjd/idna/blob/master/HISTORY.md)
- [Commits](https://github.com/kjd/idna/compare/v3.11...v3.15)

---
updated-dependencies:
- dependency-name: idna
  dependency-version: '3.15'
  dependency-type: indirect
  dependency-group: uv
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-09 11:08:10 -07:00
Mark 8a276968c9 Add pulumi-debug-failed-operation skill (#35)
* 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>
2026-07-07 16:10:37 +03:00
Rob Smith 592e4da33a Add an overly-descriptive explanation of how to add the marketplace/skills by hand (#38)
Clarifies/fixes #13
2026-06-29 14:38:39 -04:00
Cory Hall 478096e94b Audit upgrade-provider doc replacements (#36)
## 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`.
2026-06-15 12:30:13 -04:00
Mark 43626f25e1 pulumi-esc: credential-error and environment-selection guardrails (#34)
* 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>
2026-06-03 09:45:12 -06:00
Mark 8dccc4396e Add agent-context plugin with Pulumi router skill (#31)
* 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>
2026-06-02 14:31:53 -06:00
Mark f810e5000b Add pulumi-neo-handoff skill in new delegation plugin (#30)
* 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.
2026-05-13 13:15:56 -06:00
Mark 08a842ebce Add Codex plugin compatibility (#28)
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.
2026-05-04 08:09:13 -06:00
Jonathan Davenport 3ec9d51a06 fix: address package-usage skill quality review failures (#27)
* 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>
2026-04-22 10:33:57 -04:00
Cory Hall 19a62a321c Improve pulumi-upgrade-provider troubleshooting (#26)
## 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
2026-04-21 09:29:54 -04:00
Amina fbeac07327 fix: resolve skill routing overlap between package-usage and provider-upgrade (#25)
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>
2026-04-16 15:16:34 +01:00
dependabot[bot] 2b15400d10 Bump pytest from 9.0.2 to 9.0.3 in the uv group across 1 directory (#22)
Bumps the uv group with 1 update in the / directory: [pytest](https://github.com/pytest-dev/pytest).


Updates `pytest` from 9.0.2 to 9.0.3
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/9.0.2...9.0.3)

---
updated-dependencies:
- dependency-name: pytest
  dependency-version: 9.0.3
  dependency-type: direct:development
  dependency-group: uv
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-16 11:54:28 +01:00
Cory Hall b6214ca30c Import and generalize provider-upgrade skill (#21)
## 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`
2026-04-01 05:44:21 -04:00
Engin Diri bbf441e6b1 feat: add pulumi-upgrade-provider and upstream-patches skills to authoring plugin (#20)
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.
2026-03-31 21:11:07 +02:00
vova-ivanov 2f41625a42 Added tests and quality checking for skills (#15)
* Added unit testing

* Formatting

* Additional skill clarification

* Description improvements
2026-03-30 11:27:27 -07:00
Cory Hall b6b942fc6e Add OpenAI metadata for all Pulumi skills (#12)
## Summary
- Add `agents/openai.yaml` for all 8 skills under `authoring/skills/*` and `migration/skills/*`.
- Use a minimal interface schema in each file: `display_name`, `short_description`, `default_prompt`.
- Standardize formatting across all files (quoted string values, consistent style).
- Ensure every `default_prompt` explicitly references its matching `$skill-name`.

## Files Added/Updated
- `authoring/skills/pulumi-automation-api/agents/openai.yaml`
- `authoring/skills/pulumi-best-practices/agents/openai.yaml`
- `authoring/skills/pulumi-component/agents/openai.yaml`
- `authoring/skills/pulumi-esc/agents/openai.yaml`
- `migration/skills/cloudformation-to-pulumi/agents/openai.yaml`
- `migration/skills/pulumi-arm-to-pulumi/agents/openai.yaml`
- `migration/skills/pulumi-cdk-to-pulumi/agents/openai.yaml`
- `migration/skills/pulumi-terraform-to-pulumi/agents/openai.yaml`

## Notes
- No `SKILL.md` behavior/content changes.
- No policy/icon/brand fields added; interface intentionally minimal.
2026-02-19 05:11:38 -05:00
Robert Harris 3230a42ddb Suggest installing all skills when using npx skills (#10)
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
2026-02-02 09:33:22 -08:00
Mark c888c23d07 Merge pull request #9 from pulumi/mhuber/pulumi-best-practices
Add additional code owners
2026-01-28 11:42:43 -07:00
Mark c64d63ed9f Add additional code owners 2026-01-28 11:34:30 -07:00
Mark 485520bb0b Merge pull request #8 from pulumi/rgharris/esc-edit-file
Encourage agents to use --file with `env edit`
2026-01-28 11:33:04 -07:00
Robert Harris 8abe1c30be Encourage agents to use --file with env edit
Agents have trouble with the interactive editor.
2026-01-28 10:29:27 -08:00
Mark 9ca9aade78 Merge pull request #7 from pulumi/flostadler/cloudformation-skill
Add cloudformation migration skill
2026-01-28 11:08:10 -07:00
flostadler bbe995d3ab Add cloudformation migration skill 2026-01-28 18:51:51 +01:00
Florian Stadler ad57447b75 Adopt progressive disclosure (#6)
Adapt progressive disclosure (see Anthropic docs) for related skills
2026-01-28 18:43:02 +01:00
Mark ea6c72dd0a Merge pull request #5 from pulumi/rgharris/esc-naming
Align naming of pulumi-esc skill
2026-01-28 08:36:10 -07:00
Robert Harris 1a85d4760a Align naming of pulumi-esc skill 2026-01-28 07:01:06 -08:00
Mark 407a9fb958 Merge pull request #4 from pulumi/kramhuber-patch-1
Update section headers in README.md
2026-01-28 07:41:28 -07:00
Mark 8241f94cdb Update section headers in README.md 2026-01-28 07:41:11 -07:00
Mark a7c42ea3d1 Merge pull request #3 from pulumi/mhuber/pulumi-best-practices
New Skills + Restructure
2026-01-28 07:40:27 -07:00
Mark dabb2f1760 Remove MCP server configuration from plugins
Remove all MCP server configuration from the Claude plugin system.
The MCP server integration is not part of the plugin feature set.
2026-01-28 07:32:49 -07:00
Mark f453dfb869 Remove Gemini CLI extension support
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.
2026-01-27 20:29:15 -07:00
Mark 26d69d05d8 Move ESC skill to authoring plugin and remove configuration plugin
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.
2026-01-27 16:47:37 -07:00
Mark 62f2745f79 Reorganize skills into plugin structure with multi-platform support
Restructure the repository from a flat skills/ directory to a plugin-based
organization that supports Claude Code, Gemini CLI, and universal installation
via npx skills add.

## Structural Changes

- Organize skills into three logical plugin groups:
  - migration/ (7 skills): Terraform, CDK, ARM, CloudFormation conversions
  - authoring/ (3 skills): Best practices, components, Automation API
  - configuration/ (1 skill): Pulumi ESC for secrets management

- Move all skills from skills/ to <plugin>/skills/ structure
- Preserve git history with proper renames

## Platform Support

Add native support for multiple agent platforms:

Claude Code (.claude-plugin/):
- marketplace.json defining three plugins
- plugin.json in each plugin directory with metadata and MCP config

Gemini CLI:
- gemini-extension.json in each plugin directory
- GEMINI.md context files for each plugin

Universal (npx skills add):
- Maintains compatibility with existing SKILL.md discovery
- All 11 skills discoverable via well-known directory scanning

## Configuration

- All plugins reference the same Pulumi MCP server (@pulumi/mcp-server)
- MCP configs synchronized between plugin.json and gemini-extension.json
- Each plugin includes proper metadata: name, version, description, keywords

## Documentation

- Add AGENTS.md with contributor guidelines and skill conventions
- Create CLAUDE.md symlink to AGENTS.md for Claude Code compatibility
- Update README.md with plugin installation instructions
- Update CONTRIBUTING.md with new directory structure

## Cross-Skill References

Standardize cross-skill references using "Use skill <skill-name>" pattern:
- pulumi-cdk-to-pulumi → pulumi-cdk-convert, pulumi-cdk-importer
- pulumi-cdk-convert → pulumi-cdk-importer, pulumi-cloudformation-id-lookup
- pulumi-arm-to-pulumi → pulumi-arm-import
- pulumi-best-practices → pulumi-component, pulumi-automation-api, esc

## Skill Metadata

Add user-invocable: false to tool-focused skills:
- pulumi-cdk-convert (automated conversion tool)
- pulumi-cdk-importer (automated import tool)
- pulumi-arm-import (import validation workflow)
- pulumi-cloudformation-id-lookup (ID lookup utility)

## Installation Methods

The repository now supports three installation paths:

1. Claude Code:
   /plugin marketplace add pulumi/agent-skills
   /plugin install pulumi-migration

2. Gemini CLI:
   gemini extensions install <url>/migration

3. Universal (all agents):
   npx skills add pulumi/agent-skills

Verified compatibility: Claude Code, Gemini CLI, Cursor, Copilot, Codex,
and other agents supporting the Agent Skills specification.
2026-01-27 15:38:13 -07:00
Mark 99835c2f96 Add Pulumi agent skills with best practices
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
2026-01-26 18:51:04 -07:00
Mark 924e343fdb Initial commit 2026-01-26 15:54:20 -07:00