From Palpatine
Orchestrates subagents for sophisticated opponent modeling and multi-party analysis in wargames and counter scenarios. Provides structured schemas for adversary and player moves.
How this skill is triggered — by the user, by Claude, or both
Slash command
/palpatine:adversaryThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Invoked via `/palpatine:adversary` or auto-triggered for:
Invoked via /palpatine:adversary or auto-triggered for:
Use subagents when:
Don't use subagents when:
Use JSON schemas for structured output — no parsing, automatic validation.
// Single adversary response
const ADVERSARY_SCHEMA = {
type: "object",
properties: {
counter: {
type: "string",
description: "Their response move, not reasoning"
},
exploits: {
type: "array",
items: { type: "string" },
maxItems: 3,
description: "Target weaknesses they'd hit"
},
escalation: {
type: "string",
description: "How they escalate if resisted"
},
weakPoint: {
type: "string",
description: "Where they're exposed"
}
},
required: ["counter", "exploits", "escalation", "weakPoint"]
}
// Multi-party player analysis
const PLAYER_SCHEMA = {
type: "object",
properties: {
move: { type: "string" },
alliance: {
type: "string",
description: "Who they side with and why it serves them"
},
threat: {
type: "string",
description: "How they could hurt target"
},
price: {
type: "string",
description: "Cost to neutralize or buy them off"
},
threatLevel: {
type: "string",
enum: ["high", "medium", "low"]
}
},
required: ["move", "alliance", "threat", "price", "threatLevel"]
}
Spawn one agent for focused opponent modeling:
Agent({
description: "Adversary: [role]",
prompt: `Model [OPPONENT] as ruthless rational actor.
OPPONENT: [role/name]
GOALS: [what they want — specific]
RESOURCES: [leverage, relationships, info, authority]
CONSTRAINTS: [what stops them from going nuclear]
TARGET is about to: [user's planned move]
Assume competent and self-interested. What's their counter-move?
Return: counter move, exploits they'd hit, escalation path, their weak point.
No caveats. Most likely play, stated cold.`,
schema: ADVERSARY_SCHEMA
})
Spawn all players simultaneously — they're independent analyses:
const players = [
{ name: "CEO", goals: "...", leverage: "..." },
{ name: "HR Director", goals: "...", leverage: "..." },
{ name: "Skip-level", goals: "...", leverage: "..." }
];
// All agents run in parallel
const results = await Promise.all(players.map(p =>
Agent({
description: `Player: ${p.name}`,
prompt: `Model ${p.name} as self-interested actor.
PLAYER: ${p.name}
GOALS: ${p.goals}
LEVERAGE: ${p.leverage}
SITUATION: [current state]
What's their move? Who do they ally with? How might they hurt target? What buys them off?
Assume competence and selfishness.`,
schema: PLAYER_SCHEMA
})
));
After parallel agents return, synthesize in main context:
## The Board
| Player | Move | Threat | Exploitable |
|--------|------|--------|-------------|
| CEO | [from results] | high | [weakPoint] |
| HR | [from results] | medium | [weakPoint] |
| Skip | [from results] | low | [weakPoint] |
**Alliances:**
- [CEO] ↔ [HR]: [shared interest]
- [Skip-level] isolated: [why]
**Optimal path:** [user's route through]
**Who to neutralize first:** [priority target]
**Who to recruit:** [potential ally + price]
When each turn depends on prior response, run sequentially:
let state = { situation: "...", history: [] };
for (let turn = 0; turn < 4; turn++) {
const response = await Agent({
description: `Wargame turn ${turn + 1}`,
prompt: `Prior history: ${JSON.stringify(state.history)}
User's move: ${userMove}
Opponent: [role] with goals [X] and leverage [Y]
What's opponent's counter-move this turn?`,
schema: ADVERSARY_SCHEMA
});
state.history.push({ user: userMove, opponent: response.counter });
// Present turn, get user's next move or synthesize endgame
}
Agents return data. Main context does:
Don't duplicate work — if agent returned it, use the data, don't re-analyze.
User: "Model how my team will react if I announce I'm leaving for a competitor"
Execution:
## The Board
| Player | Move | Threat | Price |
|--------|------|--------|-------|
| Manager | Counteroffer + guilt | medium | Will match offer |
| Skip-level | Fast-track promotion | high | Needs you for Q4 |
| Peer A | Jealousy, distance | low | Nothing — self-interest |
| Peer B | "Take me with you" | none | Intel on competitor |
| HR | Exit interview fishing | low | Standard process |
**Alliance:** Manager + Skip aligned to retain you
**Threat:** None high enough to block — clean exit available
**Leverage:** Skip's Q4 dependency = negotiating room if you want to stay
**Play:**
1. Announce to manager first, privately
2. Have counteroffer number ready
3. Don't mention competitor by name initially
4. Skip-level conversation within 24h before manager frames it
*"Everything is proceeding as I have foreseen."*
npx claudepluginhub novusedge/palpatineSimulates multi-turn adversarial scenarios with counter-moves. Useful for negotiation, confrontation, coalition building, and escalation planning.
Routes to the correct strategy skill for adversarial, competitive, or negotiation situations. After framing the challenge, it directs to specialized skills like terrain analysis, intelligence auditing, timing, force economy, or positioning.
Deploys 32 adversarial agents for parallel analysis to stress-test ideas, arguments, architectures; generates steelmans, counterarguments, and adversarial validation.