Native Gajae Code (gjc) provider — or a generic ACP driver? #7290
Yeachan-Heo
started this conversation in
Ideas
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
What I'm trying to do
Drive Gajae Code (
gjc) from T3 Code's mobile/web/desktop clients, the same way I drive Codex and Claude today.gjcis a terminal coding agent that runs on the Claude/Codex/Gemini subscription you already pay for, with plan-before-mutation workflows and approval gates on shell/destructive edits. Its remote story today is its own Telegram/Discord/SDK surfaces — T3 Code's app is much better, and the reason I can't use it is only that T3 Code has nogjcharness.How I do it today
I don't, inside T3 Code. I run
npx t3@latestfor Codex/Claude, and separately drivegjcthrough its own broker-boundgjc sdk sessionCLI. Two control planes for one machine.Where T3 Code gets in the way
ProviderDriverKindis a closed set (codex,claudeAgent,cursor,grok,opencode) and every driver has its own*Provider.ts/*Adapter.tspair, so an agent that already speaks a standard protocol still needs a bespoke driver. There is no generic-ACP driver a user can point at an arbitrary<binary> acpcommand.What the flow would look like if it worked
Install and authenticate
gjc, open T3 Code, pick Gajae Code in the provider picker, and steer it from the phone with the same permission-mode mapping as the other providers.Why this is cheap for T3 Code specifically
gjcis an ACP agent, and T3 Code already has the ACP machinery —apps/server/src/provider/acp/withAcpSessionRuntime,AcpAdapterSupport,AcpCoreRuntimeEvents, plus per-vendor support shims (GrokAcpSupport.tsis 108 lines,CursorAcpSupport.tssimilar). Grok's whole ACP-side support is a spawn-input builder, an auth-method resolver, and model-selection helpers.Verified locally against
gjcv0.13.3 — rawinitializeover stdio:So the pieces T3 Code needs are all advertised:
loadSessionfor thread resume,session/list+fork/resume/close/deletefor the thread sidebar, image + embedded-context prompts for attachments, spec-shapedsession/request_permissionfor permission modes, andsession/cancelsettling ascancelled. Upstream GJC runs the pinned externalacpx@0.13.0acp-core-v1conformance corpus againstgjc --mode acpin CI, and emits the speccategoryon themode/model/thought_levelselect options, so mode/model/thinking pickers populate with no vendor metadata.Concrete shape, if you want it:
apps/server/src/provider/acp/GjcAcpSupport.ts— spawn["gjc", "acp"](binary path overridable), map T3's permission modes ontoGJC_ACP_PERMISSION_MODE, auth methodagent(local credentials).packages/contracts—ProviderDriverKind.make("gjc"),GjcSettingswith abinaryPathsetting likegrok's.apps/server/src/provider/Layers/GjcProvider.ts/GjcAdapter.ts— the driver pair; how thin it can get depends on how much ofGrokAdapteris genuinely reusable versus vendor-shaped, which you know far better than I do.apps/mobile/src/components/ProviderIcon.tsx+docs/user/providers-gjc.md.The ask
I deliberately did not open a 1.5k-line unsolicited PR — CONTRIBUTING says big features will be rejected, and a bespoke driver in an Effect-TS codebase I don't own is exactly that. Two questions:
gjcdriver at all, and if so should it be a vendor driver like Grok's, or is a generic ACP driver (user supplies command + env, one driver for every ACP agent) the shape you'd rather have? The second is strictly more useful to T3 Code and would cover Gemini, Goose, Junie, Kilo and friends in one go.I'm the Gajae Code maintainer, so I can also change things on the agent side if T3 Code needs a specific capability advertised differently.
All reactions