herdrdev/herdr

GitHub ↗ · How this check works

Per-setup public labels: Linux / Haiku: Partly checked (README support for this platform is not stated) · Linux / Luna: Not tested (blocked: setup step)

Static status badge · SVG · read-only JSON. Embed with ![Coldpass status](https://coldpass.dev/badge/herdrdev--herdr.svg).

agent-harness

Works

README claims checked out on 1 recorded setup. 1 other recorded setup was not fully checked. Untested combinations remain unknown.

Answers apply to each recorded setup, revision and operation. Earlier observations remain in Run details.

Tested on Linux
PlatformHaikuLuna
LinuxREADME makes no claimblocked: setup step

Linux / Haiku 5.5: README makes no claim · Oct 23, 2026 · 43b36b68caf5 · claude-code / 2.1.300 (Claude Code)
Recorded operation: <guest-path> server

Linux / Luna: blocked: setup step · Oct 23, 2026 · 43b36b68caf5 · codex / codex-cli 0.163.0
Recorded operation: partial checks

Does what it says
1 of 1 claims checked out
  • agents drive herdr through the cli and socket api: Real input produced the expected result: schemas: error_response, event, request, subscription_event, success_response

    Source: agents drive herdr through the cli and socket api

    Input: herdr api schema

    Expected: the bundled socket API schema is printed with its request and response schema list

    Command: <guest-path> api schema

    Observed: schemas: error_response, event, request, subscription_event, success_response Use `herdr api schema --json` to print the full schema. Use `herdr api schema --output PATH` to write it to a file.

MCP
No
Local or hosted
local
Local: runs on your machine
Needs keys or browser
None seen
Maintained
Maintained
actively maintained: last commit 0 days ago; 657 commits and 506 merged PRs in 90 days; 401 open issues, 24 open PRs; latest release 2026-10-14

Last commit Oct 23, 2026

Setup time
43 min 46 s
43 min 46 s to a working result
Issue
none found in recorded check
Examples
1 of 1 ran as expected
  • just test runs the repository's documented test recipes; this runs its docs-contract recipe: command completed successfully

    Source: justfile docs-contract-test (README.md development section: just test)

    Input: just docs-contract-test

    Expected: bun docs tests pass

    Command: just docs-contract-test

    Observed: es maintained corrections [787.18ms] scripts/docs/versions.test.ts: (pass) normalizeVersion > normalizes 0.7.5 [0.04ms] (pass) normalizeVersion > normalizes v0.7.5 (pass) normalizeVersion > rejects non-release refs [0.03ms] (pass) sortVersionsNewestFirst > sorts semantic versions numerically [0.14ms] scripts/docs/preview.integration.test.ts: (pass) preview documentation snapshots > snapshots and validates the selected commit exactly [247.12ms] (pass) preview documentation snapshots > rejects snapshot drift [226.63ms] 7 pass 0 fail 21 expect() calls Ran 7 tests across 3 files. [1273.00ms]

Evidence
README behavior checked
Agent interfaces
CLI
CLI

Observed interfaces were exercised by the checker. Documentation alone does not confirm compatibility.

Tested with
Claude Code / Haiku 5.5
  • Linux: Claude Code / Haiku 5.5 · agent 2.1.300 (Claude Code) · Partly checked (README support for this platform is not stated) · Oct 23, 2026 on 43b36b68caf5

Each entry describes its recorded operation and source revision. Other agent clients were not tested.

Safety
Something to look at: reads of private files by <guest-path>

Review signals across current setups: connection review, outside write, sensitive read. 20 listed items (named-host connections, static matches, dependency advisories) are below and do not change this verdict. 12 static matches retained as context.

Repository processes attempted these non-loopback connections; proxies can hide the final hostname. 20 distinct locations. 133 attributed processes.

Gitleaks found a possible hardcoded secret; value withheld. src/platform/windows/notifications.rs

OSV reports a known vulnerability in this dependency version. 8 distinct locations. 9 findings.

Repository processes attempted these writes outside documented output/cache paths. 13 distinct locations. 698 attributed processes.

A repository process attempted to read this sensitive path. 28 distinct locations. 28 findings. 4 attributed processes.

Full event, path and process lists for each observed setup:

Run details

Haiku 5.5

Native agent · Partly checked (README support for this platform is not stated)

Checked operation <guest-path> server

Agent-reported scope: herdr server (headless) start and CLI socket API operation

Run details
run
herdrdev--herdr-claude-haiku-5-5-1792780662995153075
date
Oct 23, 2026
time to working
2625.6s
product hosting / execution
Local command in the guest
recorded operation scope
product operation
model
claude-haiku-5-5
agent / version
claude-code / 2.1.300 (Claude Code)
platform
linux
reported cost
$0.044157
Recorded source
https://github.com/herdrdev/herdr
Backend
hyperv
Tool transport
mcp-assigned-vm
Requested source pin (not an observed revision)
{"commit": "43b36b68caf593e7623fa389462d8ba097edcb11", "url": "https://github.com/herdrdev/herdr"}
Test version
readme-bdc1b9b3c0d2673aef87e076d14084a8123ddcf09d520c1ee2e364a37c3f4bb9
revision
43b36b68caf593e7623fa389462d8ba097edcb11
Whose fault: no fault assigned · resolved

Safety: Review signals: 1 connection review, 1 hardcoded secret, 9 known vulnerability, 1 outside write, 28 sensitive read. 6 static matches retained as context.

Review signals: 1 connection review, 1 hardcoded secret, 9 known vulnerability, 1 outside write, 28 sensitive read. 6 static matches retained as context.

Repository processes attempted these non-loopback connections; proxies can hide the final hostname. 20 distinct locations. 133 attributed processes.

Gitleaks found a possible hardcoded secret; value withheld. src/platform/windows/notifications.rs

OSV reports a known vulnerability in this dependency version. 8 distinct locations. 9 findings.

Repository processes attempted these writes outside documented output/cache paths. 13 distinct locations. 698 attributed processes.

A repository process attempted to read this sensitive path. 28 distinct locations. 28 findings. 4 attributed processes.

6 hardcoded secret matches retained as context; full list in the evidence.

OSV scanned supported lockfiles; unpinned dependencies and unsupported formats are outside this check.

A short run cannot establish that code is safe.

Connections show IP addresses; proxies can hide the final hostname.

Tracing covers dispatched commands and their children, not the whole OS; guest root can interfere with tracing.

Full safety evidence →

Answers recorded for this run
  • agents drive herdr through the cli and socket api: Real input produced the expected result: schemas: error_response, event, request, subscription_event, success_response

    Source: agents drive herdr through the cli and socket api

    Input: herdr api schema

    Expected: the bundled socket API schema is printed with its request and response schema list

    Command: <guest-path> api schema

    Observed: schemas: error_response, event, request, subscription_event, success_response Use `herdr api schema --json` to print the full schema. Use `herdr api schema --output PATH` to write it to a file.

Examples

  • just test runs the repository's documented test recipes; this runs its docs-contract recipe: command completed successfully

    Source: justfile docs-contract-test (README.md development section: just test)

    Input: just docs-contract-test

    Expected: bun docs tests pass

    Command: just docs-contract-test

    Observed: es maintained corrections [787.18ms] scripts/docs/versions.test.ts: (pass) normalizeVersion > normalizes 0.7.5 [0.04ms] (pass) normalizeVersion > normalizes v0.7.5 (pass) normalizeVersion > rejects non-release refs [0.03ms] (pass) sortVersionsNewestFirst > sorts semantic versions numerically [0.14ms] scripts/docs/preview.integration.test.ts: (pass) preview documentation snapshots > snapshots and validates the selected commit exactly [247.12ms] (pass) preview documentation snapshots > rejects snapshot drift [226.63ms] 7 pass 0 fail 21 expect() calls Ran 7 tests across 3 files. [1273.00ms]

Local or hosted: local

What the agent did

herdr server (headless) start and CLI socket API operation

cd <guest-path> && pwd && ls -la && git status 2>&1 | head -3; id -u; python3 --version; cat /etc/os-release | head -3; ls /inputs 2>&1
cd <guest-path> && cat README.md 2>/dev/null | head -300
cd <guest-path> && ls -la .coldpass; cat rust-toolchain.toml; which cargo rustc curl sudo; sudo -n true && echo SUDO_OK; curl -fsSL https://herdr.dev/install.sh -o /tmp/install-herdr.sh; echo rc=$?; wc -l /tmp/install-herdr.sh 2>/dev/null; grep -niE 'telemetry|consent|analytics|opt' /tmp/install-herdr.sh | head -20
cat /tmp/install-herdr.sh
sh /tmp/install-herdr.sh; echo rc=$?; ls -la ~/.local/bin/herdr && ~/.local/bin/herdr --version; echo rc=$?
cd <guest-path> && git init -q && git remote add origin https://github.com/herdrdev/herdr && git fetch --depth 1 origin 43b36b68caf593e7623fa389462d8ba097edcb11 2>&1 | tail -3; echo fetch=$?; git reset --mixed FETCH_HEAD 2>&1 | tail -2; git log --oneline -1; cat build.rs; cat .cargo/* 2>/dev/null | head -20; which rustup cargo || echo NO_CARGO
cd /tmp && (curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain 1.96.1 -c clippy,rustfmt) 2>&1 | tail -5; echo rc=$?; ls ~/.cargo/bin 2>/dev/null | head; which gcc cc pkg-config || echo MISSING_BUILD_TOOLS
cd <guest-path> && sudo -n apt-get update -qq >/dev/null 2>&1; sudo -n DEBIAN_FRONTEND=noninteractive apt-get install -y -qq build-essential pkg-config >/tmp/apt.log 2>&1; echo apt=$?; export PATH=$HOME/.cargo/bin:$PATH; cargo --version && (cargo build --release 2>&1 | tail -15); echo build_rc=${PIPESTATUS[0]}
cd <guest-path> && grep -rniE 'zig' CONTRIBUTING.md AGENTS.md justfile flake.nix nix/ 2>/dev/null | head -30; ls scripts; uname -m
mkdir -p ~/.local/zig && cd ~/.local/zig && curl -fsSL -o zig.tar.xz https://ziglang.org/download/0.16.0/zig-x86_64-linux-0.16.0.tar.xz; echo dl=$?; ls -la zig.tar.xz 2>/dev/null && tar -xJf zig.tar.xz --strip-components=1 && ./zig version
cd <guest-path> && export PATH=$HOME/.cargo/bin:$HOME/.local/zig:$PATH ZIG=$HOME/.local/zig/zig && (cargo build --release > /tmp/cargo-build.log 2>&1); echo build_rc=$?; tail -5 /tmp/cargo-build.log; ls -la target/release/herdr 2>/dev/null && target/release/herdr --version
cd <guest-path> && target/release/herdr --help; echo rc=$?; for s in workspace pane tab server; do echo "== $s"; target/release/herdr $s --help 2>&1 | head -30; done
cd <guest-path> && export PATH=$HOME/.local/bin:$PATH; target/release/herdr status 2>&1; echo rc=$?; target/release/herdr workspace create --help 2>&1 | head -30; target/release/herdr workspace list --help 2>&1 | head -15
cd <guest-path> && timeout 20 target/release/herdr workspace list; echo rc=$?; target/release/herdr status | head -8
cd <guest-path> && nohup target/release/herdr server > /tmp/herdr-server-run.log 2>&1 &
sleep 4; target/release/herdr status | head -12; echo; target/release/herdr workspace list; echo list_rc=$?
pwd; H=<guest-path>; sleep 2; pgrep -af 'herdr server' ; tail -5 /tmp/herdr-server-run.log 2>/dev/null; $H status | head -12; $H workspace list; echo list_rc=$?
H=<guest-path>; $H api --help 2>&1 | head -30; echo ===; $H config --help 2>&1 | head -15; echo ===; $H session --help 2>&1 | head -15; echo ===; $H workspace create --cwd /tmp --label coldpass-probe; echo create_rc=$?
ls -la <guest-path> 2>&1; grep -nE 'stays_running|expected_file|kill|SIGTERM|stop' <guest-path> 2>/dev/null | head -40; ls /inputs 2>&1
H=<guest-path>; $H server stop; echo stop_rc=$?; sleep 2; pgrep -af 'release/herdr server' || echo NO_SERVER; cd <guest-path> && grep -rniE '\b(cron|--once|--now|webhook|scheduler|interval)\b' src --include=*.rs | head -10; echo ===; sed -n 1,40p justfile; which just || echo NO_JUST
pgrep -x herdr || echo NO_HERDR_PROCS; cd <guest-path> && sed -n 1,60p src/app/tab_bar_status.rs
sudo -n DEBIAN_FRONTEND=noninteractive apt-get install -y -qq just >/tmp/apt-just.log 2>&1; echo apt_just=$?; just --version; export PATH=$HOME/.cargo/bin:$HOME/.local/zig:$PATH; (cargo install cargo-nextest --locked > /tmp/nextest-install.log 2>&1); echo nextest_rc=$?; tail -3 /tmp/nextest-install.log; cargo nextest --version 2>&1 | head -2
cd /tmp && curl -fsSL https://bun.sh/install -o /tmp/bun-install.sh && (BUN_INSTALL=$HOME/.bun bash /tmp/bun-install.sh > /tmp/bun-install.log 2>&1); echo bun_rc=$?; tail -2 /tmp/bun-install.log; $HOME/.bun/bin/bun --version; python3 --version
sudo -n DEBIAN_FRONTEND=noninteractive apt-get install -y -qq unzip >/tmp/apt-unzip.log 2>&1; echo unzip_rc=$?; cd /tmp && (BUN_INSTALL=$HOME/.bun bash /tmp/bun-install.sh > /tmp/bun-install.log 2>&1); echo bun_rc=$?; tail -2 /tmp/bun-install.log; $HOME/.bun/bin/bun --version
cd <guest-path> && export PATH=$HOME/.cargo/bin:$HOME/.local/zig:$HOME/.bun/bin:$PATH ZIG=$HOME/.local/zig/zig && (just test > /tmp/just-test.log 2>&1); echo just_test_rc=$?; tail -25 /tmp/just-test.log
export PATH=$HOME/.cargo/bin:$PATH; (cargo install just --locked > /tmp/just-install.log 2>&1); echo rc=$?; tail -2 /tmp/just-install.log; cd <guest-path> && export PATH=$HOME/.cargo/bin:$HOME/.local/zig:$HOME/.bun/bin:$PATH ZIG=$HOME/.local/zig/zig && just --version && (just test > /tmp/just-test.log 2>&1); echo just_test_rc=$?; tail -30 /tmp/just-test.log
free -m; nproc; dmesg 2>/dev/null | tail -3; df -h /tmp | tail -1
cd <guest-path> && export PATH=$HOME/.cargo/bin:$HOME/.local/zig:$HOME/.bun/bin:$PATH ZIG=$HOME/.local/zig/zig CARGO_BUILD_JOBS=1 CARGO_PROFILE_DEV_DEBUG=0 CARGO_PROFILE_TEST_DEBUG=0 && (timeout 3000 just test > /tmp/just-test.log 2>&1); echo just_test_rc=$?; grep -E 'Summary|FAIL|error|panicked|SIGKILL' /tmp/just-test.log | tail -20; tail -15 /tmp/just-test.log
cd <guest-path> && sed -n 115,130p justfile; grep -rn '"engines"' -A3 scripts/docs/package.json docs/package.json package.json 2>/dev/null; find . -name package.json -not -path './target/*' -not -path '*/node_modules/*' | head; grep -rniE 'node ?(version|>=|[0-9]+)|nodejs' .github/workflows/*.yml 2>/dev/null | head -5; ls /usr/bin/node /usr/local/bin/node 2>&1 | head -2
cd <guest-path> && grep -rn -A3 'setup-node\|node-version' .github/ scripts/ 2>/dev/null | head -20; grep -rn "spawnSync\|execFileSync" scripts/docs/preview.integration.test.ts | head -3; grep -rn "NODE_USE_ENV_PROXY" . --include=*.md --include=*.yml --include=*.sh 2>/dev/null | head -3
export NODE_USE_ENV_PROXY=1; cd /tmp && F=$(curl -fsSL https://nodejs.org/dist/latest-v22.x/ | grep -oE 'node-v22\.[0-9.]+-linux-x64\.tar\.xz' | head -1); echo file=$F; curl -fsSL -o /tmp/$F https://nodejs.org/dist/latest-v22.x/$F && mkdir -p $HOME/.local/node && tar -xJf /tmp/$F -C $HOME/.local/node --strip-components=1 && $HOME/.local/node/bin/node --version && $HOME/.local/node/bin/npm --version
cd <guest-path> && export NODE_USE_ENV_PROXY=1 PATH=$HOME/.cargo/bin:$HOME/.local/zig:$HOME/.bun/bin:$HOME/.local/node/bin:$PATH ZIG=$HOME/.local/zig/zig CARGO_BUILD_JOBS=1 CARGO_PROFILE_DEV_DEBUG=0 CARGO_PROFILE_TEST_DEBUG=0 && node --version && npm --version && (timeout 3000 just test > /tmp/just-test2.log 2>&1); echo just_test_rc=$?; grep -E 'Summary|error:|recipe' /tmp/just-test2.log | tail -15; tail -6 /tmp/just-test2.log
sed -n 1195,1225p <guest-path>
cd <guest-path> && mkdir -p .coldpass && H=<guest-path> && cat > .coldpass/probe.json <<'EOF'
{"kind":"cli","argv":["<guest-path>","server"],"cwd":"<guest-path>","stays_running":true,"expected_text":"herdr server running"}
EOF
cat > .coldpass/claims.json <<'EOF'
[{"kind":"claim","claim":"herdr keeps terminals running in a background server","source":"herdr keeps terminals running in a background server when you close the client or lose your SSH connection.","input":"herdr server","expected":"the headless background server starts and reports it is running","probe_kind":"cli","argv":["<guest-path>","server"],"stays_running":true,"expected_text":"herdr server running","cwd":"<guest-path>"}]
EOF
cat > .coldpass/examples.json <<'EOF'
[{"kind":"example","claim":"just test runs the repository's documented test recipes; this runs its docs-contract recipe","source":"justfile docs-contract-test (README.md development section: just test)","input":"just docs-contract-test","expected":"bun docs tests pass","argv":["just","docs-contract-test"],"cwd":"<guest-path>","env":{"PATH":"<guest-path>","NODE_USE_ENV_PROXY":"1"},"expected_text":"Ran 7 tests across 3 files"}]
EOF
cat > .coldpass/cycles.json <<'EOF'
{"detected":false,"reason":"Inspected README.md and CLI help (herdr, server, workspace, pane, tab, session, config, api): no cron, scheduler, --once, --now or webhook entry point. The only interval loop is the in-TUI tab bar status command runner (src/app/tab_bar_status.rs), which runs inside the interactive TUI and is not a README promise; it cannot be triggered once from the CLI.","checks":[]}
EOF
for f in probe claims examples cycles; do python3 -I -c "import json,sys;json.load(open(sys.argv[1]));print('ok',sys.argv[1])" .coldpass/$f.json; done; <env-var>=<guest-path> python3 -I <guest-path> --validate --replay 2>&1 | tail -60; echo checker_rc=${PIPESTATUS[0]}
H=<guest-path>; $H api schema > /tmp/api-schema-manual.json 2>/tmp/api-schema.err; echo rc=$?; cat /tmp/api-schema.err | head -3; wc -c /tmp/api-schema-manual.json; head -c 400 /tmp/api-schema-manual.json; echo; grep -o '"workspace[._a-z]*"' /tmp/api-schema-manual.json | sort -u | head; pgrep -x herdr || echo NO_HERDR
H=<guest-path>; $H api schema --json > /tmp/api-schema-json.txt; echo rc=$?; wc -c /tmp/api-schema-json.txt; grep -oE '"(method|type|name)": *"[a-z_.]*workspace[a-z_.]*"' /tmp/api-schema-json.txt | sort -u | head -8; grep -oE 'workspace_(create|list)[a-z_]*' /tmp/api-schema-json.txt | sort -u | head
cd <guest-path> && cat > .coldpass/claims.json <<'EOF'
[{"kind":"claim","claim":"agents drive herdr through the cli and socket api","source":"agents drive herdr through the cli and socket api","input":"herdr api schema","expected":"the bundled socket API schema is printed with its request and response schema list","probe_kind":"cli","argv":["<guest-path>","api","schema"],"expected_text":"schemas: error_response, event, request, subscription_event, success_response","cwd":"<guest-path>"}]
EOF
python3 -I -c "import json;json.load(open('.coldpass/claims.json'));print('ok')"; <env-var>=<guest-path> python3 -I <guest-path> --validate --replay > /tmp/checker1.out 2>&1; echo checker_rc=$?; python3 -I -c "
import json,sys
d=json.load(open('/tmp/checker1.out')) if False else None
" ; head -c 1500 /tmp/checker1.out; echo; grep -o '"problems": \[[^]]*\]' /tmp/checker1.out | head -c 800
cd <guest-path> && mkdir -p .coldpass && cat > .coldpass/report.json <<'EOF'
{
  "outcome": "working",
  "fault_owner": null,
  "operation": "herdr server (headless) start and CLI socket API operation",
  "operation_scope": "Linux x86_64 (Ubuntu 24.04, 4 GB RAM, 2 CPUs); Rust 1.96.1; Zig 0.16.0; Node 22.23.4; bun 1.4.4; just 1.59.0; cargo-nextest 0.9.149; Python 3.12.3",
  "steps": [
    "Ran README installer: curl -fsSL https://herdr.dev/install.sh | sh (installed release 0.9.5 to ~/.local/bin)",
    "Installed prerequisites for source build: rustup toolchain 1.96.1 with clippy and rustfmt, build-essential, pkg-config, Zig 0.16.0",
    "Built pinned source with cargo build --release (target/release/herdr, 0.9.5)",
    "Installed just, cargo-nextest, Node, bun, unzip for the documented development recipes",
    "Ran just test (documented test recipe): rc 0",
    "Ran herdr server (headless) and verified it reports the socket paths",
    "Exercised socket API via herdr workspace create/list against the running server, then stopped it with herdr server stop",
    "Replayed claim with herdr api schema: prints schemas error_response, event, request, subscription_event, success_response",
    "Ran checker: <env-var>=<guest-path> python3 -I <guest-path> --validate --replay: valid true, no problems"
  ],
  "deviations": [
    "The README installer installs the latest release (0.9.5), not a build of the pinned commit; the pinned commit was built separately from source with cargo.",
    "Source build needed installs not stated in the README: rustup, Zig 0.16.0, build-essential, pkg-config, unzip, Node, bun, just (cargo install, since apt just 1.21 rejects the [script] attribute), cargo-nextest.",
    "Debug test build was SIGKILLed on 4 GB RAM; reran with CARGO_BUILD_JOBS=1, CARGO_PROFILE_DEV_DEBUG=0, CARGO_PROFILE_TEST_DEBUG=0, which succeeded.",
    "Claims cannot use stays_running (120 s window), so the server-start claim was replaced with the finite herdr api schema command; the server-start behaviour is covered by the stays_running probe.",
    "Cycle check: detected false. The only interval loop is the in-TUI tab bar status runner, which is not a README promise and cannot be triggered from the CLI."
  ],
  "stuck_step": null,
  "main_blocker": null,
  "plain_failure": null,
  "suggested_fix": null
}
EOF
python3 -I -c "import json;json.load(open('.coldpass/report.json'));print('report ok')"; pgrep -x herdr || echo "no herdr server running"; <env-var>=<guest-path> python3 -I <guest-path> --validate --replay > /tmp/checker2.out 2>&1; echo rc=$?; grep -o '"valid": [a-z]*' /tmp/checker2.out; grep -o '"problems": \[[^]]*\]' /tmp/checker2.out
Earlier attempts (1)

Luna

Native agent · Not tested (blocked: setup step)

Operation / attempted scope partial checks

Agent-reported scope: cargo build --release

Run details
run
herdrdev--herdr-gpt-6-luna-1792783999196387178
date
Oct 23, 2026
time to working
not established
product hosting / execution
Not recorded
recorded operation scope
partial checks
model
gpt-6-luna
agent / version
codex / codex-cli 0.163.0
platform
linux
reported cost
not reported (not assumed free)
Recorded source
https://github.com/herdrdev/herdr
Backend
hyperv
Tool transport
mcp-assigned-vm
Requested source pin (not an observed revision)
{"commit": "43b36b68caf593e7623fa389462d8ba097edcb11", "url": "https://github.com/herdrdev/herdr"}
Test version
readme-f72312298d35d84837d4fc5f6f22b138d54d456600b5ed431e36e8f5db931dbf
revision
43b36b68caf593e7623fa389462d8ba097edcb11
Whose fault: prerequisite · diagnosed

The guest has no `cc` linker and no usable passwordless sudo.

Recorded blocker / warning

Step: Install a C compiler and rerun the documented build.

The guest has no `cc` linker and no usable passwordless sudo.

Safety: Review signals: 1 hardcoded secret, 9 known vulnerability. 6 static matches retained as context.

Review signals: 1 hardcoded secret, 9 known vulnerability. 6 static matches retained as context.

Gitleaks found a possible hardcoded secret; value withheld. src/platform/windows/notifications.rs

OSV reports a known vulnerability in this dependency version. 8 distinct locations. 9 findings.

6 hardcoded secret matches retained as context; full list in the evidence.

OSV scanned supported lockfiles; unpinned dependencies and unsupported formats are outside this check.

A short run cannot establish that code is safe.

Connections show IP addresses; proxies can hide the final hostname.

Tracing covers dispatched commands and their children, not the whole OS; guest root can interfere with tracing.

Full safety evidence →

Partial install / setup / connection checks
[
  {
    "status": "PASS",
    "details": {
      "working": false,
      "argv": [
        "cargo",
        "build",
        "--release"
      ],
      "kind": "cli",
      "returncode": 101,
      "stdout": "",
      "stderr": "   Compiling proc-macro2 v1.0.106\n   Compiling quote v1.0.45\nerror: linker `cc` not found\n  |\n  = note: No such file or directory (os error 2)\n\nerror: could not compile `quote` (build script) due to 1 previous error\nwarning: build failed, waiting for other jobs to finish...\nerror: could not compile `proc-macro2` (build script) due to 1 previous error",
      "needs_credentials": false,
      "needs_browser": false,
      "scope": "partial: install"
    },
    "check": "install",
    "optional": false
  }
]
Answers recorded for this run
  • Herdr builds as a release binary with the documented Cargo command.: The supported Rust toolchain installed, but the build failed: error: linker `cc` not found. `sudo -n true` also failed in the guest, preventing installation of the required system compiler.

    Source: cargo build --release

    Observed: The supported Rust toolchain installed, but the build failed: error: linker `cc` not found. `sudo -n true` also failed in the guest, preventing installation of the required system compiler.

Examples

  • README release build requires unavailable system C compiler: The documented `cargo build --release` was attempted and failed with `error: linker `cc` not found`; `sudo -n true` returned failure, so the system compiler prerequisite cannot be installed.

    Source: README.md development

    Expected: documented command completes successfully

    Observed: The documented `cargo build --release` was attempted and failed with `error: linker `cc` not found`; `sudo -n true` returned failure, so the system compiler prerequisite cannot be installed.

Local or hosted: local

Suggested next step (unverified): Provide a guest with a C toolchain (for example, build-essential) or working passwordless sudo, then rerun `cargo build --release`.

What the agent did

cargo build --release

cd <guest-path> && vault-search 'herdr MCP README operation' 2>&1; cat <host-path> 2>&1; printf '\n--- skills ---\n'; cat ~/.agents/skills/i-have-adhd/SKILL.md 2>&1; cat ~/.agents/skills/ponytail/SKILL.md 2>&1; cat ~/.agents/skills/p3-mode/SKILL.md 2>&1; printf '\n--- repository ---\n'; rg --files -g 'AGENTS.md' -g 'README*' -g 'pyproject.toml' -g 'package.json' -g 'requirements*' -g 'Makefile' -g '.github/workflows/*' .; git status --short --branch; git rev-parse HEAD; git remote -v;
pwd; ls -la <guest-path>; find <guest-path> -maxdepth 3 -type f | head -80;
cd <guest-path> && cat README.md; cat rust-toolchain.toml; cat AGENTS.md; cat Cargo.toml; git status --short --branch; git rev-parse HEAD; git remote -v; rustc --version; cargo --version; python3 --version; sed -n '1,200p' .github/workflows/ci.yml
cd <guest-path> && id -u; ls -la .coldpass; ls -la ~/.cargo ~/.rustup 2>&1; command -v sudo; sudo -n true; command -v curl; env | sort | grep -Ei 'proxy|cargo|rust'
cd <guest-path> && sudo -n true; curl -fsSL https://sh.rustup.rs -o /tmp/herdr-rustup.sh && sh /tmp/herdr-rustup.sh -y --default-toolchain 1.96.1 --component clippy,rustfmt
cd <guest-path> && git init && git remote add origin https://github.com/herdrdev/herdr && git fetch --depth 1 origin 43b36b68caf593e7623fa389462d8ba097edcb11 && git reset --mixed FETCH_HEAD && sed -n '1,160p' distribution/install.sh 2>/dev/null || true
cd <guest-path> && HOME=<host-path> PATH=<host-path> cargo build --release
ls -la <host-path> <host-path> 2>&1; find <guest-path> -maxdepth 2 -type f -print -exec cat {} \;
find <guest-path> -maxdepth 3 -type f -name cargo -o -name rustc; ls -la <guest-path>; ls -la /root/.cargo/bin 2>&1
cd <guest-path> && PATH=<guest-path> cargo build --release
cd <guest-path> && mkdir -p .coldpass && cat > .coldpass/claims.json <<'EOF'
[{"kind":"claim","claim":"Herdr builds as a release binary with the documented Cargo command.","source":"cargo build --release","testable":false,"reason":"The supported Rust toolchain installed, but the build failed: error: linker `cc` not found. `sudo -n true` also failed in the guest, preventing installation of the required system compiler."}]
EOF
cat > .coldpass/probe.json <<'EOF'
{"kind":"cli","argv":["cargo","build","--release"],"cwd":"<guest-path>","env":{"PATH":"<guest-path>"},"expected_returncode":101,"expected_text":"error: linker `cc` not found"}
EOF
cat > .coldpass/examples.json <<'EOF'
[{"kind":"example","claim":"Build using the README development command","source":"README.md development","argv":["cargo","build","--release"],"cwd":"<guest-path>","env":{"PATH":"<guest-path>"},"expected_returncode":101,"expected_text":"error: linker `cc` not found"}]
EOF
cat > .coldpass/cycles.json <<'EOF'
{"detected":false,"reason":"README describes an interactive terminal runtime started with `herdr`; this guest cannot build or launch it because the documented Cargo build fails with `linker cc not found` and system package installation is blocked by unavailable passwordless sudo.","checks":[]}
EOF
cat > .coldpass/report.json <<'EOF'
{"outcome":"blocked","fault_owner":"prerequisite","operation":"cargo build --release","operation_scope":"README development build; Rust 1.96.1 installed, C compiler unavailable","steps":["Installed the README-required Rust toolchain 1.96.1 via rustup.","Ran the README development command `cargo build --release`.","Attempted to verify sudo access for system prerequisite installation."],"deviations":["Build failed: error: linker `cc` not found.","`sudo -n true` failed, so the missing compiler could not be installed."],"stuck_step":"Install a C compiler and rerun the documented build.","main_blocker":"The guest has no `cc` linker and no usable passwordless sudo.","plain_failure":"Herdr did not build because the Linux guest lacks a C compiler. Installing the compiler is blocked because sudo access is unavailable.","suggested_fix":"Provide a guest with a C toolchain (for example, build-essential) or working passwordless sudo, then rerun `cargo build --release`."}
EOF
<env-var>=<guest-path> python3 -I <guest-path> --validate --replay
cd <guest-path> && python3 - <<'PY'
import json
p='.coldpass/probe.json'; x=json.load(open(p)); x['checks']=[{'check':'install','argv':['cargo','build','--release'],'cwd':'<guest-path>','env':{'PATH':'<guest-path>'},'expected_returncode':101,'expected_text':'error: linker `cc` not found'}]; x.pop('expected_returncode',None); x.pop('expected_text',None); json.dump(x,open(p,'w'))
PY
<env-var>=<guest-path> python3 -I <guest-path> --validate --replay
cd <guest-path> && cat > .coldpass/examples.json <<'EOF'
[{"kind":"example","claim":"README release build requires unavailable system C compiler","source":"README.md development","reason":"The documented `cargo build --release` was attempted and failed with `error: linker `cc` not found`; `sudo -n true` returned failure, so the system compiler prerequisite cannot be installed."}]
EOF
<env-var>=<guest-path> python3 -I <guest-path> --validate --replay