strong-ice-84145
05/18/2026, 1:49 PMchilly-france-44439
05/18/2026, 2:24 PMsecret -> file, we'd eventually have two authentication path for ACP, one using env var, and another one using fileslimited-student-10747
05/18/2026, 2:26 PMchilly-france-44439
05/18/2026, 2:59 PMclaude should already be authenticated?limited-student-10747
05/18/2026, 3:03 PMlimited-student-10747
05/18/2026, 3:04 PMchilly-france-44439
05/18/2026, 3:05 PMclaude is authenticated, then ACP should automatically work out of the box
• sandboxed agent-server: we only support ANTHROPIC_API_KEY and OPENAI_API_KEY for now, which would be the easiest to do now
WDYT?strong-ice-84145
05/18/2026, 3:08 PMANTHROPIC_API_KEY and OPENAI_API_KEY for now, which would be the easiest to do now
Claude Code actually exposes a secret for subscription authentication, so no file mounting is needed. It's more for Codex/Gemini.
Agreed that for Canvas we can go with local simplest solutions as long as it doesn't cause problems for cloud later.limited-student-10747
05/18/2026, 3:09 PMstrong-ice-84145
06/01/2026, 4:03 PMsecret -> file, we'd eventually have two authentication path for ACP, one using env var, and another one using files (edited)
In any case, we do need two auth methods for ACP:
• subscription
• api keys
API keys is easy: same flow as openhands agent
For subscription, Claude = API key. But for Codex and Gemini, subscription = auth file.
So it seems like we do need to support both file mounting and env secrets for ACP auth.
What this PR does and is helper in the SDK that takes a specific env variable and turns it into a file. This way, for agent-canvas / OpenHands, the code is much simpler.
But in any we do need to mount files in the sandbox for conversations etc... so it's also OK to put that logic in the canvas.
Edit: I guess I'll just start by having the canvas do it and we can always refactor later if it makes sense
@chilly-france-44439 @limited-student-10747 lmk what you thinkchilly-france-44439
06/02/2026, 3:56 PMI guess I'll just start by having the canvas do it and we can always refactor later if it makes sensenod Overall, I think it's probably more reasonable for the downstream application to handle these files rather than at the root SDK level. Canvas decides what other CLIs they need to support, and each of those might have different logic for subscription authentication.
strong-ice-84145
06/03/2026, 11:54 AM1. The May-15 thread conflated two targets — local-unsandboxed (Xingyao right: SDK shouldn't materialise) vs cloud/Docker (the point of #988, where downstream can't reach the pod
FS).
2. Decisive constraint — in cloud the only channel into the pod is secret_registry; materialisation must run in-pod, and the env/persistence/seed-if-absent wiring is irreducibly
SDK-side regardless.
3. "Two auth paths" is intrinsic — Codex/Gemini subscription auth is file-based; moving it downstream relocates the path rather than removing it, and bypasses masking (#1023).
4. The PR is already the hybrid the advice asked for — mechanism (SDK) vs overridable policy (ACPFileSecretSpec data) — and is a no-op locally, so the unsandboxed-VM case stays
untouched.
5. Recommendation: keep it SDK-side, with one genuinely open sub-decision flagged for them — openhands-sdk core vs openhands-agent-server (but explicitly not canvas).
opus https://github.com/OpenHands/agent-canvas/issues/1020#issuecomment-4612007648
codex https://github.com/OpenHands/agent-canvas/issues/1020#issuecomment-4612019039
Prompt used for review
Read this PR <https://github.com/OpenHands/software-agent-sdk/pull/3474>. Read the epic and issue linked to it and read the PR diff.
Then read this conversation with the lead architect from my company
<conversation>
Should we change our strategy to follow his advice? Draw pros and cons. Be thorough.calm-artist-7206
06/03/2026, 4:54 PM