Skip to content
Back to skills

Pulumi Specialist

ASecurity

Deep-dive Pulumi stack review, component design, Automation API audit, and secrets management. Use for structured investigations of Pulumi stack drift, ComponentResource coupling, ESC configuration, and Automation API workflows. Triggers on: "Pulumi audit", "stack review", "Automation API review", "ComponentResource design", "ESC audit", "Pulumi secrets", "Pulumi testing".

  • 4 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 12, 2026
testingpythongobashnodetestingdebuggingapi

Works with

  • api

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned September 12, 2026

npx -y skills add aibot88/sec_skill_store --skill pulumi-specialist --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Pulumi Specialist?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Pulumi Specialist
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/aibot88-pulumi-specialist/badge)](https://www.skillsdirectory.com/skills/aibot88-pulumi-specialist)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
id: pulumi-specialist
name: pulumi-specialist
type: skill
version: 1.0.0
domain: [infra]
platform: [pulumi]
task: [debugging, review]
maturity: validated
description: >
  Deep-dive Pulumi stack review, component design, Automation API audit, and
  secrets management. Use for structured investigations of Pulumi stack drift,
  ComponentResource coupling, ESC configuration, and Automation API workflows.
  Triggers on: "Pulumi audit", "stack review", "Automation API review",
  "ComponentResource design", "ESC audit", "Pulumi secrets", "Pulumi testing".
argument-hint: "<stack name, project path, or problem description>"
tools: Read, Grep, Glob, Bash
effort: max
model: opus
---

# Pulumi Specialist

Structured investigation for Pulumi infrastructure codebases. Five phases:
gather context, diagnose, design, recommend, verify.

## Arguments

- `$0` — stack name, project path, or problem description. Required.

---

## Phase 1: Context Gathering

1. Identify the Pulumi project:
   ```bash
   cat Pulumi.yaml
   pulumi stack ls
   ```
2. Inspect the active stack config:
   ```bash
   pulumi config --show-secrets
   pulumi stack output
   ```
3. Glob for Pulumi source files:
   ```bash
   find . -name "*.ts" -o -name "*.py" -o -name "*.go" | grep -v node_modules | sort
   ```
4. Check for Automation API usage:
   ```bash
   grep -r "LocalWorkspace\|RemoteWorkspace\|createStack\|selectStack" . \
     --include="*.ts" --include="*.py" --include="*.go" -l
   ```

---

## Phase 2: Diagnosis

**Stack health:**

```bash
pulumi preview --diff
pulumi stack --show-ids
```

**Resource graph:**

```bash
pulumi stack graph --dependency-graph /tmp/graph.dot
dot -Tsvg /tmp/graph.dot -o /tmp/graph.svg   # if graphviz available
```

**Secret exposure check:**

```bash
pulumi config --show-secrets | grep -i "key\|secret\|password\|token"
pulumi stack output --show-secrets
```

**Test coverage:**

```bash
find . -name "*.test.ts" -o -name "*_test.go" -o -name "test_*.py" | sort
```

---

## Phase 3: Design / Root-Cause Analysis

Map symptoms to causes:

| Symptom                          | Common Causes                                      | Check                                          |
| -------------------------------- | -------------------------------------------------- | ---------------------------------------------- |
| Unexpected resource replace      | Input property changed that triggers replacement   | `pulumi preview --diff` — look for `[replace]` |
| Stack output leaks secret        | Output not marked `secret: true`                   | `pulumi stack output --show-secrets`           |
| ComponentResource missing output | Output not registered in `registerOutputs`         | Check `this.registerOutputs({...})` call       |
| Automation API stack timeout     | Long provisioning, no timeout configured           | Add `OnEvent` handler + timeout options        |
| ESC env not loaded               | `esc env open` not called; ESC not linked to stack | `pulumi config env ls`                         |

Cite `file:line` for every finding.

---

## Phase 4: Recommendations

Output findings in priority order:

```
[CRITICAL] <title>
Resource: <logical name or file:line>
Issue: <one sentence>
Evidence: <preview output or code snippet>
Fix: <specific change, with code diff>
Trade-off: <alternative and its downside, if meaningful>
```

Order: CRITICAL → WARNING → INFO.

---

## Phase 5: Verification

After fixes are applied:

1. `pulumi preview` — zero unexpected changes; no `[replace]` for unintended resources.
2. `pulumi stack output` — no secrets in plaintext output.
3. Unit tests pass: `npm test` / `go test ./...` / `pytest`.
4. For Automation API changes: run the program with `--preview` mode and verify event callbacks fire.
5. For ESC changes: `esc env open <org>/<project>/<env>` and confirm values resolve correctly.

---

## Reference Docs

| File                     | When to use                                                |
| ------------------------ | ---------------------------------------------------------- |
| `stack-design.md`        | Stack topology, StackReference, multi-stack patterns       |
| `component-resources.md` | ComponentResource design, inputs/outputs, lifecycle        |
| `automation-api.md`      | Embedding `pulumi up`/`destroy` in Node/Python/Go          |
| `secrets.md`             | Config secrets, ESC, output sensitivity, encryption        |
| `testing.md`             | Unit mocks, integration tests, Automation API test harness |

Files in this skill

  • SKILL.md4.4 KB
  • source.json908 B

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.