Our review
Deterministically updates the status, last_flow, and updated_at fields in the .runs/index.json file using a shim script.
Strengths
- Deterministic writes with stable, reproducible diffs
- Idempotent operations: running twice with same args yields same result
- Minimal surface area—only touches three specific fields, reducing corruption risk
Limitations
- Cannot create index.json; fails if missing
- Restricted to cleanup and run-prep agents, not for general use
- Depends on the shim script and installed Rust or Python tooling
When a cleanup or run-prep agent needs to update a run's status in the index.
For creating or modifying other fields like canonical_key or issue_number; those are handled by other skills.
Security analysis
SafeThe skill only instructs updating a JSON index via a bash shim with very limited surface (only status, last_flow, updated_at). No destructive commands, no exfiltration, no obfuscation, and usage is restricted to specific cleanup agents. The cargo install instruction is benign documentation, not an executed command.
No concerns found
Examples
Update the index for run feat-auth to status VERIFIED after signal cleanup.After build cleanup, set the last_flow to 'build' and status to 'BUILT' for run deploy-42.Check if .runs/index.json exists, then update run_id abc123 with status FAILED and current timestamp.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.