5.6 KiB
Code Review: .agents/skills/lib.sh — agy TOS-seeding fix + send_keys_safe cline/claude paste-check skip
Scope
This diff (3846d99..f2e23c1) contains two hunks in .agents/skills/lib.sh:
- The
provision_isolation()agy-arm TOS/onboarding seeding addition (identical to the diff already reviewed under jobsb803c6e5,afd375ef,8f8b6d63— no changes since). - New: a
send_keys_safe()change that skips the strict paste-visibility check for sessions whose name matchesclineorclaude.
git diff -- .agents/skills/lib.sh matches the diff quoted in this brief byte-for-byte; the working tree has not drifted.
"No other files changed" check
git status --short:
M .agents/skills/lib.sh— the only tracked-file modification.?? .agents/skills/multi-agent-mux-delegate-job/multi-agent-mux-delegate-job.<pid>_<n>.tmp— untracked, transient atomic-write temp copy of the job-runner orchestrator script itself (same pattern observed in prior review passes), not a code change.
Confirmed: no files other than .agents/skills/lib.sh contain reviewable changes.
Hunk 1 — provision_isolation agy TOS seeding (re-verified, unchanged)
Already verified in full in the three prior reviews of this exact content:
- Syntax OK (
bash -n). - Correctly scoped to
agy'shome-lever isolation; all new paths (~/.gemini/antigravity,~/.gemini/config, macOSLibrary/Preferencesplists,Library/Application Support/Antigravity,Library/Group Containers/group.com.google.gemini, Linux XDG fallback) match real, live paths verified against this machine's actual$HOME, and correctly exclude the unrelated Antigravity IDE product. - One pre-existing, cosmetic-only nit carried forward: three Darwin-branch
seeded="$seeded,<path>"assignments omit the${seeded:+$seeded,}guard used elsewhere, which could produce a leading comma in theseededlog string if no earlier segment fired — inert today because the sole consumer (create_session.sh:339) filters falsy split segments. Not a functional bug.
Hunk 2 — send_keys_safe() cline/claude skip (new)
local was_popup=0
if [[ "$sess" =~ "cline" ]] || [[ "$sess" =~ "claude" ]]; then
# Skip strict paste check due to scrollout false-positives, proceed to C-m loop
true
else
sleep 0.5
local pane_content
pane_content=$(_pane_capture "$sess")
...
fi
- Consistent with existing convention: three lines above (unchanged, pre-existing context), the function already special-cases
if [[ "$sess" =~ "agy" ]]to skip all verification and return unconditionally. The newcline/claudebranch is less aggressive — it only skips step-3 (paste-visibility check) and still runs the step-4 submission-verification retry loop (marker-left-tail / pane-changed / spinner-token checks) below, so it is more conservative than the pre-existingagyshortcut, not a new pattern. =~with quoted RHS:[[ "$sess" =~ "cline" ]]— quoting the right-hand side of=~makes bash treat it as a literal substring match rather than a regex (a real but benign shellcheck SC2076-class nit;[[ "$sess" == *cline* ]]would be the idiomatic form). This exactly mirrors the pre-existing, unchangedagycheck one line above, so it is a style consistency choice, not a regression introduced by this diff.- Session-name matching is safe under this project's naming convention: session names embed the agent name as a suffix (e.g.
...-creator-claude,...-creator-agy), matching the pattern already relied upon by the pre-existingagycheck, so substring matching oncline/claudeis not expected to produce false hits from unrelated workspace/repo names. - Trade-off worth naming explicitly: skipping the paste-visibility check for claude/cline means a genuine paste failure (not just a scrollback false-positive) for those two agents will no longer be caught at step 3 (
return 3); it now depends entirely on the step-4 retry loop's heuristics (spinner tokens, marker leaving the tail, pane-content diff) to detect submission. This is a reasonable, bounded trade-off given the stated motivation (documented false positives breaking real pastes for these two TUIs), and downgrades detection rather than removing it — but it is a live-environment behavior change I cannot execute/observe directly in this review (no interactive herdr/tmux cline or claude pane available here to reproduce the described scrollback false-positive or confirm the retry loop still catches a true paste failure). Flagging as the one item that would benefit from a manual smoke test (send a real multi-line prompt to aclaude-suffixed session and confirm it submits correctly) rather than as a defect. - Variable scoping: splitting
local pane_content was_popup=0intolocal was_popup=0(outer) andlocal pane_content(inner, else-only) is correct —was_popupis used unconditionally later in the retry loop,pane_contentonly inside the branch that declares it. bash -npasses; no unbound-variable or quoting issues found in this hunk.
Verdict
Both hunks are correctly scoped (only .agents/skills/lib.sh, only their respective functions), syntactically valid, and internally consistent with existing patterns in the same file. Hunk 1 is a repeat-verified TOS/onboarding fix with no functional issues. Hunk 2 is a targeted flakiness fix that follows the file's existing per-agent-shortcut convention and is more conservative than the precedent it sits next to; its only real risk (masked true paste failures for claude/cline) is a bounded, intentional trade-off that would ideally get a live smoke test, but nothing here indicates the fix is wrong or requires a redesign.
[VERDICT: PASS]