feat: add remote proxy runtime - #154
Conversation
|
@hvpareja is attempting to deploy a commit to the yhy-4770's projects Team on Vercel. A member of the Team first needs to authorize it. |
|
Thanks @hvpareja — I read through #154. The runtime-as-proxy move is the right boundary for this first version. I would make one invariant explicit in the contract:
A few concrete places where that invariant could be hardened:
Remote
The current worker calls I would persist the
Each proxy worker currently writes the shared None of these require a remote-primary workspace protocol. They keep #154 additive while making the local control plane genuinely authoritative rather than only described that way. |
|
Quick transparency note before anything else: I have not reviewed this update line by line yet. The latest changes were produced with AI assistance, and I still need to do my own human review before marking the PR ready. Thanks @hegu-1 — this is exactly the kind of boundary I wanted to make explicit. I pushed an update to #154 that tries to address these points without turning the first version into a remote-primary workspace protocol. Concretely:
I kept this intentionally minimal: no remote-primary workspace sync, no governance engine, and no full capability enforcement yet. The goal is to make the additive local-workspace-primary contract safer and more explicit. Would welcome another pass from you on whether the control-plane/evidence boundary now matches what you had in mind. |
|
Thanks @hvpareja — and thanks for the transparency note. I reviewed the hardening commit rather than only the PR summary. The control-plane/evidence boundary now matches the framing I had in mind:
There is still one important recovery gap before I would call the invocation path idempotent. If the process crashes after the remote side has accepted/completed I would make the recovery contract explicit:
Two related details:
One smaller follow-up for the generated aggregate: per-agent files now need expiry/tombstone semantics. Otherwise an agent that disappears from So: the authority/evidence ownership is now correct. The remaining issue is narrower and mechanical — make |
Motivation
Refs #151.
This draft follows the runtime-as-proxy direction discussed in the issue: remote execution is modeled as a first-class
AgentRuntime(remote_proxy) instead of as a parallel top-level state bridge. CORAL remains local-workspace-primary, while adapter implementations handle deployment, invocation, and metrics collection for managed remote runtimes.The core invariant is: CORAL owns task truth; the remote runtime owns execution state; the bridge imports evidence, never authority.
Changes
coral.agent.remoteadapter contracts, normalized remote state types, adapter loading, and remote-state persistence under.coral/public/remote_state/.RemoteWorkspaceGrantfor workspace/capability scope andRemoteEvidencefor typed remote artifacts/evidence.remote_proxybuilt-in runtime plus a local worker process that deploys/invokes a remote adapter and periodically syncs state.index.json.remote_proxy/remotein the runtime registry and exposes remote state in CLI/web status.Test plan
uv run --extra dev ruff check .passes.uv run --extra dev ruff format --check .passes.uv run --extra dev python -m pytest tests/ -qpasses: 558 passed, 1 skipped.Affected areas
coral/agent/(runtime, manager, heartbeat, warmstart)coral/grader/(daemon, TaskGrader, subprocess grader, loader)coral/hub/(attempts, notes, skills, checkpoint)coral/workspace/(project setup, worktrees, grader env)coral/cli/(commands, helpers)coral/hooks/(post_commit / submit_eval)coral/template/(CORAL.md, bundled skills/agents)coral/gateway/(LiteLLM gateway)coral/web/(dashboard)examples/(new or modified task)docs/(docs site)Checklist
feat:,fix:,docs:,refactor:, ...).uv run pytest tests/ -vpasses locally. Equivalent command used:uv run --extra dev python -m pytest tests/ -q.uv run ruff check .anduv run ruff format --check .pass. Equivalent commands used with--extra dev.tests/for any behavior change.docs/content/, README, or relevant skill under.claude/skills/) for any user-visible or contract change.examples/<task>/:coral validate <task>succeeds and a smoke run produces at least one finalized score. No hidden answer keys committed underseed/.