scripts/cmux-diagnostics
scripts/cmux-diagnosticsBrowse 3 files
1,880 tokens
6,045 bytes
Token encoding: o200k_base
Snapshot 6f118af
← Back to SKILL.md
1#!/usr/bin/env bash2set -euo pipefail3 4include_context=05while [[ $# -gt 0 ]]; do6 case "$1" in7 --include-context)8 include_context=19 shift10 ;;11 -h|--help)12 cat <<'EOF'13Usage: cmux-diagnostics [--include-context]14 15Print a read-only, support-safe cmux diagnostics report. By default this avoids16workspace names, cwd paths, hook contents, session JSON, and secrets.17EOF18 exit 019 ;;20 *)21 printf 'cmux-diagnostics: unknown option: %s\n' "$1" >&222 exit 123 ;;24 esac25done26 27section() {28 printf '\n== %s ==\n' "$1"29}30 31safe_path() {32 local path="$1"33 if [[ "$path" == "$HOME" ]]; then34 printf '~'35 elif [[ "$path" == "$HOME"/* ]]; then36 printf '~/%s' "${path#"$HOME"/}"37 else38 printf '%s' "$path"39 fi40}41 42run_status() {43 local label="$1"44 shift45 printf '%s: ' "$label"46 if "$@" >/dev/null 2>&1; then47 printf 'ok\n'48 else49 printf 'failed\n'50 fi51}52 53file_summary() {54 local path="$1"55 if [[ -f "$path" ]]; then56 local bytes modified57 bytes="$(wc -c <"$path" 2>/dev/null | tr -d ' ' || true)"58 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')"59 printf 'present bytes=%s modified=%s\n' "${bytes:-unknown}" "$modified"60 elif [[ -e "$path" ]]; then61 printf 'non-regular\n'62 else63 printf 'missing\n'64 fi65}66 67marker_summary() {68 local path="$1"69 local marker="$2"70 if [[ -f "$path" ]]; then71 if grep -Fq "$marker" "$path" 2>/dev/null; then72 printf 'marker-present\n'73 else74 printf 'marker-missing\n'75 fi76 elif [[ -e "$path" ]]; then77 printf 'non-regular\n'78 else79 printf 'missing\n'80 fi81}82 83script_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"84skill_dir="$(cd -- "$script_dir/.." >/dev/null 2>&1 && pwd)"85skills_root="$(cd -- "$skill_dir/.." >/dev/null 2>&1 && pwd)"86settings_helper="$skills_root/cmux-settings/scripts/cmux-settings"87if [[ ! -x "$settings_helper" && -x "$HOME/.agents/skills/cmux-settings/scripts/cmux-settings" ]]; then88 settings_helper="$HOME/.agents/skills/cmux-settings/scripts/cmux-settings"89elif [[ ! -x "$settings_helper" && -x "$HOME/.codex/skills/cmux-settings/scripts/cmux-settings" ]]; then90 settings_helper="$HOME/.codex/skills/cmux-settings/scripts/cmux-settings"91fi92 93section "cmux diagnostics"94printf 'date: %s\n' "$(date -u '+%Y-%m-%dT%H:%M:%SZ')"95printf 'shell: %s\n' "${SHELL:-unknown}"96printf 'inside_cmux: '97if [[ -n "${CMUX_WORKSPACE_ID:-}" || -n "${CMUX_SURFACE_ID:-}" ]]; then98 printf 'yes\n'99else100 printf 'no\n'101fi102printf 'cmux_workspace_id_set: %s\n' "$([[ -n "${CMUX_WORKSPACE_ID:-}" ]] && printf yes || printf no)"103printf 'cmux_surface_id_set: %s\n' "$([[ -n "${CMUX_SURFACE_ID:-}" ]] && printf yes || printf no)"104if [[ "${CMUX_SOCKET_PATH+x}" == "x" ]]; then105 printf 'cmux_socket_path: %s (from CMUX_SOCKET_PATH)\n' "$(safe_path "$CMUX_SOCKET_PATH")"106elif [[ "${CMUX_SOCKET+x}" == "x" ]]; then107 printf 'cmux_socket_path: %s (from CMUX_SOCKET)\n' "$(safe_path "$CMUX_SOCKET")"108else109 printf 'cmux_socket_path: unset\n'110fi111printf 'cmux_socket_password_set: %s\n' "$([[ -n "${CMUX_SOCKET_PASSWORD:-}" ]] && printf yes || printf no)"112 113section "cli"114if command -v cmux >/dev/null 2>&1; then115 printf 'cmux_path: %s\n' "$(safe_path "$(command -v cmux)")"116 if cmux --version >/dev/null 2>&1; then117 printf 'cmux_version: %s\n' "$(cmux --version 2>/dev/null | head -n 1)"118 else119 printf 'cmux_version: unavailable\n'120 fi121 run_status "cmux_ping" cmux ping122 run_status "cmux_capabilities" cmux capabilities --json123 if [[ "$include_context" -eq 1 ]]; then124 printf 'identify_json:\n'125 cmux identify --json 2>/dev/null || printf ' unavailable\n'126 fi127else128 printf 'cmux_path: missing\n'129fi130 131section "settings"132printf 'cmux_json: '133file_summary "$HOME/.config/cmux/cmux.json"134printf 'legacy_settings_json: '135file_summary "$HOME/.config/cmux/settings.json"136if [[ -x "$settings_helper" ]]; then137 run_status "cmux_settings_validate" "$settings_helper" validate138 printf 'auto_resume_agent_sessions: '139 "$settings_helper" get terminal.autoResumeAgentSessions 2>/dev/null || printf 'default-or-unset\n'140else141 printf 'cmux_settings_helper: missing (%s)\n' "$(safe_path "$settings_helper")"142fi143 144section "hook configs"145declare -a hook_checks=(146 "codex:$HOME/.codex/hooks.json:cmux hooks codex"147 "codex-config:$HOME/.codex/config.toml:codex_hooks"148 "opencode-session:$HOME/.config/opencode/plugins/cmux-session.js:cmux hooks opencode"149 "opencode-feed:$HOME/.config/opencode/plugins/cmux-feed.js:cmux hooks feed --source opencode"150 "pi:$HOME/.pi/agent/extensions/cmux-session.ts:cmux hooks pi"151 "amp:$HOME/.config/amp/plugins/cmux-session.ts:cmux hooks amp"152 "cursor:$HOME/.cursor/hooks.json:cmux hooks cursor"153 "gemini:$HOME/.gemini/settings.json:cmux hooks gemini"154 "rovodev:$HOME/.rovodev/rovodev.yml:cmux hooks rovodev"155 "hermes-agent:$HOME/.hermes/config.yaml:cmux hooks hermes-agent"156 "copilot:$HOME/.copilot/settings.json:cmux hooks copilot"157 "codebuddy:$HOME/.codebuddy/settings.json:cmux hooks codebuddy"158 "factory:$HOME/.factory/settings.json:cmux hooks factory"159 "qoder:$HOME/.qoder/settings.json:cmux hooks qoder"160)161for entry in "${hook_checks[@]}"; do162 IFS=: read -r name path marker <<<"$entry"163 printf '%s: %s ' "$name" "$(safe_path "$path")"164 marker_summary "$path" "$marker"165done166 167section "session stores"168shopt -s nullglob169stores=("$HOME"/.cmuxterm/*-hook-sessions.json)170if [[ "${#stores[@]}" -eq 0 ]]; then171 printf 'session_store_files: none\n'172else173 printf 'session_store_files: %s\n' "${#stores[@]}"174 for path in "${stores[@]}"; do175 printf '%s: ' "$(basename "$path")"176 file_summary "$path"177 done178fi179 180section "agent binaries"181for bin in claude codex opencode pi amp cursor-agent gemini rovo rovodev hermes-agent gh copilot codebuddy droid qodercli; do182 if command -v "$bin" >/dev/null 2>&1; then183 printf '%s: present (%s)\n' "$bin" "$(safe_path "$(command -v "$bin")")"184 else185 printf '%s: missing\n' "$bin"186 fi187done188 