hive.terminal-tools-troubleshooting — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited hive.terminal-tools-troubleshooting (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Recipes for surprising results. Match the symptom to the section.
stdout despite the command "should have" produced outputPossible causes:
stderr in the envelope (or use merge_stderr=True for jobs).max_output_kb is too small. Check stdout_truncated_bytes > 0. Bump max_output_kb or paginate via output_handle.silent flags, no matches).> /dev/null, redirected via 2>&1).stdbuf -oL (line-buffered) or unbuffer to the command.exit_code: null| Cause | Other field |
|---|---|
| Auto-backgrounded | auto_backgrounded: true, job_id: <X> |
| Hard timeout, process killed | timed_out: true |
| Pre-spawn failure (command not found) | error: ... set, pid: null |
Still running (in terminal_job_logs) | status: "running" |
output_handle returned expired: true5-minute TTL. Either (a) you waited too long, or (b) the store evicted it under memory pressure (64 MB total cap, LRU eviction). Re-run the command.
To reduce risk: paginate the handle as soon as you receive it, or use terminal_job_* for huge outputs (4 MB ring buffer with offsets — no expiry).
JobLimitExceededTERMINAL_TOOLS_MAX_JOBS (default 32) hit. Either:
terminal_job_logs(wait_until_exit=True))terminal_job_manage(action="list") to see what's running, then signal_term the abandoned onesA terminal_pty_run was issued while another _run is in flight on the same session. PTY sessions are single-threaded conversations. Wait for the prior call to return, or open a second session.
TERMINAL_TOOLS_MAX_PTY (default 8) hit. Close idle sessions (terminal_pty_close). Idle reaping is lazy; force it by opening — no, actually, opening throws when the cap is hit. Just close manually.
warning is set, the command workedInformational only. The pattern matched (e.g. rm -rf literally appears, or git push --force was used). The command ran. The warning is your "did I mean to do that?" prompt — verify the side effect was intended before continuing.
semantic_status: "ok" but exit_code: 1Working as designed. Some commands use exit 1 for legitimate non-error states:
grep / rg exit 1 when no matches foundfind exit 1 when some directories were unreadable (typical on /proc, etc.)diff exit 1 when files differtest / [ exit 1 when condition is falseThe semantic_message field explains. Trust semantic_status, not raw exit_code.
semantic_status: "error" but exit_code: 0Shouldn't happen. If it does, file a bug.
truncated_bytes_dropped > 0 in terminal_job_logsYour since_offset was older than the ring buffer's floor — bytes evicted before you could read them. Either:
merge_stderr=True (single 4 MB ring instead of 4 MB × 2)next_offsetterminal_pty_open succeeds but the first _run times outThe session may not have produced its first prompt sentinel within the 2-second startup window. Try:
terminal_pty_run(sid, read_only=True, timeout_sec=2) to drain whatever's accumulatedterminal_pty_run(sid, command="true")) to force a prompt cycleCould also indicate the bash process died at startup — terminal_pty_run(sid, ...) would then return "session has exited".
shell="/bin/zsh" returned an errorBy design. terminal-tools is bash-only on POSIX. Use shell=True (default /bin/bash) or omit shell= to exec directly.
shell=True is interpreted differently than expectedBash, not zsh, semantics. **/* doesn't recurse without shopt -s globstar; =cmd expansion doesn't work; arrays use arr[idx] not ${arr[idx]} differently than zsh. When in doubt, the foundational skill's "bash, not zsh" section is the canonical statement.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.