Repository navigation
Description
Before submitting
- I searched existing issues and did not find a duplicate.
- I included enough detail to reproduce or investigate the problem.
Area
apps/server
Summary
On macOS, T3 Code spawns the configured agent CLIs at startup to probe them. Because those spawns are children of the Electron app, macOS TCC attributes their privacy requests to T3 Code, so permission dialogs appear under the name "T3 Code (Alpha)" seconds after launch, before the user has opened a project, started a session, or taken any action.
The app itself is not requesting these resources. I grepped the shipped 184MB app.asar for path construction into Documents/Desktop/Downloads/iCloud and found no genuine hits. The requests originate entirely from the probed agent binary.
Steps to reproduce
- On macOS, have Claude Code installed and authenticated.
- Reset T3 Code's TCC state so grants are not already cached:
tccutil reset SystemPolicyAllFiles com.t3tools.t3code - Start a TCC log capture:
log stream --predicate 'subsystem == "com.apple.TCC"' --style compact - Launch T3 Code. Do not click anything, do not open a project, do not start a session.
- Watch the capture for roughly 5 seconds.
Expected behavior
Launching the app without opening a project or starting a session should not cause macOS privacy requests attributed to T3 Code. Agent CLI probing should either be deferred until the user actually opens a project or starts a session, or be done in a way that does not surface OS-level permission dialogs under the app's name.
Actual behavior
About 3.5 seconds after launch, with no user interaction, tccd records a kTCCServiceSystemPolicyAllFiles request in which the accessing process is the Claude Code binary, the responsible process is T3 Code, and AUTHREQ_SUBJECT resolves to com.t3tools.t3code. Full log excerpt below.
The AUTHREQ_SUBJECT field is what determines the wording of the dialog, so any prompt raised by a probed agent reads as though T3 Code is asking for the user's files.
The spawn is observed empirically (a claude-code process appears as a descendant of the app within ~3.5s of launch). The candidate origins in main are:
apps/server/src/provider/Layers/ClaudeProvider.ts:827runsrunClaudeCommand(claudeSettings, ["--version"], ...)as a health check insidecheckClaudeProviderStatus.apps/server/src/provider/Drivers/ClaudeDriver.ts:160callsprobeClaudeCapabilitiesto read account and slash-command metadata.
I did not instrument which of the two fired on this particular launch, only that a probe of the agent binary happens without user interaction and that its TCC requests are attributed to the app.
Worth noting: on the launch I captured, the Full Disk Access request was a preflight query (preflight=yes, query=1), which does not by itself draw a dialog. A visible dialog additionally requires the probed agent to touch a protected location. But the attribution is established at probe time regardless, which is the part that seems wrong: the user is asked to grant filesystem access to T3 Code for work that a separate, independently installed tool is doing.
Impact
Minor bug or occasional failure
Version or commit
0.0.31 (desktop, Alpha channel)
Environment
macOS 26.6 (build 25G72), Apple Silicon, T3 Code (Alpha) 0.0.31 from /Applications, Node 26.0.0, provider: Claude Code 2.1.220
Logs or stack traces
# log stream --predicate 'subsystem == "com.apple.TCC"' --style compact
# username redacted, app launched at 08:10:16, no user interaction
08:10:19.774 tccd REQUEST: function=TCCAccessRequest, msgID=46152.1074
08:10:19.778 tccd AUTHREQ_CTX: msgID=46152.1074, function=TCCAccessRequest,
service=kTCCServiceSystemPolicyAllFiles, preflight=yes, query=1
08:10:19.778 tccd AUTHREQ_ATTRIBUTION: msgID=46152.1074, attribution={
responsible={identifier=com.t3tools.t3code, pid=6978,
responsible_path=/Applications/T3 Code (Alpha).app/Contents/MacOS/T3 Code (Alpha),
binary_path=/Applications/T3 Code (Alpha).app/Contents/MacOS/T3 Code (Alpha)},
accessing={identifier=com.anthropic.claude-code, pid=7160,
binary_path=/Users/<user>/.local/share/claude/versions/2.1.220},
requesting={identifier=com.apple.sandboxd, pid=46152,
binary_path=/usr/libexec/sandboxd}}
08:10:19.793 tccd AUTHREQ_SUBJECT: msgID=46152.1074, subject=com.t3tools.t3code
08:10:19.795 tccd -[TCCDAccessIdentity staticCode]: static code for:
identifier com.t3tools.t3code, type: 0 at /Applications/T3 Code (Alpha).app
08:10:19.811 tccd AUTHREQ_RESULT: msgID=46152.1074, authValue=0, authReason=5Process tree at the time, showing the spawn chain that produces the attribution:
PID PPID COMM
6978 1 /Applications/T3 Code (Alpha).app/Contents/MacOS/T3 Code (Alpha)
└ server /Applications/T3 Code (Alpha).app/Contents/MacOS/T3 Code (Alpha)
app.asar/apps/server/dist/bin.mjs --bootstrap-fd 3
└ 7160 claude-code (probe)Workaround
None that preserves the feature. Granting T3 Code Full Disk Access silences the dialogs but extends that reach to every agent process the app subsequently spawns, which is a strictly worse security posture than leaving it denied.
Activity
juliusmarminge commentedon Oct 27, 2026
I traced this on Linux with
strace -f. The server ran in desktop mode on a fresh database, with no project open and no client connected. Its working directory was a stand-in home folder holding syntheticDocuments/,Desktop/andLibrary/Mail/directories.$HOMEin the packaged desktop app. During init, Claude Code runsrg --no-config --files --hidden <cwd>, and that openedDocuments,Desktop,LibraryandLibrary/Mailwithin the first seconds. Walking into~/Libraryis what produces thekTCCServiceSystemPolicyAllFilesrequest in your log. Walking the other folders is what raises the Documents/Desktop/Downloads dialogs.--versionand the capabilities probe) run in T3 Code's own state directory (~/.t3/userdata). That changed in 233e70b3b2 (#19320), first released in v0.1.0. In the same trace, nothing under the stand-in home was opened.The probes still run at launch, because that is how provider status gets shown. They no longer touch protected folders, so they should not cause TCC requests. Closing as fixed in v0.1.0. If you still see a TCC request attributed to T3 Code at launch on 0.1.x, please reopen with the
log streamexcerpt.