Skip to content
Back to skills

Diagnose

ASecurity

Diagnose the Volley environment in one shot - Codex CLI and its non-interactive mode, the platform terminal, and the per-repo lock state. Use when setup misbehaves or before starting a session in a new repo.

  • 2 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 6, 2026
developmentbash

Works with

  • terminal
  • cli
  • mcp

Security analysis

A92/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro shows the line behind each finding and how to fix it

Scanned October 7, 2026

npx -y skills add Ryan-M-Frank/volley --skill diagnose --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Diagnose?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Diagnose
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/ryan-m-frank-diagnose/badge)](https://www.skillsdirectory.com/skills/ryan-m-frank-diagnose)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: diagnose
description: Diagnose the Volley environment in one shot - Codex CLI and its non-interactive mode, the platform terminal, and the per-repo lock state. Use when setup misbehaves or before starting a session in a new repo.
---

# /volley:diagnose

One-shot diagnosis of whether Volley is wired up correctly here. Run each check, print a `[PASS]`/`[FAIL]`/`[WARN]` line, and end with a remediation list for anything not green.

## Steps for Claude

1. **Codex CLI present.** Run `codex --version`. PASS if it prints a version >= 0.156; FAIL otherwise (remedy: `npm install -g @openai/codex`).

2. **Codex runs non-interactively.** Run `codex exec --help`; PASS if it succeeds, FAIL otherwise (remedy: update Codex with `npm install -g @openai/codex`). Then WARN if any `.mcp.json` in this repo still registers `codex mcp-server` (remedy: remove that entry - Codex 0.156 removed the command and Volley no longer uses MCP). Do not make a model call here.

3. **Platform terminal available.** Detect the OS and check for a usable terminal launcher:
   ```bash
   case "$(uname -s)" in
     Darwin*) command -v osascript >/dev/null && echo "[PASS] macOS terminal (osascript)" || echo "[FAIL] osascript missing" ;;
     Linux*)  { command -v gnome-terminal || command -v kitty || command -v tmux; } >/dev/null \
                && echo "[PASS] Linux terminal (gnome-terminal/kitty/tmux)" \
                || echo "[FAIL] no gnome-terminal/kitty/tmux - install one or use VOLLEY_PLATFORM=tmux" ;;
     MINGW*|MSYS*|CYGWIN*) command -v wt >/dev/null && echo "[PASS] Windows Terminal (wt)" || echo "[FAIL] wt missing - install Windows Terminal" ;;
     *) echo "[WARN] unrecognized OS; set VOLLEY_PLATFORM=tmux for the universal fallback" ;;
   esac
   ```

4. **Plugin assets intact.** Confirm the bundled scripts resolve:
   ```bash
   for f in scripts/lib.sh scripts/codex-exec.sh scripts/spawn-codex.sh scripts/platforms/windows.sh scripts/platforms/macos.sh scripts/platforms/linux.sh scripts/platforms/tmux.sh; do
     [ -f "${CLAUDE_PLUGIN_ROOT}/$f" ] && echo "[PASS] $f" || echo "[FAIL] missing $f"
   done
   ```

5. **Per-repo lock state.** If `.volley/STATE` exists, report it and whether the named process is alive; otherwise note the repo isn't initialized:
   ```bash
   if [ -f .volley/STATE ]; then
     active=$(grep -E '^ACTIVE=' .volley/STATE | cut -d= -f2)
     task=$(grep -E '^TASK=' .volley/STATE | cut -d= -f2)
     pid=$(grep -E '^PID=' .volley/STATE | cut -d= -f2)
     echo "[INFO] lock: ACTIVE=$active TASK=$task PID=$pid"
     if [ -n "$pid" ] && [ "$pid" != "0" ]; then
       kill -0 "$pid" 2>/dev/null && echo "[INFO] named PID $pid is alive" \
         || echo "[WARN] named PID $pid is dead - lock may be stale; run /volley:unlock if it's stuck"
     fi
   else
     echo "[WARN] .volley/ not initialized here - run /volley:setup"
   fi
   ```

6. **Continuity + model config (v0.2).** Non-mutating, and **no model turn unless the user explicitly asks for a live model probe.**
   - **Config parses & validates.** Read `.volley/config.json` (parse yourself - no jq). PASS if valid JSON with a known `version`; WARN if absent (= defaults in effect); FAIL if present but malformed or unknown `version`. Report the resolved review/implementation `model` + `reasoningEffort` (show `inherit` as "Codex default"). Do **not** call a model to check availability here - note that model validity is confirmed by the `/volley:setup` smoke call (or an opt-in `--live` probe).
   - **Repository identity.** Compare `.volley/local.json` `repository` to the live repo:
     ```bash
     . "${CLAUDE_PLUGIN_ROOT}/scripts/lib.sh"
     if [ -f .volley/local.json ]; then
       # extract stored root/remote in-host (JSON), then:
       volley_repo_identity_matches "<stored_root>" "<stored_remote>" \
         && echo "[PASS] repo identity matches live checkout" \
         || echo "[WARN] repo identity mismatch - stored session IDs will be ignored (fresh session + file rehydration)"
     else
       echo "[INFO] no .volley/local.json yet - run /volley:setup"
     fi
     ```
   - **Context files.** For each `context.required` file, PASS if present / FAIL if missing (names the file). For `context.optional`, list present vs skipped.
   - **Saved-session integrity.** If `.volley/local.json` has role thread/session IDs, report them as present (never print secrets); WARN if the file is unreadable/corrupt.
   - **Managed checkpoint.** PASS if `.volley/CHECKPOINT.md` exists and still contains both `volley:managed` markers; WARN otherwise.

7. **Summary.** Print a final `Volley diagnose: N passed, M warnings, K failures` line and, for each FAIL/WARN, the one-line remedy.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.