Context
In multi-session, multi-instance swarm operation under shared agent identities (e.g., several @neo-opus-4-7 Claude Code worktrees), operator-issued operational mandates issued in one session do not propagate to peer sessions. Each session reads only its own context window; peers operating under the same identity are functionally blind to mandates issued elsewhere.
This ticket is preventive operational substrate / MX hardening — it makes operator constraints discoverable across the swarm at session boot and before public-artifact creation.
The Problem
Empirically, mandates can be violated by peer agents who simply weren't briefed. The discipline-layer fix ("each agent reads recent A2A history before drafting public artifacts") is real but fragile — it relies on per-agent reflex application of an unwritten convention.
A mechanical primitive for "active operator constraints" — surfaced explicitly as a queryable feed at session start + before any public-artifact creation — would close the gap structurally rather than relying on per-agent vigilance.
Examples of operational mandates that benefit from cross-session propagation: "all PRs require integration test results in body until further notice", "feature-X work paused; redirect to feature-Y", "swarm uses pattern Z for cross-family review until further notice", or any other operator-issued coordination directive.
The Architectural Reality
- Memory Core mailbox + Native Edge Graph already have agent-identity-scoped messaging (
add_message with to: AGENT:X or broadcast AGENT:*).
- Permission/grant primitives exist via
grant_permission / list_permissions for per-agent capability scoping.
- A mandate is shaped like:
{ author, text, issuedAt, expiresAt?, scope: '*' | 'AGENT:X' }.
- Mandates persist beyond a single session — they're TTL'd or operator-revoked, not session-scoped.
The Fix
- New MCP tool:
set_operator_mandate(text, scope, ttl?) — operator (only) calls this; mandate persists in Memory Core SQLite; broadcast to all subscribed agents via existing wake substrate.
- New MCP tool:
list_active_mandates(scope?) — any agent can call; returns active (non-expired, non-revoked) mandates.
- Pre-flight check in
manage_issue_comment / create_issue / create_pull_request-equivalent tools — call list_active_mandates before allowing the action; surface mandate text to the agent's reasoning context (not blocking; advisory by default unless mandate marked enforce: true).
- Mandate revoke / TTL expiry — operator can revoke; mandates auto-expire after TTL.
Contract Ledger Matrix
| Target Surface |
Source of Authority |
Proposed Behavior |
Fallback / Edge Case |
Docs |
Evidence |
| `set_operator_mandate(text, scope, ttl)` MCP tool |
New MandateService |
Persists mandate to SQLite; broadcasts wake event |
Operator-only call; rejects non-operator callers |
`learn/agentos/operator-mandates.md` (new) |
Unit + integration test |
| `list_active_mandates(scope)` MCP tool |
New MandateService |
Returns active mandates filtered by scope |
Empty list if no active mandates |
Same |
Same |
| Pre-flight in public-artifact tools |
github-workflow MCP |
Surfaces mandate text in agent's response context before action proceeds |
If mandate parsing fails: warn + proceed (advisory not blocking) |
Same |
Same |
Acceptance Criteria
Out of Scope
- UI for operators to manage mandates — out of scope; CLI MCP-tool surface suffices for v1
- Cross-server mandate replication (multiple MC instances) — orthogonal; v1 is single-MC-instance-scoped
- Mandate ranking / priority — single-tier (active or not); priority-class is over-engineering for v1
Avoided Traps / Gold Standards Rejected
- A2A broadcast as the only mechanism — broadcasts get marked-read once seen; new sessions joining post-broadcast see nothing. Persistent feed is the real fix.
- AGENTS.md edits as mandate channel — mandates are dynamic / TTL'd / per-session; substrate doc is wrong-grain for this.
- Pre-commit-hook level enforcement — too coarse; mandates fire on ALL public actions, not just commits.
Origin Session ID: 8b31fd62-6a53-40b5-aae2-c5288f8ced09
Retrieval Hint: "operator mandate active constraints feed cross-session shared identity propagation"
Context
In multi-session, multi-instance swarm operation under shared agent identities (e.g., several
@neo-opus-4-7Claude Code worktrees), operator-issued operational mandates issued in one session do not propagate to peer sessions. Each session reads only its own context window; peers operating under the same identity are functionally blind to mandates issued elsewhere.This ticket is preventive operational substrate / MX hardening — it makes operator constraints discoverable across the swarm at session boot and before public-artifact creation.
The Problem
Empirically, mandates can be violated by peer agents who simply weren't briefed. The discipline-layer fix ("each agent reads recent A2A history before drafting public artifacts") is real but fragile — it relies on per-agent reflex application of an unwritten convention.
A mechanical primitive for "active operator constraints" — surfaced explicitly as a queryable feed at session start + before any public-artifact creation — would close the gap structurally rather than relying on per-agent vigilance.
Examples of operational mandates that benefit from cross-session propagation: "all PRs require integration test results in body until further notice", "feature-X work paused; redirect to feature-Y", "swarm uses pattern Z for cross-family review until further notice", or any other operator-issued coordination directive.
The Architectural Reality
add_messagewithto: AGENT:Xor broadcastAGENT:*).grant_permission/list_permissionsfor per-agent capability scoping.{ author, text, issuedAt, expiresAt?, scope: '*' | 'AGENT:X' }.The Fix
set_operator_mandate(text, scope, ttl?)— operator (only) calls this; mandate persists in Memory Core SQLite; broadcast to all subscribed agents via existing wake substrate.list_active_mandates(scope?)— any agent can call; returns active (non-expired, non-revoked) mandates.manage_issue_comment/create_issue/create_pull_request-equivalent tools — calllist_active_mandatesbefore allowing the action; surface mandate text to the agent's reasoning context (not blocking; advisory by default unless mandate markedenforce: true).Contract Ledger Matrix
Acceptance Criteria
MandateService.mjslifecycle service inai/mcp/server/memory-core/services/lifecycle/set_operator_mandateMCP tool in github-workflow or memory-core (TBD service-boundary; document in ticket)list_active_mandatesMCP toollearn/agentos/operator-mandates.mddocumenting protocol + tool surfaceOut of Scope
Avoided Traps / Gold Standards Rejected
Origin Session ID: 8b31fd62-6a53-40b5-aae2-c5288f8ced09 Retrieval Hint: "operator mandate active constraints feed cross-session shared identity propagation"