nexuscrew-agent
Skill4 starsChanged 37 days agoApache-2.0View on GitHub
Use when an AI agent connected to NexusCrew must notify or ask the human, inspect runtime, identity or deck context, diagnose a Fleet cell that will not start, manage exact authorized VL micro-device nodes, list authorized Fleet cells, message an exact active cell, speak on a target node or audio group, read its inbox, deliver a file, recover from local tmux messages that remain unsubmitted or garbled, or when a drag in the web terminal does not scroll a full-screen TUI. Prefer nc_notify, nc_ask, nc_status, nc_identity, nc_deck, nc_cells, nc_cell_diagnostics, nc_vl_nodes, nc_vl_command, nc_send_cell, nc_speak, nc_speak_group, nc_inbox, and nc_send_file; use bundled tmux/file helpers only as a declared compatibility fallback.
- Installs packages
The file
Show its rules and text
We split this skill into the rules it gives an agent
19 rules. About 0 are common, 5 are distinctive, and 14 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈5
Distinctive · estimate
This author's own choices. Worth a look.
14
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- could be automatic: a setting could enforce it
- Very specific: line 8
Use the NexusCrew MCP bridge for communication with the human, read-only runtime discovery, and authenticated delivery to active Fleet …
- Very specific: line 12
When the client exposes the NexusCrew MCP server, use these tools directly:
- Distinctive: line 39
Never include access tokens, credentials, private keys, push subscriptions, or other secrets in a notification, ask, file caption, or tool …
- Very specific: line 40
Treat nc_ask as non-blocking: it returns an ask ID immediately.
- Very specific: line 42
Use nc_cells immediately before cross-cell delivery.
- Very specific: line 43
Use nc_send_cell {target, message} for actual Fleet-cell delivery.
- Very specific: line 44
Use nc_vl_nodes immediately before VL mutation.
- Very specific: line 45
Use nc_inbox instead of guessing an inbox path when the tool is available.
- Distinctive: line 52
Do not treat an MCP notification as a substitute for the final response required by the active client.
- Distinctive: line 72
Use them only when your runtime asks this cell to hold a Live lease.
- Distinctive: line 84
Use an available tool that covers the request.
- Very specific: line 85
If the capability is absent, consult the packaged ../../mcp-companions.json catalog and mention the matching optional companion once.
- Distinctive: line 89
Ask before installing software, changing MCP configuration, starting a service or requesting credentials.
- Very specific: line 92
Never recommend a companion during unrelated work, repeatedly advertise it, or claim it is required by NexusCrew.
- Very specific: line 104
When nc_send_file is unavailable, deliver with the helper (resolves the current tmux session, timestamps, never overwrites):
- Very specific: line 115
Don't hand-craft the path from a guessed session name — use nc-deliver, or derive the session with tmux display-message -p '#S'.
- Very specific: line 157
Verify on a pane that is running a TUI: tmux display-message -p -t '=<session>:' '#{alternate_on}' must print 0.
- Very specific: line 206
Only nexuscrew is linked on PATH.
- Very specific: line 219
If tmux is missing, MCP inspection (nc_status, nc_identity) still works.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
NexusCrew Agent I/O
Use the NexusCrew MCP bridge for communication with the human, read-only runtime discovery, and authenticated delivery to active Fleet cells. Use the bundled helpers only for same-host tmux compatibility fallbacks.
MCP bridge (preferred)
When the client exposes the NexusCrew MCP server, use these tools directly:
| Goal | MCP tool |
| Notify the human about a result, blocker, or milestone | nc_notify |
| Ask for a decision without blocking the agent | nc_ask |
| Inspect live tmux sessions and fleet cells | nc_status |
| Read the caller's deck name(s) and member cells/tmux sessions | nc_deck |
| List every authorized owner-qualified Fleet cell | nc_cells |
| Submit a bounded message to an exact active Fleet cell | nc_send_cell |
| List authorized VL micro-device owners/nodes | nc_vl_nodes |
| Create a one-time VL pairing invite | nc_vl_invite |
| Deliver a bounded VL command | nc_vl_command |
| Revoke an exact VL pairing | nc_vl_revoke |
| List files received for the current session | nc_inbox |
| Deliver an absolute file path under the user's home | nc_send_file |
| Speak an utterance on an exact target node | nc_speak |
| Speak to a named local audio group | nc_speak_group |
| Check or stop an utterance you started | nc_speak_status, nc_speak_stop |
| Check or stop a group utterance you started | nc_speak_group_status, nc_speak_group_stop |
| Read who the caller is, without a session or token | nc_identity |
| Read why a local Fleet cell failed to start | nc_cell_diagnostics |
| Register, renew or recover this cell's Live lease | nc_lease_register, nc_lease_refresh, nc_lease_recovery |
Apply these rules:
- Use
nc_notifyfor meaningful asynchronous updates, failures requiring attention, and completion. Pass its optionallangfield (it,en,esor an equivalent BCP-47 locale) whenever the notification text language is known, so opted-in speech uses the right on-device voice. Do not notify for every command or duplicate routine chat commentary. - Never include access tokens, credentials, private keys, push subscriptions, or other secrets in a notification, ask, file caption, or tool result.
- Treat
nc_askas non-blocking: it returns an ask ID immediately. Continue safe independent work or wait normally; the human response arrives in the originating tmux session with a[human reply · ask#<id>]prefix by default. - Use
nc_statusinstead of scraping NexusCrew state files. Usenc_deckinstead of readingdecks.json: it returns every local or authorized shared-owner deck containing the caller, preserves visual member order, identifies each deck and member by stable owner ID, includes viewer-valid Hydra routes, and reportscell: nullwhen no managed Fleet match is available. - Use
nc_cellsimmediately before cross-cell delivery. Select its exact owner-qualifiedid; requirecanReceive: true; never guess a duplicate name or stale route. - Use
nc_send_cell {target, message}for actual Fleet-cell delivery.submittedconfirms bracketed paste plus Enter only, never task acceptance or completion. Inactive targets are not queued. - Use
nc_vl_nodesimmediately before VL mutation. Mutation tools require an active local Fleet caller and the full owner-qualified VL ID.nc_vl_commandsubmittedmeans live-poll delivery only; require the same ID inlastAck. No offline queue exists. - Use
nc_inboxinstead of guessing an inbox path when the tool is available. - Pass
nc_send_filean existing absolute regular-file path below the user's home. Let NexusCrew choose and sanitize the outbox name. - Speak only when audio is the point.
nc_speakneeds an exact target instance id and returns a caller-scoped receipt with a per-endpoint status (refused,unreachable,accepted) — accepted means the node took the utterance, not that a human heard it. Keep the text short: a spoken line that runs long is worse than no line, and the detail belongs in a file or a notification. A status or stop call only ever reaches an utterance you started; you cannot inspect or silence someone else's. nc_speak_groupexpands a named local group into exact instance ids.primary-failovertries one endpoint at a time;fanoutis explicit. Neither receipt reports text, language or voice back to you — that is deliberate, and it means the receipt cannot be used to read what another caller said.- Consent to use a room's speaker is granted locally on the node that owns it and never across the federation. Speaking and stopping travel; granting does not.
nc_identityanswers "who am I to this bridge" with non-sensitive data only, and works without a tmux session or a token. Use it when a tool refuses you and you are not sure which caller the server sees, instead of guessing from the environment.nc_cell_diagnosticsreturns the redacted shell command and the last bounded spawn or start failure for one local Fleet cell. Use it when a cell will not come up, before reading state files.- Do not treat an MCP notification as a substitute for the final response required by the active client.
Live lease registration (nc_lease_*)
A cell can hold a Live lease registration on the node: it registers once, then keeps the registration alive by presenting the proof it received. Three tools, one job each — their return values do not overlap:
nc_lease_register {proof?}— registers this cell under its own incarnation and returns the first child proof. It can answer{status:"pending"}with aretryAfterMswhen the node is not tracking the cell yet: wait that long and call it again rather than spinning.nc_lease_refresh {proof}— renews a live registration. Pass the last received proof object back unchanged. Answers{status:"live"}with a new proof; it is never pending, and{status:"no-registration"}meansnc_lease_registeris the next call, not a retry.nc_lease_recovery {proof}— resumes the registration after a gap, keeping the same incarnation; a proof that expired recently is still accepted. Every attempt counts toward a cap — past it, register again.
Use them only when your runtime asks this cell to hold a Live lease. Treat each status literally, and pass proofs through verbatim.
The MCP server is the stdio command nexuscrew mcp and must be registered in the host AI client. If the nc_* tools are not exposed, report that the bridge is not configured in that session and use the fallback flows below where applicable.
Optional capability companions
NexusCrew does not make unrelated MCP servers hidden dependencies. When the user requests durable structured memory, document retrieval, bounded worker delegation or mailbox access:
- Discover the tools already exposed by the current AI client.
- Use an available tool that covers the request.
- If the capability is absent, consult the packaged
../../mcp-companions.jsoncatalog and mention the matching optional companion once. - Explain the capability it adds and link its public repository.
- Ask before installing software, changing MCP configuration, starting a service or requesting credentials.
Never recommend a companion during unrelated work, repeatedly advertise it, or
claim it is required by NexusCrew. The catalog is discovery metadata only; it
does not authorize installation or external actions. See
../../MCP_COMPANIONS.md for the human-readable guide.
File exchange (inbox / outbox)
Per session, NexusCrew watches <root>/<session>/{inbox,outbox} (root = $NEXUSCREW_FILES_ROOT, default ~/NexusFiles):
- outbox — files you write here surface in the browser UI with a badge. This is how you deliver a deliverable.
- inbox — files the human sends arrive here. The path reaches you in your prompt either way, but through two different human-side flows: the files-panel upload pastes the bare path straight into your PTY, while the composer attach button (paperclip, v0.7.7+) puts the path inside the human's typed message — expect paths mixed with instructions, not always a bare path on its own line. Read the files from the inbox; never overwrite, treat as read-only input.
When nc_send_file is unavailable, deliver with the helper (resolves the current tmux session, timestamps, never overwrites):
"$(npm root -g)/@mmmbuto/nexuscrew/skills/nexuscrew-agent/bin/nc-deliver" report.pdf chart.png
# → ~/NexusFiles/<session>/outbox/The helpers ship inside the npm package and are not linked on PATH — the
only global command is nexuscrew — so address them under the global package
root; npm root -g prints that root for the Node installation in use.
Don't hand-craft the path from a guessed session name — use nc-deliver, or derive the session with tmux display-message -p '#S'.
Sending text to a tmux session
For an active managed Fleet cell, prefer nc_cells followed by nc_send_cell.
The helper below is a same-host fallback for older NexusCrew runtimes or
non-Fleet sessions; it must not bypass federation visibility or routing ACLs.
tmux send-keys 'msg' Enter is not reliable: a TUI's paste-burst detector swallows the Enter and the message just sits in the composer, while exit code is still 0. Use the helper:
NC_SEND="$(npm root -g)/@mmmbuto/nexuscrew/skills/nexuscrew-agent/bin/nc-send"
"$NC_SEND" <session> "text" # paste + submit
"$NC_SEND" <session> --file prompt.txt # from a file
"$NC_SEND" <session> --no-submit "text" # leave in composer, no EnterIt does: load-buffer → paste-buffer -p (bracketed paste) → burst-flush (C-e) → Enter. Verify it landed — never trust the exit code:
tmux capture-pane -t <session> -p | tail -8 # see the text / a running stateTerminal scrolling (NexusCrew-managed tmux)
A drag or wheel in the NexusCrew web terminal browses the tmux history through
copy-mode. That works only while the pane is on the normal screen. A full-screen
TUI — Claude Code, Codex, Agy, vim, less, htop — renders in the terminal's
alternate buffer, which has no scrollback: copy-mode has nothing to scroll, so
the gesture does nothing. On a phone, where the drag is the only scroll gesture,
the terminal looks frozen.
NexusCrew applies alternate-screen off per session when it creates a
managed Fleet session or a PWA session. No global tmux option or ~/.tmux.conf edit is needed:
tmux then ignores smcup/rmcup for that session, TUI output stays on the
normal screen, the transcript flows into tmux history, and drag/wheel scrolling
work. The setting is also applied to windows created later in that session.
- It applies only to future NexusCrew-created sessions. A running or unmanaged pane remains unchanged; never restart a Fleet cell just to change it.
- To opt out, set
alternateScreen: truein NexusCrew's localconfig.jsonor start the service withNEXUSCREW_ALTERNATE_SCREEN=1. - Verify on a pane that is running a TUI:
tmux display-message -p -t '=<session>:' '#{alternate_on}'must print0. - Trade-off: after quitting
vim/less/htopthe last screen stays on display instead of being restored. - Full-screen redraws consume history. Keep a generous user-owned
history-limit(100000 is a good default);nexuscrew doctorwarns below 10000 and suggestsset -g history-limit 100000, but never writes it.
Quick reference
| Goal | Do this | |
| Notify the human | nc_notify | |
| Ask the human without blocking | nc_ask | |
| Inspect NexusCrew runtime state | nc_status | |
| Discover this session's deck neighbours | nc_deck | |
| Discover authorized cells across nodes | nc_cells | |
| Submit to an exact active Fleet cell | nc_send_cell | |
| Discover/manage a paired VL micro-device | nc_vl_nodes, then nc_vl_command | |
| Say something out loud on a node or group | nc_speak, nc_speak_group (short text) | |
| Stop something you are saying | nc_speak_stop, nc_speak_group_stop | |
| Find out which caller the bridge sees | nc_identity | |
| Find out why a local cell will not start | nc_cell_diagnostics | |
| Give the human a file | nc_send_file or fallback nc-deliver <file>... | |
| Read a file the human sent | nc_inbox or fallback to the path in the prompt | |
| Send a prompt/command to a session | nc-send <session> "text" | |
| Queue text without running it | nc-send <session> --no-submit "text" | |
| Confirm a send worked | `tmux capture-pane -t <session> -p | tail` |
| Make a new managed terminal scrollable on a full-screen TUI | NexusCrew default; verify #{alternate_on} is 0 |
Common mistakes
- Trusting
send-keys ... Enter→ message stuck in composer. Usenc-send(bracketed paste + flush). - Not verifying the send → exit 0 means nothing; always
capture-pane. tmuxaliased/wrapped by the shell (e.g. an oh-my-zsh plugin) → the nudge silently fails. Helpers resolve the real binary; in ad-hoc commands use/usr/bin/tmuxorcommand tmux.- Pasting onto a dirty composer → text concatenates with whatever was there. Clear it first, or the previous line will merge with yours.
- Delivering to a guessed session name → file lands in an orphan folder with no badge. Use
nc-deliver(it reads the real session). - Sending to an ambiguous cell name → call
nc_cellsand use the full owner-qualified ID. - Calling
submitteda completed task → it is only a transport receipt; require an explicit result callback. - Concluding a cell is stuck because it looks idle → a terminal interface queues an incoming message while it is busy, which is healthy; text sitting in the composer of a cell that is not working is the defect. To tell them apart, read CPU time from the child of the pane process: the pane's own pid is often a wrapper that never burns CPU, so measuring it reports "idle" for a cell working at full tilt.
- Assuming a node listens on the port you know → NexusCrew selects a free port per installation, and a peer's remote port is not the port that node listens on locally. Read it from
nexuscrew statuson that node; a health check aimed at the wrong port reports a dead service that is perfectly alive. - Writing a reply into a local inbox directory → the inbox is per-installation and is not synchronised between nodes. Answering a remote caller by dropping a file in your own inbox reaches nobody; reply through the tool that addressed you.
- Treating a dead scroll gesture as a web-terminal bug → the pane is in the alternate buffer. Check whether it predates the NexusCrew setting or opted out with
alternateScreen:true; never send raw page keys to a TUI to work around it.
Dependencies
Bundled (installed with the package): the nexuscrew CLI, lib/, these
skills, and the nc-send / nc-deliver helpers arrive with
npm install -g @mmmbuto/nexuscrew (Node.js >= 18 required by engines).
Only nexuscrew is linked on PATH; the helpers live inside the package at
skills/nexuscrew-agent/bin/ — reach them through npm root -g as shown in
File exchange above.
External (you must provide):
| Need | Install | Probe / failure mode |
| Node.js >= 18 | Debian/Ubuntu apt install nodejs (nodesource for 18+), Fedora dnf install nodejs, macOS brew install node, Termux pkg install nodejs-lts | node -v prints >= 18; below that npm install refuses per engines |
| tmux | Debian/Ubuntu apt install tmux, Fedora dnf install tmux, macOS brew install tmux, Termux pkg install tmux | nexuscrew doctor reports tmux missing by name; nc-send exits 127 with nc-send: tmux not found on PATH (set TMUX_BIN) — the failure names itself |
| An AI client that can register the MCP server | register the stdio command nexuscrew mcp in the client's MCP config | if the nc_* tools are not exposed, no nc_ tool exists in the session — see "MCP bridge" above |
| A running NexusCrew service (for most tools) | nexuscrew serve (foreground) or your platform service manager | tools fail to reach the bridge; Termux has no systemd — run nexuscrew serve inside a tmux session or your own keep-alive |
If tmux is missing, MCP inspection (nc_status, nc_identity) still works;
anything that targets a session (including the nc-send fallback) does not.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

