Features • Installation • Usage • Status • Manifest • SessionStart
The NuClide toolchain spans 15 binaries across independent repos, each on its own release cadence. The methodology assumes installed versions match the canonical ones. In practice they drift: a machine that installed once and never updated silently runs wrong fingerprints, wrong module rankings, wrong compliance scores. visor catches that before a survey starts.
It probes each binary's version flag, compares the result against an embedded manifest, and prints a status table: OK, STALE, UNKNOWN, or MISSING, with an upgrade command for every non-OK row.
- Probes 15 tracked NuClide binaries (
aimap,bare,cortex,jaxen,menlohunt,nu-recon,recongraph,visorbishop,visorgoose,visorgraph,visorlog,visorplus,visorrag,visorscuba,visorsd) - Manifest embedded at build time. No network access at runtime
- Status taxonomy:
OK,STALE,UNKNOWN,MISSING - Per-tool upgrade hints for every non-OK row
--exit-on-stalefor CI and SessionStart hook integration- JSON output for both
versionsandlist - Single static binary, standard library only, no dependencies
go install github.com/nuclide-research/visor/cmd/visor@latestOr build from source:
git clone https://github.com/nuclide-research/visor
cd visor
go build -o /usr/local/bin/visor ./cmd/visorGo 1.21 or later.
visor versions # probe all tracked tools; print status table
visor list # list the manifest inventory (version + repo per tool)
visor version # print visor's own version
visor help # print help
| Flag | Effect |
|---|---|
--json |
emit JSON instead of the human-readable table |
--no-color |
disable ANSI color (auto-set when stdout is not a TTY) |
--exit-on-stale |
exit non-zero if any tool is stale or missing (for CI / SessionStart hooks) |
--timeout DUR |
per-tool probe timeout (default 5s; takes a unit, e.g. 10s, 1m) |
| Flag | Effect |
|---|---|
--json |
emit JSON array instead of the human-readable table |
| Status | Meaning |
|---|---|
OK |
On PATH, version detected, matches canonical |
STALE |
On PATH, version detected, does not match canonical; upgrade hint shown |
UNKNOWN |
On PATH but version probe inconclusive; regex did not match output |
MISSING |
Not on PATH; install hint shown |
The manifest is embedded at build time from internal/manifest/manifest.go. Each entry records a binary name, the canonical version, the version-flag argument (or empty string for banner parse), a regex to extract the version string from binary output, the source repo, and a one-line install command.
JSON output of visor list:
[
{"name":"aimap","canonical":"v1.9.22","repo":"github.com/nuclide-research/aimap","install":"go install github.com/nuclide-research/aimap@latest"}
]JSON output of visor versions (one object per tool):
[
{"name":"aimap","status":"STALE","detected":"1.8","canonical":"v1.9.22","path":"/home/user/go/bin/aimap","repo":"github.com/nuclide-research/aimap","install_hint":"go install github.com/nuclide-research/aimap@latest","probe_err":""}
]TOOL STATUS DETECTED CANONICAL PATH / NOTE
────────────────────────────────────────────────────────────────────────────────────────────
aimap STALE 1.8 v1.9.22 /home/user/go/bin/aimap upgrade: go install github.com/nuclide-research/aimap@latest
bare STALE 0.1.0 0.2.0 /home/user/.local/bin/bare upgrade: cargo install ...
cortex MISSING . v2.0.0 install: go install github.com/nuclide-research/cortex-framework@latest
jaxen OK v0.2.0 v0.2.0 /home/user/go/bin/jaxen
visorgraph OK 1.0.0 v1.0.0 /home/user/go/bin/visorgraph
visorlog OK v0.2.0 v0.2.0 /home/user/go/bin/visorlog
summary: 4 OK, 2 STALE, 1 UNKNOWN, 1 MISSING (of 15 tracked)
Wire visor into a SessionStart hook so drift surfaces before a survey starts, not 22 minutes into it.
~/.claude/settings.json:
{
"hooks": {
"SessionStart": [
"visor versions --exit-on-stale --no-color"
]
}
}The hook prints the table and exits non-zero if anything is stale or missing.
Edit the Manifest slice in internal/manifest/manifest.go, then go build and redistribute the binary. The manifest is embedded at build time; no network access is needed at runtime.
visor does not install or upgrade tools. It detects and reports drift. It does not orchestrate surveys or run any Visor tools. It reads no external services; the manifest is compiled in.
- aimap, AI/ML infrastructure fingerprint scanner
- scanner, full-handshake banner stage between passive discovery and deep enumeration
- VisorLog, finding ledger and ingest pipeline
- VisorGraph, cert-pivot to operator attribution
- BARE, semantic exploit-module ranking over scanner findings
MIT. Part of the NuClide toolchain. Contact: nuclide-research.com