Skip to content

Add Grok Build CLI integration - #4225

Merged
austinywang merged 61 commits into
mainfrom
issue-4220-grok-cli-notifications
May 19, 2026
Merged

austinywang merged 61 commits into
mainfrom
issue-4220-grok-cli-notifications

Conversation

@austinywang

@austinywang austinywang commented May 16, 2026 •

Copy link
Copy Markdown
Contributor

Summary

  • add Grok to the generic agent hook installer with nested hook JSON under ~/.grok/hooks/cmux-session.json
  • add Grok task manager/process detection, restorable agent kind, session presentation, and resume command plumbing
  • add sanitizer/environment preservation coverage for Grok resume and non-interactive launches

Fixes #4220.

Verification

  • jq empty Resources/Localizable.xcstrings
  • git diff --check
  • local tests not run per request; CI will validate

Note

Medium Risk
Moderate risk: adds a new agent integration and significantly changes hook targeting, notification delivery/clearing semantics, and socket connection behavior, which can affect session restore and user-visible notifications.

Overview
Adds Grok as a supported generic agent hook integration (new grok AgentHookDef, env override via GROK_HOME + subpath, optional config dir auto-create, legacy hook pruning, and Grok-specific hook shell wrapper/pinned socket behavior).

Extends the hook runtime to handle a new notification action (plus notify alias), persist last notification/status/runtime state per session, dedupe certain Grok notifications, improve completion/waiting classification, and strengthen target resolution (direct args/env/PID-based binding) so hooks can still map to the correct workspace/surface when env is stripped.

Updates surrounding infrastructure: adds Grok to restorable agent kinds/session UI/task-manager detection and resume command generation; adds Grok launch argument sanitizer policy and preserves GROK_* env vars; introduces per-panel clear_notifications --panel, non-coalescing notify_target_async, notification queue/store instrumentation + surface-scoped clears, socket connect retries, safer socket-path override rules for tagged dev builds, and minor title-sync/notification suppression tweaks.

Reviewed by Cursor Bugbot for commit 8559c88. Bugbot is set up for automated code reviews on this repo. Configure here.


Summary by cubic

Adds Grok Build CLI as a first-class agent with installer, resume (-r), task-manager detection, a Feed PreToolUse bridge, and durable per-panel notifications. Also tightens the notification waiting/needs-input classifier and hardens delivery, sockets, and auto title sync, aligning with Linear #4220.

  • New Features

    • Hook installer: writes cmux-session.json to ~/.grok/hooks/ (respects GROK_HOME + hooks), auto-creates the dir, errors if a file blocks the path, prunes legacy hooks.
    • Sessions/launch: new .grok kind with grok -r <id>; sanitizer drops optional --resume/-r and --worktree/-w; preserves GROK_HOME/GROK_SANDBOX; adds Grok task-manager detection and a Feed PreToolUse bridge.
    • Notifications: accepts notification/notify; parses title/subtitle/body; persists last message and status (idle/needsInput/error) with a neutral fallback; suppresses placeholder/internal stop events.
  • Bug Fixes

    • Delivery/scoping: routes Grok completions through notification hooks and keeps them notification-owned; isolates Grok session notifications per panel; adds clear_notifications --panel=<id>; structured-agent panels suppress raw terminal notifications; notify_target_async no longer coalesces repeats; restores Grok stop-notification de-duplication; adds a stop-completion fallback when stop events are missing.
    • Sockets/CLI: hardens socket autodiscovery/reconnect and hook binding; tagged dev builds ignore mismatched inherited CMUX_SOCKET_PATH unless opted-in; dev CLI shim execs CMUX_BUNDLED_CLI_PATH when set.
    • Titles/theme/CI: keeps auto workspace titles in sync on panel focus; defers initial terminal theme sync to avoid Ghostty recursion; CI verifies Zig via checksum or index JSON (no minisign).

Written for commit 8559c88. Summary will update on new commits. Review in cubic

Summary by CodeRabbit

  • New Features

    • Grok agent support: launch/resume/session restore, transcript parsing, task-manager recognition.
    • GROK_HOME config-dir override with optional subpath and optional auto-creation; notify accepted as synonym of notification.
  • Improvements

    • Normalized agent notifications with persisted status/subtitle/body, UI status updates, and Grok stop-notification suppression.
    • Broadened legacy hook detection and installer/sanitization improvements.
  • Documentation

    • Docs and localized strings updated (en/ja) for Grok.
  • Tests

    • New Grok-focused unit and integration tests.

Review Change Stack

@vercel

vercel Bot commented May 16, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
cmux Ready Ready Preview, Comment May 19, 2026 0:18am
cmux-staging Building Building Preview, Comment May 19, 2026 0:18am

@coderabbitai

coderabbitai Bot commented May 16, 2026 •

Copy link
Copy Markdown

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

This PR integrates Grok: registers the agent and task-manager detection, extends hook definitions/config resolution, adds Grok sanitizer policy, implements notification summarization and persisted status, generalizes PID inference and binding resolution, updates resume/session models, and adds tests, docs, and localization.

Changes

Grok Build CLI Integration

Layer / File(s) Summary
Agent type definition
Sources/RestorableAgentTypes.swift, Sources/RestorableAgentSession.swift
Adds RestorableAgentKind.grok and resume argument mapping to construct grok -r <sessionId>.
Hook definitions and config resolution
CLI/CMUXCLI+AgentHookDefinitions.swift
AgentHookDef gains configDirEnvOverrideSubpath and createConfigDirIfMissing; resolvedConfigDir() trims HOME/env override and appends subpath when present; Grok hook entry added using GROK_HOME + hooks and auto-create enabled; notify synonym supported; legacy hook detection generalized; hook shell command generation routed and Grok-special-cased.
Notification handling & session persistence
CLI/cmux.swift
Adds AgentHookNotificationStatus/AgentHookNotificationSummary, extracts/normalizes notification subtitle/body/status, persists/restores lastNotificationStatus and text fields, generalizes PID inference and wrapper allowlist, expands payload compaction/classification, normalizes nested timeouts, prunes legacy Grok cmux.json hooks, and conditions stop-notification publishing.
Launch sanitization & environment
Packages/CMUXAgentLaunch/...
Allows GROK_HOME/GROK_SANDBOX in sanitized env; adds grok preserved-arguments branch and grokPolicy specifying allowed/optional/dropped/rejected flags and non-restorable commands; includes a sanitizer unit test.
Session models & presentation
Sources/SessionIndexModels.swift, Sources/SessionAgentPresentation.swift
Adds .grok to SessionAgent/AgentSpecifics, presentation display name/asset handling (localized “Grok”), and resume-command construction injecting GROK_HOME when provided.
Task manager discovery
Sources/TaskManagerTypes.swift
Registers Grok in CmuxTaskManagerCodingAgentDefinition.builtIns with launchKinds, directBasenames, and argumentNeedles; tests validate matching.
Transcript parsing & role inference
Sources/SessionIndexView.swift
Routes Grok transcript lines through generic parsing and includes Grok in raw-line parse eligibility and role inference heuristics.
Tests
cmuxTests/*, Packages/CMUXAgentLaunch/Tests/*
Adds/extends tests for sanitized launch persistence (GROK_HOME preserved, secrets dropped), Grok hook notification behavior and install routing, resume command generation, non-interactive handling, session index view helpers, sanitizer behavior, task-manager matching, and foreign-env regressions.
Docs & localization
Resources/Localizable.xcstrings, docs/*, README.md
Adds localized Grok strings and notification messages (en/ja); documents Grok in hooks, feed, and CLI contract docs; updates README session-restore list.
Dev shim
scripts/reload.sh
Generated dev shim can exec a bundled CLI when CMUX_BUNDLED_CLI_PATH is set to a valid executable differing from the shim.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related issues

Poem

🐰 I hopped through code and found a Grok,
Hooks in homes and tests that rock,
Status kept and resumable treats,
PID paths smoothed for tidy beats,
Docs and strings — a rabbit's stock.


Caution

Pre-merge checks failed

Please resolve all errors before merging. Addressing warnings is optional.

  • Ignore

❌ Failed checks (2 errors, 1 warning)

Check name Status Explanation Resolution
Cmux No Hacky Sleeps ❌ Error New scripts/reload.sh has 6 sleep statements (0.2/0.3 sec) for process lifecycle races, violating runtime-no-hacky-sleeps.md rules prohibiting fixed delays for app/process synchronization. Replace with process state monitoring, wait signals, or lsof/fuser detection. Use lifecycle handoff coordination instead of fixed delays. Add deterministic tests.
Cmux Swift File And Package Boundaries ❌ Error CLI/cmux.swift: +780 lines added to 20K-line file exceeds 250-line limit. No extraction or 200-line reduction. Violates boundary rule. Extract AgentHookNotification types/logic to package, shrink cmux.swift 200+ lines, update swift-file-length-budget.tsv.
Docstring Coverage ⚠️ Warning Docstring coverage is 3.75% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (13 passed)
Check name Status Explanation
Title check ✅ Passed The title 'Add Grok Build CLI integration' directly and clearly summarizes the main change: introducing Grok as a supported agent integration with installer, task-manager detection, and session/resume plumbing.
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.
Cmux Swift Actor Isolation ✅ Passed Public exports properly isolated (SessionAgent/RestorableAgentKind are Sendable). Private Codable structures in file-locked store. AgentSpecifics pattern pre-existing. No new isolation debt.
Cmux Swift Blocking Runtime ✅ Passed Grok integration introduces no blocking synchronization in production code. All new functions and agent definitions are non-blocking and deterministic.
Cmux Swift Concurrency ✅ Passed No new legacy async patterns found. Scan of all 2,662 added lines detected zero instances of problematic DispatchQueue, Combine, or fire-and-forget Task patterns per modernization guidelines.
Cmux Swift @Concurrent ✅ Passed No @concurrent violations. PR adds Grok via synchronous code: enum cases, switch statements, struct fields. No new async, nonisolated async, or @concurrent annotations.
Cmux Swift Logging ✅ Passed No new logging violations. PR adds Grok CLI integration without introducing print, debugPrint, dump, NSLog violations. Existing print statements are CLI output, which is allowed.
Cmux User-Facing Error Privacy ✅ Passed No vendor names, internal flags, credentials, or session IDs exposed in user-facing output. Uses safe localized strings and agent displayName.
Cmux Swiftui State Layout ✅ Passed No new SwiftUI state violations. Changes only add .grok case handling to existing switch statements without introducing new @Published, @StateObject, @Observable, or render-time mutations.
Cmux Architecture Rethink ✅ Passed Adds notification fields as fallback cache with clear ownership. No new timing/dispatch patterns, mutable flags creating split state, or UI lifecycle violations. Allowed correctness fix.
Cmux Swift Auxiliary Window Close Shortcuts ✅ Passed No windows added. PR adds agent models and hook handlers only; no NSWindow, NSPanel, NSWindowController, Window, or WindowGroup instantiations.
Description check ✅ Passed The pull request description follows the required template structure with Summary, Verification, and Testing sections clearly provided.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch issue-4220-grok-cli-notifications

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 and usage tips.

coderabbitai[bot]
coderabbitai Bot previously requested changes May 16, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@CLI/cmux.swift`:
- Line 19912: The user-facing error currently prints a provider-specific name
via def.displayName; update the print call that references def.configDir and
def.displayName to use cmux-centric, minimal copy (e.g. mention only the config
directory and "Install cmux first" or similar) so no upstream/provider names are
exposed—locate the print statement that uses def.configDir and def.displayName
and replace the message to reference only def.configDir and the product name
"cmux".

In `@CLI/CMUXCLI`+AgentHookDefinitions.swift:
- Around line 49-57: resolvedConfigDir() currently treats whitespace-only env
override values as valid because envValue isn't trimmed; trim envValue before
validating and using it so blank/whitespace-only values fall through to the HOME
fallback. Specifically, in the branch that reads configDirEnvOverride and
envValue, create a trimmedEnv = envValue.trimmingCharacters(in:
.whitespacesAndNewlines), check trimmedEnv.isEmpty (and use trimmedEnv for
expanding tildes and building the URL), and continue to keep the existing
trimming/check for configDirEnvOverrideSubpath when appending the subpath.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: dcb90da4-f7d3-469e-9926-670ae98d4a48

📥 Commits

Reviewing files that changed from the base of the PR and between df72e51 and 41e1909.

📒 Files selected for processing (19)
  • CLI/CMUXCLI+AgentHookDefinitions.swift
  • CLI/cmux.swift
  • Packages/CMUXAgentLaunch/Sources/CMUXAgentLaunch/AgentLaunchEnvironmentPolicy.swift
  • Packages/CMUXAgentLaunch/Sources/CMUXAgentLaunch/AgentLaunchSanitizer.swift
  • Packages/CMUXAgentLaunch/Sources/CMUXAgentLaunch/AgentLaunchSanitizerPrimaryPolicies.swift
  • Resources/Localizable.xcstrings
  • Sources/RestorableAgentSession.swift
  • Sources/RestorableAgentTypes.swift
  • Sources/SessionAgentPresentation.swift
  • Sources/SessionIndexModels.swift
  • Sources/SessionIndexStore.swift
  • Sources/SessionIndexView.swift
  • Sources/TaskManagerTypes.swift
  • cmuxTests/CLIGenericHookPersistenceTests.swift
  • cmuxTests/RestorableAgentHookProviderResumeTests.swift
  • cmuxTests/RestorableAgentNonInteractiveTests.swift
  • cmuxTests/SessionIndexViewTests.swift
  • cmuxTests/SessionPersistenceTests.swift
  • cmuxTests/TaskManagerResourcesTests.swift

Comment thread CLI/cmux.swift Outdated
Comment thread CLI/CMUXCLI+AgentHookDefinitions.swift
@greptile-apps

greptile-apps Bot commented May 16, 2026 •

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR adds Grok Build CLI as a first-class agent: hook installer (~/.grok/hooks/cmux-session.json), AgentHookDef with GROK_HOME + subpath resolution and optional config-dir auto-creation, AgentSpecifics.grok with full model/permissions/sandbox/GROK_HOME resume plumbing, task-manager detection, and a notification/notify subcommand path that persists per-session status. It also broadens several infrastructure pieces: raw terminal notification suppression now covers all structured agents, notify_target_async becomes non-coalescing, a new clear_notifications --panel scope is added, per-panel status filtering hides stale agents, and socket connect now retries on ECONNREFUSED/EAGAIN.

  • Grok integration: hook installer with legacy-hook pruning, grok -r <id> resume command with model/permission/sandbox flags, sanitizer policy that drops --resume/-r/--worktree/-w, GROK_HOME/GROK_SANDBOX env preservation, and Feed PreToolUse bridge.
  • Notification infrastructure: notification/notify subcommand classifies, persists, and deduplicates per-session status; publishesStopNotification: false prevents double-notify; all new user-facing strings carry both en and ja catalog entries.
  • Socket/title hardening: tagged dev builds reject mismatched inherited CMUX_SOCKET_PATH unless opted-in; all previously-reported issues are addressed in this branch.

Confidence Score: 5/5

Safe to merge; the Grok integration is self-contained and all previously-identified issues have been addressed.

All items raised in previous review threads are resolved: single-call resolveAgentHookTarget, persisted lastNotificationStatus, shell-trace logging gated to #if DEBUG, publishesStopNotification: false eliminating double-notify, and symmetric legacy-hook file pruning. No new defects found.

No files require special attention.

Important Files Changed

Filename Overview
CLI/CMUXCLI+AgentHookDefinitions.swift Adds Grok AgentHookDef with GROK_HOME+subpath resolution, optional config-dir auto-create, grokPinnedHookMarker-based ownership detection, pinned CLI/socket path baked at install time, and #if DEBUG-gated shell trace logging.
CLI/cmux.swift Adds notification/notify subcommand with per-session status persistence, Grok turn-completion classification, deduplication fingerprinting, and stop-path idle persistence. resolveAgentHookTarget called once per hook case with guard let.
Sources/Workspace+PanelLifecycle.swift Adds structured agent status visibility filtering, clearOtherStructuredAgentRuntimes on recordAgentPID, and suppressesRawTerminalNotification. Logic is consistent.
Sources/SessionIndexModels.swift Adds SessionAgent.grok and AgentSpecifics.grok with full resume plumbing. SessionAgent decode now requires !hasRegisteredMetadata to prefer built-in path, enabling vault overrides.
Sources/TerminalNotificationQueue.swift Adds coalesces:false path for notify_target_async, per-surface clear mutation, and per-surface discard with boundary.
Packages/CMUXAgentLaunch/Sources/CMUXAgentLaunch/AgentLaunchSanitizerPrimaryPolicies.swift Adds grokPolicy matching existing policy patterns.
Sources/SocketControlSettings.swift Tagged dev builds reject mismatched inherited CMUX_SOCKET_PATH unless opted-in.
Resources/Localizable.xcstrings All new keys have both en and ja translations.

Reviews (31): Last reviewed commit: "fix: add grok stop completion fallback" | Re-trigger Greptile

Comment thread Sources/SessionIndexModels.swift Outdated
Comment thread CLI/CMUXCLI+AgentHookDefinitions.swift

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 issue found across 19 files

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="Packages/CMUXAgentLaunch/Sources/CMUXAgentLaunch/AgentLaunchSanitizerPrimaryPolicies.swift">

<violation number="1" location="Packages/CMUXAgentLaunch/Sources/CMUXAgentLaunch/AgentLaunchSanitizerPrimaryPolicies.swift:183">
P2: `--worktree`/`-w` are dropped but not marked as value options in `grokPolicy`, so spaced forms leave an orphan path argument and can truncate subsequent preserved options.</violation>
</file>

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.
Re-trigger cubic

@lawrencecchen
lawrencecchen dismissed coderabbitai[bot]’s stale review May 16, 2026 00:47

Stale bot review: all requested CodeRabbit inline threads were addressed, CodeRabbit marked them resolved, and the CodeRabbit status check is passing on the latest commit.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 issue found across 5 files (changes from recent commits).

Prompt for AI agents (unresolved issues)

Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.


<file name="CLI/cmux.swift">

<violation number="1" location="CLI/cmux.swift:21140">
P2: Fallback notification restoration reuses body/subtitle but keeps stale status, which can incorrectly set the agent to Idle.</violation>
</file>

Tip: Review your code locally with the cubic CLI to iterate faster.
Re-trigger cubic

Comment thread CLI/cmux.swift Outdated
coderabbitai[bot]
coderabbitai Bot previously requested changes May 18, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

♻️ Duplicate comments (1)
CLI/cmux.swift (1)

18923-19006: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Sanitize hook text before showing it in notifications.

This path forwards raw hook message/body/text/error fields into user-visible notifications and also injects def.displayName into fallback/status copy. That leaks upstream/vendor-specific details into alerts, which this repo explicitly forbids. Please map these events to cmux-owned copy and keep raw payload text only in sanitized logs/telemetry.

As per coding guidelines “Do not introduce/alter user-facing errors, alerts, recovery copy, or command output that expose implementation details… vendor/service names… raw upstream error messages… [or] request/session IDs…”

Also applies to: 21344-21345, 21411-21429

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@CLI/cmux.swift`:
- Around line 18995-19000: The current fallback branch in
AgentHookNotificationSummary creation collapses any unrecognized non-empty
notification into status: .idle which triggers an Idle publish and can
incorrectly clear active work; update the logic (the
AgentHookNotificationSummary construction and the code path that calls
set_status/publishes the status) to use a neutral/no-status value (e.g., nil or
a dedicated .unknown/.none) instead of .idle for unclassified messages and
ensure set_status is only invoked when classification confidence is high —
adjust the fallback in the AgentHookNotificationSummary creation and the
downstream switch/publish that sends Idle so that unrecognized notifications do
not automatically call set_status(.idle).
- Around line 20045-20048: The current check uses fm.fileExists(atPath:
configDir) which returns true for regular files too; update the logic to call
fm.fileExists(atPath:isDirectory:) and inspect the isDirectory Bool: if the path
exists but isDirectory == false, return/throw the same sanitized error/guidance
as the missing-dir branch (so callers know to fix GROK_HOME or the override),
and only call fm.createDirectory(atPath:configDir, withIntermediateDirectories:
true) when the path either does not exist or exists and isDirectory == true;
reference configDir, def.createConfigDirIfMissing,
fm.fileExists(atPath:isDirectory:), and
fm.createDirectory(atPath:withIntermediateDirectories:) when making the change.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 1eb9ddff-a356-4b8d-acbe-5eacc05a4070

📥 Commits

Reviewing files that changed from the base of the PR and between 238588b and b0293a5.

📒 Files selected for processing (6)
  • CLI/cmux.swift
  • Packages/CMUXAgentLaunch/Sources/CMUXAgentLaunch/AgentLaunchSanitizer.swift
  • README.md
  • Resources/Localizable.xcstrings
  • cmuxTests/RestorableAgentHookProviderResumeTests.swift
  • docs/cli-contract.md

Comment thread CLI/cmux.swift
Comment thread CLI/cmux.swift Outdated
Comment thread CLI/cmux.swift Outdated
Comment thread CLI/cmux.swift Outdated

This branch was successfully deployed

1 active deployment
Preview – cmux — 8559c881 Deployed May 19, 2026 by vercel[bot]
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.

Add Grok Build CLI integration with notifications, task manager, and session restore

2 participants