audit-orphan-runs
Identifies abandoned worktrees and stale runs (no events for >2h, status=running) to flag for cleanup.
Use when the user wants to create and start a new WISP run from a goal — handles project creation, optional template selection, plan generation, lock + run, and prints the run URL. Trigger on phrases like "start a harness run", "new agent run", "kick off a harness project".
$ npx -y skills add Samuel0101010/wisp-orchestrator --skill wisp-new-run --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/wisp-new-runContext preview
The summary Claude sees to decide when to auto-load this skill.
Use when the user wants to create and start a new WISP run from a goal — handles project creation, optional template selection, plan generation, lock + run, and prints the run URL. Trigger on phrases like "start a harness run", "new agent run", "kick off a harness project".
name: wisp-new-run description: Use when the user wants to create and start a new WISP run from a goal — handles project creation, optional template selection, plan generation, lock + run, and prints the run URL. Trigger on phrases like "start a harness run", "new agent run", "kick off a harness project".
Take the user from a freeform goal to a running harness execution.
> **Platform note**: snippets below show both bash and PowerShell forms. Pick the one matching the user's shell. The bash form also runs from Git Bash / WSL on Windows.
1. Confirm the harness server is up.
If it returns non-200 or refuses connection, tell the user to run `/wisp-dashboard` first to start the server, then re-run this skill. 2. Confirm the repo path exists and is a git repo: `git -C <repoPath> rev-parse --git-dir`. If not, ask the user to fix the path or run `git init` in it.
1. **Create project**:
# bash / Git Bash
curl -s -X POST http://127.0.0.1:${WISP_PORT:-4400}/api/projects \
-H 'content-type: application/json' \
-d '{"name":"<name>","goal":"<goal>","repoPath":"<repoPath>"}' # PowerShell
$port = if ($env:WISP_PORT) { $env:WISP_PORT } else { 4400 }
$body = @{ name = "<name>"; goal = "<goal>"; repoPath = "<repoPath>" } | ConvertTo-Json
Invoke-RestMethod -Method Post -Uri "http://127.0.0.1:$port/api/projects" `
-ContentType "application/json" -Body $bodyCapture `id` from the response — this is the projectId.
2. **Seed team from template** (only if template != none):
# bash + jq
TEAM=$(curl -s http://127.0.0.1:${WISP_PORT:-4400}/api/team-templates \
| jq -c --arg id <template-id> '.templates[] | select(.id==$id) | .team')
curl -s -X PUT http://127.0.0.1:${WISP_PORT:-4400}/api/projects/<projectId>/team \
-H 'content-type: application/json' \
-d "$TEAM" # PowerShell (no jq needed — ConvertFrom-Json gives objects)
$port = if ($env:WISP_PORT) { $env:WISP_PORT } else { 4400 }
$tpl = Invoke-RestMethod -Uri "http://127.0.0.1:$port/api/team-templates"
$team = ($tpl.templates | Where-Object { $_.id -eq "<template-id>" }).team
Invoke-RestMethod -Method Put -Uri "http://127.0.0.1:$port/api/projects/<projectId>/team" `
-ContentType "application/json" -Body ($team | ConvertTo-Json -Depth 20)If neither `jq` nor PowerShell is available, fetch the templates response into a Python or Node one-liner that prints just `.team` for the chosen id, then pipe that into the PUT body. Do NOT use `--data-binary @<file>` unless you've actually written the file first. If template == none: tell the user to open the dashboard and configure the team manually, then exit this skill (you cannot create a default team via API today — the dashboard handles defaults).
3. **Generate plan**:
# bash
curl -s -X POST http://127.0.0.1:${WISP_PORT:-4400}/api/projects/<projectId>/plan -H 'content-type: application/json' -d '{}' # PowerShell
Invoke-RestMethod -Method Post -Uri "http://127.0.0.1:$port/api/projects/<projectId>/plan" `
-ContentType "application/json" -Body '{}'Capture `id` from the response — this is the planId.
4. **Lock plan**:
# bash
curl -s -X POST http://127.0.0.1:${WISP_PORT:-4400}/api/plans/<planId>/lock# PowerShell Invoke-RestMethod -Method Post -Uri "http://127.0.0.1:$port/api/plans/<planId>/lock"
5. **Start run**:
# bash
curl -s -X POST http://127.0.0.1:${WISP_PORT:-4400}/api/runs \
-H 'content-type: application/json' \
-d '{"planId":"<planId>"}' # PowerShell
$body = @{ planId = "<planId>" } | ConvertTo-Json
Invoke-RestMethod -Method Post -Uri "http://127.0.0.1:$port/api/runs" `
-ContentType "application/json" -Body $bodyCapture `runId` from the response.
6. **Print the run URL**:
http://127.0.0.1:${WISP_PORT:-4400}/projects/<projectId>/run/<runId>Tell the user the run is live and they can watch it in the dashboard.
Visual team-builder, plan-as-artifact, and live execution graph for autonomous Claude Code agent crews. Spawn a 3-role team, generate a DAG plan, run for hours, watch it ship in your browser.
Repo: Samuel0101010/wisp-orchestrator
Identifies abandoned worktrees and stale runs (no events for >2h, status=running) to flag for cleanup.
Drafts a docs/solutions/YYYY-MM-DD-<slug>.md entry for a recently completed run, capturing problem/solution/lessons.
Working discipline for code-writing agents — read before edit, smallest correct change, run the gates before claiming done. Injected into builder roles' system…
Conducts focused research on a topic by reading project files, searching memory, and synthesizing findings into a structured report.
Self-diagnostics for the harness — checks DB integrity, MCP wiring, claude binary availability, and recent run failures.
Visual + interaction quality bar for frontend roles — states, responsiveness, accessibility, consistency. Injected into frontend roles' system prompts.