Deep Dive: Agentic Control Plane
Focus: Steerability and observability in long-running AI agent systems
1. The problem: black box reasoning
In long-running agentic workflows — multi-step tool interactions, complex “computer use” tasks — models fall into reasoning loops that are hard to audit. Standard chat interfaces show a linear history for what is inherently a branching process. One bad reasoning step propagates through the entire chain, and by the time you notice, it’s buried under layers of downstream decisions.
2. The approach: a state-managed control plane
I built a control plane that treats AI agency as a navigable trace tree rather than a conversation. The goal: move from reactive prompting (waiting for failure) to proactive orchestration (steering the trajectory).
A. Trace tree
To make agentic reasoning legible, I implemented a dual-layer trace tree:
- Hierarchical execution nodes: Each reasoning step is a
NodeExecutionthat captures the agent’s internal monologue. A tree visualization maps nested tool calls and sub-agent invocations. - Thinking token auditing: The UI renders the model’s raw reasoning process before final output, letting users audit the logic behind a decision — not just the result.
- Interactive tool chips: Tool calls within the trace (Jira tickets, Slack threads) are interactive elements providing real-time feedback on external state changes.
B. HITL inbox pattern
For high-stakes decision points, I built an asynchronous intervention system:
- State-driven categorization: Agent runs are aggregated into an inbox categorized by state: In Progress, Input Needed (approvals), Issues (errors), Completed.
- Context-aware pausing: The system identifies nodes with
waiting_hitlstatus and automatically pauses execution while preserving full environment state. - Trajectory injection: When a user intervenes (approving a triage, correcting a query), the input is injected back into the execution node. The system re-resolves the downstream trajectory based on the new signal.
C. Observability
- Time-travel snapshots: Each node records
globalStateBeforeandglobalStateAfter. You can rewind to any node, modify the context, and re-execute the branch. - Variable referencing: A declarative syntax (
{{node_id.property}}) enables deterministic data flow across non-linear branches. - Streaming protocol: An XML-based streaming protocol (
<thought>and<json>delimiters) lets the UI parse and render complex agentic traces in real-time.
3. Why it matters
Wrapping non-deterministic reasoning in a deterministic observability layer changes the user experience from passive observation to active partnership — the human steers intent, the model handles execution. This pattern shows up across the UXR pipeline (TraceLog component), the Dubbing Studio (ActivityLog), and Trace Logic (the full graph-based reasoning verification tool).