From ark-skills
Diagnostic check for the ark-skills v2 invariants — routing-destination ecosystems, the 6-skill roster, OKF conventions, GitHub-Issues conventions, and NotebookLM recall
How this skill is triggered — by the user, by Claude, or both
Slash command
/ark-skills:ark-healthThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Run the v2 invariant checks across the Ark ecosystem and produce a scored report with actionable fix instructions. This skill diagnoses and recommends only — all fixes go through `/ark-onboard`.
Run the v2 invariant checks across the Ark ecosystem and produce a scored report with actionable fix instructions. This skill diagnoses and recommends only — all fixes go through /ark-onboard.
ark-skills v2 is two co-equal cores: a workflow consultant (/ark-consult) that routes each task to one of four execution ecosystems, and a conventions layer (/ark-onboard, /ark-health, /ark-update, /vault, /notebooklm-vault) that converges projects onto OKF knowledge bundles + GitHub-Issues task management. The checks below verify both cores are healthy.
This skill is exempt from normal context-discovery. It must work when CLAUDE.md is missing, broken, or incomplete. When CLAUDE.md is absent:
Never abort early. Run all checks regardless of earlier failures.
vault/)Task tracking is GitHub Issues (no task-prefix / counter fields — those were retired with TaskNotes).
Detection is session-capability: read the system-reminder skill list in the current session and match for the listed skill names. Never inspect ~/.claude/plugins/ for plugin presence.
Check 1 — superpowers plugin | Tier: Critical
superpowers:* entry (e.g. superpowers:brainstorming, superpowers:systematic-debugging)/plugin install superpowers@claude-plugins-official (marketplace: anthropics/claude-plugins-official)Check 2 — gstack plugin | Tier: Standard
browse, qa, ship, review, design-review/ark-onboard (installs gstack for claude + codex)Check 3 — mattpocock skills installed | Tier: Standard
disable-model-invocation: true, so they never appear as ambient session triggers):
req=0; for s in to-tickets setup-matt-pocock-skills; do [ -d "$HOME/.claude/skills/$s" ] && req=$((req+1)); done
opt=0; for s in to-spec triage implement; do [ -d "$HOME/.claude/skills/$s" ] && opt=$((opt+1)); done
{ [ "$req" -eq 2 ] && [ "$opt" -ge 2 ]; } && echo "PASS: to-tickets+setup present, $opt/3 optional" || echo "FAIL: req=$req/2 opt=$opt/3"to-tickets + setup-matt-pocock-skills present, plus ≥2 of to-spec/triage/implementnpx skills@latest add mattpocock/skills, then /setup-matt-pocock-skills/to-tickets + /triage issue machinery and mattpocock as a routing destinationCheck 4 — oh-my-claudecode (OMC) | Tier: Standard | Upgrade-style (never fails)
command -v omc OR ~/.claude/plugins/cache/omc exists; ARK_SKIP_OMC=true overrides to skipCheck 5 — exactly 6 skills | Tier: Critical
n=$(find skills -mindepth 1 -maxdepth 1 -type d ! -name shared | wc -l | tr -d ' ')
want="ark-consult ark-health ark-onboard ark-update notebooklm-vault vault"
got=$(find skills -mindepth 1 -maxdepth 1 -type d ! -name shared -exec basename {} \; | sort | tr '\n' ' ')
[ "$n" = "6" ] && echo "PASS: 6 skills ($got)" || echo "FAIL: $n skill dirs — expected 6: $want"
skills/ (ark-consult, ark-health, ark-onboard, ark-update, notebooklm-vault, vault), plus shared/ + AGENTS.mdCheck 6 — plugin manifest freshness | Tier: Standard | Warn-only
rg -q "consultant" .claude-plugin/plugin.json && rg -q "okf" .claude-plugin/plugin.json \
&& echo "PASS: manifest carries the v2 identity (consultant, okf, …)" \
|| echo "WARN: plugin manifest not refreshed to the v2 identity"
.claude-plugin/{plugin,marketplace}.json description/keywords carry the v2 identity (consultant, routing, okf, github-issues, …) and no retired-skill namesskills/)Need the vault root from CLAUDE.md (default vault/). If CLAUDE.md is missing, report "cannot check".
Check 7 — CLAUDE.md exists | Tier: Critical
CLAUDE.md in project rootCheck 8 — Python 3.10+ | Tier: Critical
v=$(python3 --version 2>/dev/null | grep -oE '[0-9]+\.[0-9]+' | head -1)
python3 -c "import sys; sys.exit(0 if sys.version_info>=(3,10) else 1)" 2>/dev/null \
&& echo "PASS: Python $v" || echo "FAIL: need Python >= 3.10 (have '$v')"
brew install [email protected]) — required for the OKF toolingCheck 9 — OKF tooling present | Tier: Critical
d="${VAULT_ROOT:-vault}/_meta/okf"
for f in okf_lint.py okf_cli.py convert_links.py normalize_frontmatter.py; do
[ -f "$d/$f" ] || { echo "FAIL: missing $d/$f"; MISS=1; }
done; [ -z "$MISS" ] && echo "PASS: OKF tooling present"
_meta/okf/ holds okf_lint.py, okf_cli.py, convert_links.py, normalize_frontmatter.py, and _meta/generate-index.py exists/ark-onboard to copy the OKF tooling into the bundleCheck 10 — OKF lint clean | Tier: Critical
python3 "${VAULT_ROOT:-vault}/_meta/okf/okf_lint.py" --quiet; rc=$?
[ "$rc" = "0" ] && echo "PASS: okf_lint 0 errors" || echo "FAIL: okf_lint exit $rc"
okf_lint.py --quiet exits 0 (warnings are allowed; errors are not)description, or a malformed timestamp)Check 11 — okf_version declared | Tier: Critical
grep -q 'okf_version: *"0.1"' "${VAULT_ROOT:-vault}/index.md" \
&& echo "PASS: okf_version 0.1" || echo "FAIL: bundle index.md missing okf_version"
index.md declares okf_version: "0.1"/ark-onboard OKF init or add the frontmatter keyCheck 12 — index fresh | Tier: Standard | Warn-only
index.md exists and no page is newer than itpython3 ${VAULT_ROOT:-vault}/_meta/generate-index.pyindex.md absentCheck 13 — gh CLI installed + authenticated | Tier: Standard
command -v gh >/dev/null 2>&1 && gh auth status >/dev/null 2>&1 \
&& echo "PASS: gh authed" || echo "FAIL: gh missing or not authenticated"
gh and run gh auth loginCheck 14 — label taxonomy present | Tier: Standard
have=$(gh label list --limit 100 2>/dev/null | cut -f1)
for l in needs-triage epic P1 consultant conventions vault onboarding; do
echo "$have" | grep -qx "$l" || { echo "FAIL: missing label '$l'"; MISS=1; }
done; [ -z "$MISS" ] && echo "PASS: triage+type+priority+component families present"
needs-triage…), type (epic/story/task), priority (P1–P3), and component (consultant/conventions/vault/onboarding) labels exist/ark-onboard label bootstrap blockCheck 15 — docs/agents config present | Tier: Standard
for f in issue-tracker triage-labels domain; do
[ -f "docs/agents/$f.md" ] || { echo "FAIL: missing docs/agents/$f.md"; MISS=1; }
done; [ -z "$MISS" ] && echo "PASS: docs/agents present"
docs/agents/{issue-tracker,triage-labels,domain}.md exist (written by /setup-matt-pocock-skills + the ark additions)/setup-matt-pocock-skills on this repoCheck 16 — frozen trackers frozen | Tier: Standard
tn="${VAULT_ROOT:-vault}/TaskNotes"; sl="${VAULT_ROOT:-vault}/Session-Logs"
ok=1
grep -rql "FROZEN" "$tn" 2>/dev/null || { echo "WARN: TaskNotes missing FROZEN banner"; ok=0; }
grep -rql "FROZEN" "$sl" 2>/dev/null || { echo "WARN: Session-Logs missing FROZEN banner"; ok=0; }
[ "$ok" = 1 ] && echo "PASS: legacy trackers frozen, no automation targets them"
TaskNotes/ and Session-Logs/ carry FROZEN banners; no surviving skill/script writes to them (the active work record is GitHub Issues + log.md)/ark-onboard to (re-)apply the freeze bannersCheck 17 — NotebookLM CLI installed | Tier: Full | Upgrade-style
command -v notebooklm >/dev/null 2>&1 && echo "PASS" || echo "UPGRADE: notebooklm not installed"
pipx install notebooklm-cli — unlocks synthesized recall via /notebooklm-vaultCheck 18 — NotebookLM config reachable | Tier: Full | Requires Check 17
{ [ -f .notebooklm/config.json ] || [ -f "${VAULT_ROOT:-vault}/.notebooklm/config.json" ]; } \
&& echo "PASS: config found" || echo "FAIL: no .notebooklm/config.json (project or vault root)"
.notebooklm/config.json present (project root or vault root) with a notebook ID/notebooklm-vault setupCheck 19 — NotebookLM authenticated | Tier: Full | Requires Check 17
notebooklm auth check --test >/dev/null 2>&1 && echo "PASS: authenticated" || echo "FAIL: auth check failed"
notebooklm auth login, then rerun /ark-healthCheck 20 — vault-awareness region + reminder hook | Tier: Standard | Warn-only | Requires Check 7
# (a) managed region present in CLAUDE.md
grep -q 'ark:begin id=vault-awareness' CLAUDE.md 2>/dev/null && b=OK || b=MISSING
# (b) reminder hook installed: script executable AND registered in settings.json Stop
{ [ -x .claude/hooks/ark-vault-reminder-hook.sh ] \
&& grep -q 'ark-vault-reminder-hook.sh' .claude/settings.json 2>/dev/null; } && h=OK || h=MISSING
{ [ "$b" = OK ] && [ "$h" = OK ]; } && echo "PASS" || echo "WARN: block=$b hook=$h"
vault-awareness managed region is in CLAUDE.md and the reminder hook is executable + registered./ark-update (converges the block) and /ark-onboard Block C.2 (installs the hook). Warn-only — does not demote the health tier.skip with "cannot check — CLAUDE.md missing".skip with "requires NotebookLM CLI (check 17)".| Symbol | Outcome | Condition |
|---|---|---|
OK | Pass | Check passed |
!! | Fail | Check failed — has a fix instruction |
~~ | Warning | Non-blocking (Check 6 manifest, Check 12 index staleness, Check 16 banner, Check 20 vault-awareness) |
-- | Available upgrade | Feature not installed, above current tier (Check 4 OMC, Check 17 NotebookLM CLI) |
Assign tier from the highest level where no Critical or Standard check fails. Warn/skip/upgrade never demote tier.
Emit scorecard per the Output Format. Always end with Run /ark-onboard to fix or upgrade.
Ark Health Check -- {project_name}
Ecosystems (consultant routing destinations)
OK superpowers detected
OK gstack detected
!! mattpocock skills -- only 1/5 present
Fix: npx skills@latest add mattpocock/skills && /setup-matt-pocock-skills
-- OMC -- not installed
Unlock: autopilot / ultrawork / team routing
Install: https://github.com/anthropics/oh-my-claudecode
Repo & Skills
OK 6 skills (ark-consult ark-health ark-onboard ark-update notebooklm-vault vault)
OK plugin manifest v2-clean
OKF Conventions
OK CLAUDE.md present
OK Python 3.12 available
OK OKF tooling present
OK okf_lint 0 errors
OK okf_version 0.1 declared
~~ index stale ({N} pages modified since generation)
Refresh: python3 vault/_meta/generate-index.py
GitHub Issues
OK gh authenticated
OK label taxonomy present
OK docs/agents config present
OK legacy trackers frozen
NotebookLM
OK notebooklm CLI installed
OK config reachable
OK authenticated
Score: {tier} tier | {N} fix, {N} warning, {N} upgrades available
Run /ark-onboard to fix or upgrade
Rules:
-- {name} -- cannot check (CLAUDE.md missing)!! → indented Fix: line; ~~ → indented Refresh:/Fix:; -- → indented Unlock: + Install:1 fix, not 1 fixesRun /ark-onboard to fix or upgrade/ark-health diagnoses and recommends only. All fixes go through /ark-onboard./ark-onboard's copy drifts from here, this file wins.~/.claude/plugins/. mattpocock is the exception (its skills are disable-model-invocation, so it is detected on the filesystem).npx claudepluginhub helloworldsungin/ark-skills --plugin ark-skillsCreates, edits, and verifies skills using a test-driven development approach with pressure scenarios and subagents.