$npx -y skills add Soul-Brews-Studio/arra-oracle-skills-cli --skill fleetDeep fleet census — discover all oracles across all nodes, collect versions, skills, status. Use when user says "fleet", "census", "all oracles", "fleet status", or wants a complete picture of the oracle network.
| 1 | # /fleet — Deep Fleet Census |
| 2 | |
| 3 | > Count the stars. Know the constellation. The fleet is one body, many hands. |
| 4 | |
| 5 | Discover all oracles across all nodes, collect versions, installed skills, last activity, and health status. The complete picture of the oracle network. |
| 6 | |
| 7 | ## Usage |
| 8 | |
| 9 | ``` |
| 10 | /fleet # Standard census — nodes + oracles + status |
| 11 | /fleet --quick # Fast — just count nodes and oracles from contacts |
| 12 | /fleet --deep # Deep — ping all, collect versions + skills + activity |
| 13 | /fleet --diff # Compare — what changed since last census |
| 14 | /fleet --map # Visual — show fleet topology |
| 15 | ``` |
| 16 | |
| 17 | --- |
| 18 | |
| 19 | ## Step 0: Detect & Load |
| 20 | |
| 21 | ```bash |
| 22 | date "+🕐 %H:%M %Z (%A %d %B %Y)" && ORACLE_ROOT=$(git rev-parse --show-toplevel 2>/dev/null) |
| 23 | if [ -n "$ORACLE_ROOT" ] && [ -f "$ORACLE_ROOT/CLAUDE.md" ] && { [ -d "$ORACLE_ROOT/ψ" ] || [ -L "$ORACLE_ROOT/ψ" ]; }; then |
| 24 | PSI="$ORACLE_ROOT/ψ" |
| 25 | else |
| 26 | ORACLE_ROOT="$(pwd)" |
| 27 | PSI="$ORACLE_ROOT/ψ" |
| 28 | fi |
| 29 | ``` |
| 30 | |
| 31 | ### Load Contacts |
| 32 | |
| 33 | ```bash |
| 34 | if [ ! -f "$PSI/contacts.json" ]; then |
| 35 | echo "❌ No contacts.json. Run /contacts first to register fleet members." |
| 36 | exit 1 |
| 37 | fi |
| 38 | ``` |
| 39 | |
| 40 | --- |
| 41 | |
| 42 | ## Step 1: Discover Nodes & Oracles |
| 43 | |
| 44 | Parse contacts.json into nodes: |
| 45 | |
| 46 | ```bash |
| 47 | python3 -c " |
| 48 | import json |
| 49 | data = json.load(open('$PSI/contacts.json')) |
| 50 | contacts = data.get('contacts', {}) |
| 51 | nodes = {} |
| 52 | for name, info in contacts.items(): |
| 53 | maw = info.get('maw', name) |
| 54 | node = maw.split(':')[0] if ':' in maw else 'local' |
| 55 | if node == name: |
| 56 | node = 'local' |
| 57 | if node not in nodes: |
| 58 | nodes[node] = [] |
| 59 | nodes[node].append({ |
| 60 | 'name': name, |
| 61 | 'maw': maw, |
| 62 | 'repo': info.get('repo', ''), |
| 63 | 'notes': info.get('notes', '') |
| 64 | }) |
| 65 | |
| 66 | total = sum(len(v) for v in nodes.values()) |
| 67 | print(f'📡 Fleet Census: {total} oracles across {len(nodes)} nodes') |
| 68 | print() |
| 69 | for node in sorted(nodes): |
| 70 | print(f' 🏗 {node} ({len(nodes[node])} oracles)') |
| 71 | for oracle in nodes[node]: |
| 72 | repo = f' [{oracle[\"repo\"]}]' if oracle['repo'] else '' |
| 73 | print(f' · {oracle[\"name\"]}{repo}') |
| 74 | if oracle['notes']: |
| 75 | print(f' {oracle[\"notes\"]}') |
| 76 | " |
| 77 | ``` |
| 78 | |
| 79 | --- |
| 80 | |
| 81 | ## Step 2: Ping & Collect (`--deep` mode) |
| 82 | |
| 83 | For each non-local node, send a wormhole ping: |
| 84 | |
| 85 | ```bash |
| 86 | echo "" |
| 87 | echo "🔍 Deep scan — pinging all nodes..." |
| 88 | echo "" |
| 89 | ``` |
| 90 | |
| 91 | For each oracle, attempt: |
| 92 | |
| 93 | ```bash |
| 94 | # For local oracles — check repo directly |
| 95 | if [ -d "$HOME/Code/github.com/Soul-Brews-Studio/$REPO_NAME" ]; then |
| 96 | ORACLE_DIR="$HOME/Code/github.com/Soul-Brews-Studio/$REPO_NAME" |
| 97 | |
| 98 | # Last commit |
| 99 | LAST_COMMIT=$(git -C "$ORACLE_DIR" log --oneline -1 2>/dev/null) |
| 100 | |
| 101 | # Last activity (most recent file in ψ/) |
| 102 | LAST_ACTIVITY=$(find "$ORACLE_DIR/ψ" -name '*.md' -type f 2>/dev/null | xargs ls -t 2>/dev/null | head -1) |
| 103 | |
| 104 | # Installed skills count |
| 105 | SKILL_COUNT=$(ls "$ORACLE_DIR/.claude/settings"*.json 2>/dev/null | head -1 | xargs python3 -c " |
| 106 | import json, sys |
| 107 | try: |
| 108 | data = json.load(open(sys.argv[1])) |
| 109 | cmds = [k for k in data.get('permissions',{}).get('allow',[]) if 'SKILL.md' in str(k)] |
| 110 | print(len(cmds)) |
| 111 | except: print('?') |
| 112 | " 2>/dev/null || echo "?") |
| 113 | fi |
| 114 | |
| 115 | # For remote oracles — ping via maw hey |
| 116 | maw hey $MAW_ADDRESS "fleet census ping — report: version, skill count, last commit" 2>&1 |
| 117 | ``` |
| 118 | |
| 119 | --- |
| 120 | |
| 121 | ## Step 3: Report |
| 122 | |
| 123 | ### Standard Output |
| 124 | |
| 125 | ``` |
| 126 | 📡 Fleet Census — [DATE] |
| 127 | |
| 128 | Node Oracles Status Last Activity |
| 129 | ─────────────── ──────── ───────── ───────────── |
| 130 | oracle-world 4 ✅ alive 2h ago |
| 131 | white 2 ✅ alive 4h ago |
| 132 | mba 3 ⏳ remote unknown |
| 133 | clinic-nat 1 ⏳ remote unknown |
| 134 | |
| 135 | Total: N oracles | M nodes | X alive | Y remote |
| 136 | |
| 137 | ─── Oracle Details ─── |
| 138 | |
| 139 | oracle-world/boonkeeper |
| 140 | Repo: Soul-Brews-Studio/boonkeeper-oracle |
| 141 | Last commit: abc1234 — description |
| 142 | Skills: N installed |
| 143 | Notes: Server infra. Foundation operator. |
| 144 | |
| 145 | oracle-world/mawjs-oracle |
| 146 | Repo: Soul-Brews-Studio/mawjs-oracle |
| 147 | Last commit: def5678 — description |
| 148 | Skills: N installed |
| 149 | Notes: maw-js runtime. Budded from. |
| 150 | |
| 151 | [... for each oracle ...] |
| 152 | ``` |
| 153 | |
| 154 | ### `--map` Mode |
| 155 | |
| 156 | ``` |
| 157 | 📡 Fleet Topology |
| 158 | |
| 159 | oracle-world ─┬─ boonkeeper (server infra) |
| 160 | ├─ mawjs-oracle (maw-js runtime) |
| 161 | ├─ mawui-oracle (living lens) |
| 162 | └─ skills-cli-oracle (the whetstone) ← YOU ARE HERE |
| 163 | |
| 164 | white ────────┬─ mawjs (maw-js origin) |
| 165 | └─ white-wormhole (federated proxy) |
| 166 | |
| 167 | mba ──────────┬─ vpnkeeper (VPN infra) |
| 168 | ├─ homekeeper (home infra) |
| 169 | └─ volt |
| 170 | |
| 171 | clinic-nat ───── neo (the soul) |