cmux-diagnostics

Contributors

GitHub-linked commit authors for this SKILL.md at the saved revision. Co-authors and history before file renames are not included.

File history ↗

Run end-user cmux diagnostics. Use when cmux hooks, notifications, session restore, settings, browser automation, socket access, CLI control, or agent resume behavior is not working, or when the user asks for a cmux health check, doctor report, or support-safe debug summary.

skills/cmux-diagnostics/SKILL.md

Download bundle ↓
main · 6f118af3 bundle filesScanned 2026-09-15

scripts/cmux-diagnostics

1,880 tokens · o200k_base · 6,045 bytes

Source excerpt starting at line 1.
#!/usr/bin/env bashset -euo pipefail include_context=0while [[ $# -gt 0 ]]; do  case "$1" in    --include-context)      include_context=1      shift      ;;    -h|--help)      cat <<'EOF'Usage: cmux-diagnostics [--include-context] Print a read-only, support-safe cmux diagnostics report. By default this avoidsworkspace names, cwd paths, hook contents, session JSON, and secrets.EOF      exit 0      ;;    *)      printf 'cmux-diagnostics: unknown option: %s\n' "$1" >&2      exit 1      ;;  esacdone section() {  printf '\n== %s ==\n' "$1"} safe_path() {  local path="$1"  if [[ "$path" == "$HOME" ]]; then    printf '~'  elif [[ "$path" == "$HOME"/* ]]; then    printf '~/%s' "${path#"$HOME"/}"  else    printf '%s' "$path"  fi} run_status() {  local label="$1"  shift  printf '%s: ' "$label"  if "$@" >/dev/null 2>&1; then    printf 'ok\n'  else    printf 'failed\n'  fi} file_summary() {  local path="$1"  if [[ -f "$path" ]]; then    local bytes modified    bytes="$(wc -c <"$path" 2>/dev/null | tr -d ' ' || true)"    modified="$(stat -f '%Sm' -t '%Y-%m-%d %H:%M:%S %z' "$path" 2>/dev/null || stat -c '%y' "$path" 2>/dev/null || printf 'unknown')"    printf 'present bytes=%s modified=%s\n' "${bytes:-unknown}" "$modified"  elif [[ -e "$path" ]]; then    printf 'non-regular\n'  else    printf 'missing\n'  fi} marker_summary() {  local path="$1"  local marker="$2"  if [[ -f "$path" ]]; then    if grep -Fq "$marker" "$path" 2>/dev/null; then      printf 'marker-present\n'    else      printf 'marker-missing\n'    fi  elif [[ -e "$path" ]]; then    printf 'non-regular\n'  else    printf 'missing\n'  fi} script_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"skill_dir="$(cd -- "$script_dir/.." >/dev/null 2>&1 && pwd)"skills_root="$(cd -- "$skill_dir/.." >/dev/null 2>&1 && pwd)"settings_helper="$skills_root/cmux-settings/scripts/cmux-settings"if [[ ! -x "$settings_helper" && -x "$HOME/.agents/skills/cmux-settings/scripts/cmux-settings" ]]; then  settings_helper="$HOME/.agents/skills/cmux-settings/scripts/cmux-settings"elif [[ ! -x "$settings_helper" && -x "$HOME/.codex/skills/cmux-settings/scripts/cmux-settings" ]]; then  settings_helper="$HOME/.codex/skills/cmux-settings/scripts/cmux-settings"fi section "cmux diagnostics"printf 'date: %s\n' "$(date -u '+%Y-%m-%dT%H:%M:%SZ')"printf 'shell: %s\n' "${SHELL:-unknown}"printf 'inside_cmux: 'if [[ -n "${CMUX_WORKSPACE_ID:-}" || -n "${CMUX_SURFACE_ID:-}" ]]; then  printf 'yes\n'else  printf 'no\n'fiprintf 'cmux_workspace_id_set: %s\n' "$([[ -n "${CMUX_WORKSPACE_ID:-}" ]] && printf yes || printf no)"printf 'cmux_surface_id_set: %s\n' "$([[ -n "${CMUX_SURFACE_ID:-}" ]] && printf yes || printf no)"if [[ "${CMUX_SOCKET_PATH+x}" == "x" ]]; then  printf 'cmux_socket_path: %s (from CMUX_SOCKET_PATH)\n' "$(safe_path "$CMUX_SOCKET_PATH")"elif [[ "${CMUX_SOCKET+x}" == "x" ]]; then  printf 'cmux_socket_path: %s (from CMUX_SOCKET)\n' "$(safe_path "$CMUX_SOCKET")"else  printf 'cmux_socket_path: unset\n'fiprintf 'cmux_socket_password_set: %s\n' "$([[ -n "${CMUX_SOCKET_PASSWORD:-}" ]] && printf yes || printf no)" section "cli"if command -v cmux >/dev/null 2>&1; then  printf 'cmux_path: %s\n' "$(safe_path "$(command -v cmux)")"  if cmux --version >/dev/null 2>&1; then    printf 'cmux_version: %s\n' "$(cmux --version 2>/dev/null | head -n 1)"  else    printf 'cmux_version: unavailable\n'  fi  run_status "cmux_ping" cmux ping  run_status "cmux_capabilities" cmux capabilities --json  if [[ "$include_context" -eq 1 ]]; then    printf 'identify_json:\n'    cmux identify --json 2>/dev/null || printf '  unavailable\n'  fielse  printf 'cmux_path: missing\n'fi section "settings"printf 'cmux_json: 'file_summary "$HOME/.config/cmux/cmux.json"printf 'legacy_settings_json: 'file_summary "$HOME/.config/cmux/settings.json"if [[ -x "$settings_helper" ]]; then  run_status "cmux_settings_validate" "$settings_helper" validate  printf 'auto_resume_agent_sessions: '  "$settings_helper" get terminal.autoResumeAgentSessions 2>/dev/null || printf 'default-or-unset\n'else  printf 'cmux_settings_helper: missing (%s)\n' "$(safe_path "$settings_helper")"fi section "hook configs"declare -a hook_checks=(  "codex:$HOME/.codex/hooks.json:cmux hooks codex"  "codex-config:$HOME/.codex/config.toml:codex_hooks"  "opencode-session:$HOME/.config/opencode/plugins/cmux-session.js:cmux hooks opencode"  "opencode-feed:$HOME/.config/opencode/plugins/cmux-feed.js:cmux hooks feed --source opencode"  "pi:$HOME/.pi/agent/extensions/cmux-session.ts:cmux hooks pi"  "amp:$HOME/.config/amp/plugins/cmux-session.ts:cmux hooks amp"  "cursor:$HOME/.cursor/hooks.json:cmux hooks cursor"  "gemini:$HOME/.gemini/settings.json:cmux hooks gemini"  "rovodev:$HOME/.rovodev/rovodev.yml:cmux hooks rovodev"  "hermes-agent:$HOME/.hermes/config.yaml:cmux hooks hermes-agent"  "copilot:$HOME/.copilot/settings.json:cmux hooks copilot"  "codebuddy:$HOME/.codebuddy/settings.json:cmux hooks codebuddy"  "factory:$HOME/.factory/settings.json:cmux hooks factory"  "qoder:$HOME/.qoder/settings.json:cmux hooks qoder")for entry in "${hook_checks[@]}"; do  IFS=: read -r name path marker <<<"$entry"  printf '%s: %s ' "$name" "$(safe_path "$path")"  marker_summary "$path" "$marker"done section "session stores"shopt -s nullglobstores=("$HOME"/.cmuxterm/*-hook-sessions.json)if [[ "${#stores[@]}" -eq 0 ]]; then  printf 'session_store_files: none\n'else  printf 'session_store_files: %s\n' "${#stores[@]}"  for path in "${stores[@]}"; do    printf '%s: ' "$(basename "$path")"    file_summary "$path"  donefi section "agent binaries"for bin in claude codex opencode pi amp cursor-agent gemini rovo rovodev hermes-agent gh copilot codebuddy droid qodercli; do  if command -v "$bin" >/dev/null 2>&1; then    printf '%s: present (%s)\n' "$bin" "$(safe_path "$(command -v "$bin")")"  else    printf '%s: missing\n' "$bin"  fidone