From poltergeist
Perform a code review from the perspective of a specific contributor — using their voice, values, heuristics, and communication style — even when they are not present. Trigger when the user says "review as @name", "review with [name]'s lens", "what would [name] say about this", "summon [name]'s ghost", or any phrasing that asks for a review through a specific contributor's perspective.
How this skill is triggered — by the user, by Claude, or both
Slash command
/poltergeist:poltergeistThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Code reviews from contributors who aren't in the room.
Code reviews from contributors who aren't in the room.
Read .poltergeist/ghosts/<slug>.md in the current project directory. If not found, check ${CLAUDE_PLUGIN_ROOT}/ghosts/<slug>.md (bundled examples). Slug is lowercase hyphenated: alice-smith.md.
If no ghost exists for the requested contributor, tell the user to build one first:
npx @poltergeist-ai/cli extract --contributor "Name" --git-repo <path-or-url> --output .poltergeist/ghosts/<slug>.md
glab mr diff <iid>Read the full diff before writing any comments.
If .poltergeist/feedback/<slug>.json exists, read it. Use feedback to:
If the ghost contains a ## Review Heuristics table, it takes precedence over the ordinal ranked list:
Weights control comment distribution:
Use Default Severity from the table to set severity prefixes for that dimension.
Check tradeoff preferences — when a change creates tension (e.g., new abstraction vs keeping duplication), frame the comment through the contributor's stated preference:
"I'd normally lean towards keeping this duplicated until we see the pattern repeat." (abstraction vs duplication: prefer-duplication)
Check scars — if a scar pattern is triggered, escalate severity one level (nit → suggestion, suggestion → blocking) and note it:
blocking:This introduces shared mutable state across modules. We had a production incident from exactly this pattern — worth restructuring before merge.
Qualify low-confidence dimensions — if confidence is low, add: (inferred from limited data)
Cite heuristic basis — each comment should make clear which dimension triggered it.
If no heuristics table exists, fall back to the ordinal ranked list under "What they care about most."
## 👻 Review by [Name]
> `[filename or MR description]`
---
### 🔴 Blocking
- **[File:line or area]** — [Comment in their voice]
---
### 💬 Suggestions
- **[File:line or area]** — [Comment in their voice]
---
### 🔹 Nits
- **[File:line or area]** — [Comment in their voice]
---
### ✅ What's good
---
### Overall
---
### 👻 Out of scope for this ghost
- [area] — not typically reviewed by [Name]
---
_Simulated review · poltergeist · ghost: .poltergeist/ghosts/[slug].md · updated [date]_
_Sources: [git-history | gitlab-comments | slack | docs]_
_Calibration: Anything [Name] would've caught that I missed, or anything I flagged that they wouldn't? Your feedback improves future reviews._
Where inferring (not directly supported by ghost data), signal lightly — once or twice per review max:
(inferred from patterns — no direct example from [Name] for this case)
If the user responds to the calibration prompt with feedback:
Parse into structured observations:
Write or append to .poltergeist/feedback/<slug>.json:
{
"entries": [
{
"date": "2026-04-03",
"missed": ["would have flagged the missing error boundary"],
"overFlagged": ["wouldn't care about the naming nit on line 42"],
"voiceAccuracy": "good",
"notes": ""
}
]
}
Briefly suggest which heuristic weights might need adjustment based on accumulated feedback.
npx claudepluginhub gkweb/poltergeist --plugin poltergeistCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.