Repository navigation
fix(probe): let T3 Code's Claude chats join Relay on Linux - #2046
Conversation
On Linux, T3 Code runs as `/opt/T3 Code (<Channel>)/t3code` from the .deb, or as `$TMPDIR/.mount_<random>/t3code` from a running AppImage. Its backend server is the same executable and starts each Claude chat, so `is_t3_app` now matches those paths alongside the macOS bundles. Every other guard is unchanged and now tested for each build: same UID, kind interactive, stream-json input, no tty, no -p/--print, and the walk stops at an intermediate or unreadable Claude session. Refs #2045 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
|
No actionable comments were generated in the recent review.
|
| Layer / File(s) | Summary |
|---|---|
Executable-path recognition crates/probe/src/relay/claude/app.rs |
The detector accepts recognized Linux /opt package paths and executables inside nonempty .mount_* directories. Product validation accepts T3 Code and nonempty alphanumeric channel names. |
Process classification and coverage crates/probe/src/relay/claude/app.rs, CHANGELOG.md |
Tests cover chat and nested-session classification, process ownership, and automation exclusions across representative builds. The changelog specifies automatic joining on macOS and Linux for .deb and AppImage installs. |
Estimated code review effort: 3 (Moderate) | ~20 minutes
Change: Bug fix · Severity of issue fixed: Medium
Possibly related issues
- AgentWorkforce/relay#2047 — The change adds Linux executable recognition for T3 Code Claude chats, matching the issue’s described behavior.
- AgentWorkforce/relay#2045 — The change addresses Linux paths in the issue, but does not cover Windows.
Possibly related PRs
- AgentWorkforce/relay#2041 — Both changes extend T3 Code Claude chat detection in
crates/probe/src/relay/claude/app.rs; this change adds Linux executable matching to the prior macOS recognition.
Merge Risk: 
Minimal · up to 84ca5
-
The reviewed Linux install formats are covered by the detector and its tests. No actionable merge risk remains beyond normal checks.
Pre-merge checks: 
2 · 
3
-
Failed checks: 3 warnings Passed checks: 2 passed-
Full details: Out of Scope Changes check
-
Explanation
The changed
is_t3_applogic, Linux rejection cases, shared macOS/Linux chat tests, and changelog entry support the Linux portion of issue#2045. The test refactoring exercises the shared guards. No unrelated change is shown.
-
Full details: Description check
-
Explanation
The description provides substantial context and test results, but it does not follow the required template. It lacks the required RelayFlow Proof fields, including the change type and RelayFlow case, and it does not use the required Summary and Test Plan sections.
Resolution
Add the required template sections. Set Change type to feature or bugfix, add exactly one RelayFlow case under tests/relayflows/cases/<case-id>/, and include the corresponding RelayFlow case value. Organize the existing change summary and test results under Summary and Test Plan.
Full details: Linked Issues check
-
Explanation
Issue
#2045requires T3 Code Claude-session identification for Linux and Windows. This PR implements Linux.deband AppImage paths inis_t3_appand adds Linux process-ancestry tests. The diff contains no Windows executable-path or process-ancestry implementation or tests. The issue remains open, and the PR description confirms that Windows is not covered.Resolution
Implement and test Windows T3 Code executable-path and process-ancestry matching, or remove the Windows requirement from the directly linked scope before merge.
Full details: Docstring Coverage
-
Explanation
Docstring coverage is 33.33% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff with cyclomatic complexity of at least 2. Documentation-only edits and deletions within surviving functions are included; unchanged diff context and fully deleted functions are excluded. Analyzed 6 functions across 1 files. (1 skipped: 1 unsupported.)
Resolution
Write docstrings for the functions missing them to satisfy the coverage threshold.
-
Finishing Touches
-
Generate unit tests (beta)
-
- Commit to this branch
- Create a new PR
-
- Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.
A rabbit checks the paths at night,
Linux builds now join the light.
Stable, Beta, Nightly pass,
AppImages emerge from glass.
Mac bundles keep their place,
Tests hop through each process trace.
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
[Medium impact] The PR appears safe to merge; no actionable new issues were found.
|
# Conflicts: # CHANGELOG.md
Stacked on #2041. On Linux, T3 Code's Claude chats still looked like automation to the core, so they never joined the roster. Fixes #2045 for Linux; Windows is not covered.
is_t3_appnow also matches T3 Code's Linux main executable:.deb:/opt/T3 Code (<Channel>)/t3code. The stable and preview builds install asT3 Code (Beta), nightly asT3 Code (Nightly). Channel names use the same rule as the macOS bundles.$TMPDIR/.mount_<random>/t3code, where the running AppImage mounts itself (/tmpby default).T3's backend server runs from the same executable (
ELECTRON_RUN_AS_NODE) and starts each Claude chat, so the walk matches at the chat's parent. The other guards from #2041 are unchanged: same UID,kind: interactive,stream-jsoninput, no terminal, no-p/--print, and the walk stops at an intermediate or unreadable Claude session. The existing chat andclaude -ptests now run against the macOS,.deband AppImage executables. There is a new test for a parent owned by another user, and the path test has Linux cases that should be rejected: helpers,/usr/bin/t3code,~/.local/bin/t3code, a non-/optinstall, an extractedsquashfs-rootand an empty mount id.Evidence (linuyc, Arch, x86_64; T3 Code 0.1.6 AppImage, Claude Code 2.1.280):
latest-linux.yml, on Hyprland in a hidden special workspace (--ozone-platform=headlesssegfaults in Electron). A real Claude chat sent from the UI ran with this ancestry, read from/proc:kind: interactive,entrypoint: sdk-ts. A temporary test that was not committed ranis_t3_chatwith the realSystemProcesseson that pid. The result wastrue, andfalsewithkind: sdk..debpath. The stable, preview and nightly.debfiles all checked out against their release manifests. Theirpostinstand.desktopfiles point to/opt/T3 Code (Beta)/t3code(stable and preview) or/opt/T3 Code (Nightly)/t3code. The nightly AppImage also containst3codeand runs through the same AppImage runtime, but I didn't run it.Not covered:
t3code-desktop): Electron there runs from the Nix store, so it won't match.t3): it runs undernode, so it can't be told apart from an SDK run.~/Applicationscheck. The process guards are what keep automation out.Tests:
relay::claude170 passed,relay::local91 passed (1 ignored),cargo fmt --checkis clean, and clippy reports nothing in the touched files. Clippy--all-targetsstops on an existingnon_octal_unix_permissionserror inopencode_existing/native_tests.rs, which this PR doesn't touch.PROBE_VERSIONis not bumped.🤖 Generated with Claude Code
Need help on this PR? Tag
@codesmith-botwith what you need.Agent Relay sessions
claudesessioned0bac14· opened viagh pr create· last active 2026-10-31