docs: add FleetTools — an agent-family-agnostic index of fleet capability

Every agent on nh3-dev — Claude, Codex, Grok, Aider — needs the same
answers: what runs here, how do I call it, what will bite me. Until now
that lived in ~/.claude/CLAUDE.md, which only Claude sessions load, and
it was interleaved with operator preferences that other families have
no use for.

Two-tier by design, matching the persistent-memory split: FLEETTOOLS.md
is a 135-line index an agent reads whole, and each entry links to a
detail file it opens only when it actually needs that tool. Reading the
index costs about a fifth of reading the tree.

Detail paths are absolute so they resolve from any working directory,
since a non-Claude agent will cat the path rather than follow a
markdown link. ~/FLEETTOOLS.md symlinks to the index for discovery.

Rule zero is that live inventories get queried, not transcribed:
Homepage /api/services, asset-engine /api/v1/services, LiteLLM
/v1/models, and every FastAPI seat's /openapi.json. A copied service
table would be stale within a month and this repo already has a
standing rule against second copies that drift.

Contents verified against the running fleet rather than copied from
existing docs: binaries resolved on PATH, seven endpoints probed live,
the LiteLLM roster counted at 40 models where the old note said ~30.
No credentials are included; the vault and its CLI are pointed at
instead.
This commit is contained in:
vh
2026-09-18 07:35:28 -07:00
parent d6a9d70b9e
commit 53c3e8000e
15 changed files with 737 additions and 0 deletions
+61
View File
@@ -0,0 +1,61 @@
# Claude-Code-only tooling
Everything here depends on the Claude Code harness. **A Codex, Grok, Aider or other
non-Claude agent cannot use these** — they are listed so you recognise a reference to
them rather than hunting for a binary that will not work.
## ratecheck — how close this session is to its rate limits
`~/.claude/bin/ratecheck` (NOT on PATH). Exit `0` GO · `1` PAUSE · `2` UNKNOWN. Prints
both windows, the file's age and the reset time.
The numbers are **not otherwise visible to an agent**: no CLI subcommand exposes them
and nothing else on disk carries them. The harness pipes them to the statusline only,
so `~/.claude/statusline-command.sh` tees them to `~/.claude/rate-limits.json` on every
render. **If that tee is removed, everything built on it silently stops working**,
which is why a stale file reports UNKNOWN rather than healthy.
- under ~85% — proceed normally
- ~85–93% — prefer the cheap path; resume an existing subagent rather than spawning one
- at/over the project threshold — stop starting new expensive work; let in-flight finish
- **UNKNOWN — proceed, loudly.** A broken instrument that halts everything is a
self-inflicted outage worse than the overspend it guards. Say plainly that limits
were unreadable and you continued blind.
⚠ A GO is margin, not permission for an arbitrarily large action — one consult subagent
has measured at 270k–650k tokens, so a round cleared at 92% can finish past 100%.
## remote-ssh MCP
Project-scoped in `eshpfi-management/.mcp.json`; tools `ssh_hosts` / `ssh_open` /
`ssh_run` / `ssh_peek` / `ssh_interrupt` / `ssh_list` / `ssh_close`. Holds a
**persistent shell**, so `cd` and exports survive between calls at ~6 ms per command.
For reconnaissance; it deliberately has no file transfer and no idempotency (that is
elway's half).
⚠⚠ **A bare `sudo` HANGS the session — always pipe it: `sudo -n <cmd> | cat`.** Cause:
sudo ≥1.9.14 defaults `use_pty` on; with stdin on `/dev/null` and stdout on the session
PTY the relay never completes and the completion marker never arrives. A pipe makes
stdout a non-tty and sudo skips the PTY.
⚠ The **host allowlist is the only real containment boundary** — the denylist is three
regexes and `bash -c` walks past it. `SSH_MCP_STRICT_ALLOWLIST=1` makes
`~/.config/remote-ssh-mcp/config.json`'s `allowedHosts` authoritative.
## task-board MCP
`task_start` / `task_update` / `task_wait` / `task_complete` to surface work in
progress at `http://10.250.50.70:7878/`. When you launch background shells, call
`task_set_shells` with one short description each (and again with `[]` when they
finish) — the board turns orange so the operator can tell the session is parked on
background work rather than stalled on them.
## Skills
Claude Code skills live in `~/.claude/skills/`. Notable ones with fleet meaning:
`/snapshot` (durable repo memory), `/handoff` (transfer active work to an agent of
another family — **this is the cross-family bridge**), `/heid` (cross-frontier consult),
`/park`, `/elitk`, `/vor`, `/tdd`.
**`/handoff` is the supported way to move in-flight work from Claude to Codex/Grok** —
it writes an agent-agnostic brief to `/tmp` naming the repo's convention files.