---
name: machines
description: 'Fleet machines — discover nodes from contacts, ping to prove alive, create local shortcuts. Use when user says "machines", "nodes", "fleet", or wants to see/reach machines in the fleet.'
argument-hint: "[ping | list | setup | <node-name>]"
zombie: true
archived_reason: 'moved to zombie tier via #327 (usage audit, 3,685 sessions mined)'
archived_date: 2026-05-13
metadata:
  internal: true
---

# /machines — Fleet Machines

> Discover. Ping. Create shortcuts. All from contacts.json.

## Usage

```
/machines              # Discover nodes from contacts, ping all
/machines ping         # Same — ping all, show who's alive
/machines list         # List known nodes (no ping)
/machines setup        # Ping → confirm → create /shortcuts for alive nodes
/machines <node>       # Ping one node, show details
```

---

## Step 0: Discover Nodes from Contacts

```bash
date "+🕐 %H:%M %Z (%A %d %B %Y)" && ORACLE_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
if [ -n "$ORACLE_ROOT" ] && [ -f "$ORACLE_ROOT/CLAUDE.md" ] && { [ -d "$ORACLE_ROOT/ψ" ] || [ -L "$ORACLE_ROOT/ψ" ]; }; then
  PSI="$ORACLE_ROOT/ψ"
else
  ORACLE_ROOT="$(pwd)"
  PSI="$ORACLE_ROOT/ψ"
fi
```

Read `$PSI/contacts.json` and group contacts by node. The node is extracted from the `maw` field (everything before `:` in `maw hey node:agent`):

```bash
cat "$PSI/contacts.json" 2>/dev/null | python3 -c "
import json, sys
data = json.load(sys.stdin)
nodes = {}
for name, info in data.get('contacts', {}).items():
    maw = info.get('maw', name)
    # Extract node: 'white:mawjs' → 'white', 'boonkeeper' → 'local'
    node = maw.split(':')[0] if ':' in maw else 'local'
    if node == name:
        node = 'local'
    if node not in nodes:
        nodes[node] = []
    nodes[node].append({'name': name, 'notes': info.get('notes', '')})
for node in sorted(nodes):
    agents = ', '.join(a['name'] for a in nodes[node])
    print(f'{node} ({len(nodes[node])}): {agents}')
"
```

**No hardcoded nodes.** Everything comes from contacts.

---

## Step 1: Ping (`/machines`, `/machines ping`)

For each discovered node, pick one agent and send a ping via `maw hey`:

```bash
# For each non-local node, pick the first agent and ping
maw hey <node>:<first-agent> "ping from $(hostname) — alive?" 2>&1
```

For the local node, just run `maw ls`.

Show results as a table:

```
🏗 Fleet Machines

  Node           Status    Oracles  Ping Target
  ────────────── ───────── ──────── ──────────────
  local          ✅ alive   N       maw ls
  <node-1>       ✅ alive   N       <agent> → delivered
  <node-2>       ⏳ waiting N       <agent> → sent
  <node-3>       ❌ failed  N       <agent> → error

  Alive: X/Y confirmed
```

If `maw hey` output contains "delivered", the node is alive.

---

## Step 2: Details (`/machines <node>`)

Show all oracles on that node + how to talk:

```
🏗 <node> — N oracles

  Agent           Notes                         Talk
  ──────────────  ───────────────────────────── ──────────────────────────
  <agent-1>       <notes from contacts>          maw hey <node>:<agent-1> "..."
  <agent-2>       <notes from contacts>          maw hey <node>:<agent-2> "..."
```

---

## Step 3: Setup (`/machines setup`)

After pinging, offer to create local shortcuts:

```
✅ N nodes confirmed alive. Create machine shortcuts?

  /<node-1>  → N oracles
  /<node-2>  → N oracles
  ...

  Create all? [Y/n]
```

**WAIT for user confirmation.**

Then for each node, create `.claude/skills/<node>/SKILL.md` with:
- Node name + oracle list (from contacts)
- `maw hey <node>:<agent>` examples
- Notes from contacts.json

These are LOCAL skills — gitignored, personal to each fleet.

---

## Step 4: List (`/machines list`)

Show all known nodes without pinging:

```
🏗 Known Machines (from ψ/contacts.json)

  Node           Oracles
  ────────────── ────────────────────────────────
  local          <comma-separated agents>
  <node-1>       <comma-separated agents>
  <node-2>       <comma-separated agents>

  💡 /machines ping  — check who's alive
  💡 /machines setup — create shortcuts
```

---

## Rules

1. **Discover from contacts** — never hardcode node names or IPs
2. **Talk first** — always ping before claiming alive
3. **Confirm before creating** — never auto-create without user approval
4. **Local shortcuts** — created in .claude/skills/, gitignored
5. **Generic** — works for ANY fleet, ANY nodes, ANY contacts.json

---

ARGUMENTS: $ARGUMENTS


---
Source attribution: Soul-Brews-Studio
Original project: https://github.com/Soul-Brews-Studio/arra-oracle-skills-cli/blob/ea0e758759b56621ee3907089ed48476b88379e4/src/skills/.archive/machines/SKILL.md
License: MIT
License information: https://opensource.org/license/mit
Original upstream instructions; downloaded from Mega AI Hub.

## Upstream license notice

MIT License

Copyright (c) 2025-2026 Nat Weerawan

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.



# Mega AI Hub resource metadata

Creator / publisher: Soul-Brews-Studio
Original project: https://github.com/Soul-Brews-Studio/arra-oracle-skills-cli/blob/ea0e758759b56621ee3907089ed48476b88379e4/src/skills/.archive/machines/SKILL.md
Attribution basis: Source repository record

Fields of work: Development & Engineering, Operations
Roles: Backend Developer, DevOps / SRE, IT Operations
Specialties: Backend, Git
Tools: Maw
Country applicability: Country not specified
Classification basis: Source catalog labels
Instruction SHA-256: d50b4773c356730be4144a52a42636171cbdfa784ebc2b56012623e92363db06
