Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion configs/cli/claude/CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@ Chromeは2026-08-30に撤去した(Claude in Chrome拡張ごと)。拡張が
`terminal-browser action -- snapshot|click|fill|eval`。ssh越しも可
(`open --ssh user@host <url>`)。終わったら`terminal-browser shutdown`。
**必ず見えるペインを開く**(TTYが無くても右に分割する)ので、ユーザーの
目視が要らない場面では2で粘る。
目視が要らない場面では2で粘る。フォーカスは奪わない(上流は`--focus`を決め打ちで
渡すが、stdoutが端末でないときは外すようパッケージ側で当ててある)。人が打った
ときだけ移る。常に移したいなら`TERMINAL_BROWSER_FOCUS=1`。
Playwrightからは掴めない: CDPは出しているが**ポートが毎回変わる**
(実測 53218 → 53337)ので、固定の`--cdp-endpoint`にできない。`action`で操作する。
herdrの`[experimental] kitty_graphics`が要る(既定false)。切れているとペインは
Expand Down
22 changes: 22 additions & 0 deletions nix/pkgs/terminal-browser.nix
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,18 @@ stdenvNoCC.mkDerivation (finalAttrs: {
# ここでは実害が分かりやすく、署名が壊れた Electron は起動せず --help すら返さない。
find . -name '._*' -delete
find . -name '.DS_Store' -delete

# ペインを分けたときにフォーカスを奪わせない。terminal-browser は herdr の split に
# `--focus` を決め打ちで渡すので、エージェントが裏で 1 枚開くたびにユーザーの
# 入力先がブラウザのペインに飛ぶ。分割の後は全部明示的な pane id で動いている
# (swap も pane run も newPaneId を渡している) ので、外しても壊れない。
# 環境変数で切り替える形にして、判断は bin ラッパー側に置く。
# cli/dist/main.js は .app の外なので、ここを触っても同梱 Electron の署名は無事。
# cmux 側にも "--focus" があるが、そちらは別のリテラルなので巻き込まない。
substituteInPlace cli/dist/main.js \
--replace-fail \
'["--pane", from.id, "--direction", native, "--focus", ...ratio]' \
'["--pane", from.id, "--direction", native, ...(process.env.TERMINAL_BROWSER_NO_FOCUS ? [] : ["--focus"]), ...ratio]'
mkdir -p $out/libexec/terminal-browser $out/bin
cp -R . $out/libexec/terminal-browser/
# bin/terminal-browser は自分の symlink を辿ってバンドルを見つける /bin/sh ラッパーなので、
Expand Down Expand Up @@ -83,6 +95,16 @@ stdenvNoCC.mkDerivation (finalAttrs: {
# main.js は ~/.config に置かれるので、自分の居場所から CLI を辿れない。実体を渡す。
TERMINAL_BROWSER_CLI="\$real"
export TERMINAL_BROWSER_CLI

# 分割したペインにフォーカスを移すかどうか。人が打ったなら移す (見るために開いた
# はずなので)。エージェントが開いたなら移さない — 裏で 1 枚開くたびに入力先が
# ブラウザに飛ぶと、ユーザーが打っている最中に持っていかれる。
# 見分けは stdout が端末かどうか。エージェントはパイプ越しに叩くのでここで分かれる。
# TERMINAL_BROWSER_FOCUS=1 を置けば常に移す。
if [ ! -t 1 ] && [ "\''${TERMINAL_BROWSER_FOCUS:-}" != 1 ]; then
TERMINAL_BROWSER_NO_FOCUS=1
export TERMINAL_BROWSER_NO_FOCUS
fi
exec "\$real" "\$@"
WRAPPER
sed -i -e 's/^ //' $out/bin/terminal-browser
Expand Down
Loading