Skip to content

Actor ops (SmithersSupervisor and friends)

Reference for the public actor protocol. Every entry below is a real static accepts declaration and a real on* handler in source.

SmithersSupervisor (mount: smithers)

projects/matrix-3/packages/smithers/src/actors/SmithersSupervisor.ts:315-353. The list is large because Smithers handles its own UI state and workstream-request inbox.

Accepts

OpHandlerWhat it does
$introspectonIntrospectStandard Matrix introspection (component class + accepts + emits).
$promptinheritedLLM-prompt entry point. static promptable = true.
workstream.statusonWorkstreamStatusWorkstream-status projection.
workstream.requestonWorkstreamRequestAlias of smithers.request-service.
workstream.agentsonWorkstreamAgentsList of active agent runtimes.
workspace.navigateonWorkspaceNavigateForward to WorkspaceActor workspace.navigate.
workspace.set-queueonWorkspaceSetQueueForward to WorkspaceActor.
smithers.startonSmithersStartStart convergence on an issue.
smithers.stoponSmithersStopStop convergence on issue(s). Returns { stopped: number[] }.
smithers.steeronSmithersSteerInject a steering prompt; restarts the agent with the same context.
smithers.statusonSmithersStatusAggregate status: active issues, history summary, version.
smithers.graph.statusonSmithersGraphStatusCompact graph projection (totalIssues, open/closed/ready/blocked, criticalPathLength, bottlenecks).
smithers.sign-offonSmithersSignOffForced sign-off; per-constraint argumentation.
smithers.historyonSmithersHistoryPast completed outcomes.
smithers.metricsonSmithersMetricsAggregate metrics (avg duration, turns, tool calls).
smithers.review-queueonSmithersReviewQueuePending reviews waiting on barrier.
smithers.request-serviceonSmithersRequestServiceAdd a workstream-request to the inbox.
smithers.request-dispatchonSmithersRequestDispatchDispatch a queued request to convergence.
smithers.request-acknowledgeonSmithersRequestAcknowledgeMark a request acknowledged.
smithers.request-messageonSmithersRequestMessageAppend a thread message to a request.
smithers.request-resolveonSmithersRequestResolveMark a request resolved.
smithers.workstream-requestsonSmithersWorkstreamRequestsRead the inbox projection.
smithers.configureonSmithersConfigurePersist repo, label, maxConcurrentIssues.
smithers.configonSmithersConfigRead current config.
smithers.healthonSmithersHealthLive health (active count, last heartbeat).
smithers.timelineonSmithersTimelineChronological event timeline.
smithers.error-logonSmithersErrorLogRecent error log lines (capped).
smithers.active-agentsonSmithersActiveAgentsList of currently dispatched agents.
smithers.agentsonSmithersAgentsDiscover SDK worker runtimes.
smithers.containersonSmithersContainersForward to ContainerManager.
smithers.browser-connectonSmithersBrowserConnectRegister a browser sink for activity routing.
smithers.browser-disconnectonSmithersBrowserDisconnectUnregister.
smithers.ratchetonSmithersRatchetRatchet projection (count + entries).
smithers.arch-constraintsonSmithersArchConstraintsArchitecture-doc-watcher constraints + doc count.
smithers.autoonSmithersAutoToggle auto-dispatch.
smithers.constraint-approvedonSmithersConstraintApprovedApprove a chat-derived constraint for an issue.
smithers.chat-constraintsonSmithersChatConstraintsRead chat constraints for an issue.

Emits

$stateChanged, $structureChanged,
smithers.started, smithers.converged, smithers.escalated,
smithers.requested, smithers.request-message, smithers.request-updated

Cognitive metadata

ts
static description, static purpose, static systemPrompt
static promptable = true
static regime = 'focused'
static memoryScope = 'actor'
static planScope = 'actor'
static continuationType = 'persistent'
static promptTriggers = [ ... 5 entries ... ]
static childEventWhitelist = ['ready', 'disposed', 'error', 'completed', 'converged', 'escalated']

See Smithers as a Matrix package for what these fields mean.

ConstraintGraph (mount: smithers.graph)

projects/matrix-3/packages/smithers/src/actors/ConstraintGraph.ts:41-66.

Accepts

$introspect, $prompt,
graph.rebuild, graph.constraints-for, graph.neighborhood,
graph.topology, graph.status, graph.summary, graph.dependers,
graph.readiness, graph.dependency-chain, graph.critical-path,
graph.blocker-report, graph.topology-rail, graph.issue-inspector,
graph.conflicts

Each graph.*-for op returns a typed projection. The supervisor depends on:

  • graph.constraints-for(N) — at the start of smithers.start.
  • graph.status and graph.summary — for smithers.graph.status.
  • graph.topology-rail — polled by the workbench at the configured interval.
  • graph.issue-inspector(N) — on issue selection.

Emits

$stateChanged, graph.rebuilt

GitHubAdapter (mount: smithers.github)

ts
// projects/matrix-3/packages/smithers/src/actors/GitHubAdapter.ts:11-25
static override accepts = {
  '$introspect': {},
  '$prompt': {},
  'github.list-issues': {},
  'github.get-issue': {},
  'github.refresh': {},
  'github.set-repo': {},
};
static override emits = {
  '$stateChanged': {},
  'github.refreshed': {},
};

github.list-issues and github.get-issue are TTL-cached (60s default). github.refresh forces a refetch. github.set-repo clears the cache.

ContainerManager (mount: smithers.containers)

ts
// projects/matrix-3/packages/smithers/src/actors/ContainerManager.ts:81-89
static override accepts = {
  'container.spawn': {},
  'container.stop': {},
  'container.list': {},
  'container.remove': {},
  'container.images': {},
};

container.spawn starts a Docker container with MATRIX_NATS_URL injected. container.list returns ContainerRecord[]. The actor subscribes to mx.discovery.heartbeat and prunes offline containers every 15s.

WorkspaceActor (mount: smithers.workspace)

projects/matrix-3/packages/smithers/src/actors/WorkspaceActor.ts:80-99.

Accepts

$introspect, $prompt,
workspace.focus, workspace.select-issue, workspace.navigate,
workspace.show-tab, workspace.set-overlay, workspace.graph-mode,
workspace.set-graph-mode, workspace.set-filter, workspace.set-queue,
workspace.toggle-pin, workspace.state, workspace.select-edge,
workspace.fork, workspace.attach, workspace.tree

Emits

$stateChanged

workspace.state returns the full WorkspaceState object — every UI knob, the selected issue, the active route, current tab, current graph mode, pinned overlays. Mutating ops increment _version and emit $stateChanged so every subscriber re-renders against the same projection.

workspace.tree walks src/, tests/, types/ of the working dir up to 200 entries, returning a sorted relative-path list — used by the Inspector's diff tab.

CodingAgent (per-issue, ephemeral; only Path A)

projects/matrix-3/packages/smithers/src/coding-agent/CodingAgent.ts:179-194.

accepts: code.run, code.steer, code.stop, code.status, code.history, code.chat
emits:   $stateChanged, code.event, code.done

In Path B, the SDK worker exposes equivalent ops on system.agents.

See also

Source: the static accepts and static emits declarations in each actor file.