vibe-progress — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited vibe-progress (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.
Renders a live ASCII dashboard of the current project's build progress. Reads vibe/TASKS.md and git history. Never modifies any file.
Always run in Plan Mode. Read-only.
vibe/TASKS.md — phases, features, tasks, gates, active work, backloggit log --oneline -1 — last commitgit log --oneline --since="7 days ago" | wc -l — commits this weekvibe/bugs/ — count folders, note any activevibe/backlog/ — count files (deferred items)vibe/DECISIONS.md — count D-[ID] entriesvibe/cost/history.json — total project cost if exists (read silently, skip if missing)vibe/.doctor-last-run — timestamp of last doctor: run (skip if missing)Phase 1:
Phase 2:
Phase 3:
Overall:
Phase gates: Read ## Phase gates section from TASKS.md exactly. Extract each gate line with its emoji status.
Backlog: Count items in vibe/backlog/ folder. List names if ≤3 items; show count only if >3.
Cost (if vibe/cost/history.json exists):
node -e "
const h = require('./vibe/cost/history.json');
const total = h.sessions ? h.sessions.reduce((s,x) => s + (x.cost_usd||0), 0) : 0;
const sessions = h.sessions ? h.sessions.length : 0;
console.log('COST:$' + total.toFixed(2) + ':' + sessions + ' sessions');
" 2>/dev/null || echo "COST:none"If no history.json — show "not tracked" in dashboard.
Env health (if vibe/.doctor-last-run exists):
if [ -f "vibe/.doctor-last-run" ]; then
last=$(cat vibe/.doctor-last-run)
now=$(date +%s)
age=$(( (now - last) / 3600 ))
if [ $age -lt 1 ]; then echo "ENV:healthy:checked this session"
elif [ $age -lt 24 ]; then echo "ENV:stale:checked ${age}h ago"
else echo "ENV:unknown:run doctor: to check"
fi
else
echo "ENV:unknown:doctor: not yet run"
fi┌─────────────────────────────────────────────────────────────┐
│ [PROJECT NAME] — Build Progress │
│ [overall%] complete · [N] tasks done of [total] │
├─────────────────────────────────────────────────────────────┤
│ PHASES │
│ │
│ Phase 1 [bar] [N/total] [status] │
│ Phase 2 [bar] [N/total] [status] │
│ Phase 3 [bar] [N/total] [status] │
├─────────────────────────────────────────────────────────────┤
│ PHASE GATES │
│ │
│ Phase 1 → 2: [✅ reviewed [date] / 🔴 BLOCKED / ⬜ pending] │
│ Phase 2 → 3: [status] │
│ Phase N → deploy: [status] │
├─────────────────────────────────────────────────────────────┤
│ ACTIVE NOW │
│ [Feature name or Phase 3 task] │
│ │
│ [x] [task plain english] │
│ [x] [task plain english] │
│ [ ] [task plain english] ← next │
│ [ ] [task plain english] │
├─────────────────────────────────────────────────────────────┤
│ COMPLETED FEATURES │
│ │
│ ✅ [Feature name] [N/N tasks] │
│ ... │
├─────────────────────────────────────────────────────────────┤
│ BACKLOG [N items deferred] │
│ [item name if ≤3] / [count only if >3] │
│ │
│ BUGS [N fixed] [N active] │
│ SCOPE CHANGES [N decisions logged] │
│ COMMITS [N this week] │
├─────────────────────────────────────────────────────────────┤
│ COST [$X.XX total · N sessions] │
│ ENV HEALTH [✅ checked this session / ⚠️ [N]h ago / ❓ not checked] │
├─────────────────────────────────────────────────────────────┤
│ Last: [last git commit — truncated to 45 chars] │
│ Next: [plain English next task] │
│ │
│ Say "next" to continue building. │
└─────────────────────────────────────────────────────────────┘COST row logic:
$X.XX total · N sessionsnot tracked — run cost: to startENV HEALTH row logic:
✅ checked this session⚠️ checked Nh ago — consider re-running doctor:❓ not checked — run doctor: before buildingBar is 20 characters wide using █ and ░:
0% ░░░░░░░░░░░░░░░░░░░░
25% █████░░░░░░░░░░░░░░░
50% ██████████░░░░░░░░░░
75% ███████████████░░░░░
100% ████████████████████Formula: filled = round(percentage / 5), empty = 20 - filled
✅ complete (100%)
🔄 in progress (1-99%)
⬜ not started (0%)
🔴 BLOCKED (phase gate blocked by P0 issues)
🐛 active bug fixNothing built yet: All phases ⬜ 0%. Active section: "Start with Phase 1 — say next to begin." Phase gates all ⬜ pending.
Active bug fix: Add 🐛 ACTIVE BUG FIX section between ACTIVE NOW and COMPLETED FEATURES:
├─────────────────────────────────────────────────────────────┤
│ 🐛 ACTIVE BUG FIX │
│ [Bug summary plain English] │
│ [ ] BUG-001 · Write regression test ← next │
│ [ ] BUG-002 · Implement fix │
│ ... │Review gate blocked: Phase gates section shows 🔴 BLOCKED with the P0 count. Active section shows the RFX- fix tasks.
No backlog: Show: "BACKLOG 0 items deferred"
All tasks complete: Active section: "All tasks complete — ready for review: final 🎉"
Print nothing else. No explanations. No next steps beyond what's in the dashboard. The dashboard is the complete output.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.