Agent skill

Probe Platforms

by nubjs in nubjs/nub

Bring a test harness or probe up on a NEW operating system (Windows or Linux), or debug one that fails there.

MITAuto-check passed

Install Probe Platforms

skills CLI
$ npx skills add nubjs/nub --skill probe-platforms -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install nubjs/nub probe-platforms --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ 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-src

Use ~/.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/

Facts

Skill name
probe-platforms
GitHub stars
4.4k
Token cost
~2.6k tokens
SKILL.md length
1,522 words
Files
1
Skills in repo
31
Repo updated
First seen
Licence
MIT

At a glance

Bring a test harness or probe up on a NEW operating system (Windows or Linux), or debug one that fails there.

  • SKILL.md covers ⛔ Debug with the SMALLEST…, Windows — all measured, Linux — all measured and Remote-shell mechanics that…
  • Calls node, git and bash

What it does

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.

Example prompts

  • “/probe-platforms”

What it can do on your machine

Read from SKILL.md and the folder at commit 568e73a. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • node
    • git
    • bash
    • ssh

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    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.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

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.

Always · name and description, kept in context so the agent knows when to use it
~143
When it runs · the whole SKILL.md, loaded when a task matches
~2.6k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from nubjs/nub at commit 568e73a, republished under its MIT licence (© nubjs). 1,522 words, ~2,621 tokens.

Download SKILL.mdSave it as .claude/skills/probe-platforms/SKILL.md (or your agent's skills folder).
name
probe-platforms
description
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 a loop each time they are rediscovered.

Bringing a probe up on a new platform

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.

⛔ Debug with the SMALLEST payload — the single most expensive mistake here

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.

#StepProves
1<binary> --versionit exists, is executable, spawns
2same, with the config/override env setthe feature is compiled in AND the override engages
3install a trivial no-scripts package (is-odd)fixture, store, linker
4one tiny package that DOES run a scripta child process spawns under confinement
5the 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.

Windows — all measured

  • 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.

Show full SKILL.md (632 more words)Show less
Windows filesystem speed — budget ~6x Linux, and beware the benchmark itself

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:

installLinuxWindowsratio
trivial (is-odd)493 ms744 ms1.5x
file-heavier (typescript)1,675 ms3,218 ms1.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.)

Linux — all measured

  • An AUTHORED Landlock grant naming a path that does not exist makes the whole policy uncompilable — refused, not degraded (PolicyNotExpressible). Speculative grants skip a missing path; authored ones abort. One bad entry breaks every confined run.
  • Do not read "Landlock unavailable" as a kernel problem. That error covers both an old kernel and our own policy failing to compile; it claimed a missing feature on a 6.17 kernel with ABI 4.
  • A fresh cloud box has no system 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.
  • Absent tooling is environmental, not a defect. 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.
  • Old Node pins bring old npm, and npm 6 races on its own _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.

Remote-shell mechanics that cost a loop every time

  • SSH to Windows lands in PowerShell, not bash. 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).
  • Keep every PowerShell script ASCII. One em-dash anywhere fails with 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").
  • Detach long remote runs with tmux new-session -d. A bare nohup … & over SSH hangs the connection and can leave only the first job running.
  • Prefer native tools for bulk filesystem work. 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

Files

Just SKILL.md in .claude/skills/probe-platforms of nubjs/nub.

Open the folder on GitHubat commit 568e73a

Compare with similar skills

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.

Probe Platforms compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Probe Platforms this skillnubjs/nub4.4k—~2.6kAutomated safety check: PassMIT
RmuxHelvesec/rmux2.7k—~1.3kAutomated safety check: PassCustom licence
Environment SetupNorman-bury/research-writing-skill3.3k—~840Automated safety check: PassMIT
Tbtoolsxuzhougeng/wispterm440—~2.3kAutomated safety check: PassMIT
Remote Hostslibnativeapi/nativeapi157—~1.3kAutomated safety check: PassMIT
Wispterm Notify Setupxuzhougeng/wispterm440—~1.3kAutomated safety check: PassMIT

Similar skills

  • 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.

    2.7k GitHub stars~1.3k tokensUpdated 1 mo ago
    Auto-check passed
  • Environment Setup

    Norman-bury/research-writing-skill

    A skill your agent uses when Python environment setup is needed for data visualization or conda installation is required

    3.3k GitHub stars~840 tokensUpdated 4 mo ago
    Data & AnalyticsAuto-check passed
  • Tbtools

    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…

    440 GitHub stars~2.3k tokensUpdated 2 days ago
    Research & ScienceAuto-check passed
  • Remote Hosts

    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…

    157 GitHub stars~1.3k tokensUpdated today
    MobileAuto-check passed
  • Wispterm Notify Setup

    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…

    440 GitHub stars~1.3k tokensUpdated 2 days ago
    Auto-check passed
  • Docker Via Wsl

    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.

    2.1k GitHub stars~832 tokensUpdated 3 days ago
    DevOps & CloudAuto-check passed

More from nubjs/nub

All 31 skills in this repo
  • Cpu Reduction

    nubjs/nub

    Diagnose and clear CPU, memory, and disk contention on the maintainer's dev host.

    4.4k GitHub stars~2.8k tokensUpdated today
    Auto-check passed
  • 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.

    4.4k GitHub stars~2.4k tokensUpdated today
    Auto-check passed
  • Nub Charts

    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…

    4.4k GitHub stars~4.6k tokensUpdated today
    Auto-check passed
  • Audit Thread

    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…

    4.4k GitHub stars~1.8k tokensUpdated today
    Auto-check passed
  • Linux Vm Test

    nubjs/nub

    Run ad-hoc Nub tests and debugging probes on real local Linux guests.

    4.4k GitHub stars~986 tokensUpdated today
    Auto-check passed
  • Performance-trace Nub package-manager installs using the existing phase timings, structured diagnostics, and sampling-profiler workflow.

    4.4k GitHub stars~1.3k tokensUpdated today
    Auto-check passed

Works with

Questions about Probe Platforms

What does Probe Platforms do?

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.

How do I install Probe Platforms in Claude Code?

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.

How do I install Probe Platforms in Codex?

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.

Can I use Probe Platforms in Cursor, Gemini CLI or GitHub Copilot?

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.

What does Probe Platforms need to run?

Going by SKILL.md and its folder, Probe Platforms needs the command-line tools its instructions call (node, git, bash and ssh).

Does Probe Platforms access the network?

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.

Is Probe Platforms safe to install?

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.

What licence does Probe Platforms use?

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.

How many tokens does Probe Platforms use?

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.

What are the alternatives to Probe Platforms?

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.

Who maintains Probe Platforms?

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.