Skip to content

feat: add Grok Build as a first-class coding agent#195

Merged
leeroybrun merged 20 commits into
happier-dev:devfrom
jaylfc:support-agy-grok-build
Jul 21, 2026
Merged

feat: add Grok Build as a first-class coding agent#195
leeroybrun merged 20 commits into
happier-dev:devfrom
jaylfc:support-agy-grok-build

Conversation

@jaylfc

@jaylfc jaylfc commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

Summary

Add Grok Build CLI (grok) as a first-class Happier coding agent, including install/detection, ACP authentication, create/resume identity, permissions and xAI structured questions, provider-advertised model and reasoning-effort controls, canonical UI projection, and deterministic provider coverage.

Grok Build is a coding agent. It remains separate from xAI voice support and any xAI/Grok model-provider profile.

Why

The original contribution established Grok's native ACP entry point. A production integration also needs authenticated ACP startup, durable continuation identity, lossless structured questions, canonical provider/UI projection, and deterministic provider coverage without introducing a second runtime stack or provider-specific policy in shared core.

Architecture and behavior

  • Reuses Happier's canonical ACP process, transport, lifecycle, permission, catalog, metadata, model-control, and UI owners.
  • Keeps xAI authentication, model/effort projection, and extension mapping in the Grok provider leaf.
  • Launches grok --no-auto-update agent stdio.
  • Negotiates authentication after ACP initialize: advertised API-key auth wins only when XAI_API_KEY is non-empty; otherwise an advertised cached-account method is used; logged-out interactive auth is never treated as cached readiness.
  • Binds and awaits one vendor continuation identity through the shared ACP runtime before exposing create/resume success.
  • Carries structured question answers as bounded arrays through the canonical RPC contract, preserving multiple and comma-bearing values and failing closed across incompatible mixed versions.
  • Supports both observed xAI question method aliases, zero-option/freeform questions, and Grok's Other plus annotations[question].notes response contract.
  • Uses provider-advertised model state for the existing engine picker and projects per-model Grok effort choices into the canonical reasoning_effort control. session/set_model remains provider-authoritative; rejected switches do not falsify displayed state.
  • Negotiates model-scoped config retirement through a literal target-runtime capability, so older/malformed targets retain released behavior.
  • Rebinds generic session-control synchronizers and provider-local state independently after reconnect, preventing one failed capability publication from suppressing the provider's swap owner.
  • Uses canonical provider facts and registries for installation, readiness, settings, pickers, and session surfaces.
  • Does not add a second ACP lifecycle, Grok-specific settings screen, OpenCode retry scheduler, guessed minimum-version gate, undocumented launch flag, t3code attribution, or private completion state machine on the obsolete PR-basis runtime.

Current capability boundary

  • Provider-advertised model selection: implemented.
  • Provider-advertised per-model reasoning effort: implemented.
  • Create/resume identity, questions, cancellation, and MCP pass-through: implemented through shared owners; authenticated current-provider proof remains open.
  • Prompt images and correlated x.ai/session/prompt_complete / _x.ai/session/prompt_complete settlement: evidence-backed follow-up on the evolved post-merge remote-dev ACP owners, not duplicated in this older PR-basis runtime.
  • Private session fork, speculative output media, and a guessed Grok version floor: intentionally not introduced without an approved consumer/contract.

Validation

Latest production delta (5f20d257fa6811b51b82d90a0904c678be66a1d7):

  • Agents session-control/model tests: 38/38
  • CLI ACP/runtime/Grok/action corridor: 180/180
  • UI model/config/engine corridor: 107/107 in bounded groups
  • Grok provider harness: 13/13
  • Agents, CLI, and UI package typechecks
  • git diff --check
  • Two Codex 5.6 SOL-high review/fix/re-review loops: all reproduced findings fixed; both final re-reviews PASS

Earlier unchanged corridors also retain their recorded protocol, server, provider, browser-harness, import-cycle, and full-package evidence. The current source is reviewed as moving work; no freeze, reconstruction, candidate hash, or synthetic-conflict protocol is a merge gate.

Screenshots / recording (UI changes)

The implementation reuses existing Happier picker, settings, session, auth, and structured-question components; no Grok-specific visual system is introduced. Source-attested browser validation against the integrated managed stack remains open.

Open gates

  • Fable 5 High review on the current pushed head
  • Current-head Greptile, CodeRabbit/service-limit, and GitHub CI disposition
  • One authenticated current-version primary-OS flow: auth, create/prompt, distinct model and effort changes, real question/freeform when emitted, cancel/successor, restart/load/follow-up, and MCP if promoted beyond experimental
  • Source-attested browser QA on the integrated stack
  • Narrow Windows and Linux platform evidence before preview/release
  • Post-push human/code-owner approval
  • Explicit maintainer merge approval

The deterministic results above do not substitute for unavailable authenticated/provider/browser/platform evidence. GitHub dev integration may defer those live gates to pre-preview only through an explicit authorized human decision.

Post-merge work

  • Reconcile the merged behavior semantically into the evolved local remote-dev ACP, Cursor-question, and OpenCode-runtime owners; never resolve conflicts by restoring obsolete PR-basis files wholesale.
  • Implement shared ACP prompt-image blocks and correlated xAI prompt-completion settlement once at the evolved canonical owners, then run real resume/replay validation.
  • Port the final verified behavior to ../dev as a thin happier.agent.grok plugin only after the active plugin plan's G5 UI and G6 native ACP-composer contracts are admitted. Do not copy this large remote-dev diff or reuse the xAI voice plugin.

Contributor credit

@jaylfc established the original Grok agent identity, native ACP launch path, initial provider facts, installer discovery, login command, and model identifier. Maintainer amendments complete authentication, runtime, structured-interaction, model/effort, persistence, UI, and validation contracts while preserving that contribution.

Checklist

  • PR targets dev (not main)
  • Linked issue/discussion (none currently linked)
  • Tests added/updated for changed behavior
  • Provider documentation updated
  • AI-assisted work disclosed: Codex and Fable contributed implementation/review assistance; current evidence and remaining human/external gates are listed above

Note

Add Grok Build as a first-class coding agent with ACP backend, UI, and structured question support

  • Registers grok as a recognized agent across the full stack: manifest, auth probe, model config, session modes, CLI runtime spec, and all language translations.
  • Adds a new ACP backend for Grok (backend.ts) with dynamic authentication (API key or cached token), grokTransport, reasoning effort model controls, and ask_user_question / MCP servers-updated extension handlers.
  • Introduces AcpAuthentication as a typed union replacing flat authMethodId/authMeta fields; all existing backends (Gemini, Codex, Cursor) are migrated to the new shape.
  • Adds AcpSessionIdentityBinding to enforce intent-aware session identity persistence across create/resume operations, replacing per-runtime onSessionIdChange callbacks across all catalog runtimes.
  • Extends AskUserQuestion handling end-to-end: structured question descriptors are normalized and validated, answers are submitted via a new session.structuredQuestion.respond.v1 RPC, and legacy comma-separated answers are decoded with ambiguity detection.
  • AskUserQuestionView now enforces per-question selection limits, shows inline guidance for CLI update requirements, and submits protocol-tagged payloads.
  • Synchronizers for model and config-option overrides now treat definitively rejected commands as settled, tombstone metadata via updateMetadata, and surface failures via reportTerminalFailure.
  • Risk: effectiveValue for session config option controls now always reflects the provider-confirmed currentValue rather than a pending requested value, which changes what the UI displays while a change is in-flight.

Macroscope summarized 937f521.

@coderabbitai

coderabbitai Bot commented Jul 6, 2026

Copy link
Copy Markdown

Review Change Stack

Walkthrough

Adds grok as a built-in agent across shared agent types, configuration registries, CLI catalog wiring, and related tests. Updates the claude credential refresh expectation.

Changes

Grok agent support

Layer / File(s) Summary
Agent identity types
packages/agents/src/types.ts
AGENT_IDS now includes grok, and VendorResumeIdField adds grokSessionId.
Agent configuration registries
packages/agents/src/acp.ts, auth.ts, localCli.ts, manifest.ts, models.ts, providers/providerCliRuntime.ts, sessionModes.ts, acp.test.ts, auth.test.ts, localCli.test.ts, models.test.ts
Adds grok entries for ACP, auth probing, local CLI login, core manifest, model selection, provider runtime, and session modes, with tests covering the new shapes.
CLI catalog and detection wiring
apps/cli/src/agent/acp/catalog/index.ts, apps/cli/src/backends/catalog.test.ts, apps/cli/src/backends/*/capability.loadSession.e2e.test.ts, apps/cli/src/capabilities/context/buildDetectContext.test.ts
Adds grok to the built-in ACP catalog and to CLI snapshot test fixtures; the catalog test also updates the claude credential refresh mode expectation.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Possibly related PRs

  • happier-dev/happier#41: Both PRs extend shared agent registry/config constants to add a new built-in agent entry.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title is concise and accurately summarizes the main change: adding Grok Build as a first-class coding agent.
Description check ✅ Passed The description covers summary, rationale, testing, screenshots, and checklist, though the How to test section is not in the exact template format.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@greptile-apps

greptile-apps Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR adds Grok Build (grok) as a first-class Happier coding agent, wiring up ACP authentication, extension handling for x.ai/ask_user_question, model/effort controls, and structured multi-answer support. It also replaces per-provider onSessionIdChange callbacks across all existing providers with a new createAcpSessionIdentityBinding mechanism that enforces deduplication, generation staleness fencing, and coordinated reset.

  • Grok provider: Full provider stack — CLI auth spec (API-key and device-code flows), ACP backend with platform-aware XAI_API_KEY precedence, reasoning-effort model adapter, extension handlers for structured questions with SHA-256 correlation digest, and MCP server notification handling.
  • Session identity refactor: Shared createAcpSessionIdentityBinding replaces per-provider onSessionIdChange callbacks across Auggie, Copilot, Cursor, Kilo, Kimi, Qwen, Codex, Pi, Gemini, and the new Grok; introduces createVendorResumeIdMetadataPublisher with generation-tracked writes and in-flight coalescing.
  • Structured question overhaul: AskUserQuestion answers are now string[] per key, validated via normalizeStructuredQuestionAnswersV1; a new session.structuredQuestion.respond.v1 RPC replaces the legacy flat permission path when the client supports it, with a lossless freeform-to-provider encoding that maps free text to the Other placeholder while preserving notes in annotations.

Confidence Score: 5/5

Safe to merge; no logic errors were found in the Grok model/effort/freeform delta or the shared session-control reconnect changes.

The Grok provider's auth selection, reasoning-effort projection, and freeform-to-'Other' encoding are all correct and backed by comprehensive deterministic tests. The session identity binding is well-designed with proper generation tracking, intent deduplication, and stale-open fencing. The vendor resume publisher correctly coalesces concurrent writes and skips a redundant server round-trip for metadata-backed resumes. The single finding — the node budget in normalizeAskUserQuestionInput comparing against a string-length constant — is a code-clarity issue that does not create an exploitable gap because the string budget and array-length checks already provide equivalent coverage in every reachable path.

apps/cli/src/agent/questions/normalizeAskUserQuestionInput.ts — accountNode uses maxTotalStringLength as the node limit instead of a dedicated constant; worth clarifying for future maintainability.

Important Files Changed

Filename Overview
apps/cli/src/agent/questions/normalizeAskUserQuestionInput.ts Produces a bounded JSON-safe snapshot for AskUserQuestion publication. The accountNode helper compares budget.nodes against STRUCTURED_QUESTION_LIMITS.maxTotalStringLength (a string-byte limit) instead of a dedicated node count limit, making the node budget check redundant with the string budget.
apps/cli/src/agent/acp/runtime/sessionIdentityBinding.ts New shared binding for ACP session identities: enforces intent deduplication, generation staleness fencing, pre-bind failure tracking, and waits for in-flight publication before completing reset. Well-designed with comprehensive test coverage.
apps/cli/src/session/metadata/createVendorResumeIdMetadataPublisher.ts Replaces the deleted createProviderSessionIdMetadataUpdater with a generation-aware, in-flight-coalescing metadata publisher; correctly skips a redundant write for resume sessions whose ID already matches persisted metadata.
apps/cli/src/backends/grok/acp/extensionHandlers.ts Handles x.ai/ask_user_question extension: parses/validates Grok payloads, builds SHA-256 correlation digest, maps freeform text to the 'Other' placeholder with annotations, and wires into the canonical permission handler. Logic is correct and well-guarded.
apps/cli/src/backends/grok/acp/auth.ts Grok ACP auth selection: prioritizes XAI_API_KEY when advertised, falls through to defaultAuthMethodId-backed grok.com/cached_token, and correctly avoids auto-selecting a non-default grok.com (logged-out) method.
apps/cli/src/backends/grok/acp/modelControls.ts Projects reasoning effort from Grok's model meta, validates that the current value is in the advertised set, and assembles requestMeta for set_model. Projection and validation logic is correct.
packages/agents/src/manifest.ts Adds grok to AGENTS_CORE with vendorResume: 'experimental', runtime_checked policy, grokSessionId metadata field, and exclusive local-control topology — all consistent with the Grok ACP contract described in the PR.
packages/agents/src/models.ts Adds grok to AGENT_MODEL_CONFIG with supportsSelection:true, dynamicProbe:'auto', and grok-build as the sole static fallback model; supportsFreeform:false is consistent with a structured-only effort control.
apps/cli/src/agent/runtime/runStandardAcpProvider.ts Adds rebindOverrideSynchronizerSession to the session-swap hook so override synchronizers follow reconnects; swap failures from synchronizer rebind and provider hook are aggregated correctly before re-throwing.
apps/cli/src/agent/questions/normalizeStructuredQuestionAnswersV1.ts Validates and normalizes structured question answers; includes a bounded legacy comma-string decoder with a state-explosion cap and strict exact-match round-trip for legacy downgrade detection. Logic is correct.

Sequence Diagram

%%{init: {'theme': 'neutral'}}%%
sequenceDiagram
    participant GrokCLI as Grok CLI
    participant AcpBackend as AcpBackend
    participant IdentityBinding as SessionIdentityBinding
    participant MetaPublisher as VendorResumeIdPublisher
    participant ExtHandler as ExtensionHandler
    participant PermHandler as PermissionHandler

    GrokCLI->>AcpBackend: initialize (advertises authMethods)
    AcpBackend->>AcpBackend: resolveGrokAcpAuthentication()
    AcpBackend->>GrokCLI: authenticate(methodId)
    GrokCLI->>AcpBackend: session/new or session/load + sessionId + models
    AcpBackend->>IdentityBinding: open(intent, openSession)
    IdentityBinding->>IdentityBinding: validateAcpOpenedSessionIdentity()
    IdentityBinding->>MetaPublisher: persistBound(AcpBoundSessionIdentity)
    MetaPublisher->>MetaPublisher: skip if resume already in metadata
    MetaPublisher-->>IdentityBinding: published
    IdentityBinding-->>AcpBackend: identity + result
    Note over AcpBackend: sessionModelAdapter.projectModelOptions() injects reasoning_effort
    GrokCLI->>ExtHandler: x.ai/ask_user_question (structured payload)
    ExtHandler->>ExtHandler: parseGrokAskUserQuestionRequest() + SHA-256 digest
    ExtHandler->>PermHandler: handleToolCall(toolCallId, AskUserQuestion, input)
    PermHandler-->>ExtHandler: decision + StructuredQuestionAnswersV1
    ExtHandler->>ExtHandler: buildGrokAskUserQuestionAcceptedResponse()
    ExtHandler-->>GrokCLI: outcome accepted + answers + annotations
    Note over AcpBackend,IdentityBinding: On reconnect/session-swap
    AcpBackend->>IdentityBinding: reset() aborts active, increments generation
    IdentityBinding->>IdentityBinding: await previous operation drain
    AcpBackend->>IdentityBinding: open(intent resume, expectedVendorSessionId)
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
sequenceDiagram
    participant GrokCLI as Grok CLI
    participant AcpBackend as AcpBackend
    participant IdentityBinding as SessionIdentityBinding
    participant MetaPublisher as VendorResumeIdPublisher
    participant ExtHandler as ExtensionHandler
    participant PermHandler as PermissionHandler

    GrokCLI->>AcpBackend: initialize (advertises authMethods)
    AcpBackend->>AcpBackend: resolveGrokAcpAuthentication()
    AcpBackend->>GrokCLI: authenticate(methodId)
    GrokCLI->>AcpBackend: session/new or session/load + sessionId + models
    AcpBackend->>IdentityBinding: open(intent, openSession)
    IdentityBinding->>IdentityBinding: validateAcpOpenedSessionIdentity()
    IdentityBinding->>MetaPublisher: persistBound(AcpBoundSessionIdentity)
    MetaPublisher->>MetaPublisher: skip if resume already in metadata
    MetaPublisher-->>IdentityBinding: published
    IdentityBinding-->>AcpBackend: identity + result
    Note over AcpBackend: sessionModelAdapter.projectModelOptions() injects reasoning_effort
    GrokCLI->>ExtHandler: x.ai/ask_user_question (structured payload)
    ExtHandler->>ExtHandler: parseGrokAskUserQuestionRequest() + SHA-256 digest
    ExtHandler->>PermHandler: handleToolCall(toolCallId, AskUserQuestion, input)
    PermHandler-->>ExtHandler: decision + StructuredQuestionAnswersV1
    ExtHandler->>ExtHandler: buildGrokAskUserQuestionAcceptedResponse()
    ExtHandler-->>GrokCLI: outcome accepted + answers + annotations
    Note over AcpBackend,IdentityBinding: On reconnect/session-swap
    AcpBackend->>IdentityBinding: reset() aborts active, increments generation
    IdentityBinding->>IdentityBinding: await previous operation drain
    AcpBackend->>IdentityBinding: open(intent resume, expectedVendorSessionId)
Loading

Reviews (6): Last reviewed commit: "feat(grok): complete model effort and qu..." | Re-trigger Greptile

Comment thread packages/agents/src/localCli.ts Outdated
Comment thread apps/cli/src/backends/catalog.test.ts Outdated
coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 6, 2026
@jaylfc

jaylfc commented Jul 6, 2026

Copy link
Copy Markdown
Contributor Author

Findings Addressed:

  1. Interactive Login for Grok: Fixed the local CLI login config for grok to use initialInput: '/login\r' and empty arguments, ensuring it correctly types interactive commands instead of failing as a subprocess argument.
  2. Claude Test Discrepancy: The Claude test expectation of restart_required was outdated. Commit 1f1a46df6 updated apps/cli/src/backends/claude/index.ts to use no_restart_required but missed updating apps/cli/src/backends/catalog.test.ts. I aligned the test with the actual production code behavior.

coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 6, 2026
…ect fixtures

Verified against the shipping Antigravity (agy) and Grok Build (grok) CLIs:

- grok login: use the real `grok login` subcommand (browser OIDC) instead of an
  interactive `/login` slash, which is not a Grok TUI command.
- agy login: launch `agy` bare (auto Google Sign-In on first run); agy has no
  `auth` subcommand, so `agy auth login` never authenticated.
- grok model: the CLI reports `grok-build` (default `grok-composer-2.5-fast`),
  not `grok-build-0.1`; drop the redundant `default` from allowedModes.
- grok auth probe: the CLI only reads `XAI_API_KEY`; drop unused `GROK_API_KEY`.
- CLI detect fixtures: add agy/grok entries so `Record<AgentId, DetectCliEntry>`
  typechecks after agy/grok were added to AGENT_IDS.
@jaylfc

jaylfc commented Jul 6, 2026

Copy link
Copy Markdown
Contributor Author

Pushed b0f35c7b2 correcting several facts verified directly against the installed Antigravity (agy) and Grok Build (grok) CLIs (--help, grok models, agy models, binary strings):

  • grok login — replaced initialInput: '/login\r' with the real grok login subcommand (browser OIDC; --device-auth headless fallback). /login is not a Grok TUI slash command — the binary itself instructs "Run grok login". (This means the earlier /login review suggestion was also off; the correct value is the subcommand.)
  • agy loginagy has no auth subcommand (subcommands: changelog, help, install, models, plugin, update); auth is automatic Google Sign-In on bare launch, so args: ['auth', 'login'] never authenticated. Now args: [].
  • grok model idgrok models reports grok-build (default grok-composer-2.5-fast); there is no grok-build-0.1. Fixed the static model id and dropped the redundant default from allowedModes (consumers auto-inject it).
  • grok auth probe — the CLI only reads XAI_API_KEY; removed the unused GROK_API_KEY.
  • CLI detect fixtures — adding agy/grok to AGENT_IDS broke apps/cli typecheck (4 Record<AgentId, DetectCliEntry> fixtures were missing the keys). Added the entries; apps/cli tsc --noEmit is now clean.

Validation: packages/agents 272 tests + typecheck green; apps/cli catalog test (28) + full typecheck green.

coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 6, 2026
@leeroybrun

Copy link
Copy Markdown
Collaborator

Hi @jaylfc !

Thank you very much for your contribution!

I don't see the --acp argument for agy CLI though and I don't see it documented anywhere, are you sure it is supported?

Screenshot 2026-07-08 at 09 47 55

The Antigravity CLI (`agy`) has no native ACP mode: `agy --acp`,
`--experimental-acp`, and an `acp` subcommand all fail, and the binary
exposes no stdio JSON-RPC server. The upstream request to add it
(google-antigravity/antigravity-cli#31) is still open, so agy cannot be
driven as a generic ACP agent. The only working paths today (a third-party
Bun DB-polling bridge, or a custom shim reading agy's private SQLite store)
violate Google's ToS — which has led to real account bans — and depend on
undocumented internals. Not shippable.

Remove all agy wiring (types, acp, auth, localCli, manifest, models,
sessionModes, providerCliRuntime, CLI catalog, detect fixtures, tests) and
keep grok, which speaks ACP natively via `grok agent stdio`. agy can return
once native ACP lands upstream.
@jaylfc jaylfc changed the title feat: add support for agy and grok feat: add support for grok (Grok Build CLI) Jul 8, 2026
coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 8, 2026
@jaylfc

jaylfc commented Jul 8, 2026

Copy link
Copy Markdown
Contributor Author

Hi @leeroybrun — you're completely right, thanks for catching this. 🙏

I verified against the installed agy binary (v1.1.0) and --acp isn't a real flag — agy --acp returns flags provided but not defined: -acp, --experimental-acp and an acp subcommand fail too, and the binary exposes no stdio JSON-RPC server. It's an open upstream request (google-antigravity/antigravity-cli#31), still unimplemented. So agy genuinely can't be driven as a generic ACP agent right now — the only working paths today (a third-party Bun bridge / a shim over agy's private SQLite store) depend on undocumented internals and cut against Google's ToS, so they're not something I'd want to ship here.

I've dropped agy from this PR and reframed it as grok-only. grok speaks ACP natively via grok agent stdio (verified — grok agent exposes a real stdio subcommand, and the binary is built on an ACP session layer), so it wires in cleanly. I'll revisit agy in a follow-up once native ACP lands upstream.

Also fixed a couple of things I found while verifying grok against the real CLI: login now uses the grok login subcommand (not a /login slash), the model id is grok-build (there's no grok-build-0.1), and the auth probe only checks XAI_API_KEY.

@leeroybrun leeroybrun changed the title feat: add support for grok (Grok Build CLI) feat: add Grok Build as a first-class coding agent Jul 12, 2026
@leeroybrun

Copy link
Copy Markdown
Collaborator

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented Jul 12, 2026

Copy link
Copy Markdown
✅ Action performed

Full review finished.

@leeroybrun

Copy link
Copy Markdown
Collaborator

@greptileai

@leeroybrun

Copy link
Copy Markdown
Collaborator

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented Jul 12, 2026

Copy link
Copy Markdown
✅ Action performed

Full review finished.

@leeroybrun

Copy link
Copy Markdown
Collaborator

@greptileai

@leeroybrun

Copy link
Copy Markdown
Collaborator

@coderabbitai full review

@leeroybrun

Copy link
Copy Markdown
Collaborator

@greptileai

@coderabbitai

coderabbitai Bot commented Jul 20, 2026

Copy link
Copy Markdown
✅ Action performed

Full review finished.

Comment thread apps/cli/src/session/actions/createCliActionDeps.ts
coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 20, 2026
@leeroybrun

Copy link
Copy Markdown
Collaborator

@greptileai please review the current head e2a1ead, focusing on the test-lane relocation delta and any current-head regressions.

@leeroybrun

Copy link
Copy Markdown
Collaborator

@coderabbitai full review current head e2a1ead. If the service file-count limit still applies, please record that explicitly rather than implying a substantive review.

@coderabbitai

coderabbitai Bot commented Jul 20, 2026

Copy link
Copy Markdown

@leeroybrun: Starting a full review of current head e2a1ead9aa85829da706260c09af811303a6eae5. If a file-count limit prevents full coverage, I’ll state that limitation explicitly.

✅ Action performed

Full review finished.

@leeroybrun

Copy link
Copy Markdown
Collaborator

@greptileai please review current head 5f20d25, focusing on the Grok model/effort/freeform delta and shared session-control compatibility/reconnect changes.

@leeroybrun

Copy link
Copy Markdown
Collaborator

@coderabbitai full review current head 5f20d25. If the service file-count limit still prevents review, please record that explicitly.

@coderabbitai

coderabbitai Bot commented Jul 21, 2026

Copy link
Copy Markdown

@leeroybrun: Starting a full review of current head 5f20d257fa6811b51b82d90a0904c678be66a1d7. If file-count limits prevent coverage, I’ll explicitly report that rather than imply a substantive review.

✅ Action performed

Full review finished.

@leeroybrun

Copy link
Copy Markdown
Collaborator

Thank you very much @jaylfc, applied some additional changes on top, merging now :)

@leeroybrun
leeroybrun merged commit 4766022 into happier-dev:dev Jul 21, 2026
24 of 34 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants