You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
2026-04-23: #79 is now complete via merged PR #133 (0f9609e2f4e78966dcca8c3ebaff5bd06c6f89b0). Hosted session scope and headless runtime scope now bind to verified JWT/shared-token/API-key principals, reuse scope across JWT rotation for the same user/workspace, preserve explicit local anon mode, and keep full long principal identifiers in the hash input so the hashed scope-key path does not collide across tenants.
2026-04-23: #81 is complete and should be read as landed public behavior, not open implementation work. Public main has the hosted runner entrypoint/config surface, required workspace-root and runner-session validation, hosted readyz/draining behavior, and the single-session/runtime boundary.
2026-04-23: #83 is closed after re-validating current public main; Maestro-core drain/export/restore is already present, including persisted snapshot-manifest.v1, workspace export-path recording, Rust restore-manifest loading, restored_from_snapshot replay, and not-ready partial-restore behavior.
2026-04-23: #84 is complete as a runtime decision/parity-contract issue: Rust is the target runtime kernel, TypeScript remains the compatibility bridge, and the public conformance/runtime surface reflects that split.
2026-04-23: #85 is complete as a conformance issue: public CI already runs rust-hosted-conformance, and local validation on current public main is green for both hosted-runner Rust tests and the hosted headless conformance suite.
2026-04-23: #77 is now complete via merged PR #135 (d3f9bbe6f7a8d57f85e73b172fb06768aa1aa6e2). Hosted/headless sessions now carry an explicit workspaceRoot, agent/runtime context uses that effective root instead of the web-server process cwd, and utility command/read/search/watch calls are enforced against the assigned workspace boundary.
Remaining work in this umbrella is the actual remote-server hardening still tracked below: fleet-safe routing/ownership across replicas (#78) and deploy/runtime-image production hardening (#80). Cross-repo orchestration for drain/restore now lives in evalops/platform#838 and evalops/deploy#1126.
Agent handoff: read this first
This is the top-level tracker for making Maestro remote/headless servers safe to run as hosted infrastructure, not just as a local web process.
Use this order:
Bind headless remote sessions to explicit workspace sandboxes #77 — Bind every remote/headless runtime to an explicit workspace sandbox. Without this, utility commands/file search/file reads/file watches and MCP/LSP/git/team-memory context are grounded in the server process cwd or caller-provided cwd.
packages/tui-rs/src/headless/remote_transport.rs is the Rust HTTP/SSE client for remote headless sessions.
deploy/helm/maestro/* currently deploys two replicas with only basic probes/env.
Why this is separate from the Platform runtime issues
#72 and evalops/platform#780 are about adopting Platform's durable AgentRun ledger and driving Maestro headless from Platform. This tracker is about Maestro's own remote-server boundary: workspace isolation, multi-replica behavior, identity scoping, and production deploy shape. Both tracks are needed; neither replaces the other.
Acceptance Criteria
Each sub-issue above is cross-linked from this tracker.
A hosted Maestro remote server has a defined workspace/sandbox root per session and cannot operate on arbitrary server filesystem paths.
Running more than one web replica is either explicitly disabled or backed by sticky routing plus durable runtime-owner/session routing semantics.
Session scope and authorization use verified principals and workspace/team claims.
The Helm chart documents and enforces the minimum production contract for API auth, Redis/Postgres/session storage, probes, graceful draining, and SSE/headless routing.
Remote Runner Follow-Up Issues Added 2026-04-22
These issues connect this Maestro hardening tracker to the account-scoped remote runner build in evalops/platform#781:
evalops/platform#782 — remote-runner session lifecycle APIs and durable store
evalops/platform#783 — remote-runner gateway for Maestro headless attach routing
evalops/platform#784 — Kubernetes provisioner for one Maestro runtime pod per runner session
evalops/platform#785 — account policy, entitlements, and metering
evalops/deploy#1024 — GitOps runtime plane for remote Maestro runner sessions
evalops/deploy#1025 — GCP foundations for remote-runner identity and workspace artifacts
Tech split correction for agents picking this up: Maestro is already Rust-first for the native TUI/agent path, including tool execution and remote attach transport. The current hosted web/headless Docker path still runs Node/TypeScript, so v1 may bridge through that surface, but the runner contract should not assume Node is the target. Prefer a Rust-native hosted runner once it can expose the same headless HTTP/SSE/session contract. Keep Platform remote-runner control plane/gateway/provisioner in Go.
Use #85 as the protocol-level acceptance bar: lifecycle, subscribe/events/messages/heartbeat/disconnect, viewer/controller roles, permission request/response, utility operations, workspace-root enforcement, cursor replay/reset, and drain/resume behavior should match across the current TypeScript web/headless bridge and the target Rust runtime.
Current Status
#79is now complete via merged PR#133(0f9609e2f4e78966dcca8c3ebaff5bd06c6f89b0). Hosted session scope and headless runtime scope now bind to verified JWT/shared-token/API-key principals, reuse scope across JWT rotation for the same user/workspace, preserve explicit localanonmode, and keep full long principal identifiers in the hash input so the hashed scope-key path does not collide across tenants.#81is complete and should be read as landed public behavior, not open implementation work. Publicmainhas the hosted runner entrypoint/config surface, required workspace-root and runner-session validation, hostedreadyz/draining behavior, and the single-session/runtime boundary.#83is closed after re-validating current publicmain; Maestro-core drain/export/restore is already present, including persistedsnapshot-manifest.v1, workspace export-path recording, Rust restore-manifest loading,restored_from_snapshotreplay, and not-ready partial-restore behavior.#84is complete as a runtime decision/parity-contract issue: Rust is the target runtime kernel, TypeScript remains the compatibility bridge, and the public conformance/runtime surface reflects that split.#85is complete as a conformance issue: public CI already runsrust-hosted-conformance, and local validation on current publicmainis green for both hosted-runner Rust tests and the hosted headless conformance suite.#77is now complete via merged PR#135(d3f9bbe6f7a8d57f85e73b172fb06768aa1aa6e2). Hosted/headless sessions now carry an explicitworkspaceRoot, agent/runtime context uses that effective root instead of the web-server process cwd, and utility command/read/search/watch calls are enforced against the assigned workspace boundary.#78) and deploy/runtime-image production hardening (#80). Cross-repo orchestration for drain/restore now lives inevalops/platform#838andevalops/deploy#1126.Agent handoff: read this first
This is the top-level tracker for making Maestro remote/headless servers safe to run as hosted infrastructure, not just as a local web process.
Use this order:
replicaCount: 2fights the process-localHeadlessRuntimeServicemap and SSE/POST session affinity.Keep this linked with the Platform integration spine:
Current source read
Reviewed heads on 2026-04-22:
evalops/maestro@ae6e88a22d3a36d34d07c5c507375cfd7fdcd372evalops/platform@7b003938349939052f90ae41241599993a7c06c9Relevant Maestro source:
src/web-server.tscreates the app-wide web/headless runtime services and builds agents fromprocess.cwd().src/server/headless-runtime-service.tsowns the process-local runtime map, replay buffer, subscribers, heartbeats, controller leases, and utility operations.src/server/handlers/headless-sessions.tsexposes/api/headless/*create/subscribe/events/messages/heartbeat/disconnect endpoints.packages/tui-rs/src/headless/remote_transport.rsis the Rust HTTP/SSE client for remote headless sessions.deploy/helm/maestro/*currently deploys two replicas with only basic probes/env.Why this is separate from the Platform runtime issues
#72 and evalops/platform#780 are about adopting Platform's durable
AgentRunledger and driving Maestro headless from Platform. This tracker is about Maestro's own remote-server boundary: workspace isolation, multi-replica behavior, identity scoping, and production deploy shape. Both tracks are needed; neither replaces the other.Acceptance Criteria
Remote Runner Follow-Up Issues Added 2026-04-22
These issues connect this Maestro hardening tracker to the account-scoped remote runner build in evalops/platform#781:
maestro remotecommands backed by EvalOps runner sessions #82 — Addmaestro remotecommands backed by EvalOps runner sessionsTech split correction for agents picking this up: Maestro is already Rust-first for the native TUI/agent path, including tool execution and remote attach transport. The current hosted web/headless Docker path still runs Node/TypeScript, so v1 may bridge through that surface, but the runner contract should not assume Node is the target. Prefer a Rust-native hosted runner once it can expose the same headless HTTP/SSE/session contract. Keep Platform remote-runner control plane/gateway/provisioner in Go.
Related: #84 — Rust core runtime parity contract
Runtime Parity / Conformance Links
Use #85 as the protocol-level acceptance bar: lifecycle, subscribe/events/messages/heartbeat/disconnect, viewer/controller roles, permission request/response, utility operations, workspace-root enforcement, cursor replay/reset, and drain/resume behavior should match across the current TypeScript web/headless bridge and the target Rust runtime.