You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Stand up S2 Connect (self-hosted replacement for T3 Connect) #331
Stand up S2 Connect: our own replacement for T3 Connect, so s2code hosts can be reached at a public address. This unblocks features that depend on Connect, starting with upstream's guest-share beta.
T3 Connect only gives the host a public hostname through a tunnel. Its relay code is in infra/relay, but the running service (Clerk sign-in, tunnels, DNS) is hosted by T3.
s2code turns hosted Connect off in packages/shared/src/hostedConfig.ts, so upstream's Connect hostname check would never pass.
s2code is about 552 commits ahead of and 1448 behind upstream, branched Oct 18.
Scope
Pick how hosts get a public address: Tailscale Funnel, a Cloudflare tunnel, or a reverse proxy. Self-hosting the full relay and Clerk is out of scope for now (about L-sized).
Add a configured public-origin setting to replace the Connect hostname check. Keep the Host header untrusted.
Expose only the guest routes. RPC, WebSocket and MCP must not be reachable on the public address.
Port the guest-share code (apps/server/src/guest/*, GuestShareDecider.ts, packages/contracts/src/guestShare.ts, GuestPage.tsx) plus the upstream changes it depends on.
Tests and a security review before enabling.
Rough size: M, about 4-7 dev-days.
Risks
Medium: guest input runs with the thread's permissions once the host clicks Send.
Medium: guests see reasoning, command output and history from before the share.
Medium: a new public listener on our hosts, where a misconfigured gate could expose other routes.
Activity