home / skills / openclaw / skills / doppleganger
This skill prevents duplicate subagent sessions by checking running tasks before spawning, saving tokens and reducing lag for a single, coordinated execution.
npx playbooks add skill openclaw/skills --skill dopplegangerReview the files below or copy the command above to add this skill to your agents.
---
name: doppleganger
displayName: Doppleganger
description: Prevents duplicate subagent sessions running the same task. Saves tokens and reduces lag—no more "multiple Spidermen" doing the same work.
version: 1.0.0
---
# Doppleganger
## Description
Prevents duplicate subagent sessions running the same task. Saves tokens and reduces lag—no more "multiple Spidermen" doing the same work.
# Doppleganger
**One task, one agent.** Doppleganger stops duplicate subagent sessions from running the same task. That prevents token overspend, UI lag, and the chaos of five identical "task completed" announcements.
## Usage
- The orchestrator **already runs** a duplicate check before `sessions_spawn` (see delegate rule); Doppleganger is the named skill for that behavior.
- User says: "prevent duplicate agents", "stop dopplegangers", "why are so many agents doing the same thing?"
- You want a single entry point to **check** whether a task is already running before spawning.
```bash
python3 /Users/ghost/.openclaw/workspace/skills/doppleganger/scripts/doppleganger.py check "<task string>" [--json]
python3 /Users/ghost/.openclaw/workspace/skills/doppleganger/scripts/doppleganger.py guard --task "<task>" [--json]
```
**JSON output:**
- `{"duplicate": false, "doppleganger_ok": true}` → safe to spawn.
- `{"duplicate": true, "reason": "running", "sessionId": "...", "key": "...", "doppleganger_ok": true}` → do not spawn; reply that the task is already running.
**Exit codes:** 0 = no duplicate (or check ok). 1 = error. 2 = duplicate detected.
## What it does
- **check** / **guard** — Given a task string (the same one you would pass to `sessions_spawn`), returns whether that task is already running. If yes, the orchestrator must not spawn again.
- Uses the subagent-tracker's `check-duplicate` under the hood (one source of truth for runs/sessions).
## Orchestrator
The delegate rule runs a duplicate check before every `sessions_spawn`; that check can be implemented by calling Doppleganger (or subagent-tracker `check-duplicate`) with the router's task string. If `duplicate: true`, do not call `sessions_spawn`.
## Name
"Doppleganger" = the duplicate agent doing the same thing. One Spiderman is enough.
This skill prevents duplicate subagent sessions from running the same task so you save tokens and avoid UI lag. It enforces a one-task-one-agent rule by checking whether a task string is already active before spawning another session. Use it as a gate in an orchestrator to stop redundant agents and duplicate outputs.
Given the exact task string you would pass to sessions_spawn, the skill runs a duplicate check and returns a JSON result indicating whether a duplicate exists. It delegates to a single source-of-truth tracker (the subagent-tracker) to determine running sessions and produces exit codes and structured output for automated decision making. If a duplicate is detected, the orchestrator should not spawn a new subagent.
What output does the skill return when no duplicate is found?
It returns a JSON object like {"duplicate": false, "doppleganger_ok": true} and exits with code 0.
What should the orchestrator do when a duplicate is detected?
Do not call sessions_spawn. Inspect the returned sessionId/reason, notify the user if appropriate, and avoid immediate retries.