fix: prevent silent abort in piped install when interactive prompts fail (#69) - #72
Merged
teknium1 merged 2 commits intoFeb 27, 2026
Merged
Conversation
…ail (NousResearch#69) Root cause: the install script uses `set -e` (exit on error) and `read -p` for interactive prompts. When running via `curl | bash`, stdin is a pipe (not a terminal), so `read -p` hits EOF and returns exit code 1. Under `set -e`, this silently aborts the entire script before hermes is installed. Fix: detect non-interactive mode using `[ -t 0 ]` (standard POSIX test for terminal stdin) and skip all interactive prompts when running in piped mode. Clear messages are shown instead, telling the user what to run manually. Changes: - Add IS_INTERACTIVE flag at script start ([ -t 0 ] check) - Guard sudo package install prompt (the direct cause of NousResearch#69) - Guard setup wizard (calls interactive hermes setup) - Guard WhatsApp pairing and gateway install prompts All other prompts use the same read -p pattern and would fail the same way in piped mode, so they are all guarded for completeness. Closes NousResearch#69
angelburgosrosado
pushed a commit
to angelburgosrosado/hermes-agent
that referenced
this pull request
Apr 27, 2026
…silent-abort fix: prevent silent abort in piped install when interactive prompts fail (NousResearch#69)
3 tasks
waefrebeorn
pushed a commit
to waefrebeorn/slermes
that referenced
this pull request
Jul 2, 2026
…silent-abort fix: prevent silent abort in piped install when interactive prompts fail (NousResearch#69)
Meraniya
pushed a commit
to Meraniya/hermes-agent
that referenced
this pull request
Aug 6, 2026
PR NousResearch#71 made the cron ticker self-heal after a stall, but the restart was silent — the original 17h stall went unnoticed precisely because nothing announced it. This surfaces the event: when the supervisor detects a stale heartbeat and restarts the ticker, it now sends a home-channel alert (reusing the existing cron home-channel delivery path), gated behind cron.supervisor_alerts (default on) with a 15-min cooldown to prevent alert storms on a flapping ticker. The alert send is fully exception- isolated so it can never delay or block ticker recovery. Claude-Session: https://claude.ai/code/session_01PQKCc5mDedYAiCNyXnTezh Co-authored-by: Claude <noreply@anthropic.com>
Meraniya
pushed a commit
to Meraniya/hermes-agent
that referenced
this pull request
Aug 6, 2026
…, NousResearch#69) and mark arc complete (NousResearch#76) Session close-out audit found the Outcome section only mentioned PR NousResearch#67. PR NousResearch#69 explicitly self-describes as "follow-up to NousResearch#67" (unsigned-commit git fallback) and PR NousResearch#68 (AGENTS.md docs) is also a direct follow-up; neither was recorded. Also clarifies that NousResearch#71/NousResearch#72 (cron ticker heartbeat/stall fix) are an unrelated arc shipped the same day, not part of this project. Claude-Session: https://claude.ai/code/session_01PQKCc5mDedYAiCNyXnTezh Co-authored-by: Claude <noreply@anthropic.com>
sijav
added a commit
to sijav/sijav-agent
that referenced
this pull request
Aug 7, 2026
… guard test (NousResearch#72) The Factory tab referenced CSS custom properties that are NEVER defined anywhere in the app, so every one silently resolved to its hardcoded `var(--x, <literal>)` fallback and stopped following the theme: * --ui-border x8 (0 definitions app-wide) * --accent x3 (0 definitions) * --border x2 (0 definitions) The fallbacks are dark-theme-tuned literals — `rgba(128,128,128,…)` chrome and a near-black `#2a2a2a` card border on the model-policy panel — which in LIGHT mode render as washed-out grey / harsh dark edges. That is the reported symptom (low-contrast, barely readable model panel). Remapped to tokens styles.css actually defines, matching each use's weight: --ui-border -> --ui-stroke-secondary / -tertiary / -quaternary --accent -> --ui-accent-secondary (the brand tone; --ui-accent is the midground surface, not a blue accent) --border -> --ui-stroke-secondary A var() fallback makes this class of bug INVISIBLE — the UI renders, just in the wrong colour — so it needs a test that resolves references against definitions. Added theme-tokens.test.ts, which parses every var() the plugin makes and asserts styles.css defines it, plus a vacuity check so a broken parser can't make it pass for the wrong reason. It caught 2 tokens beyond the 8 found by hand (--accent, --border) while being written. Scoped to the Factory plugin because the rest of the app is not yet clean: --muted-foreground (11 refs), --accent (6), --border (2) and --destructive (2) are still undefined app-wide, filed separately with the quick-entry <select> repro (transparent background + near-white inherited option colour). 18 Factory tests pass.
Soju06
added a commit
to Soju06/hermes-agent
that referenced
this pull request
Aug 19, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #69
Problem
The install script silently aborts when run via
curl | bashon systems wheresudorequires a password (e.g. fresh Debian 12 without ripgrep).Root cause: The script uses
set -e(line 16) which exits on any non-zero return code. When running viacurl | bash, stdin is a pipe — not a terminal. Theread -pcommand at line 471 (sudo package install prompt) hits EOF on the piped stdin and returns exit code 1. Underset -e, this silently kills the entire script beforeclone_repo,setup_path, etc. ever run.Result:
uvgets installed buthermesis never set up. No error message is shown.Reproduction
Fix
Detect non-interactive mode at script start using the standard POSIX test
[ -t 0 ](checks if stdin is a terminal). When running in piped mode, skip all interactive prompts and show clear messages telling the user what to run manually.This is the same approach used by
rustup,nvm, andoh-my-zshinstall scripts.Guarded prompts
install_system_packagessudo apt install ...command to run manuallyrun_setup_wizardhermes setuphermes setupto run after installmaybe_start_gatewayhermes whatsappto run latermaybe_start_gatewayhermes gateway installto run laterThe sudo prompt (row 1) is the direct cause of #69. The other three use the same
read -ppattern and would fail identically in piped mode, so they are guarded for completeness.Verification
Scope
Single file:
scripts/install.sh. No changes to Python code or agent behavior. Normal interactive installs (bash install.sh) are completely unaffected — the prompts work exactly as before when stdin is a terminal.