warp-cleanup
List registered Warp agents and clear idle or leftover cloud agents for this repo.
Skill by smlsr
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/smlsr-warp-cleanup
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/warp-cleanup
What's inside
- Skill name
warp-cleanup- Description
- List registered Warp agents and clear idle or leftover cloud agents for this repo. Use when agents pile up, after a pause or stop without CURSOR_API_KEY, or to check that a run left nothing behind.
- License
- MIT
- Instructions
- 68 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# Warp cleanup
`.warp/agents.json` is the registry: id, ticket, role, session, started, ended, and state. Every spawn and every exit is a row. The file is committed with the beam. It never contains `CURSOR_API_KEY`. `docs/LIFECYCLE.md` is the rule for how agents start and end.
```bash
python3 <plugin>/scripts/agents.py list --beam .warp/beam.json
python3 <plugin>/scripts/agents.py check --beam .warp/beam.json
python3 <plugin>/scripts/agents.py cleanup --beam .warp/beam.json --cloud
python3 <plugin>/scripts/agents.py cleanup --beam .warp/beam.json --cloud --apply
python3 <plugin>/scripts/agents.py cleanup --beam .warp/beam.json --cloud --apply --running
```
The slash command can be missing from Cursor's plugin command index. The script does not need it:
```bash
python3 .cursor/plugins/warp/scripts/agents.py list --beam .warp/beam.json
python3 .cursor/plugins/warp/scripts/agents.py cleanup --beam .warp/beam.json --cloud
python3 .cursor/plugins/warp/scripts/agents.py cleanup --beam .warp/beam.json --cloud --apply
python3 .cursor/plugins/warp/scripts/agents.py ?
```
`agents.py ?` prints the options. Quote `?` if the shell expands it.
## What the lines mean
`agent:` is one registry row. `spawn: open` means a new agent is allowed. `spawn: closed paused`, `spawn: closed stopped`, and `spawn: closed done` mean do not spawn. `cloud: id= name= repo= status= updated=` plus a link is one cloud match. `cleanup: count N` is how many agents would be archived. `cleanup: dry-run` means nothing was changed. `cleanup: would cancel <id>` is a running match that `--apply --running` would cancel. `cleanup: skip <id> reason=self` is the agent running the command. `cleanup: skip <id> reason=parent` is this run's parent. `cleanup: skip <id> reason=running` is a RUNNING or ACTIVE agent and no `--running`. `cleanup: skip <id> reason=running-scan` is a running agent that matched `--scan`, left unless `--force`. `cleanup: would archive <id>` is an idle `--scan` match on a dry run. `cleanup: cancelled <id>` means `POST /v1/agents/{id}/runs/{runId}/cancel` succeeded. `cleanup: archived <id>` means `POST /v1/agents/{id}/archive` succeeded. Archive only. Warp never deletes an agent. `cleanup: link https://cursor.com/agents/<id>` means there is no key, so archive that agent in the Cursor UI. `cleanup: no CURSOR_API_KEY` means the same. `cleanup: cut short` means the time limit was reached: run it again.
`--cloud` calls `GET https://api.cursor.com/v1/agents` (Basic auth, the key then a colon). List rows omit repos and the prompt, so a candidate is read with `GET /v1/agents/{id}` before it can match. `--apply` archives the dry-run matches. A match is in this checkout's origin repository, and it is in `.warp/agents.json` or its name starts with this run's `[warp:<instance>]` tag, or its prompt is one Warp printed. Every agent Warp starts is named `[warp:<instance>] <ticket> <step>` or `[warp:<instance>] listener`: Cursor has no tag field, so the name is the tag. `<instance>` is the six characters on the beam that name this run. `agents.py list` prints it as `instance: warp:<instance> host= machine=`, and the dry run prints `cleanup: tag [warp:<instance>]`. Other agents in the repo are not matched, whatever words are in their names, and neither are another Warp run's. `--tag <instance>` names another run's tag in place of this one. `--tag all` matches the tag of any Warp run. `--untagged` adds agents from before the tag, matched loosely on Warp role words in the name or prompt (Shuttle, IMPLEMENT, fix, rebase, listener, Bugbot). That can match someone else's agent in the same repo, so read that dry run before `--apply`. The agent running the command stays. This run's parent stays. A RUNNING or ACTIVE agent stays unless `--running`. Local ids (`subagent:`, `shuttle-<id>-rN`, `listener`, `parent:`, `bugbot:`) are printed and not sent to the API. Archive is reversible in the Cursor UI. Warp never deletes an agent.
`--running` cancels the latest run of each RUNNING or ACTIVE match, then archives it. It is refused while the run is running: `/warp-pause` or `/warp-stop` first. `--force` overrides that and cancels live work.
`--all-idle` drops the role check and stays on this repo. `--any-repo` drops the repo check. Together they are every IDLE agent the key can see.
`--scan` is the word match. It ignores the repo filter and the tag and registry rules, and pages through every agent the key can see. Matching is case-insensitive, on the name, the summary or description, and the first prompt. `--scan` crosses repos, so read the list before `--apply`. A comma list, quoted items, and repeated flags are the same:
```bash
python3 <plugin>/scripts/agents.py list --beam .warp/beam.json --scan="Jira","Fix","Bugbot"
python3 <plugin>/scripts/agents.py list --beam .warp/beam.json --scan Jira,Fix,Bugbot
python3 <plugin>/scripts/agents.py list --beam .warp/beam.json --scan Jira --scan Fix
python3 <plugin>/scripts/agents.py cleanup --beam .warp/beam.json --cloud --scan Jira,Fix,Bugbot
python3 <plugin>/scripts/agents.py cleanup --beam .warp/beam.json --cloud --apply --force --scan Jira,Fix,Bugbot
```
The list line adds `word=` and `field=` (`name`, `summary`, `description`, or `prompt`) and ends with `scan: count`. Leave `--apply` off first. The dry run prints `cleanup: would archive <id>` for an idle match and `cleanup: would cancel <id>` for a running match that `--force` would cancel, then `cleanup: count`. With `--apply`, idle matches are archived. A RUNNING or ACTIVE match is left (`reason=running-scan`) unless `--force`, which cancels it and then archives it. The refusal while this run is running still applies. The agent running the command (`reason=self`) and this run's parent (`reason=parent`) are never matched.
## What already clears agents
`/warp-pause` and `/warp-stop` end every registry row and, with the key, cancel and archive every cloud agent in the registry and every agent in this repo whose name carries this run's `[warp:<instance>]` tag. Merge and park archive that ticket's agents. A fix round on a new VM retires the VM the ticket left. The end of a run does the same teardown once. Each Shuttle and each listener poll also checks for itself with `agents.py reap` and exits on `reap: exit`. This command is for what is left: a run that halted without the key, agents from before the registry, and a check that nothing remains.
## An existing pile
Agents left by a run from before 1.5.0 are not in `.warp/agents.json` and do not carry this run's `[warp:<instance>]` tag. `--untagged` matches them loosely: a Shuttle, IMPLEMENT, fix, rebase, listener, or Bugbot in the name or prompt, in this repo. That can also match someone else's agent, so read the dry run. Set `CURSOR_API_KEY` in the environment, never in a file that is committed. `/warp-stop` first, so nothing new starts. Then run the dry run from that checkout:
```bash
python3 <plugin>/scripts/agents.py cleanup --beam .warp/beam.json --cloud --untagged --running
```
Read the list and the count. Then clear those matches:
```bash
python3 <plugin>/scripts/agents.py cleanup --beam .warp/beam.json --cloud --untagged --apply --running
```
That is the pair for a pile of about 199 Shuttles, Bugbot runs, and listeners in this repo, idle or still running. `--all-idle` and `--any-repo` stay off. Without the key, archive each `https://cursor.com/agents/<id>` link in the Cursor UI.
Do not dispatch. Do not merge. Do not start a listener.From smlsr/Warp, MIT.
More from smlsr/Warp
- 0.565score
warp-jira-check
smlsr
Explain, per ticket, which Jira transition and which Jira or pull-request comment should have happened, what the beam recorded, and what is missing.
SkillAFreshness: AClaude Code +9 - 0.565score
warp-jira-map
smlsr
Map plan ticket ids to real Jira issue keys.
SkillAFreshness: AClaude Code +9 - 0.565score
warp-status-post
smlsr
Post Warp status to Slack and Teams, including the status files.
SkillAFreshness: AClaude Code +9 - 0.565score
warp-sync
smlsr
Read Jira statuses into the beam.
SkillAFreshness: AClaude Code +9 - 0.561score
warp-alarm
smlsr
Raise, record, and clear Warp alarms when a PR cannot pass Bugbot, a lock is escaped, or a ticket is stuck.
SkillAFreshness: AClaude Code +9 - 0.561score
warp-jira-external-id
smlsr
Write the plan id into Jira's External ID field for tickets that are already mapped.
SkillAFreshness: AClaude Code +9 - 0.561score
warp-jira-match
smlsr
Link unmapped Warp tickets to Jira issues by summary.
SkillAFreshness: AClaude Code +9 - 0.561score
warp-scan
smlsr
Scan any repo, or one folder of it, for CURSOR_PLAN.md, schedule.json, a build map, or a Jira ticket export and build the Warp plan.
SkillAFreshness: AClaude Code +9 - 0.560score
shuttle-run
smlsr
Run one claimed ticket on its own VM, or in its own git worktree, through an open pull request.
SkillAFreshness: AClaude Code +9 - 0.560score
warp-allow-notify
smlsr
Write the Cursor allowlist so Slack and Jira calls Warp makes do not stop for Allow or Run.
SkillAFreshness: AClaude Code +9 - 0.560score
warp-from-jira
smlsr
Build the plan files /warp-scan reads from the Jira issues that carry one or more labels, for example /warp-from-jira version:1.5.5,ui.
SkillAFreshness: AClaude Code +9 - 0.560score
warp-status
smlsr
Write and report the Warp status file: done, working, and left.
SkillAFreshness: AClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Oct 8, 2026 (21 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/smlsr/Warp
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from smlsr
- 0.565score
warp-sync
smlsr
Read Jira statuses into the beam.
SkillAFreshness: AClaude Code +9 - 0.565score
warp-jira-map
smlsr
Map plan ticket ids to real Jira issue keys.
SkillAFreshness: AClaude Code +9 - 0.565score
warp-jira-check
smlsr
Explain, per ticket, which Jira transition and which Jira or pull-request comment should have happened, what the beam recorded, and what is missing.
SkillAFreshness: AClaude Code +9 - 0.565score
warp-status-post
smlsr
Post Warp status to Slack and Teams, including the status files.
SkillAFreshness: AClaude Code +9 - 0.561score
warp-scan
smlsr
Scan any repo, or one folder of it, for CURSOR_PLAN.md, schedule.json, a build map, or a Jira ticket export and build the Warp plan.
SkillAFreshness: AClaude Code +9 - 0.561score
warp-jira-external-id
smlsr
Write the plan id into Jira's External ID field for tickets that are already mapped.
SkillAFreshness: AClaude Code +9
Cite this page
warp-cleanup skill. Agent Mart. https://agentmart.dev/skills/smlsr-warp-cleanup (last updated 2026-10-24)