feat(actor): v0.6.22 — WU-F owner-scoped schedules + codex-p1 per-run isolated MCP config - #289
Merged
Conversation
Providers that locate MCP servers only by cwd `.mcp.json` auto-discovery (ignoring the runtime contract's `mcp` block) previously ran the auto-discovered `animus` server UNSCOPED on actor-asserted runs: the actor is deliberately stripped from the shared, persisted cwd file so a concurrent run or a crash can't let another caller inherit the per-turn identity. Close the gap without touching the shared file: for actor-scoped chat runs, also materialize the FULL (actor-pinned) contract into a per-run ISOLATED temp dir and surface its `.mcp.json` path on `extras.mcp_config_path`. A provider that auto-discoves by file can be pointed at this run-private file (e.g. claude-code's `--mcp-config`) so the actor reaches that channel too. Consuming `extras.mcp_config_path` (passing `--mcp-config <path>` to the provider CLI) is provider-launch plumbing that lives in the provider plugin; until a plugin adopts it, contract-consuming providers stay scoped via `extras.runtime_contract`. The shared cwd `.mcp.json` remains actor-stripped. Resolves the TODO(codex-p1).
A config-declared owner on a schedule now causes the daemon to run the dispatched workflow AS that user, so it resolves the owner's config partition and integrations instead of running globally. - Repin animus-protocol git deps to v0.1.26 (additive WorkflowSchedule owner_id + claims; SubjectDispatch.actor + with_actor builder). - schedule_dispatch mints a system Actor from owner_id/claims and attaches it to the SubjectDispatch; a schedule with no owner_id stays global (actor = None). This is the ONE place the kernel CONSTRUCTS an actor rather than relaying one — sound because owner_id is asserted at config-authoring time (trusted config_source), never from runtime/agent content. Documented at the mint site. - build_runner_command relays the minted actor to the workflow runner over the back-compat-safe ANIMUS_ACTOR_JSON env channel (new animus-runtime-shared::actor_env): an older runner ignores it, a newer one threads it into WorkflowRunInput.actor. Global dispatch clears the env so the runner never inherits the daemon's identity. NOTE: Cargo.lock is intentionally left at v0.1.25 — the v0.1.26 protocol tag must be pushed first (see report); cargo regenerates the lock on the first build after the tag lands.
…ated MCP config (protocol v0.1.26)
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Two actor-tail follow-ups on protocol v0.1.26 (additive
WorkflowSchedule.owner_id/claims+SubjectDispatch.actor).WU-F — owner-scoped schedules mint the owner's actor. A schedule with
owner_iddispatches a run carrying a system-mintedActor{user_id,claims}(the one place the kernel mints rather than relays — owner is config-authored, documented trust boundary); relayed to the runner via the back-compat env channelANIMUS_ACTOR_JSON(older runner ignores it; global dispatch clears it). Global schedules stayactor=None.codex-p1 — per-run isolated actor-pinned MCP config.
materialize_isolated_mcp_jsonwrites the full actor-pinned contract to a per-run temp dir; the shared cwd.mcp.jsonstays actor-stripped (no regression). Surfaced onextras.mcp_config_path. The remaining provider-launch--mcp-configconsumption is out-of-tree (scoped TODO).Out-of-tree follow-up
Runner (
animus-workflow-runner-default) must readANIMUS_ACTOR_JSON→WorkflowRunInput.actorfor WU-F to be live (→ runner v0.4.13).Verification
build/clippy clean; the only test failures are the 2 pre-existing
decision_gate::workflow_*. Codex: no [P1].🤖 Generated with Claude Code