Skip to content

feat(cli): add trusted Cloud rooms and Fleet workflow#1358

Merged
khaliqgant merged 22 commits into
mainfrom
feat/herdr-cloud-room-cli
Jul 25, 2026
Merged

feat(cli): add trusted Cloud rooms and Fleet workflow#1358
khaliqgant merged 22 commits into
mainfrom
feat/herdr-cloud-room-cli

Conversation

@khaliqgant

@khaliqgant khaliqgant commented Jul 23, 2026

Copy link
Copy Markdown
Member

Summary

  • add participant-only Cloud room invite, membership, acceptance, and per-device session commands
  • add a thin CLI over the existing Cloud integration catalog/connect/disconnect lifecycle; Relayfile remains the integration and writeback authority
  • let Agent Relay SDK and CLI clients use scoped agent tokens without inheriting an ambient owner workspace key
  • hide offline/non-Fleet history by default, use atomic node ports, make fleet spawn --session-ref perform a real Claude/Codex resume, allow immediate same-name respawn after release, and advertise broker spawn/release capacity before the first remote spawn

V1 trust model

Every invitee is a trusted full room participant with ordinary agent-level Relaycast collaboration actions. There is no viewer role, room integration grant/lease service, Cloud chat proxy, or Relaycast source/version change. The workspace owner key, owner-only Relaycast administration, and Agent Relay Cloud organization administration remain owner-only.

Invitation token contract

Cloud issues opaque room invitations in the generic relay_room_inv_ namespace followed by exactly 43 URL-safe characters. The CLI validates that shape before making an authenticated accept request; product-specific and malformed tokens are rejected locally.

Validation

  • exact head 9689e64766ed3c4088002e2c1016e06e0384fcfe: all applicable GitHub checks passed
  • focused Cloud room CLI suite: 14 passed
  • CLI build passed
  • CLI lint passed with zero errors
  • full broker suite: 822 passed, 4 environment-dependent tests ignored
  • broker cargo clippy --lib -- -D warnings
  • prior focused CLI suite: 121 passed; SDK suite: 163 passed
  • pinned Relaycast v6.0.1 local two-node Fleet E2E: 14 passed
  • exact-head GitHub two-node Fleet matrix, both OS E2E jobs, Rust tests, coverage, security, package, install, and standalone macOS smoke all passed
  • live Fleet proof on the broker-equivalent implementation: phase one created Codex thread 019f93bd-019e-7663-b1b0-b320acb71ea9 at PID 26879; after CLI release, an immediate same-name fleet spawn --session-ref created PID 28000 on the same node, /api/spawned retained that thread UUID, and resumed context recalled PR1358_232A_MEMORY_5E8F14
  • Prettier, Cargo fmt, and git diff --check
  • CodeRabbit review completed; no unresolved review threads

Related

@khaliqgant
khaliqgant requested a review from willwashburn as a code owner July 23, 2026 21:45
@cursor

cursor Bot commented Jul 23, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@coderabbitai

coderabbitai Bot commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

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

Adds workspace-scoped Cloud room management, integration discovery and delegated credentials, agent identity commands, credential-safe SDK behavior, CLI documentation, and atomic broker port allocation for Fleet scenarios.

Changes

Cloud room lifecycle

Layer / File(s) Summary
Room transport and secure data handling
packages/cli/src/cli/commands/cloud-room.ts
Adds validation, authenticated Cloud requests, response normalization, forbidden-credential rejection, secure token I/O, and sanitized output.
Room lifecycle commands and tests
packages/cli/src/cli/commands/cloud-room.ts, packages/cli/src/cli/commands/cloud-room.test.ts
Adds invitation, membership, acceptance, and device-session commands with rollback, output-mode, routing, and security coverage.

Cloud integrations

Layer / File(s) Summary
Integration transport and credential storage
packages/cli/src/cli/commands/cloud-integration.ts
Adds strict validation, authenticated requests, response normalization, sanitization, capability rendering, and secure delegated credential-file creation.
Integration commands and tests
packages/cli/src/cli/commands/cloud-integration.ts, packages/cli/src/cli/commands/cloud-integration.test.ts
Adds catalog, connection, grant, delegated credential, and revocation commands with cleanup and output tests.

Agent identity and registration

Layer / File(s) Summary
Agent identity and CLI registration
packages/cli/src/cli/commands/agent.ts, packages/cli/src/cli/lib/sdk-client.ts, packages/sdk/src/*, packages/cli/src/cli/commands/cloud.ts, packages/cli/README.md, CHANGELOG.md
Adds agent identity commands, agent-token transport selection, credential-safe relay serialization, Cloud command registration, command-surface tests, and documentation.

Atomic broker ports

Layer / File(s) Summary
Atomic broker startup and Fleet coverage
packages/cli/src/cli/lib/broker-lifecycle.ts, packages/cli/src/cli/commands/core.ts, packages/cli/src/cli/commands/core.test.ts, tests/e2e/fleet/*, crates/broker/src/cli/mod.rs, packages/harness-driver/src/spawn-config.ts
Allows port zero to request an OS-assigned API port, reports the bound port, handles missing status, and updates Fleet configurations and documentation.

Estimated code review effort: 5 (Critical) | ~120 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Operator
  participant CLI
  participant CloudSession
  participant CloudAPI
  participant SecureFile
  Operator->>CLI: run room or integration command
  CLI->>CloudSession: ensure authenticated session
  CloudSession-->>CLI: bound API host
  CLI->>CloudAPI: authorized scoped request
  CloudAPI-->>CLI: normalized response or credential lease
  CLI->>SecureFile: write owner-only secret when requested
  SecureFile-->>CLI: write result
  CLI->>CloudAPI: revoke lease if file writing fails
Loading

Possibly related issues

  • AgentWorkforce/cloud#2462: Both changes modify agent-scoped Relaycast authentication and agent-token handling.

Possibly related PRs

Suggested labels: size:XXL

Suggested reviewers: willwashburn

Poem

I’m a rabbit with tokens tucked safe in my den,
Rooms bloom with invites, then welcome new friends.
Integrations grant paths, credentials stay tight,
Agents show presence by day and by night.
Cloud commands hop, while ports bind just right!

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 5.06% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
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 matches the main change set: Cloud room support plus related CLI/Fleet workflow updates.
Description check ✅ Passed The description is substantive and covers summary and validation, with only the template's Test Plan/Screenshots sections not explicitly formatted.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/herdr-cloud-room-cli

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.

@chatgpt-codex-connector chatgpt-codex-connector 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.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 11df645277

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread packages/cli/src/cli/commands/cloud-integration.ts Outdated

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

Actionable comments posted: 2

🧹 Nitpick comments (1)
packages/cli/src/cli/commands/cloud-integration.ts (1)

442-443: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Dead --json branch in connections and grants. Both commands advertise --json but the if/else arms call json(deps, payload) identically, so the flag has no effect and no human-readable renderer exists. Either implement a distinct default rendering or drop the --json option and the redundant branch.

  • packages/cli/src/cli/commands/cloud-integration.ts#L442-L443: collapse to a single json(deps, payload) call (and remove --json on the connections command) or add a real non-JSON renderer.
  • packages/cli/src/cli/commands/cloud-integration.ts#L540-L541: apply the same fix for the grants command.
🤖 Prompt for 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.

In `@packages/cli/src/cli/commands/cloud-integration.ts` around lines 442 - 443,
The --json branches in the connections and grants command handlers are redundant
because both paths call json(deps, payload). In
packages/cli/src/cli/commands/cloud-integration.ts lines 442-443 and 540-541,
collapse each conditional to a single json(deps, payload) call and remove the
unused --json option from the connections command, unless implementing a
distinct human-readable renderer instead.
🤖 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 `@CHANGELOG.md`:
- Around line 8-10: Change the changelog heading from “Unreleased - Minor” to
the standard “Unreleased” format, leaving the existing “### Added” section
unchanged.

In `@packages/cli/src/cli/commands/cloud-integration.ts`:
- Around line 394-402: Update the catalog command around workspaceId and the
request URL so the validated workspace is included in a workspace-scoped route,
using the established `/api/v1/workspaces/{id}/integrations/catalog` pattern and
encoding the ID before interpolation. Preserve the existing dynamic query
behavior and catalog normalization.

---

Nitpick comments:
In `@packages/cli/src/cli/commands/cloud-integration.ts`:
- Around line 442-443: The --json branches in the connections and grants command
handlers are redundant because both paths call json(deps, payload). In
packages/cli/src/cli/commands/cloud-integration.ts lines 442-443 and 540-541,
collapse each conditional to a single json(deps, payload) call and remove the
unused --json option from the connections command, unless implementing a
distinct human-readable renderer instead.
🪄 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: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: fbd3b00a-2541-4b05-bd2e-61083c15e1cf

📥 Commits

Reviewing files that changed from the base of the PR and between d4d0d44 and 96cca10.

📒 Files selected for processing (13)
  • CHANGELOG.md
  • packages/cli/README.md
  • packages/cli/src/cli/bootstrap.test.ts
  • packages/cli/src/cli/commands/agent.test.ts
  • packages/cli/src/cli/commands/agent.ts
  • packages/cli/src/cli/commands/cloud-integration.test.ts
  • packages/cli/src/cli/commands/cloud-integration.ts
  • packages/cli/src/cli/commands/cloud-room.test.ts
  • packages/cli/src/cli/commands/cloud-room.ts
  • packages/cli/src/cli/commands/cloud.test.ts
  • packages/cli/src/cli/commands/cloud.ts
  • packages/cli/src/cli/lib/sdk-client.test.ts
  • packages/cli/src/cli/lib/sdk-client.ts

Comment thread CHANGELOG.md
Comment thread packages/cli/src/cli/commands/cloud-integration.ts Outdated

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
packages/cli/src/cli/commands/cloud-room.ts (2)

824-824: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Role terminology mismatch: "observer" vs "viewer".

This help text says "participant or observer credential", but the role vocabulary used everywhere else in this file (e.g., line 551's --role description, RoomRole) is "viewer or participant". This is likely a leftover naming inconsistency that could confuse users about actual role names.

✏️ Fix
-    .option('--json', 'Output the session, including its scoped participant or observer credential')
+    .option('--json', 'Output the session, including its scoped participant or viewer credential')
🤖 Prompt for 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.

In `@packages/cli/src/cli/commands/cloud-room.ts` at line 824, Update the --json
option description in the cloud-room command to say “viewer or participant
credential” instead of “observer credential,” matching the role terminology used
by RoomRole and the --role description elsewhere in the file.

602-646: 🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Invitee email echoed to stdout in both delivery branches.

deps.log includes the invitee's email in the confirmation message for both the email-delivery branch (line 607-608) and the manual-token branch (line 642) — flagged by static analysis as CWE-532. Since CLI stdout is routinely captured by CI logs, shell history, or telemetry, this can persist a third party's email address (invitees are often not the operator) beyond the interactive session, which is a compliance/privacy concern (GDPR/CCPA-style PII retention).

Consider omitting the email from the human-readable confirmation, or truncating/masking it (the recipient already knows their own email; the operator already typed it), and reserve the full email for --json output only.

🔒 Example mitigation
-        deps.log(`Sent ${options.role} room invitation to ${email}.`);
+        deps.log(`Sent ${options.role} room invitation.`);
-          deps.log(`Created ${options.role} room invitation for ${email}.`);
+          deps.log(`Created ${options.role} room invitation.`);
🤖 Prompt for 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.

In `@packages/cli/src/cli/commands/cloud-room.ts` around lines 602 - 646, Remove
the invitee email from the human-readable confirmation messages in the
email-delivery branch and the manual-token branch of the room invitation flow.
Update the deps.log calls around normalizeEmailInviteCreate and the final
“Created” message to use role/status wording without echoing email; leave --json
behavior unchanged so the full email remains available there.

Source: Linters/SAST tools

🧹 Nitpick comments (1)
packages/cli/src/cli/commands/cloud-room.ts (1)

586-586: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Consolidate the duplicated workspace-ID validators.

requireWorkspaceId() in cloud-room.ts and workspaceId() in cloud-integration.ts duplicate the same Cloud workspace UUID / rw_ validation. Move these patterns into a shared Cloud workspace validation helper and reuse them at both call sites so the accepted formats cannot drift.

🤖 Prompt for 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.

In `@packages/cli/src/cli/commands/cloud-room.ts` at line 586, Replace the
duplicated validation in requireWorkspaceId and workspaceId with a shared Cloud
workspace validation helper. Move the existing UUID and rw_ format rules into
that helper, then update both call sites to reuse it while preserving their
current behavior and error handling.
🤖 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.

Outside diff comments:
In `@packages/cli/src/cli/commands/cloud-room.ts`:
- Line 824: Update the --json option description in the cloud-room command to
say “viewer or participant credential” instead of “observer credential,”
matching the role terminology used by RoomRole and the --role description
elsewhere in the file.
- Around line 602-646: Remove the invitee email from the human-readable
confirmation messages in the email-delivery branch and the manual-token branch
of the room invitation flow. Update the deps.log calls around
normalizeEmailInviteCreate and the final “Created” message to use role/status
wording without echoing email; leave --json behavior unchanged so the full email
remains available there.

---

Nitpick comments:
In `@packages/cli/src/cli/commands/cloud-room.ts`:
- Line 586: Replace the duplicated validation in requireWorkspaceId and
workspaceId with a shared Cloud workspace validation helper. Move the existing
UUID and rw_ format rules into that helper, then update both call sites to reuse
it while preserving their current behavior and error handling.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 0930c651-7cb4-4300-be02-5d941cea789b

📥 Commits

Reviewing files that changed from the base of the PR and between 96cca10 and 48572b3.

📒 Files selected for processing (4)
  • packages/cli/src/cli/commands/cloud-integration.test.ts
  • packages/cli/src/cli/commands/cloud-integration.ts
  • packages/cli/src/cli/commands/cloud-room.test.ts
  • packages/cli/src/cli/commands/cloud-room.ts
🚧 Files skipped from review as they are similar to previous changes (3)
  • packages/cli/src/cli/commands/cloud-integration.test.ts
  • packages/cli/src/cli/commands/cloud-integration.ts
  • packages/cli/src/cli/commands/cloud-room.test.ts

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

Actionable comments posted: 1

🤖 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 `@tests/e2e/fleet/harness.ts`:
- Around line 125-130: Update getFreeBrokerBasePort so the broker’s returned
base + 1 port is actually reserved through broker startup rather than merely
probed and released. Keep the reservation alive until the broker claims the
port, or move port allocation into the broker startup path, while preserving the
existing valid-port behavior.
🪄 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: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 62720d14-bc7f-44f6-b436-74132961e9a0

📥 Commits

Reviewing files that changed from the base of the PR and between f9f7451 and 255554d.

📒 Files selected for processing (2)
  • tests/e2e/fleet/fleet-e2e.test.ts
  • tests/e2e/fleet/harness.ts

Comment thread tests/e2e/fleet/harness.ts Outdated

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

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 `@packages/cli/src/cli/commands/core.ts`:
- Around line 153-156: Update the binaryArgs construction in createDefaultRelay
so persist is disabled when apiPort uses the default OS-assigned value of 0,
preserving ephemeral fallback broker behavior; enable persistence only when an
explicit nonzero port or other existing opt-in requires it.

In `@packages/cli/src/cli/lib/broker-lifecycle.ts`:
- Around line 336-345: Update the basePort === 0 startup flow around
candidate.getStatus and the apiPort validation so any rejected status check or
failed validation shuts down candidate before propagating the startup error.
Reuse the existing shutdown cleanup behavior, ensuring broker processes and
locks are removed while preserving successful return of the relay and assigned
API port.
🪄 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: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: bfce806a-b527-4e60-b048-a17b844bf547

📥 Commits

Reviewing files that changed from the base of the PR and between 255554d and 13c8685.

📒 Files selected for processing (17)
  • CHANGELOG.md
  • crates/broker/src/cli/mod.rs
  • packages/cli/src/cli/commands/cloud-integration.test.ts
  • packages/cli/src/cli/commands/cloud-integration.ts
  • packages/cli/src/cli/commands/cloud-room.test.ts
  • packages/cli/src/cli/commands/cloud-room.ts
  • packages/cli/src/cli/commands/core.test.ts
  • packages/cli/src/cli/commands/core.ts
  • packages/cli/src/cli/lib/broker-lifecycle.ts
  • packages/cli/src/cli/lib/sdk-client.test.ts
  • packages/cli/src/cli/lib/sdk-client.ts
  • packages/harness-driver/src/spawn-config.ts
  • packages/sdk/src/__tests__/agent-relay.test.ts
  • packages/sdk/src/agent-relay.ts
  • packages/sdk/src/messaging/relaycast-client.ts
  • tests/e2e/fleet/fleet-e2e.test.ts
  • tests/e2e/fleet/harness.ts
🚧 Files skipped from review as they are similar to previous changes (4)
  • packages/cli/src/cli/lib/sdk-client.ts
  • CHANGELOG.md
  • packages/cli/src/cli/commands/cloud-room.ts
  • packages/cli/src/cli/commands/cloud-integration.ts

Comment thread packages/cli/src/cli/commands/core.ts
Comment thread packages/cli/src/cli/lib/broker-lifecycle.ts
@khaliqgant

Copy link
Copy Markdown
Member Author

Final validation and review-feedback closure — exact head ce8520c15

All CI is green (43 successful checks; platform-inapplicable jobs skipped/neutral), including:

  • live two-node Fleet matrix
  • macOS/Linux E2E, unit, stress, and integration-stress suites
  • Rust tests, clippy, format, and cross-compilation
  • Node 22/24 install and fresh-install checks
  • SDK TypeScript, package build/validation, standalone macOS smoke
  • CodeQL, dependency review, npm audit, secret scanning, and CodeRabbit

Local exact-head gates also passed:

  • full Vitest: 1,545 passed
  • SDK: 163 passed
  • focused CLI/core: 131 passed
  • real pinned Relaycast v6.0.1 + two real brokers: 14/14 passed
  • CLI build/typecheck, lint (zero errors), Prettier, Cargo fmt, and diff checks

Final CodeRabbit feedback was verified and addressed: failed startup validation now shuts down the broker in both OS-assigned and fixed-port paths, with explicit tests. The requested port-zero persistence change was correctly declined because this is an explicit persistent node up mode whose connection/state files are required by status, down, Fleet cleanup, and enrolled-node recovery.

Current unresolved review threads: 0.

@khaliqgant

Copy link
Copy Markdown
Member Author

Exact-head final signoff — 71b38f7b0af7641e2a241f1619a84bec16fbdb02

Final evidence is pinned to the current head:

  • GitHub matrix: 43 successful checks, 1 expected skip, 1 neutral reviewer check, no pending or failing checks; CodeRabbit passes and there are 0 unresolved review threads.
  • Local exact-head validation: full Vitest suite passed (1547 passed, 14 skipped); CLI typecheck/build, Prettier, Cargo fmt, and diff checks passed; focused node/core validation passed.
  • Real stack proof: pinned Relaycast v6.0.1 plus the real Rust broker completed the live Fleet E2E matrix 14/14, including two concurrent nodes using the production node up port default.
  • Review-feedback closure: failed getStatus() startup now cleans up both ephemeral- and fixed-port candidates; normal node up uses an atomic OS-assigned port by default, preserves an explicit AGENT_RELAY_BROKER_PORT, passes that environment through detached re-exec, and the E2E harness no longer injects port zero.
  • Required sequential fresh-context review completed over Fleet/Relay: Claude on sf-mini returned VERDICT: APPROVE at this exact head; afterward Codex on finn-mini returned VERDICT: APPROVE, with npm run typecheck and 117 focused tests passing on that machine.
  • Cloud counterpart AgentWorkforce/cloud#2833 remains pinned to d4f309d1a4ba99eaaa8334c9b0a8cb52674dee0d; both reviewers found no interaction regression.

No changes requested by either final signoff reviewer.

@khaliqgant khaliqgant changed the title feat(cli): add Cloud rooms and integration access feat(cli): add trusted Cloud rooms and Fleet workflow Jul 24, 2026
@khaliqgant
khaliqgant force-pushed the feat/herdr-cloud-room-cli branch from 240d962 to b95c855 Compare July 24, 2026 07:38
@khaliqgant

Copy link
Copy Markdown
Member Author

Cross-repo Fleet and trusted-room signoff

Reviewed as one immutable stack:

Fresh sequential cross-node reviews:

  1. Claude on sf-mini: APPROVE — no blocker or major finding.
  2. Codex on finn-mini: APPROVE — no P0, P1, or P2 finding.

Codex exact-head validation:

  • Relay focused CLI suites: 56/56 passed; current GitHub Rust, clippy, format, cross-compile, E2E, and two-node Fleet checks are green.
  • Cloud room/access/service/Relaycast/PGlite suites: 44/44 passed.
  • Herdr Relay Room suite: 22/22 passed; the PR's complete plugin matrix is 33/33 on Ubuntu, macOS, and Windows.
  • All review threads are resolved: Relay 6/6, Cloud 3/3, Herdr 2/2.

Live Fleet placement and Relay coordination were also proven:

  • Claude invocation inv_206471369178624000 dispatched to sf-mini.
  • Codex invocation inv_206477875646980096 dispatched to finn-mini.
  • Both reviewers returned their verdict over Relay and were released through Fleet.

The v1 contract uses existing Relaycast agent-token and workspace APIs. No Relaycast or relaycast-cloud source or dependency change is required.

@khaliqgant
khaliqgant merged commit 4dac087 into main Jul 25, 2026
45 checks passed
@khaliqgant
khaliqgant deleted the feat/herdr-cloud-room-cli branch July 25, 2026 06:20
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.

1 participant