Skip to content

Director vs Agent Platform

The Matrix Agent Platform is the cognitive runtime: system.agents (sessions, memory, embeddings), system.inference (provider routing), and the provider driver packages (@open-matrix/driver-openai, driver-anthropic, driver-ollama). Director is one of its consumers — not part of it.

Roles

ConcernOwnerWhere
Session creation/lookupsystem.agents@open-matrix/agents
Conversation history (session_state.read)system.agents@open-matrix/agents
Memory search (memory.search)system.agents.memory (canonical) or system.memory (legacy compat)@open-matrix/agents
Embeddingssystem.agents.embeddings (canonical) or system.embeddings@open-matrix/agents
Provider routing & inferencesystem.inference@open-matrix/inference
Provider credential readssystem.factotum@open-matrix/factotum
Prompt UI (Chat tab)Directorthis package, via @open-matrix/chat-component/surface
Workstream projectionsDirectorthis package

The exact mounts Director targets

src/services/DirectorServiceTargets.ts enumerates them, ordered canonical-first then compat-fallback:

ts
export const DirectorServiceTargets = {
  observability: {
    logging: ['system.observability.logging', 'system.logging'],
    tracing: ['system.observability.tracing', 'system.tracing'],
    health:  ['system.observability.health',  'system.health'],
    metrics: ['system.observability.metrics', 'system.metrics'],
  },
  runtime: {
    scheduler: ['system.scheduler'],
    budget:    ['system.budget'],
  },
  cognition: {
    sessions:   ['system.agents'],
    memory:     ['system.agents.memory', 'system.memory'],
    embeddings: ['system.agents.embeddings', 'system.embeddings'],
  },
} as const;

DirectorDataAdapter calls invokeFirst(...) against each list and tags the result with backend: 'agents' | 'legacy' + backendMode: 'canonical' | 'compat' so the Sessions tab can show which backend served the request. This is the Phase-1 honest fallback; the legacy paths exist because some deployments still mount system.memory directly.

How a Director chat-tab prompt flows today

Trace from src/components/DirectorChatSurfaceHost.ts and @open-matrix/chat-component/surface/ConversationSurfaceActor.ts:

  1. User clicks an actor in director-treedirector-detail activates <director-chat-surface-host>.
  2. The host dynamically imports @open-matrix/chat-component/surface, registering <conversation-surface> and friends.
  3. surface.set-target { mount } propagates to the surface.
  4. User types in <conversation-input>; the surface calls RequestReply.execute(context, 'system.agents', '$prompt', payload) with callerRoot, callerMount, snapshotTree, and an activityTo array pointing back at itself.
  5. system.agents opens (or resumes) a session, calls system.inference for tokens, and streams $activity frames back. The surface renders thinking/token/done frames.

Director's Sessions tab (src/components/tabs/TabSessions.ts) uses the same mounts via DirectorDataAdapter.promptSession, listSessions, loadSessionHistory, and loadSessionActivity.

What's not yet proven end to end

WORKSTREAMS/loose-ends/items/P1.11-cognitive-product-proof.md is open as of 2026-05-05. The code wiring exists — Director invokes system.agents, the surface streams ActivityFrames, sessions persist — but there is no E2E proof that runs the full chain (Director → system.agentssystem.inference → mock provider → ActivityFrames → persisted session → Chat sees the same session). Treat the chat tab as wired but not E2E-proven in the current codebase.

What this means for the user

If you select an actor in Director and the Chat tab returns errors:

  • No effective inference provider configured. Verify system.inference status.get returns an effective.provider. Configure via the Inference Settings webapp or matrix invoke system.inference.
  • system.agents not reachable. Verify it appears under system.runtimes runtimes.registered and exposes $prompt in its $introspect.
  • Compat-only fallback. The Sessions tab badge will read legacy instead of canonical. That is a deployment configuration issue, not a Director bug — your Host is exposing system.memory instead of system.agents.memory.

See also

Source: projects/matrix-3/packages/director/src/services/DirectorDataAdapter.ts, DirectorServiceTargets.ts, components/DirectorChatSurfaceHost.ts. Loose-end status: WORKSTREAMS/loose-ends/items/P1.11-cognitive-product-proof.md.