Check the forge ecosystem for staleness — installed skills vs source, binary freshness, lib consistency, version drift, submodule pointers, hook config. USE WHEN stale, freshness, out of date, check staleness, need to rebuild, make install needed, system check.
Quick diagnostic that answers: "is everything current, or do I need to make install?"
Checks the staleness vectors across the forge ecosystem and produces a pass/fail summary with actionable fixes.
system-check.sh in this skill directory implements the scripted checks. Run it first:
bash "${FORGE_MODULE_ROOT:-Modules/forge-core}/skills/SystemCheck/system-check.sh"
For per-item breakdown, add --verbose.
Present the output table to the user as-is.
If any check fails, the script prints a Fixes: section. Offer to run the suggested commands.
If the script is unavailable or a check needs manual investigation, use the check procedures below.
Read .claude/skills/.manifest (written by forge install) to determine which module owns each installed skill. For each entry, compare the installed SKILL.md body against its source using shasum -a 256 (strip frontmatter first — forge install merges claude: keys, so frontmatter will differ by design).
Three failure modes:
.manifestFalls back to directory scanning if .manifest is absent.
For each symlink in ~/.local/bin that points into the forge root, find the crate's src/ directory and compare the binary mtime against the newest .rs source file. If any source is newer, the binary is stale.
For each Modules/*/lib submodule, read its HEAD with git -C <lib_dir> rev-parse HEAD and compare across modules. All lib submodules must point at the same canonical commit; more than one unique commit means drift.
For each module, read version from up to three sources and report mismatches within a module:
| Source | How to read |
|--------|-------------|
| module.yaml | awk '/^version:/{print $2; exit}' |
| plugin.json | python3 -c "import json; print(json.load(open('plugin.json'))['version'])" |
| Cargo.toml | awk -F'"' '/^version/{print $2; exit}' |
Compare the parent repo's recorded submodule pointer against each submodule's actual HEAD. A + prefix in git submodule status means the submodule HEAD has moved beyond the recorded pointer. A - means not initialized.
Read .claude/settings.json and verify all expected dispatch events are present:
SessionStart, PreToolUse, PostToolUse, Stop, PreCompact, UserPromptSubmit, SubagentStop, SessionEnd, Notification
For each module, compare the working copy's merge base against its trunk: jj log -r 'heads(::@ & ::main@origin)' in jj repos, git merge-base HEAD origin/main vs git rev-parse origin/main in git repos (after a fetch). A working copy behind main@origin means make install deploys pre-merge content and silently reverts changes that already landed on main: rules a merged PR deleted come back, trimmed files fatten again. Fix: rebase the working copy onto main@origin (resolving conflicts), then reinstall.
| Problem | Fix |
| ------------------------ | --------------------------------------------- |
| Skills stale | make install |
| Binaries stale | make build && make install-binaries |
| Lib drift | Update lib submodules to the canonical commit |
| Version drift | Align versions in the affected module |
| Submodule pointers dirty | Commit parent repo |
| Hook config incomplete | make install-hooks |
shasum -a 256 (macOS compatible), not sha256sumgit -C directly for submodule operations (RTK does not support -C)Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer