Skills Audit, 2026-04-28¶
Auditor: forge-refactor_Opus47
Scope: /home/justinwieb/forge/.claude/skills/ (17 skills) + ~/.claude/skills/ (0, empty)
Inventory¶
17 project-scoped skills, no user-scoped skills.
| Skill | Trigger description accurate? | References valid? | Fix needed |
|---|---|---|---|
cf-add |
✅ "expose X at foo.justinkrystal.com" | ✅ scripts/forge_cloudflare_cf.py |
none |
context |
✅ wellness/home/business slice | ✅ Context API at 127.0.0.1:7358 | none |
create-task |
✅ generic | ✅ Writes to tasks/pending/ |
none |
decrypt-n8n |
✅ ACTION SKILL, never auto | ✅ scripts/forge_n8n_decrypt_cred.sh |
none |
deploy-site |
✅ ACTION SKILL, manual only | ✅ scripts/forge_sites_deploy.sh |
none |
fleet-status |
✅ generic | ✅ wraps scripts/forge_fleet_status.sh |
none |
handoff |
✅ scaffolds handoff template | ✅ writes memory/handoffs/<topic>-YYYY-MM-DD.md |
none |
mount-check |
✅ FUSE health check | ✅ scripts/forge_monitor_mount_watchdog.sh |
none |
notify |
⚠️ description lists "ntfy, Discord, Slack, n8n, file": Discord/Slack just removed from dispatch by this refactor | ✅ scripts/forge_notify.sh |
update description to drop Discord/Slack |
preview-site |
✅ Tailscale URL for Venus | ✅ scripts/forge_sites_preview.sh |
none |
recall |
✅ semantic search | ✅ scripts/forge_search_query.py |
none |
save-to-drive |
✅ markdown → docx via pandoc | ✅ scripts/forge_gdoc_to_drive.sh |
none |
screenshot |
✅ desktop + mobile via Playwright | ✅ scripts/forge_sites_screenshot.sh |
none |
sessions |
✅ lifecycle for tmux sessions | ✅ all subcommands valid | none |
spawn |
✅ remote-control session in tmux | ✅ tmux + python3 helpers exist | none |
spawn-worker |
✅ ephemeral claude -p |
✅ writes to comms/results/ |
none |
ssh-status |
✅ fleet health snapshot | ✅ ssh aliases all exist | none |
Findings¶
A: Apply directly¶
A1, notify description drift.
Current: "Send notifications via the forge notification system (ntfy, Discord, Slack, n8n, file)"
Reality after this refactor: notify.sh dispatches to manager bot + ntfy + n8n + file (Discord/Slack functions kept but never called).
Proposed: "Send notifications via the forge notification system. Routes to @Manager_JForgeBot (Telegram) for all priorities; warning + critical also fan out to ntfy + n8n. Discord/Slack functions kept but no longer dispatched."
This is a description-only change in .claude/skills/notify/SKILL.md. Apply directly.
B: Gaps (skills that should exist but don't)¶
| # | Proposed skill | Why | Priority |
|---|---|---|---|
| B1 | /email-list (or similar wrapper around list-recent-emails n8n workflow) |
The Gmail suite has 14 workflows but no skill surface. Currently agents have to know the scripts/forge_n8n_call.sh pattern. A skill would document the canonical query syntax. |
medium, useful but not blocking. Justin types prompts in natural language; agents handle the n8n call themselves. |
| B2 | /ava-tell or /manager-push (direct push to a specific bot) |
Right now notify.sh routes everything to manager. There's no skill to push something only to Ava (e.g., for conversational context injection). |
low, scripts/forge_telegram_push.sh already exists, just isn't surfaced as a skill. |
| B3 | /draft-email (wraps create-gmail-draft-business or create-gmail-draft-personal) |
Drafting is the most-used Gmail action and currently goes through raw forge_n8n_call.sh @file payloads, which is error-prone for apostrophes/quotes. |
medium |
| B4 | /workflow-list (n8n workflow inventory + last-run status) |
34 n8n workflows now exist. There's no quick "what workflows exist + are healthy" surface. | low, infra/n8n/workflows/ is greppable. |
None are blocking. Recommendation: ship B3 first (highest leverage), then B1 if Justin wants natural-language email triage.
C: Skills that may be redundant (Justin's call)¶
| # | Skill | Note |
|---|---|---|
| C1 | /create-task vs /spawn-worker |
Different mechanisms (queue file vs claude -p direct), but the user-facing intent is similar. Documenting the distinction in MEMORY.md (already done in reference_task_queue.md) handles this. No change. |
| C2 | /spawn vs /spawn-worker |
Documented well: /spawn = long-lived tmux Remote Control; /spawn-worker = ephemeral pipe mode. Keep both. |
D: Cross-cutting¶
- All 17 skills correctly use
allowed-toolsto scope shell access. No skill is over-permissive. disable-model-invocation: trueoncf-add,decrypt-n8n,deploy-sitecorrectly prevents auto-invocation of destructive/cost-incurring skills.- No skill references TickTick.
- No skill references the old "Manager Opus session" role.
What gets applied in this run¶
- A1 (notify description fix), applied directly.
What needs Justin's call¶
- B1–B4, net-new skills, deferred until Justin signals he wants them.
- C1–C2, no action recommended.