novaby DeepNovaCore

5. Executors

Executors are the asynchronous work layer. A configured manifest may use any unique executor name; assembly routes it by declared roles and does not expose a fixed executor enum. The manifest describes operations, schemas, policy, and trust. The separate AgentController registry describes model-facing controllers and their owned hidden channels.

The coding role is optional. If no manifest declares it, only coding intake/controller wiring is removed; a registered Vision controller may keep the host tools dispatch, cancel, and confirm compiled. Those three tools compile whenever at least one AgentController is registered; with zero controllers the compiler omits them while direct read-only tools remain available. Disabling coding is a valid assembly, not an AssemblyError.

Codex

The Codex executor uses the same role-routed dispatch/cancel boundary for deterministic and live app-server backends. The live backend may expose codex.steer for same-turn constraints and uses the host approval protocol for effectful actions. Workspace and Session identity are host-owned and are never inferred from executor prose. Codex's projection is not subject to the realtime FrontBrain tool budget.

Direct MCP and Vision

Search remains a stable SearchAdapter contract; MCP is only one transport behind it. Camera capture is native, owned by a conversation turn or monitoring task. External MCP tools are user-selected context cost and never become agent or intake tools. The Vision controller owns hidden watch and guard channels; the model may dispatch/cancel only the vision controller and cannot dispatch those hidden channels.

All direct operations are projected by consumer-specific allowlists. They do not authorize a task or change the speaking floor by themselves.

Adapter responsibilities

Adapter-local responsibilities include:

  • credential and endpoint validation;
  • transport timeouts and cancellation;
  • request normalization;
  • output sanitization and trust classification;
  • effect verification where the integration supports it.

Runtime owns the generic delegate lifecycle. Capability-specific recovery belongs in the adapter, not in runtime branches.