memory: correct pi --mode json gotcha (blocks on stdin, fix is </dev/null)

Co-Authored-By: Claudypoo <288921227+claudypoo@users.noreply.github.com>
This commit is contained in:
wassname
2026-06-06 13:48:59 +00:00
parent b8efd42d2f
commit a3ac381724
+9 -6
View File
@@ -1,6 +1,6 @@
---
name: bash-tool-shell-gotchas
description: Bash-tool zsh has noclobber ON and pi --mode json gives 0 bytes (non-tty); workarounds
description: Bash-tool zsh has noclobber ON; pi --mode json hangs on stdin (fix: </dev/null); workarounds
metadata:
node_type: memory
type: feedback
@@ -14,11 +14,14 @@ fails with `file exists: <path>` and writes 0 bytes.
Two recurring consequences and fixes:
1. **`pi --mode json` writes to the tty, not stdout.** In this non-tty shell,
`pi ... | extractor` or `pi ... > file` yields 0 bytes (silently). Fix: skip pi,
hit OpenRouter HTTP directly — see `~/.claude/skills/external-review/panel_direct.py`
(stdlib-only, reads key from /root/.env). This is the robust path for the
external-review comprehension panel and external-panel Q&A.
1. **`pi --mode json` HANGS waiting on stdin in the Bash tool** (exit 124 on timeout,
0 bytes, even on a fast valid model; text mode works fine). The earlier "writes to
tty" diagnosis was wrong. Real fix: redirect `</dev/null` so pi sees EOF on stdin and
runs non-interactively. Full working recipe (external-review skill + the one missing bit):
`pi --model openrouter/<slug> --no-tools --no-skills -nc --system-prompt "$SYS" -p "$P" --mode json </dev/null | jq -j --unbuffered 'select(.type=="message_update" and .assistantMessageEvent.type=="text_delta") | .assistantMessageEvent.delta' | tee out.md`
tee is correct (skill uses it); do NOT pkill -f (kills the launching shell). Slugs: verify
with `pi --list-models | grep ^openrouter` — a bad slug ALSO hangs silently. panel_direct.py
(HTTP direct, reads /root/.env) stays a fallback but `</dev/null` makes plain pi work.
2. **noclobber refuses `>` onto existing files.** Use `>|` to force-overwrite, or
`rm -f` first, or have the program write the file itself (Python `Path.write_text`,