ops-projects — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited ops-projects (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Before rendering, load:
cat ${OPS_DATA_DIR:-$HOME/.claude/plugins/data/ops-ops-marketplace}/preferences.json — read owner, timezonecat ${OPS_DATA_DIR}/daemon-health.json — show service status in dashboard footercat ${OPS_DATA_DIR}/registry.json — primary project index (updated by daemon twice daily + on-demand with --sync)Load ops-rules before acting. Public repo (no personal data). Outbound: one draft → one approval → one send. If AskUserQuestion / Workflow are missing, follow Rule 10 in ops-rules (Hermes: numbered options / two-turn Telegram card; delegate_task).
# Refresh registry data on demand
bash ${CLAUDE_PLUGIN_ROOT}/scripts/ops-gsd-registry-sync.sh
# Show registry contents
cat ${OPS_DATA_DIR}/registry.json
# Show health summary
cat ${OPS_DATA_DIR}/cache/projects_health.json$HOME (walked recursively, depth <= OPS_GSD_SCAN_DEPTH, default 5)
+ any extra roots listed in OPS_GSD_SCAN_ROOTS (colon-separated)
│
▼
<any-dir>/.planning/
│
├── HANDOFF.json ← active-phase projects
├── STATE.md
├── ROADMAP.md
└── MILESTONES.md
│
▼ ops-gsd-registry-sync.sh (daemon: 6am + 6pm)
│
▼
${OPS_DATA_DIR}/
├── registry.json ← all projects, sorted by priority
└── cache/
└── projects_health.json ← health summary
│
▼ ops-projects skill reads thisops-gsd-registry-sync.sh does not assume a fixed workspace directory. It walks $HOME and records every .planning/ directory it finds, so any layout works.
OPS_GSD_SCAN_ROOTS — colon-separated extra roots to walk besides $HOME(use this for projects that live outside the home directory)
OPS_GSD_SCAN_DEPTH — how deep to walk (default 5)OPS_GSD_SCAN_EXCLUDE — colon-separated extra directory names to skipOPS_GSD_INCLUDE_WORKTREES=1 — also scan .worktrees/ (skipped by default,since worktrees duplicate an existing project)
Build noise (node_modules, .git, .venv, dist, caches) is always skipped.
Build the dashboard from ${OPS_DATA_DIR}/cache/projects_health.json (fall back to ${OPS_DATA_DIR}/registry.json if missing). Show:
╔══════════════════════════════════════════════════════════════╗
║ OPS ► PROJECTS [owner] [date] [daemon status] ║
╠══════════════════════════════════════════════════════════════╣
║ GSD Portfolio — 23 projects ║
║ ║
║ 🟢 EXECUTING (3) ║
║ my-webapp Phase 12 [executing] branch: main 0 dirty ║
║ my-plugin Phase 16 [executing] branch: main 2 dirty ║
║ my-saas-app Phase 39 [executing] branch: dev 0 dirty ║
║ ║
║ 🟡 PAUSED (4) ║
║ my-project-a Phase 08 [paused] branch: feat 1 dirty ║
║ my-project-b Phase 3 [verifying] branch: main 0 dirty ║
║ ... ║
║ ║
║ 🔴 BLOCKED (1) ║
║ my-ecommerce Phase 7 [await-UAT] branch: prod 0 dirty ║
║ ║
║ ⚪ IDLE / UNTRACKED (15) ║
║ my-side-project Phase 1 [complete] branch: main 0 dirty ║
║ my-other-app — — branch: dev 3 dirty ║
║ ... ║
╠══════════════════════════════════════════════════════════════╣
║ ⚡ Services: message-listener ● | inbox-digest ⏱ 2h | gsd-registry ⏱ 12h ║
╚══════════════════════════════════════════════════════════════╝status field, case-insensitive)If $ARGUMENTS contains a project alias, find it in the registry and show:
╔══════════════════════════════════════════════════════════════╗
║ PROJECT — [alias] ║
╠══════════════════════════════════════════════════════════════╣
║ Path: [path from registry] ║
║ Phase: [phase] Status: [status] ║
║ Milestone: [milestone name] ║
║ Branch: [branch] Dirty: [N] Unpushed: [N] ║
║ Blockers: [N] ║
║ Next: [next_action text] ║
║ ║
║ GSD files: ✓ ROADMAP ✓ MILESTONES [HAS_HANDOFF] STATE ║
╚══════════════════════════════════════════════════════════════╝
Actions:
[1] Open project directory
[2] Continue GSD (/gsd-next [alias])
[3] Git: branch / status / log
[4] Run /ops projects (back to portfolio)Present numbered actions and let the user pick by typing the number or action name.
If --sync or --refresh is passed, run the registry sync script first, then display the updated dashboard:
bash ${CLAUDE_PLUGIN_ROOT}/scripts/ops-gsd-registry-sync.sh 2>&1Show "Refreshing..." while running, then present the full updated dashboard.
registry.json is missing/empty: show a one-shot sync prompt No project registry found. Run /ops projects --sync to build it.action_needed: surface that in a warning banner| Command | What it does |
|---|---|
/ops projects | Show full portfolio |
/ops projects [alias] | Deep-dive on one project |
/ops projects --sync | Force-refresh registry + show dashboard |
/ops:setup registry | Open registry setup (future) |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.