Rmux
Helvesec/rmux
Guide for using RMUX with Claude Code, including the tmux-compatible CLI, agent automation waits, the typed SDK, browser web-share, and the rmux claude launcher.
Bring a test harness or probe up on a NEW operating system (Windows or Linux), or debug one that fails there.
$ npx skills add nubjs/nub --skill probe-platforms -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install nubjs/nub probe-platforms --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/nubjs/nub.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/probe-platforms .claude/skills/probe-platforms && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "probe-platforms" agent skill from https://github.com/nubjs/nub/tree/main/.claude/skills/probe-platforms into .claude/skills/probe-platforms/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "probe-platforms", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/nubjs/nub/tree/main/.claude/skills/probe-platformsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add nubjs/nub --skill probe-platforms -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install nubjs/nub probe-platforms --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nubjs/nub.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/probe-platforms .agents/skills/probe-platforms && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "probe-platforms" agent skill from https://github.com/nubjs/nub/tree/main/.claude/skills/probe-platforms into .agents/skills/probe-platforms/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "probe-platforms", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add nubjs/nub --skill probe-platforms -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install nubjs/nub probe-platforms --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nubjs/nub.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/probe-platforms .cursor/skills/probe-platforms && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "probe-platforms" agent skill from https://github.com/nubjs/nub/tree/main/.claude/skills/probe-platforms into .cursor/skills/probe-platforms/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "probe-platforms", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/nubjs/nub.git --path .claude/skills/probe-platforms--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add nubjs/nub --skill probe-platforms -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install nubjs/nub probe-platforms --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nubjs/nub.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/probe-platforms .gemini/skills/probe-platforms && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "probe-platforms" agent skill from https://github.com/nubjs/nub/tree/main/.claude/skills/probe-platforms into .gemini/skills/probe-platforms/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "probe-platforms", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install nubjs/nub probe-platformsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add nubjs/nub --skill probe-platforms -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/nubjs/nub.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/probe-platforms .github/skills/probe-platforms && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "probe-platforms" agent skill from https://github.com/nubjs/nub/tree/main/.claude/skills/probe-platforms into .github/skills/probe-platforms/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "probe-platforms", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add nubjs/nub --skill probe-platforms -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install nubjs/nub probe-platforms --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/nubjs/nub.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/probe-platforms .opencode/skills/probe-platforms && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "probe-platforms" agent skill from https://github.com/nubjs/nub/tree/main/.claude/skills/probe-platforms into .opencode/skills/probe-platforms/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "probe-platforms", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
probe-platformsBring a test harness or probe up on a NEW operating system (Windows or Linux), or debug one that fails there.
Probe Platforms is an agent skill from nubjs/nub. Bring a test harness or probe up on a NEW operating system (Windows or Linux), or debug one that fails there. Invoke before the first run on a platform, and whenever a harness works on one OS but not another. Carries the bring-up ladder that avoids spending hours learning single booleans, the Windows spawn/path/disk faults that each present as something else entirely, the Linux Landlock and node-layout traps, and the remote-shell mechanics (PowerShell-over-SSH quoting, pkill matching your own command) that waste…
Its SKILL.md is about 2.6k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It works with Linux and PowerShell. The repository describes itself as: The fast all-in-one Node.js toolkit. The licence is MIT.
Read from SKILL.md and the folder at commit 568e73a. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
nodegitbashsshFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git and ssh, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Probe Platforms loads about 2.6k tokens when it runs. Until then it costs about 143 tokens; SKILL.md has 1,522 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from nubjs/nub at commit 568e73a, republished under its MIT licence (© nubjs). 1,522 words, ~2,621 tokens.
.claude/skills/probe-platforms/SKILL.md (or your agent's skills folder).A harness that works on one OS fails on another for reasons that are almost never the thing the error names. Expect a CHAIN of faults, each hidden by the one in front of it.
Measured, bringing the build-jail probe up on Windows: six sequential faults, found using
puppeteer as the probe, at ~25 minutes per attempt. Every one was answerable by a question as
small as "does the binary spawn?" — seconds with is-odd. About two hours bought six booleans.
Climb this ladder in order. Do not skip to the end.
| # | Step | Proves |
|---|---|---|
| 1 | <binary> --version | it exists, is executable, spawns |
| 2 | same, with the config/override env set | the feature is compiled in AND the override engages |
| 3 | install a trivial no-scripts package (is-odd) | fixture, store, linker |
| 4 | one tiny package that DOES run a script | a child process spawns under confinement |
| 5 | the real canary (large, real download) | end-to-end — a FINAL GATE, never a debugging instrument |
Each step is seconds. Each isolates one layer. When one passes, expect the next to fail — do not read a green step as "the platform works."
The top fault usually accuses the wrong subsystem. On Windows the probe insisted the binary lacked a cargo feature; the truth four layers down was an unspawnable path, with every per-cell log at 0 bytes. When a diagnostic names a subsystem, verify that subsystem independently before acting on the accusation — and when you fix a misleading diagnostic, it pays for itself immediately.
for /f runs its command through cmd /c, which STRIPS the outer quote pair when the string
both starts and ends with a quote. So the natural spelling of a capture,
for /f "usebackq delims=" %%i in (`"%EXE%" arg "%DIR%"`), degrades to
C:\...\x.exe" arg "C:\...\dir and dies with "The filename, directory name, or volume label
syntax is incorrect" — with or without spaces in the path. Fix: wrap the whole command in one
MORE quote pair (`""%EXE%" arg "%DIR%""`). Measured against a temp-file-redirect alternative,
which did not work.
An undefined %VAR% expands to its own literal text, so a missing variable is passed onward as
the string %VAR% rather than being empty — silently handing a bogus path downstream. Guard with
if not defined VAR set "VAR=%CD%", under setlocal so the default does not leak to the caller.
A .cmd on PATH is invisible to whole classes of CI. In this repo native-deps.yml is the
only workflow touching node-gyp and it is ubuntu-only, so the Windows .cmd shim shipped broken and
unnoticed for as long as another code path kept it from ever running. Green Windows jobs are not
evidence for a Windows file nothing executes — check that some job actually runs it.
Node aborts at startup inside nub's build jail on Windows: Assertion failed: ncrypto::CSPRNG(nullptr, 0). Any jailed scenario whose script is node therefore cannot report on
what it meant to test; skip it with the reason printed rather than recording a pass or a fail.
spawnSync cannot run npm/npx/pnpm. They are .cmd shims: the bare name gives
ENOENT, the .cmd spelling gives EINVAL (Node has refused to CreateProcess a batch file
since CVE-2024-27980). shell: true works but is DEP0190 — args are concatenated rather than
escaped, so cmd.exe re-parses a spec like @scope/pkg@1.0.0. Run the bundled JS instead:
node <path>/node_modules/npm/bin/npm-cli.js.
Git Bash paths are not spawnable by native tools. cd $(dirname) && pwd under Git Bash yields
/c/Users/…, handed to CreateProcess verbatim → ENOENT. Convert to C:\…; for any path passed to
a Windows binary use cygpath -w. /tmp/x is NOT where a Windows node will look.
A copied binary must keep its .exe. Windows decides executability from the SUFFIX, so a
content-addressed copy named by bare hash is ENOENT even at 1.2 GB and mode 0755.
Removing a node_modules tree fails with EPERM routinely — a lifecycle child still holds a
handle, or an indexer/AV opens files behind you. Use maxRetries/retryDelay, and never let a
cleanup failure discard a measurement that already succeeded (a non-zero exit from tidy-up reads
upstream as "no result").
Disk is a first-class hazard, and a full disk is SILENT AND EVIL. A debug Rust binary can be
~1.2 GB with a target/ of tens of GB; add leaked fixture trees and 80 GB vanishes. When it
fills, git fetch fails and the probe runs STALE CODE while you believe you are testing the
fix. Size 200 GB+, build --profile fast not debug, and check free space before trusting any
run. Growing the GCE disk is not enough — the in-OS partition must be extended too, and
Resize-Partition can simply fail.
Prefer a CI-built binary to provisioning MSVC. A windows-latest workflow that uploads
target/debug/nub.exe gives a real MSVC binary for one dispatch, versus installing the VS
VCTools workload, cmake, and switching the rustup host triple by hand. A windows-gnu
cross-compile is NOT a substitute when the thing under test is OS confinement behaviour.
If you do build on the VM: rustup may default to windows-gnu (nub needs -msvc), VS Build Tools
can be present with no C++ workload so there is no linker at all, and /STACK:8388608 is an
MSVC-only flag that breaks a GNU link — it is required under MSVC because Windows gives the
main thread 1 MB against Linux's 8 MB.
MEASURED on matched GCE e2-standard-8 / pd-balanced VMs, 3,000 small file creates:
| time | |
|---|---|
| Linux (bash redirect) | 181 ms |
Windows ([System.IO.File]::WriteAllText) | 1,142 ms |
Windows (PowerShell Set-Content) | 3,156 ms |
~6x, not 17x. The first Windows figure was Set-Content, whose cmdlet/pipeline overhead is
roughly two-thirds of it — comparing that against a bash redirect is not varying one thing. Use a
raw write on both sides before quoting any cross-OS I/O ratio.
⛔ DO NOT EXTRAPOLATE THAT RATIO TO INSTALL TIME — I did, and it was wrong. A microbenchmark of raw file creation is not a workload. Measured with the SAME nub binary on matched VMs:
| install | Linux | Windows | ratio |
|---|---|---|---|
trivial (is-odd) | 493 ms | 744 ms | 1.5x |
file-heavier (typescript) | 1,675 ms | 3,218 ms | 1.9x |
So a real install is ~1.5–2x, not 6x: installs are dominated by network and archive work, and the file-create penalty is a minority of the total. I first wrote "budget an order of magnitude" here off the microbenchmark alone; that was a wrong planning number in a durable doc. Time the actual workload before sizing anything.
(Note the file COUNTS in that test are not comparable — Get-ChildItem -Recurse reported 9 where
find -L reported 264, because neither traverses junctions the same way. The TIMES are the
comparable part; see the junction-traversal trap above.)
PolicyNotExpressible). Speculative grants skip a missing
path; authored ones abort. One bad entry breaks every confined run.node, and the Rust build needs cmake. Provision Nodes with
the tool under test where possible (dogfoods the real mechanism) — but its layout may be
<cache>/nub/node/22.23.1/bin, with no v prefix, where nvm uses v22.23.1. Anything parsing
a version out of a node path must accept both or it silently returns null.pnpm missing → a script shelling out to it
exits 127; a -musl package on a glibc box cannot load. Neither is a bug in the thing under test._cacache under concurrency —
surfacing as rimraf: missing path + Callback called more than once. This manufactures FALSE
defect verdicts that a double-control cannot catch, because both attempts sit in the same busy
window. Re-verify any defect verdict serially once the batch drains.bash.exe -lc "…" must go through a .ps1 or
PowerShell parses -lc as an expression. Nested quoting through
ssh … powershell -Command "…" breaks constantly — prefer a command containing no double
quotes at all, or scp a script file (which fails on a full disk, so check that first).The string is missing the terminator, pointing at the LAST line of the file rather than the offending one.pkill -f <pattern> matches YOUR OWN command line. Killing -f "search.mjs" from a shell
whose command text contains search.mjs kills that shell — the remote command dies mid-way and
returns no output, which reads like a hang. Split the kill into its own invocation, or break the
literal ("sea""rch.mjs").tmux new-session -d. A bare nohup … & over SSH hangs the
connection and can leave only the first job running.du -sh over Git Bash on a large Windows tree
is glacial and will time out; PowerShell equivalents finish.© nubjs, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/probe-platforms of nubjs/nub.
Open the folder on GitHubat commit 568e73a
Probe Platforms next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Probe Platforms this skillnubjs/nub | 4.4k | — | ~2.6k | Automated safety check: Pass | MIT | |
| RmuxHelvesec/rmux | 2.7k | — | ~1.3k | Automated safety check: Pass | Custom licence | |
| Environment SetupNorman-bury/research-writing-skill | 3.3k | — | ~840 | Automated safety check: Pass | MIT | |
| Tbtoolsxuzhougeng/wispterm | 440 | — | ~2.3k | Automated safety check: Pass | MIT | |
| Remote Hostslibnativeapi/nativeapi | 157 | — | ~1.3k | Automated safety check: Pass | MIT | |
| Wispterm Notify Setupxuzhougeng/wispterm | 440 | — | ~1.3k | Automated safety check: Pass | MIT |
Helvesec/rmux
Guide for using RMUX with Claude Code, including the tmux-compatible CLI, agent automation waits, the typed SDK, browser web-share, and the rmux claude launcher.
Norman-bury/research-writing-skill
A skill your agent uses when Python environment setup is needed for data visualization or conda installation is required
xuzhougeng/wispterm
A skill your agent uses when the user asks about TBtools, TBtools-II, TBtools RPC API, TBtools CLI, or bioinformatics operations available through TBtools such as sequence manipulation, BLAST…
libnativeapi/nativeapi
Build, run, and GUI-test on another machine over SSH — the user's Windows laptop today, Linux or other macOS machines tomorrow — with one symmetric CLI for every OS: push scripts, run them either in…
xuzhougeng/wispterm
A skill your agent uses when the user wants to install, repair, or re-apply WispTerm notification reminders (Claude Code Stop + Notification, and Codex turn-complete) in a local…
JMBeresford/retrom
A skill your agent uses when YOU (the AI agent) are running on Windows OUTSIDE WSL (Git Bash/MSYS/PowerShell shell) and need to run ANY docker / docker compose command.
nubjs/nub
Diagnose and clear CPU, memory, and disk contention on the maintainer's dev host.
nubjs/nub
Reclaim disk on the maintainer's Mac when the volume is full or filling — ENOSPC, "no space left on device", a failed build or agent harness, or a routine sweep of Rust build residue.
nubjs/nub
Build a performance chart for nubjs.com — the SVG bar figures in blog posts, docs pages and social posts (a runtime augmentation against plain node, an install or dispatch comparison, a cross-tool…
nubjs/nub
A skill your agent uses when running a compatibility/parity AUDIT — enumerating where nub diverges from a reference it claims parity with (pnpm CLI grammar, a lockfile format, a Node behavior, a…
nubjs/nub
Run ad-hoc Nub tests and debugging probes on real local Linux guests.
nubjs/nub
Performance-trace Nub package-manager installs using the existing phase timings, structured diagnostics, and sampling-profiler workflow.
Works with
Bring a test harness or probe up on a NEW operating system (Windows or Linux), or debug one that fails there. Probe Platforms is an agent skill from nubjs/nub. Bring a test harness or probe up on a NEW operating system (Windows or Linux), or debug one that fails there.
Run `npx skills add nubjs/nub --skill probe-platforms -a claude-code`. Or copy the skill folder (.claude/skills/probe-platforms in nubjs/nub) into .claude/skills/probe-platforms in your project. Claude Code loads it when a task matches its description.
Run `npx skills add nubjs/nub --skill probe-platforms -a codex`. Or copy the skill folder (.claude/skills/probe-platforms in nubjs/nub) into .agents/skills/probe-platforms in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add nubjs/nub --skill probe-platforms -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/probe-platforms, .gemini/skills/probe-platforms, .github/skills/probe-platforms and .opencode/skills/probe-platforms in your project.
Going by SKILL.md and its folder, Probe Platforms needs the command-line tools its instructions call (node, git, bash and ssh).
SKILL.md contains no URLs. Its commands use git and ssh, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Probe Platforms is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.6k tokens (SKILL.md is roughly 10k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Probe Platforms: Rmux (Helvesec/rmux, 2.7k stars), Environment Setup (Norman-bury/research-writing-skill, 3.3k stars), Tbtools (xuzhougeng/wispterm, 440 stars) and Remote Hosts (libnativeapi/nativeapi, 157 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
nubjs (a GitHub organization) maintains it in nubjs/nub, which has 4,370 GitHub stars. The repository holds 31 skills in this directory. The repository was last updated on October 7, 2026.
Source: nubjs/nub on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.