DEV Community

Tej Pandya
Tej Pandya

Posted on AI-assisted

A Control Plane for an AI-Run Firm: Workflow, Agent and Human Lanes

"Autonomous company" sounds like a model choice. In practice it is a control-plane design. This post sketches one for a small service firm doing lead intake. The firm is illustrative, not a customer story, and I have no results to share.

The idea

Split every task into one of three lanes and enforce the lane in code.

from enum import Enum
from dataclasses import dataclass

class Lane(Enum):
    WORKFLOW = "fixed steps, no model decisions"
    AGENT = "model picks steps, inside limits"
    HUMAN = "person decides"

@dataclass
class Task:
    name: str
    lane: Lane
    tools: list[str]
    needs_approval: bool = False

TASKS = [
    Task("capture_lead",   Lane.WORKFLOW, ["crm.create"]),
    Task("send_reminder",  Lane.WORKFLOW, ["email.send_template"]),
    Task("draft_reply",    Lane.AGENT,    ["crm.read", "email.draft"]),
    Task("quote_price",    Lane.HUMAN,    []),
]
Enter fullscreen mode Exit fullscreen mode

Anthropic's guide says coded workflows give predictability for well-defined tasks, and that agents bring higher cost and compounding errors, so test them in sandboxes with guardrails. Salesforce describes "hybrid reasoning" that combines deterministic logic and adaptive AI. The lanes above are one simple way to do that.

The router

def route(task: Task, payload):
    log("start", task.name, payload)
    if task.lane is Lane.HUMAN or task.needs_approval:
        return queue_for_human(task, payload)
    if task.lane is Lane.WORKFLOW:
        return run_steps(task, payload)
    return run_agent(task, payload, allowed_tools=task.tools)
Enter fullscreen mode Exit fullscreen mode

Three things live here and not in a prompt: which tools a task may touch, which tasks need approval, and what gets logged.

Incident handling

PAUSED = set()

def pause(task_name: str, who: str):
    PAUSED.add(task_name)
    log("paused", task_name, who)
Enter fullscreen mode Exit fullscreen mode

Check PAUSED at the start of route. Someone must own the pause, and the log must say who used it.

Red lines to code first

  • Money, contracts and customer promises always go to a person.
  • Every agent action has a log entry with inputs and outputs.
  • Every task has a named owner and an off switch.

What this is not

It is not proof that a company can run itself. Microsoft's 2025 Work Trend Index describes humans setting direction and "checking in as needed". The control plane is how that check-in becomes real.

Tej Pandya, founder of GrowEasy.ai.

Top comments (0)