Skip to content

Notify Warp and third-party agents when another run is waiting - #16809

Open
warp-agent-staging[bot] wants to merge 5 commits into
masterfrom
factory/orchestration-waited-on
Open

warp-agent-staging[bot] wants to merge 5 commits into
masterfrom
factory/orchestration-waited-on

Conversation

@warp-agent-staging

@warp-agent-staging warp-agent-staging Bot commented Nov 12, 2026 •

Copy link
Copy Markdown
Contributor

Description

Consume recipient-owned run_waited_on events in native Warp, the Claude driver bridge, and third-party CLI message-watch output. Preserve WaitedOn ownership throughout deserialization and internal consumers: run_id is the notified waitee and ref_id is the waiter. Explicitly project the waiter into the existing protocol’s sender_agent_id when constructing Waiting; event ownership and the protocol actor are distinct. Retain read-only lifecycle context without leaking descendant notifications or changing conversation status. Preserve replay identity and exclude synthetic records from mailbox delivery acknowledgments.

Pin the additive protocol and require Claude platform plugin 1.1.5 / Codex orchestration 0.4.4. Include minimal compile-compatibility handling for newer protobuf fields and the server-authored hook-denial result.

Linked Issue

Tracks warpdotdev/warp-server#21004. Depends on protocol/server formatting and plugin companions below; plugin companions in turn depend on their existing wait-skill PRs. No quarantine repair.

Testing

  • 109 selected Rust tests pass: lifecycle queues/stream routing, wire round-trip and recipient/waiter identities, Claude bridge disk-stage/render/ack, and CLI serialization.
  • cargo clippy --locked -p warp --lib --tests -- -D warnings passes.
  • Final ./script/format and diff-check complete.
  • Client computer-use/manual GUI verification was explicitly declined; no new GUI proof is claimed.

Agent Mode

  • Warp Agent Mode

CHANGELOG-OZ: Agents receive a notification when another run is waiting for them, whether the waiter is their parent or child.

Related changes and landing order

Protocol: warpdotdev/warp-proto-apis#413; server formatting: https://github.com/warpdotdev/warp-server/pull/21731 (after #21020); Claude hooks: warpdotdev/claude-code-warp#106 (after #105); Codex hooks: warpdotdev/codex-warp#11 (after #10); client: #16809 (after both plugin releases).

Historical parent-stack UI evidence

The automated appendix below belongs to earlier web-timeline work in the parent task, not proof of this notification change. New client computer-use verification was explicitly declined.

Computer-use video recordings (10)

Opens the seeded Waiting run in the Factory MSW app, inspects history, resumes via mocked state, and follows the target link.
Factory Waiting run: open, history, resume, target link: Opens the seeded Waiting run in the Factory MSW app, inspects history, resumes via mocked state, and follows the target link.

Opens the seeded Waiting run in the Oz MSW app, expands lifecycle history, resumes via mocked state, and follows the target run link.
Oz Waiting run: history, resume, target link: Opens the seeded Waiting run in the Oz MSW app, expands lifecycle history, resumes via mocked state, and follows the target run link.

Opens the Waiting Factory trace, inspects the waiting segment tooltip and wait target, mutates the MSW fixture to resumed state, observes separated work segments, and follows the target link.
Factory waiting trace to resumed trace: Opens the Waiting Factory trace, inspects the waiting segment tooltip and wait target, mutates the MSW fixture to resumed state, observes separated work segments, and follows the target link.

Navigating Factory and Oz MSW run pages for waiting and resumed states, expanding timelines, then clicking a target link in the debugger.
Factory, Oz and debugger waiting/resumed flows: Navigating Factory and Oz MSW run pages for waiting and resumed states, expanding timelines, then clicking a target link in the debugger.

Loads Factory MSW, opens run-msw-idle-gap (waiting on two targets), inspects links and trace, then navigates to run-msw-debugging (resumed working).
Factory MSW waiting and resumed traces: Loads Factory MSW, opens run-msw-idle-gap (waiting on two targets), inspects links and trace, then navigates to run-msw-debugging (resumed working).

Reloads factory.html, navigates client-side to run-msw-debugging, hovers trace segments, and checks footer links, then run-msw-idle-gap.
Factory resumed trace tooltips and waiting footer: Reloads factory.html, navigates client-side to run-msw-debugging, hovers trace segments, and checks footer links, then run-msw-idle-gap.

Full reload of Factory MSW entry, client-side navigation to the debugging run and the idle-gap waiting run, showing footer links and trace, then the resumed trace.
Waiting and resumed run traces: Full reload of Factory MSW entry, client-side navigation to the debugging run and the idle-gap waiting run, showing footer links and trace, then the resumed trace.

Seeds MSW state for a waiting run, inspects Agents timeline and target links, then the debugger waiting-parent page and child-beta navigation.
Waiting timeline in Agents app and debugger: Seeds MSW state for a waiting run, inspects Agents timeline and target links, then the debugger waiting-parent page and child-beta navigation.

Shows Waiting and Blocked run rows on the real Agents and Factory Runs lists in Chromium on Linux.
Agents and Factory Waiting/Blocked badges: Shows Waiting and Blocked run rows on the real Agents and Factory Runs lists in Chromium on Linux.

Shows the Waiting badge and expanded lifecycle timeline in Agents and Factory, the before/after debugger templates, and a resumed run retaining wait history.
Waiting run presentation: Agents, Factory, debugger: Shows the Waiting badge and expanded lifecycle timeline in Agents and Factory, the before/after debugger templates, and a resumed run retaining wait history.

Computer-use screenshots (10)

Agents Runs list with Blocked and Waiting rows, devtools closed
Agents Runs list with Blocked and Waiting rows, devtools closed

Factory Runs list with Waiting (pause glyph) and Blocked (stop square) rows together
Factory Runs list with Waiting (pause glyph) and Blocked (stop square) rows together

Agents run-msw-1 seeded WAITING: Agent waiting timeline (expanded) with child-alpha/child-beta links and orange Waiting badge
Agents run-msw-1 seeded WAITING: Agent waiting timeline (expanded) with child-alpha/child-beta links and orange Waiting badge

Factory run-msw-idle-gap: "Agent finished" (not waiting), trace shows "No timeline is available for this run." and side panel stuck on "Loading timeline..."
Factory run-msw-idle-gap: "Agent finished" (not waiting), trace shows "No timeline is available for this run." and side panel stuck on "Loading timeline..."

Agents: Waiting for another agent badge and expanded timeline with child-alpha/child-beta links
Agents: Waiting for another agent badge and expanded timeline with child-alpha/child-beta links

Agents resumed run: Running badge, latest "Agent working" with historical "Waiting for another agent" row retained
Agents resumed run: Running badge, latest "Agent working" with historical "Waiting for another agent" row retained

Factory waiting run: footer "Waiting for another agent" with dot; trace stages bar; timeline panel stuck on "Loading timeline..."
Factory waiting run: footer "Waiting for another agent" with dot; trace stages bar; timeline panel stuck on "Loading timeline..."

Factory resumed run: footer "Agent is working…", Timeline panel still "Loading timeline..." (limitation)
Factory resumed run: footer "Agent is working…", Timeline panel still "Loading timeline..." (limitation)

Original debugger (/before): WAITING amber badge, "Agent waiting" with orange marker and "messages from child-alpha, child-beta"
Original debugger (/before): WAITING amber badge, "Agent waiting" with orange marker and "messages from child-alpha, child-beta"

Revised debugger (/after): "WAITING FOR ANOTHER AGENT" purple badge, "Waiting for another agent" purple marker with output-from-another-agent subtext and links
Revised debugger (/after): "WAITING FOR ANOTHER AGENT" purple badge, "Waiting for another agent" purple marker with output-from-another-agent subtext and links

@warp-agent-staging

Copy link
Copy Markdown
Contributor Author

This PR was generated with Warp.

Comment @warp-staging-factory on this PR to send it follow-up work.

View run View conversation View on Slack

@warp-agent-staging warp-agent-staging Bot added the factory:eng-factory-slim Label associated to the "eng-factory-slim" factory label Nov 12, 2026
@cla-bot cla-bot Bot added the cla-signed label Nov 12, 2026
@warp-agent-staging

Copy link
Copy Markdown
Contributor Author

This PR was generated with Warp, requested by @seemeroland.

Comment @warp-staging-factory on this PR to send it follow-up work.

View run View conversation View on Slack

@warp-agent-staging warp-agent-staging Bot left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Overview

Native Warp and third-party delivery paths notify the recipient using the waiter in ref_id without ancestor leakage, status changes, or mailbox acknowledgment of synthetic records. Examined design, correctness, standards, complexity, naming, comments, test value/coverage, and security; no outstanding source findings.

Verdict

Checks: build/clippy pass, selected tests 225/225 pass, CI pending (real non-draft run started; prior draft aggregate intentionally red), visual proof n/a (declined).

Found: 0 critical, 0 important, 0 suggestions, 0 nits. Approve the source change subject to cross-platform CI/protections and plugin/protocol landing order. Historical parent-stack captures are not client verification.

Responding as eng-factory-slim: Open session · View in factory

seemeroland pushed a commit to warpdotdev/warp-proto-apis that referenced this pull request Nov 13, 2026
## Description
Add the additive `WAITED_ON` lifecycle type and `waited_on` detail. The
sender identifies the waiting run, independently of parent/child
direction. Regenerate checked-in Go bindings.

## Justification
Support recipient-owned `run_waited_on` events so both native and
third-party agents can learn that another run is waiting for them. Part
of warpdotdev/warp-server#21004.

## Sensitive Fields
- [x] No sensitive string fields are added.

## Testing
Go generation and generated-package tests, Rust build/tests, npm ci, and
TypeScript generation pass. Generation used protoc 29.3 and the
repository-pinned Go plugin; Rust has no unit tests.

## Related changes and landing order
Protocol: #413; server
formatting: warpdotdev/warp-server#21731 (after
#21020); Claude hooks:
warpdotdev/claude-code-warp#106 (after #105);
Codex hooks: warpdotdev/codex-warp#11 (after
#10); client: warpdotdev/warp#16809 (after both
plugin releases).

## Historical parent-stack UI evidence
The automated appendix below belongs to earlier web-timeline work in the
parent task, not proof of this notification change. New client
computer-use verification was explicitly declined.

<!-- warp:pr-description-artifacts start -->
<!-- oz:computer-use-videos start -->
<details>
<summary>Computer-use video recordings (8)</summary>

[![Opens the seeded Waiting run in the Factory MSW app, inspects
history, resumes via mocked state, and follows the target
link.](https://staging.warp.dev/api/v1/agent/artifacts/01a18f3a-56fd-76d5-bb5a-4f81d49039b4/download)](https://platform.staging.warp.dev/artifacts/01a18f3a-54ae-7ef6-8c52-1ec3c29e5d7b)
**Factory Waiting run: open, history, resume, target link**: Opens the
seeded Waiting run in the Factory MSW app, inspects history, resumes via
mocked state, and follows the target link.

[![Opens the seeded Waiting run in the Oz MSW app, expands lifecycle
history, resumes via mocked state, and follows the target run
link.](https://staging.warp.dev/api/v1/agent/artifacts/01a18f3c-3e1d-7da4-80e6-be3ccc10ef7b/download)](https://platform.staging.warp.dev/artifacts/01a18f3c-3b2f-768d-b2b2-11f4eb8c173f)
**Oz Waiting run: history, resume, target link**: Opens the seeded
Waiting run in the Oz MSW app, expands lifecycle history, resumes via
mocked state, and follows the target run link.

[![Opens the Waiting Factory trace, inspects the waiting segment tooltip
and wait target, mutates the MSW fixture to resumed state, observes
separated work segments, and follows the target
link.](https://staging.warp.dev/api/v1/agent/artifacts/01a18f42-ce41-7ae0-9fa7-2042d5965751/download)](https://platform.staging.warp.dev/artifacts/01a18f42-cbb7-7d7c-a007-cf651e9e0681)
**Factory waiting trace to resumed trace**: Opens the Waiting Factory
trace, inspects the waiting segment tooltip and wait target, mutates the
MSW fixture to resumed state, observes separated work segments, and
follows the target link.

[![Navigating Factory and Oz MSW run pages for waiting and resumed
states, expanding timelines, then clicking a target link in the
debugger.](https://staging.warp.dev/api/v1/agent/artifacts/01a1a96a-e413-747e-871b-e05bdb889d90/download)](https://platform.staging.warp.dev/artifacts/01a1a96a-e113-705f-8b31-b2f6de652e9a)
**Factory, Oz and debugger waiting/resumed flows**: Navigating Factory
and Oz MSW run pages for waiting and resumed states, expanding
timelines, then clicking a target link in the debugger.

[![Loads Factory MSW, opens run-msw-idle-gap (waiting on two targets),
inspects links and trace, then navigates to run-msw-debugging (resumed
working).](https://staging.warp.dev/api/v1/agent/artifacts/01a1a96d-deeb-7479-bdd1-afec128812f9/download)](https://platform.staging.warp.dev/artifacts/01a1a96d-dc40-755d-8f3f-956700dfa919)
**Factory MSW waiting and resumed traces**: Loads Factory MSW, opens
run-msw-idle-gap (waiting on two targets), inspects links and trace,
then navigates to run-msw-debugging (resumed working).

[![Reloads factory.html, navigates client-side to run-msw-debugging,
hovers trace segments, and checks footer links, then
run-msw-idle-gap.](https://staging.warp.dev/api/v1/agent/artifacts/01a1a96f-b183-74c9-9267-36f99fafde35/download)](https://platform.staging.warp.dev/artifacts/01a1a96f-af19-7b5a-b641-2c4d9c222e11)
**Factory resumed trace tooltips and waiting footer**: Reloads
factory.html, navigates client-side to run-msw-debugging, hovers trace
segments, and checks footer links, then run-msw-idle-gap.

[![Full reload of Factory MSW entry, client-side navigation to the
debugging run and the idle-gap waiting run, showing footer links and
trace, then the resumed
trace.](https://staging.warp.dev/api/v1/agent/artifacts/01a1a971-bbd4-71c5-89d9-1ba896f83fb3/download)](https://platform.staging.warp.dev/artifacts/01a1a971-b9a2-779a-97fa-306ec44a9ae7)
**Waiting and resumed run traces**: Full reload of Factory MSW entry,
client-side navigation to the debugging run and the idle-gap waiting
run, showing footer links and trace, then the resumed trace.

[![Seeds MSW state for a waiting run, inspects Agents timeline and
target links, then the debugger waiting-parent page and child-beta
navigation.](https://staging.warp.dev/api/v1/agent/artifacts/01a1cd25-d3ac-71d5-94fe-4201d0b5bc6b/download)](https://platform.staging.warp.dev/artifacts/01a1cd25-cf66-76c6-9ad0-437aefff1c77)
**Waiting timeline in Agents app and debugger**: Seeds MSW state for a
waiting run, inspects Agents timeline and target links, then the
debugger waiting-parent page and child-beta navigation.

</details>
<!-- oz:computer-use-videos end -->
<!-- oz:computer-use-screenshots start -->
<details>
<summary>Computer-use screenshots (10)</summary>

![run-msw-debugging after reload+client nav: single Coding agent Active
segment, plain Follow up
footer](https://staging.warp.dev/api/v1/agent/artifacts/01a1a96f-6c18-7e32-9b10-0937eeb50650/download)
run-msw-debugging after reload+client nav: single Coding agent Active
segment, plain Follow up footer

![run-msw-idle-gap: Waiting segment, Idle for 2d 9h gap, footer with
child-alpha and child-beta
links](https://staging.warp.dev/api/v1/agent/artifacts/01a1a96f-a89d-7a0f-a313-1d4bc3383b01/download)
run-msw-idle-gap: Waiting segment, Idle for 2d 9h gap, footer with
child-alpha and child-beta links

![Resumed run trace: short historical Waiting segment (1m→2m) at top and
long current Active segment after idle
gap](https://staging.warp.dev/api/v1/agent/artifacts/01a1a971-5153-7d79-a45b-5b90bacd4fb8/download)
Resumed run trace: short historical Waiting segment (1m→2m) at top and
long current Active segment after idle gap

![Waiting run footer "Waiting for child-alpha and child-beta agents…"
with child-beta target (/runs/child-beta?tab=agents&amp;from=parent) in
status bar; alpha target is
/runs/child-alpha?tab=agents&amp;from=parent](https://staging.warp.dev/api/v1/agent/artifacts/01a1a971-99c0-705a-a2a5-41f3cf9dd85f/download)
Waiting run footer "Waiting for child-alpha and child-beta agents…" with
child-beta target (/runs/child-beta?tab=agents&amp;from=parent) in
status bar; alpha target is /runs/child-alpha?tab=agents&amp;from=parent

![Agents run-msw-1 collapsed timeline: "Agent waiting" with full
sentence and two underlined links; Status badge
Waiting](https://staging.warp.dev/api/v1/agent/artifacts/01a1cd25-22c3-7041-ad49-7c485b7192ad/download)
Agents run-msw-1 collapsed timeline: "Agent waiting" with full sentence
and two underlined links; Status badge Waiting

![Debugger waiting-parent Timeline: Agent waiting event with yellow
marker and child-alpha/child-beta
links](https://staging.warp.dev/api/v1/agent/artifacts/01a1cd25-8f66-79aa-bac3-be3f6a5e0595/download)
Debugger waiting-parent Timeline: Agent waiting event with yellow marker
and child-alpha/child-beta links

![Debugger child-beta timeline: INPROGRESS run with retained Agent
working → Agent waiting → Agent working
history](https://staging.warp.dev/api/v1/agent/artifacts/01a1cd25-c62a-77e5-ba1a-f5e1f45569e3/download)
Debugger child-beta timeline: INPROGRESS run with retained Agent working
→ Agent waiting → Agent working history

![Collapsed Agent waiting row with orange circular pause marker and
"waiting for messages from child-alpha, child-beta"
sentence](https://staging.warp.dev/api/v1/agent/artifacts/01a1cd45-e5cb-7dc6-a097-243696b2112d/download)
Collapsed Agent waiting row with orange circular pause marker and
"waiting for messages from child-alpha, child-beta" sentence

![Collapsed Agent blocked row: orange rounded-square-in-circle marker,
"The run needs attention before it can
continue."](https://staging.warp.dev/api/v1/agent/artifacts/01a1cd46-a9e7-7625-b149-20eaccfbdda0/download)
Collapsed Agent blocked row: orange rounded-square-in-circle marker,
"The run needs attention before it can continue."

![Final state: collapsed Agent waiting row with orange pause marker and
child-alpha/child-beta
links](https://staging.warp.dev/api/v1/agent/artifacts/01a1cd46-eba2-7b3c-a5ee-7d15bb32a443/download)
Final state: collapsed Agent waiting row with orange pause marker and
child-alpha/child-beta links

</details>
<!-- oz:computer-use-screenshots end -->
<!-- warp:pr-description-artifacts end -->

---------

Co-authored-by: warp-agent-staging[bot] <240773466+warp-agent-staging[bot]@users.noreply.github.com>
Comment thread app/src/server/server_api/ai.rs Resolved
Comment thread app/src/server/server_api/ai.rs Resolved
Comment thread app/src/ai/agent/conversation_yaml.rs Resolved
@warp-local-for-testing-only

Copy link
Copy Markdown

@seemeroland, your GitHub account is not connected to Warp. Connect your GitHub account, then retry github-pr-review-submitted from eng-factory-slim.

@seemeroland seemeroland 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.

All of these events need consistent, documented semantics for who they apply to. If we're doing some Waiting to WaitedOn conversion, we need a good reason for this. I don't mind if to the 3p agent it appears as a different run is waiting on you, but that should be a formatting level change. Our protocol and internal structs need consistent semantics

Comment thread app/src/server/server_api/ai.rs Resolved
@warp-local-for-testing-only

Copy link
Copy Markdown

@seemeroland, your GitHub account is not connected to Warp. Connect your GitHub account, then retry github-pr-review-submitted from eng-factory-slim.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cla-signed factory:eng-factory-slim Label associated to the "eng-factory-slim" factory

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant