Repository navigation
The sandbox demo client can now reach ateapi - #2468
Open
Ziyi Tan (Ziy1-Tan) wants to merge 1 commit into
Open
Ziyi Tan (Ziy1-Tan) wants to merge 1 commit into
Ziyi Tan (Ziy1-Tan) wants to merge 1 commit into
Conversation
Ziyi Tan (Ziy1-Tan)
force-pushed
the
sandbox-client-auth
branch
2 times, most recently
from
October 11, 2026 14:52
0241fa0 to
1645497
Compare
ateapi requires mTLS or a JWT bearer token, and an out-of-cluster client has neither. The client dialed the gRPC endpoint with plain TLS and no credentials, so ResumeActor failed with "missing bearer token" and the README's walkthrough could not be run as written. Use internal/ateclient, the path kubectl-ate and the claude-code-multiplex UI already take: it port-forwards svc/api when no endpoint is given, verifies ateapi's serving cert against the live ClusterTrustBundle, and mints an ate-client ServiceAccount token from the kube context. The --ateapi flag now defaults to empty and targets an endpoint the caller forwarded themselves. Drop the explicit ResumeActor call too. A request through the router wakes a suspended actor on its own, so the call was redundant, and it was the first thing to fail. Suspend-on-exit stays: multiplex does not drive actors at all, while this client drives them through the router and the README documents the exit-suspends transition.
Ziyi Tan (Ziy1-Tan)
force-pushed
the
sandbox-client-auth
branch
from
October 11, 2026 14:59
1645497 to
61dbc71
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
ateapi requires mTLS or a JWT bearer token, and an out-of-cluster client has
neither. The sandbox client dialed the gRPC endpoint with plain TLS and no
credentials, so
ResumeActorfailed withmissing bearer tokenand the README'swalkthrough could not be run as written.
demos/claude-code-multiplex/uinames this client as the pattern it follows, anddials the same endpoint through
internal/ateclient:After this change both demos connect identically: one auto port-forward to
svc/apiwhen no endpoint is given, one mintedate-clientServiceAccounttoken, one verification of ateapi's serving cert against the live
ClusterTrustBundle, and the same endpoint-override escape hatch (
--ateapihere,
ATEAPI_ADDRthere).ResumeActoris dropped as well. A request through the router wakes a suspendedactor on its own, so the call was redundant and it was the first thing to fail.
Suspend-on-exit stays: multiplex does not drive actors at all, reading worker and
actor state and pod logs, so it has no equivalent to align on, while this client
drives them through the router and its README documents the exit-suspends
transition.
Breaking change
--ateapinow defaults to empty, meaning auto port-forward tosvc/api, insteadof
localhost:8080. A caller that omitted the flag and relied on its ownport-forward now reaches
svc/apiinstead. The client also needs a kube contextwith access to the
ate-systemnamespace, which it did not before. Passing--ateapi=localhost:8080explicitly, as the README did, still works.Verified against a
demo-sandbox-microvmatespace, because a gVisor sandboxcannot start on the test host. The client binary came from this branch; the
atespace did not.
demos/sandbox/clientis amainpackagethat drives HTTP from stdin and had none before this change either.
demos/sandbox/README.mddrops the API port-forward step and lists the kubecontext as a prerequisite.