Skip to content

feat(grok): show Grok subagents in the Agents panel - #8412

Open
charindithjaindu wants to merge 2 commits into
pingdotgg:mainfrom
charindithjaindu:feat/grok-subagent-agents-panel
Open

feat(grok): show Grok subagents in the Agents panel#8412
charindithjaindu wants to merge 2 commits into
pingdotgg:mainfrom
charindithjaindu:feat/grok-subagent-agents-panel

Conversation

@charindithjaindu

@charindithjaindu charindithjaindu commented Aug 27, 2026

Copy link
Copy Markdown

Problem

Claude Task and Codex collab children already emit task.* events that the right-hand Agents panel folds into a live roster. Grok Build streams the same child work over ACP (subagent_spawned / subagent_progress / subagent_finished, plus workflow_updated), but T3 dropped those notifications. Grok threads showed an empty Agents panel.

Fix

Map Grok's x.ai session notifications onto the existing task.started / task.progress / task.completed path. Complexity stays at the adapter.

  • Standalone agent() children become taskType: "subagent" rows with timelineBypass, so they list in the Agents panel like Claude Task.
  • Workflow members use Claude/Codex linkage: parentAgentId + timelineBypass + a stable :wf: slot. The parent ACP session id is not used as parentAgentId (that would mis-classify a direct spawn as a workflow member).
  • First-seen terminal updates still emit task.started then task.completed. Unchanged member ticks are fingerprinted and skipped. Child tokens stay on typedUsage.
  • No new UI, contracts, or usage/rewind work. Web, desktop, and mobile already render this stream through client-runtime.

Tests

vp test run apps/server/src/provider/acp/GrokAcpSubagents.test.ts apps/server/src/provider/Layers/GrokAdapter.test.ts — 48 passed.

Made with Grok 4.6.

Closes #9892


Note

Medium Risk
Non-trivial Grok adapter changes (notification buffering, semaphore ordering, and turn-liveness interaction) could drop or mis-time events at session startup, though scope stays within existing task.* ingestion with no contract or auth changes.

Overview
Grok Build child work (subagent_* and workflow_updated) was invisible in the Agents panel because those private ACP notifications were never translated into the shared task.* runtime events Claude Task and Codex collab already use.

This PR adds GrokAcpSubagents to parse flexible x.ai envelopes and emit task.started / task.progress / task.completed with the same linkage rules as other drivers: standalone agent() rows as subagent with timelineBypass (no fake parentAgentId), workflow members under a local_workflow parent with stable runId:wf:agentId slots. GrokAdapter registers four notification methods, queues early notifications until the session context exists, then flushes them under a lock and refreshes turn liveness when subagent ticks arrive so long quiet parent streams do not stall the watchdog.

The ACP mock agent can emit a sample subagent lifecycle when T3_ACP_EMIT_XAI_SUBAGENT=1; unit and adapter tests cover parsing, dedupe, and end-to-end streaming.

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

Note

Show Grok subagents in the Agents panel by mapping session notifications to task.* events

  • GrokAdapter now listens to _x.ai/session/update notifications and parses them as workflow or subagent updates via GrokAcpSubagents.ts, emitting canonical task.started/task.progress/task.completed events with stable RuntimeTaskIds
  • Added buffering for early session notifications so they replay after session start, and notifications now refresh turn liveness to avoid inadvertent watchdog timeouts
  • Added a mock flag T3_ACP_EMIT_XAI_SUBAGENT in acp-mock-agent.ts to simulate subagent lifecycle notifications for testing
  • Documented the mapping in providers.md
  • Risk: early notifications are queued via pending + readiness flag in GrokSessionContext; if the session-start handshake does not flip the readiness flag, buffered workflow/subagent events may be dropped silently

Macroscope summarized 468a4bf.

Claude Task and Codex collab children already emit task.* events that the
right-hand Agents panel folds into a live roster. Grok Build streams the
same work over x.ai session notifications, but T3 dropped them, so Grok
threads never listed child agents.

Map subagent_spawned/progress/finished and workflow_updated onto the
existing task.started/progress/completed path, with Claude/Codex linkage
(parentAgentId + timelineBypass for workflow members; standalone agent()
rows stay direct subagents).

Made with Grok 4.6.
@coderabbitai

coderabbitai Bot commented Aug 27, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 62d2ac96-5ae7-472e-9eaf-dba2d00349ac

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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

@github-actions github-actions Bot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:XL 500-999 changed lines (additions + deletions). labels Aug 27, 2026
Comment thread apps/server/src/provider/Layers/GrokAdapter.ts Outdated
Comment thread apps/server/src/provider/acp/GrokAcpSubagents.ts
Comment thread apps/server/src/provider/acp/GrokAcpSubagents.ts

@cursor cursor Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Want fixes drafted automatically? Bugbot Autofix can create code changes for findings. A team admin can enable Autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 2c8a9e0. Configure here.

Comment thread apps/server/src/provider/acp/GrokAcpSubagents.ts
@macroscopeapp

macroscopeapp Bot commented Aug 27, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This PR adds a substantial production capability for surfacing Grok subagents and workflows, including new event mapping, startup buffering, and turn-liveness behavior. The resulting changes affect existing Grok request paths and shared Agents-panel state, so the scope merits human review.

You can add or adjust custom eligibility rules. Learn more.

Subagent and workflow ACP ticks now stamp lastTurnActivityAtNanos before
waking the watchdog, so a quiet parent stream is not cancelled while
children are still working.

Spawn-time token counts are kept in usageByTaskId so a later
tools-or-duration tick cannot publish totalTokens 0. Workflow member
fingerprints include the wire state so start-to-running still emits
progress.

Made with Grok 4.6.
@charindithjaindu

Copy link
Copy Markdown
Author

Addressed the Macroscope and Bugbot findings in 468a4bf:

  • Subagent/workflow ACP ticks now stamp lastTurnActivityAtNanos before waking the watchdog, so a quiet parent stream is not cancelled while children are still working.
  • Spawn-time token counts are kept in usageByTaskId, so a later tools-or-duration tick cannot publish totalTokens: 0.
  • Workflow member fingerprints include the wire state, so startrunning still emits progress.

Mapper + adapter tests: 49 passed.

Svyk added a commit to Svyk/t3code that referenced this pull request Sep 5, 2026
Grok ends the ACP turn while monitor watch loops and auto-backgrounded
shells keep running inside the Grok process. The adapter emitted no
task.* events, so backgroundLiveness never saw them: the thread looked
done and the session reaper did not skip it.

Map monitor tool calls and BackgroundTaskStarted updates onto
task.started (taskType monitor / shell), and TaskOutput / kill terminals
onto task.completed, including after the turn has settled. Cache x.ai/tool
meta per toolCallId (completed updates drop _meta) and evict it and the
task record on terminal events. Subagent rows are pingdotgg#8412.

Refs pingdotgg#9892
Svyk added a commit to Svyk/t3code that referenced this pull request Sep 5, 2026
Subagent identity comes from pingdotgg#8412. A get_command_or_subagent_output row
for an unknown [subagent:…] task no longer synthesizes a roster entry.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL 500-999 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Grok subagents do not show correctly in the Agents panel

1 participant