PR Babysitter
openinterpreter/openinterpreter
Watches an open GitHub pull request until it merges, handling review comments, diagnosing CI failures and retrying flaky checks along the way.
Claude Code config health check + plugin sync. An agent skill from sd0xdev/sd0x-harness.
$ npx skills add sd0xdev/sd0x-harness --skill claude-health -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install sd0xdev/sd0x-harness claude-health --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/sd0xdev/sd0x-harness.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/claude-health .claude/skills/claude-health && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "claude-health" agent skill from https://github.com/sd0xdev/sd0x-harness/tree/main/skills/claude-health into .claude/skills/claude-health/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "claude-health", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/sd0xdev/sd0x-harness/tree/main/skills/claude-healthType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add sd0xdev/sd0x-harness --skill claude-health -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install sd0xdev/sd0x-harness claude-health --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sd0xdev/sd0x-harness.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/claude-health .agents/skills/claude-health && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "claude-health" agent skill from https://github.com/sd0xdev/sd0x-harness/tree/main/skills/claude-health into .agents/skills/claude-health/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "claude-health", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add sd0xdev/sd0x-harness --skill claude-health -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install sd0xdev/sd0x-harness claude-health --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sd0xdev/sd0x-harness.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/claude-health .cursor/skills/claude-health && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "claude-health" agent skill from https://github.com/sd0xdev/sd0x-harness/tree/main/skills/claude-health into .cursor/skills/claude-health/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "claude-health", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/sd0xdev/sd0x-harness.git --path skills/claude-health--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add sd0xdev/sd0x-harness --skill claude-health -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install sd0xdev/sd0x-harness claude-health --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sd0xdev/sd0x-harness.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/claude-health .gemini/skills/claude-health && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "claude-health" agent skill from https://github.com/sd0xdev/sd0x-harness/tree/main/skills/claude-health into .gemini/skills/claude-health/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "claude-health", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install sd0xdev/sd0x-harness claude-healthInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add sd0xdev/sd0x-harness --skill claude-health -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/sd0xdev/sd0x-harness.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/claude-health .github/skills/claude-health && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "claude-health" agent skill from https://github.com/sd0xdev/sd0x-harness/tree/main/skills/claude-health into .github/skills/claude-health/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "claude-health", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add sd0xdev/sd0x-harness --skill claude-health -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install sd0xdev/sd0x-harness claude-health --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sd0xdev/sd0x-harness.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/claude-health .opencode/skills/claude-health && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "claude-health" agent skill from https://github.com/sd0xdev/sd0x-harness/tree/main/skills/claude-health into .opencode/skills/claude-health/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "claude-health", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
claude-healthClaude Code config health check + plugin sync. An agent skill from sd0xdev/sd0x-harness.
Claude Health is an agent skill from sd0xdev/sd0x-harness. Claude Code config health check + plugin sync. Use when: auditing .claude/ structure, checking naming, verifying hook setup, detecting plugin version drift, syncing installed assets. Not for: skill quality (use skill-health-check), code review (use codex-code-review). Output: health report + fix recommendations.
Its SKILL.md is about 6.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/best-practices.md`).
It sits in Development, covering Code review. The repository describes itself as: The harness layer for Claude Code — a reference implementation of harness engineering with hook-enforced dual review, state-machine gates that survive context compaction, and… The licence is MIT.
Read from SKILL.md and the folder at commit a4d4bc1. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
ReadGrepGlobBash(ls:*)Bash(find:*)Bash(wc:*)Bash(du:*)Bash(rm:*)Bash(git:*)Bash(/bin/bash:*)…and 1 more on the same allowed-tools line.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitnodebashFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Claude Health loads about 6.2k tokens when it runs, and up to ~6.7k if it reads all its reference files. Until then it costs about 82 tokens; SKILL.md has 1,918 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from sd0xdev/sd0x-harness at commit a4d4bc1, republished under its MIT licence (© sd0xdev). 1,918 words, ~6,182 tokens.
.claude/skills/claude-health/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub./codex-review-fast)/codex-review-doc)/codex-security)| Argument | Description |
|---|---|
--scope hygiene | Only run C1-C7 hygiene checks |
--scope sync | Only run S1-S3 sync checks and the S4 plugin-copies inventory |
--scope budget | Only run the Instruction Budget Module (B1-B3) |
--scope all | Run every module — hygiene, sync and budget (default) |
[--scope] → Select modules → Scan → Classify → Report → Fix suggestions
│ │
┌───────┴───────┐ P0/P1/P2
▼ ▼ + fix commands
Hygiene (C1-C7) Sync (S1-S3)| # | Check | Method | Criteria |
|---|---|---|---|
| 1 | Junk files | find .claude/ -name ".DS_Store" -o -name "*.zip" -o -name ".tmp*" | Any exists → P1 |
| 2 | .gitignore exists | ls .claude/.gitignore | Missing → P1 |
| 3 | .gitignore completeness | Read .claude/.gitignore, compare required items | Missing required → P2 |
| 4 | Naming consistency | Scan all skills/*/ for reference vs references | Inconsistent → P2 |
| 5 | README count sync | Count actual vs README description | Mismatch → P2 |
| 6 | Command-Skill pairing | Each core skill should have corresponding command | Missing → P1 |
| 7 | Cache size | du -sh .claude/cache/ | > 50M → P2 |
find .claude/ -name ".DS_Store" -o -name "*.zip" -o -name ".tmp*" 2>/dev/nullls .claude/.gitignore 2>/dev/null || echo "MISSING"Missing → P1. If exists, read content and compare required items:
| Required Item | Reason |
|---|---|
.DS_Store | macOS generates continuously |
settings.local.json | Personal config |
cache/ | Runtime cache |
.tmp* | Temp files |
*.tmp | Temp files (suffix variant) |
*.zip | Backup archives |
Missing any → P2
# Scan all skill subdirectories
for dir in .claude/skills/*/; do
if [ -d "${dir}reference" ]; then echo "INCONSISTENT: ${dir}reference"; fi
doneHas reference/ (singular) → P2, suggest renaming to references/
# Count actual items
ls .claude/commands/ 2>/dev/null | wc -l
ls .claude/skills/ 2>/dev/null | wc -l
ls .claude/agents/ 2>/dev/null | wc -l
ls .claude/rules/ 2>/dev/null | wc -l
ls .claude/hooks/*.sh 2>/dev/null | wc -lExtract counts from README.md, compare. Mismatch → P2
Scan all skills/*/SKILL.md, exclude these types, then check for corresponding command:
| Exclude Type | Examples | Reason |
|---|---|---|
| Domain KB | portfolio, aum | Referenced by other skills, no standalone entry |
| External | agent-browser | Not maintained by this project |
Remaining skills without command → P1
du -sh .claude/cache/ 2>/dev/nullOnly runs when
--scope syncor--scope all(default).
| # | Check | Method | Criteria |
|---|---|---|---|
| S1.1 | Manifest exists | Read .sd0x/install-state.json | Missing → P1 |
| S1.2 | Manifest parseable | JSON.parse | Parse error → P1 |
| S1.3 | schema_version current | == 1 | Mismatch → P2 |
| S1.4 | plugin_version matches | manifest vs .claude-plugin/plugin.json or package.json | Mismatch → P1 |
| S1.5 | Manifest completeness | Has rules + hook_scripts + scripts keys | Missing key → P2 (MANIFEST_GAP) |
Plugin version resolution (priority order):
.claude-plugin/plugin.json → package.json → "unknown"Plugin source location (same as /install-rules Phase 1):
Glob: ~/.claude/plugins/**/sd0x-dev-flow/rules/auto-loop.md
Glob: ${REPO_ROOT}/node_modules/sd0x-dev-flow/rules/auto-loop.md
Fallback: @rules/auto-loop.md (plugin-relative)For each managed component (rules, hooks, scripts), compute 3 hashes and classify:
manifest_hash = manifest[category][filename].hash # null if missing
local_hash = git hash-object --no-filters <local-path> # null if file missing
plugin_hash = git hash-object --no-filters <plugin-path> # source of truthClassification table (read-only diagnostic; maps to install-rules states for delegation):
| Doctor State | Condition | Severity | install-rules Equivalent |
|---|---|---|---|
OK | local == manifest == plugin | ✅ | SKIP |
MISSING | local_hash is null, plugin exists | P1 | FRESH_INSTALL |
OUTDATED | local == manifest, plugin != manifest | P1 | AUTO_UPDATE |
LOCAL_MODIFIED | local != manifest, plugin == manifest | ✅ | KEEP_LOCAL |
CONFLICT | local != manifest, plugin != manifest | P2 | CONFLICT |
LEGACY | manifest_hash is null, local exists | P2 | LEGACY |
MANIFEST_GAP | manifest category key missing | P2 | N/A |
TOMBSTONED | manifest deleted: true, local missing | ✅ | SKIP_DELETED |
RETIRED | name on /install-rules' retired list, plugin file absent, local exists | P2 | Retired (remove when unmodified, keep when modified) |
Managed inventory (hardcoded):
| Category | Local Path | Plugin Source | Files |
|---|---|---|---|
| Rules | .claude/rules/*.md | rules/*.md | auto-loop.md, codex-invocation.md, testing.md, security.md, git-workflow.md, logging.md, docs-writing.md, docs-numbering.md, self-improvement.md, context-management.md, discretion.md, scope-discipline.md, override-contract.md |
| Hooks | .claude/hooks/*.sh | hooks/*.sh | pre-edit-guard.sh, pre-bash-codex-launch-guard.sh, post-edit-format.sh, post-skill-auto-loop.sh, post-compact-auto-loop.sh, stop-guard.sh, user-prompt-review-guard.sh |
| Retired rules | .claude/rules/*.md | — (no longer shipped) | Every name on /install-rules' Retired table — today fix-all-issues.md, framework.md. Classified RETIRED when the local file exists, TOMBSTONED when the manifest marks it deleted, and nothing when neither |
| Scripts | .claude/scripts/ | scripts/ | precommit-runner.js, verify-runner.js, review-state.js, dep-audit.sh, commit-msg-guard.sh, pre-push-gate.sh, protected-branches.sh, lib/utils.js, lib/tree-digest.js |
7 checks for project override files (e.g., auto-loop-project.md):
| # | Check | Severity | Detection | Recommendation |
|---|---|---|---|---|
| 1 | Override drift | P2 | based_on hash comment in project file vs the hash of the base file that comment names (derived, never hard-coded — auto-loop-project.md, testing-project.md and git-workflow-project.md all ship) — only when the override file has active content; a scaffold with every section still commented out has no overrides to review, so drift is not reported | "Base <rule> updated since override authored; review your overrides" |
| 2 | Policy contradiction | P1 | An overridden section omits a required check command that the same section of the base rule contains | "Override drops a required check command its base section carries" |
| 3 | Missing reference or base | P1 | For each shipped override file (auto-loop-project.md, testing-project.md, git-workflow-project.md): .claude/CLAUDE.md has @rules/<file> but the file is missing, OR the file exists but is not referenced (by @rules/<file>, or — for a template carrying paths: frontmatter — by a plain rules/<file> mention; an @ import of a path-scoped template is reported P2 instead, because it loads the file at launch and defeats the scoping), OR the file exists but the base rule its Based on: comment names is missing from .claude/rules/ | /install-rules to recreate the missing file or base, or add the reference |
| 4 | Wrong-layer edit | P2 | Base auto-loop.md has LOCAL_MODIFIED, CONFLICT, or LEGACY state while project override exists | "Move customization to auto-loop-project.md" |
| 5 | Duplicate heading | P2 | Override file has multiple active ## <heading> with same text | "Keep one, remove duplicates. Last occurrence takes effect." |
| 6 | Legacy precedence header | P2 | Precedence declaration exists only inside an HTML comment (<!-- Precedence: present, no live Precedence: line before the first ##) — HTML comments are stripped from model context (R8), so the declaration never reaches its only reader | "Header predates the live-precedence contract; migrate the precedence line to live text by hand or regenerate via /install-rules --customize <rule> --reset. This check is read-only — it never edits the user-owned file" |
| 7 | Git override conflict | P1 / P2 | git-workflow-project.md only. P1 whenever the file exists, active content or not — two empty duplicate ## Protected Branches headings are already a parse error: when /bin/bash -p -- <resolver> --root <repo> --list exits 2, where <resolver> is the plugin install's copy — ${CLAUDE_PLUGIN_ROOT}/scripts/protected-branches.sh when that variable is set and its real path lies outside the audited repository, else ~/.claude/plugins/**/sd0x-dev-flow/scripts/protected-branches.sh (one match) — never a copy inside the audited repository (.claude/scripts/, scripts/, node_modules/), because this check is read-only and the repository controls those files; no plugin install found → execute nothing and report check #7 as not run (P2), while S2 still classifies the local copy by hash — a removal attempt (- !main), a malformed bullet or a duplicate heading in ## Protected Branches, which makes every branch read as protected; an omitted default is never reported, since the set only widens. P2, active content only, when a ## Deploy Workflow line matches neither merge <source> -> <target> [--no-ff|--ff-only] nor run <path> [args…] with every token in ^[A-Za-z0-9._/@:=+,-]+$, or when ## Offer Mode / ## Run Steps carries a value outside on|commit-only|off / print|execute | "Fix the named line; until then the protected set reads every branch as protected / the deploy block is ignored / the setting keeps its default" |
Policy contradiction detection: For each ## <heading> section the override restates, extract the backticked check commands (/codex-review-fast, /codex-review-doc, /precommit) from the same-heading section of the base auto-loop.md and require the restated section to keep every one of them. A verbatim copy therefore never flags; only a restatement that drops a command its base section carries is P1. (The base's Auto-Trigger table was retired by R3 — code/doc routing now lives in the unheaded terminal-invariant paragraph, which the exact-##-heading override mechanism cannot restate, so routing itself is not overridable and is out of this check's scope.) No restated section → check passes vacuously.
Override drift detection: First check whether the project file has active content. Two forms count, and the distinction matters because the scaffold ships its ## headings live: a non-empty, non-comment body line under any heading, or a heading that carries its own value (## Plan Review: enabled, ## Git Memory: enabled — for these settings the heading is the value, so there is no body to look for). A bare scaffold heading with nothing but comments beneath it is an empty slot, not an override. The live Precedence: header is preamble material and never activation. A scaffold whose sections are all still commented out is skipped: drift means "the base changed since you wrote your overrides", and there are none, so reporting it on a fresh install is a false positive rather than a finding. Otherwise read the <!-- Based on: <base>.md @ <hash> --> comment and derive the base file from the comment's own filename — git hash-object --no-filters .claude/rules/<base>.md | cut -c1-7. The base must not be hard-coded: R8 distributes testing-project.md alongside auto-loop-project.md, so a fixed auto-loop.md comparand would check a testing override's hash against the wrong rule and report drift that does not exist. If the derived base file is missing, drift is undefined rather than zero — report it through check #3's missing base branch (P1) and do not emit a drift finding. Both checks must cover every shipped override file, not just auto-loop-project.md: an active testing-project.md whose testing.md has been deleted would otherwise fall through both. If the hashes differ, the base has been updated since the override was authored. Uses blob hash for content-level comparison; accepts legacy commit-style hashes (any 7+ hex chars) during backward-compat transition.
Check both settings.json and settings.local.json (precedence: settings.local.json > settings.json). A hook entry in either file satisfies the integrity check.
| # | Check | Method | Criteria |
|---|---|---|---|
| S3.1 | Legacy hook paths | Grep both settings files for bare .claude/hooks/ without $CLAUDE_PROJECT_DIR | Found → P2 |
| S3.2 | Retired guard-mode setting | Read env.STOP_GUARD_MODE (and legacy hooks_config.stop_guard_mode) from either settings file | Found in either → P2 (retired: the Stop hook is reminder-only since hook-lightweighting — the setting is dead config, recommend removing it). Absent → ✅ |
| S3.3 | Hook entry integrity | Each installed hook script has matching entry in either settings file | Missing from both → P1 |
| S3.4 | Orphan hook entries | Either settings file references script that doesn't exist on disk | Orphan → P2 |
Settings file precedence: settings.local.json overrides settings.json at runtime. When delegating S3 fixes, use /install-hooks --local if the issue is in settings.local.json.
Legacy path detection:
Grep for: "\.claude/hooks/[^"]+\.sh" (without leading "$CLAUDE_PROJECT_DIR")
Applied to both: settings.json and settings.local.jsonOnly applies when
--fix-safeor--fixis specified alongside sync scope.
| Tier | Flag | Description |
|---|---|---|
| Report | (default) | Diagnosis only — output actionable recommendations |
| Safe | --fix-safe | Auto-fix P1 hygiene + safe sync fixes |
| Guided | --fix | Auto-fix P1 hygiene + guided sync remediation (interactive) |
Category-specific safe fix delegation:
| Category | MISSING | OUTDATED | CONFLICT/LEGACY |
|---|---|---|---|
| Rules | /install-rules <names> | /install-rules <names> (smart merge AUTO_UPDATE) | Skip (report only) |
| Hooks | /install-hooks <names> | Report only + suggest /install-hooks <names> --force | Skip (report only) |
| Scripts | /install-scripts <names> | Report only + suggest /install-scripts <names> --force | Skip (report only) |
Why hooks/scripts OUTDATED is report-only in safe tier:
/install-hooksand/install-scriptsuse skip/force semantics (no manifest-aware smart merge). Only/install-ruleshas 7-state classification for safe auto-update.
S3 settings fix delegation: All settings mutations delegate to /install-hooks (sync module never writes JSON directly).
--fix tier: Delegates all actionable states (including CONFLICT, LEGACY) to /install-* commands which handle interactive resolution.
Argument conflict: --fix and --fix-safe are mutually exclusive. If both specified, error.
Claude Code adds up every always-loaded instruction file at launch and warns when the sum passes a
total limit. The check reproduces that accounting (2.1.281) so the user learns it here first, with
the plugin's share separated out. Runs under --scope budget and --scope all (the default), never
under --scope hygiene or --scope sync. The script is the plugin install's copy — $CLAUDE_PLUGIN_ROOT
when its real path lies outside the audited repository — never a copy inside the audited
repository (.claude/scripts/, scripts/), because this check is read-only and the repository
controls those files. No plugin install found → skip the module with a note:
REPO_ROOT=$(git rev-parse --show-toplevel) || { echo "instruction budget: skipped — not in a git repository"; exit 0; }
PR="${CLAUDE_PLUGIN_ROOT:-}"
case "$(cd "$PR" 2>/dev/null && pwd -P)/" in "$(cd "$REPO_ROOT" && pwd -P)/"*|/) PR="" ;; esac
[ -n "$PR" ] && [ -r "$PR/scripts/instruction-budget.js" ] \
&& node "$PR/scripts/instruction-budget.js" --root "$REPO_ROOT" --plugin-root "$PR" \
|| echo "instruction budget: skipped — no plugin install outside this repository"| # | Check | Severity | Recommendation |
|---|---|---|---|
| B1 | Always-loaded total over the limit (total = max(120000, per-file); pass --per-file for the model in use — the default is the 150,000 observed on 2.1.281) | P2 | Move a rule on demand (paths: frontmatter) or trim it; the three largest files are listed |
| B2 | A file over the per-file limit | P2 | Claude Code warns on it alone and leaves it out of the total; split or trim it |
| B3 | A lessons, archive, log or history file in .claude/rules/ | P2 | Move it out of rules/ — the lessons log lives at .claude/sd0x-dev-flow-lessons.md — or give it paths: frontmatter |
The script is read-only; it never edits or moves a file. A missing script skips the module with a note rather than guessing a total.
Runs with the Sync module (--scope sync and --scope all). Report-only: it lists where copies of
this plugin's content come from, so a stale or second copy is seen before it is mistaken for the
plugin's current text. It never deletes, moves or edits a copy.
| Origin | Where | Version read from |
|---|---|---|
| Local install | .claude/rules/, .claude/hooks/, .claude/scripts/ | .sd0x/install-state.json plugin_version (S1) |
| Marketplace plugin | Every ~/.claude/plugins/**/sd0x-dev-flow/**/.claude-plugin/plugin.json whose name is sd0x-dev-flow — the versioned cache (cache/<marketplace>/sd0x-dev-flow/<version>/) and the marketplace checkout both match | Each match's version; several matches are listed as found, never collapsed to one |
| claude.ai synced skills | ~/.claude/skills/synced/ (Claude Code 2.1.273 and later) | None — a synced skill carries no plugin version; list each directory named like a skill this plugin ships |
| # | Check | Severity |
|---|---|---|
| S4.1 | Marketplace copies carry different versions | P2 — the stale copies are the host's cache, cleared through /plugin; local-install drift is S1.4's finding, reported there once and never re-graded here |
| S4.2 | A synced skill has the same name as a plugin skill | P2 — two skills of one name are offered; the plugin's runs as /sd0x-dev-flow:<name>. Rename or turn off the copy on claude.ai: sync overwrites a local edit |
| S4.3 | An origin cannot be read | Reported as not checked, never as absent |
Claude Code 2.1.283 and later audit instruction files for outdated or conflicting content with
/doctor prompt-audit [path] (alias /checkup prompt-audit). It covers CLAUDE.md,
CLAUDE.local.md and AGENTS.md plus the rules and skills under .claude/ and ~/.claude/,
reports findings with proposed edits, and changes nothing until asked. This skill does not run it:
it is the host's command, and the report names it as the manual next step. Its findings on this
plugin's content are handled by owner:
| Finding on | Handling |
|---|---|
.claude/rules/*.md, .claude/hooks/ or .claude/scripts/ installed by this plugin | Report only. Fix it upstream, or customize through a *-project.md override; S2 detects a local edit on every later run and classifies it by its hash table (LOCAL_MODIFIED, CONFLICT or LEGACY) |
Anchor text — the Anchor Register in rules/discretion.md, or the Anchors section of the generated AGENTS.md | Rejected. The plugin pins that text byte-for-byte and /codex-setup sync regenerates the AGENTS.md Anchors from rules/, so an edit there is a spec change for the maintainer, never an audit fix |
*-project.md overrides and the project's own CLAUDE.md | The user's call — these files are user-owned |
# .claude/ Health Check Report
## Hygiene Summary (C1-C7)
| Item | Status | Notes |
|------|--------|-------|
| Junk files | ✅/⛔ | ... |
| .gitignore | ✅/⛔ | ... |
| Naming consistency | ✅/⛔ | ... |
| README count | ✅/⛔ | ... |
| Command-Skill | ✅/⛔ | ... |
| Cache size | ✅/⛔ | ... |
## Sync Summary (S1-S3)
### S1: Version
| Check | Status | Detail |
|-------|--------|--------|
| Manifest | ✅/⛔ | Found / Missing |
| Plugin version | ✅/⛔ | 2.0.3 == 2.0.3 / 1.8.12 → 2.0.3 |
| Manifest keys | ✅/⛔ | Complete / Missing: hook_scripts, scripts |
### S2: Component Status
| File | Category | Status | Action |
|------|----------|--------|--------|
| auto-loop.md | Rules | OUTDATED | `/install-rules auto-loop` |
| security.md | Rules | OK | — |
| stop-guard.sh | Hooks | MISSING | `/install-hooks stop-guard` |
| ... | ... | ... | ... |
### S3: Settings Compatibility
| Check | Status | Detail |
|-------|--------|--------|
| Hook paths | ✅/⛔ | Modern / Legacy found |
| Retired guard mode | ✅/⚠️ | absent / STOP_GUARD_MODE found (dead config) |
| Entry integrity | ✅/⛔ | All matched / N missing |
| Orphan entries | ✅/⛔ | None / N orphans |
## Budget Summary (B1-B3)
| Check | Status | Detail |
|-------|--------|--------|
| B1 Total | ✅/⚠️ | 89,472 / 150,000 chars; plugin share 89,472 |
| B2 Per-file | ✅/⚠️ | None over / .claude/rules/big.md (152,000) |
| B3 Lessons in rules/ | ✅/⚠️ | None / .claude/rules/lessons.md → move to .claude/sd0x-dev-flow-lessons.md |
## Plugin Copies (S4)
| Origin | Version | Note |
|--------|---------|------|
| Local install | 5.0.0 | from `.sd0x/install-state.json` |
| Marketplace plugin | 5.0.0 / not checked | |
| claude.ai synced skills | — | names shared with plugin skills, or none |
Next step (manual): `/doctor prompt-audit` — findings on plugin-shipped content are report-only.
## Statistics
| Category | Count |
|----------|-------|
| Commands | N |
| Skills | N |
| Rules | N (installed) / N (managed) |
| Hooks | N |
## Issues
### P1
- [Issue] → [Fix recommendation / command]
### P2
- [Issue] → [Fix recommendation]
## Gate
✅ All Pass / ⛔ N issues need fixingbudget or all)--all)references/best-practices.md — Best practices for .claude/ directory structureInput: /claude-health
Action: Scan hygiene (7 items) + sync (S1-S3) → Generate consolidated report
Input: /claude-health --scope sync
Action: Scan S1-S3 only → Report version drift + component status
Input: /claude-health --fix-safe
Action: Scan all → Auto-fix safe items → Delegate to /install-* → Report
Input: Is my plugin up to date?
Action: Trigger sync check → Report version + component drift© sd0xdev, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file (references) in skills/claude-health of sd0xdev/sd0x-harness.
Open the folder on GitHubat commit a4d4bc1
Claude Health next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Claude Health this skillsd0xdev/sd0x-harness | 192 | — | ~6.2k | Automated safety check: Pass | MIT | |
| PR Babysitteropeninterpreter/openinterpreter | 69k | 3 repos | ~4.2k | Automated safety check: Pass | Apache-2.0 | |
| Code Review ChecklistshareAI-lab/learn-claude-code | 78k | 4 repos | ~1.1k | Automated safety check: Pass | MIT | |
| Backend Code Reviewlangflow-ai/langflow | 155k | — | ~3.5k | Automated safety check: Notes | MIT | |
| Mole Bug Patternstw93/Mole | 70k | — | ~2k | Automated safety check: Pass | GPL-3.0 | |
| Backend Code Reviewlanggenius/dify | 158k | — | ~676 | Automated safety check: Pass | Custom licence |
openinterpreter/openinterpreter
Watches an open GitHub pull request until it merges, handling review comments, diagnosing CI failures and retrying flaky checks along the way.
shareAI-lab/learn-claude-code
Reviews code against a five-part checklist covering security, correctness, performance, maintainability and testing, and reports findings in a fixed format.
langflow-ai/langflow
Review backend code for quality, security, maintainability, and best practices based on established checklist rules.
tw93/Mole
A catalog of recurring bug shapes in the Mole Mac cleaner, used to review safety-sensitive diffs for deletion safety, unbounded commands, shell traps and weak tests.
langgenius/dify
Reviews backend code under api/ for concrete, reproducible defects, routes to rule packs for architecture, schema, repositories and SQLAlchemy, and ranks findings from P0 to P3.
woocommerce/woocommerce
Reviews WooCommerce code changes against the project's standards, flagging backend PHP architecture, naming, documentation, data integrity and testing violations.
sd0xdev/sd0x-harness
Write an Architecture Decision Record (ADR) for a feature — Context / Decision / Status / Consequences / Alternatives, filed as docs/features/<feature/adr-<NNN-<title.md with a 3-digit zero-padded…
sd0xdev/sd0x-harness
Load GitHub PR review comments into AI session — analyze, triage, plan.
sd0xdev/sd0x-harness
Change-aware next step advisor. An agent skill from sd0xdev/sd0x-harness.
sd0xdev/sd0x-harness
Obsidian vault integration via official CLI. An agent skill from sd0xdev/sd0x-harness.
sd0xdev/sd0x-harness
Agent-driven workflow orchestration (v1 report-only). An agent skill from sd0xdev/sd0x-harness.
sd0xdev/sd0x-harness
Post friendly review comments to a GitHub PR — prepare locally, preview, then submit as atomic review.
Categories
Claude Code config health check + plugin sync. An agent skill from sd0xdev/sd0x-harness. Claude Health is an agent skill from sd0xdev/sd0x-harness. Claude Code config health check + plugin sync.
Claude Health fits situations like: : auditing .claude/ structure; checking naming; verifying hook setup; detecting plugin version drift.
Run `npx skills add sd0xdev/sd0x-harness --skill claude-health -a claude-code`. Or copy the skill folder (skills/claude-health in sd0xdev/sd0x-harness) into .claude/skills/claude-health in your project. Claude Code loads it when a task matches its description.
Run `npx skills add sd0xdev/sd0x-harness --skill claude-health -a codex`. Or copy the skill folder (skills/claude-health in sd0xdev/sd0x-harness) into .agents/skills/claude-health in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add sd0xdev/sd0x-harness --skill claude-health -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/claude-health, .gemini/skills/claude-health, .github/skills/claude-health and .opencode/skills/claude-health in your project.
Going by SKILL.md and its folder, Claude Health needs the command-line tools its instructions call (git, node and bash). Its frontmatter pre-approves these tools: Read, Grep, Glob, Bash(ls:*), Bash(find:*), Bash(wc:*), Bash(du:*), Bash(rm:*), Bash(git:*), Bash(/bin/bash:*), Bash(node:*).
SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Claude Health is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 6.2k tokens (SKILL.md is roughly 25k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 548 tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Claude Health: PR Babysitter (openinterpreter/openinterpreter, 69k stars), Code Review Checklist (shareAI-lab/learn-claude-code, 78k stars), Backend Code Review (langflow-ai/langflow, 155k stars) and Mole Bug Patterns (tw93/Mole, 70k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
sd0xdev (a GitHub user) maintains it in sd0xdev/sd0x-harness, which has 192 GitHub stars. The repository holds 89 skills in this directory. The repository was last updated on October 8, 2026.
Source: sd0xdev/sd0x-harness on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.