Our review
Deterministically updates status, last_flow, and updated_at fields in .runs/index.json via a shim script.
Strengths
- Deterministic writes with stable diffs and guaranteed sorting
- Update by run_id without file creation
- Safe invocation through a shim that resolves tool paths
- Minimal write surface limited to three fields
Limitations
- Cannot create .runs/index.json if missing
- Restricted to listed cleanup and prep agents
- Read-only index access is not provided (write-only skill)
When updating a run's status after a preparation or cleanup step.
When you need to create a new record or read information from the index.
Security analysis
SafeThe skill only invokes a controlled script (demoswarm.sh) with fixed arguments to safely update status fields in a JSON file. No destructive commands, network activity, or injection vectors are exposed beyond what the script itself may contain, and the skill description emphasizes deterministic, idempotent writes.
No concerns found
Examples
Update the index status for run 'feat-auth' to 'VERIFIED' with last_flow 'signal' using the demoswarm shim.Upsert the status of run 'fix-bug' in .runs/index.json to 'FAILED' with last_flow 'build' and the current timestamp, using the demoswarm index command.name: runs-index description: "Update index.json status. Use for: upsert index.json, update status/last_flow/updated_at. Deterministic writes - stable diffs, no creation. Use only in run-prep and *-cleanup agents. Invoke via bash .claude/scripts/demoswarm.sh index upsert-status." allowed-tools: Bash, Read, Write
Runs Index Skill
Deterministic updates to .runs/index.json. Write-bearing but with minimal surface.
Invocation
Always invoke via the shim:
bash .claude/scripts/demoswarm.sh index upsert-status [options]
Do not set PATH or call helpers directly. The shim handles resolution.
Operating Invariants
Repo root only
- Assume working directory is repo root.
- All paths are repo-root-relative.
Minimal ownership
This skill only updates:
statuslast_flowupdated_at
Other fields (canonical_key, issue_number, pr_number, etc.) are owned by run-prep, signal-run-prep, and gh-issue-manager.
Stable diffs
- Upsert by
run_id(update in place, not append) - Preserve existing ordering
- Output is sorted for stable git diffs
Allowed Users
Only these agents may use this skill:
run-prepsignal-run-prepsignal-cleanupplan-cleanupbuild-cleanupgate-cleanupdeploy-cleanupwisdom-cleanup
Command Reference
| Command | Purpose |
| --------------------- | ------------------------------- |
| index upsert-status | Update run status in index.json |
Quick Example
# Update index after signal cleanup
bash .claude/scripts/demoswarm.sh index upsert-status \
--index ".runs/index.json" \
--run-id "feat-auth" \
--status "VERIFIED" \
--last-flow "signal" \
--updated-at "$(bash .claude/scripts/demoswarm.sh time now)"
# stdout: ok
Contract Rules
- stdout:
okon success, error message on failure - exit code:
0on success, non-zero on failure - Idempotent: Running twice with same args produces same result
- No creation: If
.runs/index.jsondoesn't exist, fail (run-prep owns creation)
Index Schema Reference
{
"version": 1,
"runs": [
{
"run_id": "feat-auth",
"canonical_key": "gh-456",
"task_key": "feat-auth",
"task_title": "Add OAuth2 login",
"issue_number": 456,
"pr_number": null,
"updated_at": "2025-12-11T22:15:00Z",
"status": "VERIFIED",
"last_flow": "signal"
}
]
}
This skill only updates: status, last_flow, updated_at.
For Agent Authors
In cleanup agents:
- Use
runs-indexfor index updates (no inline jq) - Handle missing index — if
.runs/index.jsonis missing, add a blocker and do not create it - Use
runs-derivefor reading — this skill is write-only
Example pattern in cleanup agent:
# Get current timestamp
TIMESTAMP=$(bash .claude/scripts/demoswarm.sh time now)
# Update index
bash .claude/scripts/demoswarm.sh index upsert-status \
--index ".runs/index.json" \
--run-id "$RUN_ID" \
--status "$STATUS" \
--last-flow "signal" \
--updated-at "$TIMESTAMP"
Installation
The Rust implementation is preferred. Install to repo-local directory:
cargo install --path tools/demoswarm-runs-tools --root .demoswarm
The shim will automatically resolve in order:
.demoswarm/bin/demoswarm(repo-local install, preferred)demoswarmon PATH (global install)cargo runfallback (dev environments)- Python fallback (legacy)
Next.js App Router Expert
Development
A skill that turns Claude into a Next.js App Router expert.
README Generator
Development
Creates professional and comprehensive README.md files for your projects.
API Documentation Writer
Development
Generates comprehensive API documentation in OpenAPI/Swagger format.