AWS Cdk Development
zxkane/aws-skills
AWS Cloud Development Kit (CDK) expert for building cloud infrastructure with TypeScript/Python.
Comprehensive guide to troubleshooting Pulumi TypeScript errors, infrastructure issues, and best practices - covers common errors, Outputs handling, AWS Beanstalk deployment, and cost optimization
$ npx skills add pr-pm/prpm --skill pulumi-troubleshooting -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install pr-pm/prpm pulumi-troubleshooting --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/pr-pm/prpm.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/pulumi-troubleshooting .claude/skills/pulumi-troubleshooting && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "pulumi-troubleshooting" agent skill from https://github.com/pr-pm/prpm/tree/main/.claude/skills/pulumi-troubleshooting into .claude/skills/pulumi-troubleshooting/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pulumi-troubleshooting", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/pr-pm/prpm/tree/main/.claude/skills/pulumi-troubleshootingType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add pr-pm/prpm --skill pulumi-troubleshooting -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install pr-pm/prpm pulumi-troubleshooting --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pr-pm/prpm.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/pulumi-troubleshooting .agents/skills/pulumi-troubleshooting && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "pulumi-troubleshooting" agent skill from https://github.com/pr-pm/prpm/tree/main/.claude/skills/pulumi-troubleshooting into .agents/skills/pulumi-troubleshooting/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pulumi-troubleshooting", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add pr-pm/prpm --skill pulumi-troubleshooting -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install pr-pm/prpm pulumi-troubleshooting --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pr-pm/prpm.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/pulumi-troubleshooting .cursor/skills/pulumi-troubleshooting && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "pulumi-troubleshooting" agent skill from https://github.com/pr-pm/prpm/tree/main/.claude/skills/pulumi-troubleshooting into .cursor/skills/pulumi-troubleshooting/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pulumi-troubleshooting", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/pr-pm/prpm.git --path .claude/skills/pulumi-troubleshooting--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add pr-pm/prpm --skill pulumi-troubleshooting -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install pr-pm/prpm pulumi-troubleshooting --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pr-pm/prpm.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/pulumi-troubleshooting .gemini/skills/pulumi-troubleshooting && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "pulumi-troubleshooting" agent skill from https://github.com/pr-pm/prpm/tree/main/.claude/skills/pulumi-troubleshooting into .gemini/skills/pulumi-troubleshooting/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pulumi-troubleshooting", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install pr-pm/prpm pulumi-troubleshootingInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add pr-pm/prpm --skill pulumi-troubleshooting -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/pr-pm/prpm.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/pulumi-troubleshooting .github/skills/pulumi-troubleshooting && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "pulumi-troubleshooting" agent skill from https://github.com/pr-pm/prpm/tree/main/.claude/skills/pulumi-troubleshooting into .github/skills/pulumi-troubleshooting/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pulumi-troubleshooting", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add pr-pm/prpm --skill pulumi-troubleshooting -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install pr-pm/prpm pulumi-troubleshooting --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/pr-pm/prpm.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/pulumi-troubleshooting .opencode/skills/pulumi-troubleshooting && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "pulumi-troubleshooting" agent skill from https://github.com/pr-pm/prpm/tree/main/.claude/skills/pulumi-troubleshooting into .opencode/skills/pulumi-troubleshooting/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pulumi-troubleshooting", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
pulumi-troubleshootingComprehensive guide to troubleshooting Pulumi TypeScript errors, infrastructure issues, and best practices - covers common errors, Outputs handling, AWS Beanstalk deployment, and cost optimization
Pulumi Troubleshooting is an agent skill from pr-pm/prpm. Comprehensive guide to troubleshooting Pulumi TypeScript errors, infrastructure issues, and best practices - covers common errors, Outputs handling, AWS Beanstalk deployment, and cost optimization
Its SKILL.md is about 1.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in DevOps & Cloud, covering Infrastructure as code. It works with Pulumi, TypeScript and Amazon Web Services. The repository describes itself as: The universal registry for AI coding tools. The licence is MIT.
10 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 5f993e6. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
puluminpmFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
pulumi.comFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
PULUMI_ACCESS_TOKENGITHUB_CLIENT_SECRETFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Pulumi Troubleshooting loads about 1.6k tokens when it runs. Until then it costs about 55 tokens; SKILL.md has 370 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from pr-pm/prpm at commit 5f993e6, republished under its MIT licence (© pr-pm). 370 words, ~1,604 tokens.
.claude/skills/pulumi-troubleshooting/SKILL.md (or your agent's skills folder).Cause: TypeScript infers a type as never when working with Pulumi Outputs, especially with arrays.
Solution: Wrap the value in pulumi.output() and properly type the callback:
// ❌ Bad - TypeScript can't infer the type
value: pulumi.all(config.vpc.publicSubnets.map((s: any) => s.id))
// ✅ Good - Explicitly wrap and type
value: pulumi.output(config.vpc.publicSubnets).apply((subnets: any[]) =>
pulumi.all(subnets.map((s: any) => s.id)).apply(ids => ids.join(","))
)Cause: TypeScript doesn't allow export statements inside if blocks.
Solution: Use optional chaining for conditional exports:
// ❌ Bad
if (opensearch) {
export const opensearchEndpoint = opensearch.endpoint;
}
// ✅ Good
export const opensearchEndpoint = opensearch?.endpoint;Cause: Pulumi.yaml config with namespaced keys (e.g., aws:region) cannot use default attribute.
Solution: Remove the config section or don't set defaults for provider configs:
# ❌ Bad
config:
aws:region:
description: AWS region
default: us-east-1
# ✅ Good - set via workflow/CLI instead
config:
app:domainName:
description: Domain nameCause: Pulumi stack doesn't exist yet in new environments.
Solution: Use || operator to create if not exists:
pulumi stack select $STACK || pulumi stack init $STACKKey Concepts:
pulumi.Output<T> is a promise-like wrapper for async values.apply() to transform Output valuespulumi.all([...]) to combine multiple Outputspulumi.output(value) to wrap plain values as OutputsCommon Patterns:
// Transforming a single Output
const url = endpoint.apply(e => `https://${e}`);
// Combining multiple Outputs
const connectionString = pulumi.all([host, port, db]).apply(
([h, p, d]) => `postgres://${h}:${p}/${d}`
);
// Interpolating Outputs
const message = pulumi.interpolate`Server at ${endpoint}:${port}`;Nested Outputs (Properties that are themselves Outputs):
// ❌ Bad - resource.property might be an Output<string>
const endpoint = instance.apply(i => i.endpoint.split(":")[0]); // ERROR: Property 'split' does not exist
// ✅ Good - unwrap nested Output with pulumi.output()
const endpoint = instance.apply(i =>
pulumi.output(i.endpoint).apply(e => e.split(":")[0])
);
// ✅ Alternative - use pulumi.all to flatten
const endpoint = pulumi.all([instance]).apply(([inst]) =>
pulumi.output(inst.endpoint).apply(e => e.split(":")[0])
);Issue: Complex objects or arrays need to be serialized.
Solution: Use JSON.stringify for complex values:
{
namespace: "aws:elasticbeanstalk:application:environment",
name: "ALLOWED_ORIGINS",
value: allowedOrigins.apply(origins => JSON.stringify(origins)),
}Issue: Certificate validation hangs or times out.
Solution: Ensure DNS records are created and wait for validation:
// 1. Create certificate
const cert = new aws.acm.Certificate(...);
// 2. Create DNS validation record
const validationRecord = new aws.route53.Record(..., {
name: cert.domainValidationOptions[0].resourceRecordName,
type: cert.domainValidationOptions[0].resourceRecordType,
records: [cert.domainValidationOptions[0].resourceRecordValue],
});
// 3. Wait for validation to complete
const validation = new aws.acm.CertificateValidation(..., {
certificateArn: cert.arn,
validationRecordFqdns: [validationRecord.fqdn],
});Best Practices:
- name: Setup Pulumi
uses: pulumi/actions@v5
- name: Configure Stack
run: |
STACK="${{ inputs.stack || 'prod' }}"
pulumi stack select $STACK || pulumi stack init $STACK
pulumi config set aws:region ${{ env.AWS_REGION }}
# Set other non-secret configs here
- name: Pulumi Up
run: pulumi up --yes --non-interactive
env:
PULUMI_ACCESS_TOKEN: ${{ secrets.PULUMI_ACCESS_TOKEN }}
PULUMI_CONFIG_PASSPHRASE: ${{ secrets.PULUMI_CONFIG_PASSPHRASE }}Quick checks:
npm run build in the infra package locally.map() calls on potentially undefined arraysBeanstalk vs ECS Fargate:
npm run build locally to catch TypeScript errorspulumi preview before pulumi up// Database
DATABASE_URL: pulumi.interpolate`postgres://${user}:${pass}@${host}:5432/${db}`
// Redis
REDIS_URL: redisEndpoint.apply(e => `redis://${e}:6379`)
// S3
S3_BUCKET: bucketName
S3_REGION: region
// Auth
GITHUB_CLIENT_ID: clientId
GITHUB_CLIENT_SECRET: clientSecret
// App Config
NODE_ENV: "production"
PORT: "8080"
LOG_LEVEL: "info"© pr-pm, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/pulumi-troubleshooting of pr-pm/prpm.
Open the folder on GitHubat commit 5f993e6
Pulumi Troubleshooting next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Pulumi Troubleshooting this skillpr-pm/prpm | 122 | — | ~1.6k | Automated safety check: Pass | MIT | |
| AWS Cdk Developmentzxkane/aws-skills | 367 | 2 repos | ~2.5k | Automated safety check: Pass | MIT | |
| AWS Native Runtime Investigationpulumi/pulumi-aws-native | 108 | — | ~753 | Automated safety check: Pass | Apache-2.0 | |
| Ops Add New Chainboundless-xyz/boundless | 193 | — | ~3.8k | Automated safety check: Pass | Apache-2.0 | |
| AWS Sst Developmentzxkane/aws-skills | 367 | — | ~2.7k | Automated safety check: Warn | MIT | |
| Writing Infrastructure Codeancoleman/ai-design-components | 525 | — | ~3.9k | Automated safety check: Pass | MIT |
zxkane/aws-skills
AWS Cloud Development Kit (CDK) expert for building cloud infrastructure with TypeScript/Python.
pulumi/pulumi-aws-native
Use after triage or repository evidence establishes that an issue involves Pulumi AWS Native runtime behavior across the Pulumi provider protocol, generated CloudFormation metadata, and AWS Cloud…
boundless-xyz/boundless
Internal — for Boundless team members only. An agent skill from boundless-xyz/boundless.
zxkane/aws-skills
SST v4 (Ion) expert for managing AWS resources as code with the Pulumi-backed framework.
ancoleman/ai-design-components
Managing cloud infrastructure using declarative and imperative IaC tools.
jeremylongshore/tons-of-skills-marketplace
Execute use when generating infrastructure as code configurations.
pr-pm/prpm
Reference for writing Claude Code agent files: location, frontmatter fields, validation limits, tool and model choices, and the required content format.
pr-pm/prpm
Covers how to build, configure and publish Claude Code hooks: event types, exit codes, JSON I/O, and PRPM packaging.
pr-pm/prpm
Shows how to write .claude/rules/ files correctly: paths frontmatter instead of globs, quoted glob patterns, global rules and conversion of Cursor rules.
pr-pm/prpm
Reference for writing portable Agent Skills packages, covering SKILL.md frontmatter limits, name rules, directory layout and where Codex CLI, GitHub Copilot and Amp look for skills.
pr-pm/prpm
A skill your agent uses when implementing Stripe webhook endpoints and getting 'Raw body not available' or signature verification errors - provides raw body parsing solutions and subscription period…
pr-pm/prpm
Guides writing an agents.md project-context file: plain markdown with no frontmatter, focused on what an AI coding assistant cannot already know.
Works with
Categories
Comprehensive guide to troubleshooting Pulumi TypeScript errors, infrastructure issues, and best practices - covers common errors, Outputs handling, AWS Beanstalk deployment, and cost optimization. Pulumi Troubleshooting is an agent skill from pr-pm/prpm.
Pulumi Troubleshooting fits situations like: tasks that involve Infrastructure as code.
Run `npx skills add pr-pm/prpm --skill pulumi-troubleshooting -a claude-code`. Or copy the skill folder (.claude/skills/pulumi-troubleshooting in pr-pm/prpm) into .claude/skills/pulumi-troubleshooting in your project. Claude Code loads it when a task matches its description.
Run `npx skills add pr-pm/prpm --skill pulumi-troubleshooting -a codex`. Or copy the skill folder (.claude/skills/pulumi-troubleshooting in pr-pm/prpm) into .agents/skills/pulumi-troubleshooting in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add pr-pm/prpm --skill pulumi-troubleshooting -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pulumi-troubleshooting, .gemini/skills/pulumi-troubleshooting, .github/skills/pulumi-troubleshooting and .opencode/skills/pulumi-troubleshooting in your project.
Going by SKILL.md and its folder, Pulumi Troubleshooting needs the command-line tools its instructions call (pulumi and npm) and credentials named PULUMI_ACCESS_TOKEN and GITHUB_CLIENT_SECRET. Our summary lists: A credential in PULUMI_ACCESS_TOKEN; A credential in GITHUB_CLIENT_SECRET.
SKILL.md names 1 domain. As links in the text: pulumi.com. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Pulumi Troubleshooting is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.6k tokens (SKILL.md is roughly 6.4k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Pulumi Troubleshooting: AWS Cdk Development (zxkane/aws-skills, 367 stars), AWS Native Runtime Investigation (pulumi/pulumi-aws-native, 108 stars), Ops Add New Chain (boundless-xyz/boundless, 193 stars) and AWS Sst Development (zxkane/aws-skills, 367 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
pr-pm (a GitHub organization) maintains it in pr-pm/prpm, which has 122 GitHub stars. The repository holds 35 skills in this directory. The repository was last updated on October 6, 2026.
Source: pr-pm/prpm on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.