Files
multi-agent-mux/.agents/reports/canary-projects-multi-agent-mux-creator-claude/report-e1c4d86b.md
T

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:

  1. The provision_isolation() agy-arm TOS/onboarding seeding addition (identical to the diff already reviewed under jobs b803c6e5, afd375ef, 8f8b6d63 — no changes since).
  2. New: a send_keys_safe() change that skips the strict paste-visibility check for sessions whose name matches cline or claude.

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's home-lever isolation; all new paths (~/.gemini/antigravity, ~/.gemini/config, macOS Library/Preferences plists, 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 the seeded log 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 new cline/claude branch 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-existing agy shortcut, 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, unchanged agy check 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-existing agy check, so substring matching on cline/claude is 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 a claude-suffixed session and confirm it submits correctly) rather than as a defect.
  • Variable scoping: splitting local pane_content was_popup=0 into local was_popup=0 (outer) and local pane_content (inner, else-only) is correct — was_popup is used unconditionally later in the retry loop, pane_content only inside the branch that declares it.
  • bash -n passes; 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]