Agent Architecture / field note 08

Designing Systems Around Models, Not Demos: The AI Agent Factory Blueprint for Production AI Workers

The Third Era of AI is not about better chatbots—it's about Digital FTEs. Learn how the Agent Factory's spec-driven methodology, Four Layers architecture, and Job-to-be-Done framework transform models into reliable AI Workers with verified outcomes.

Agent Architecture / Technical field notes by Hamza Sajid

1. Executive Summary & The Third Era of AI Tools

We are living through a fundamental structural shift in software engineering: The Transition from Demos to Digital Professionals.

Architectural Topology & Protocol Layers:

  • Era 1: Foundation Models (2020-2022) --> Raw completions & APIs
  • Era 2: Chatbots & Copilots (2023-2024) --> Conversational prompt windows
  • Era 3: AI Workers / Digital FTEs (2025+)--> Persistent, governed outcomes

In Era 2, enterprise AI adoption focused on ephemeral chat windows and stateless prompt tools. An employee opened a browser tab, typed a prompt, copied the text, and closed the window. The moment the session closed, the intelligence vanished. There was no memory, no state persistence, no security boundary, and no accountability.

In Era 3, the era of stateless prompt engineering has officially ended. Production AI is not about building better chatbots—it is about manufacturing Digital Full-Time Employees (Digital FTEs). A Digital FTE is a persistent, governed AI Worker that holds a specific role, operates within explicit boundaries, interacts with systems of record via secure tools, and produces verified outcomes under human supervision.

Why 78% of Enterprise AI Pilots Fail

Enterprise AI implementations overwhelmingly stall after the demo phase because developers treat foundation models as standalone products rather than engine components.

       UNGOVERNED CHATBOT DEMO                      GOVERNED PRODUCTION AI WORKER
    
| User Prompt -> Raw LLM -> Response |    | Agent Spec -> System of Context -> Harness    |
| (No state, no safety checks, no    | vs |   -> Sandboxed MCP Tools -> State Checkpoints |
| verifiable audit trace)            |    |   -> Maker-Checker Verification -> System state|
    

The primary cause of failure is structural: Most AI projects jump from prompt straight to execution without a job specification.


2. Spec-Driven Development (SDD) & The JTBD Framework

Before selecting a model or writing a single line of orchestration code, an Agentic AI Engineer must clarify the Job-to-be-Done (JTBD) through an explicit Agent Specification (Agent Spec).

An Agent Spec is not a vague system prompt. It is a strict system contract defining seven mandatory parameters:

  1. Organizational Role: The exact function the worker performs (e.g., Inbound Accounts Payable Reconciler).
  2. Target Outcome: The measurable business output required (e.g., Stage approved payment ledgers for invoices matching purchase orders).
  3. Operational Constraints: Hard boundaries the worker must never cross (e.g., Never execute external payments over $5,000 without human approval).
  4. Systems of Record (Inputs): Authoritative databases and APIs the worker reads from (e.g., PostgreSQL ledger, Stripe API, internal ERP).
  5. Output Contracts: Typed data schemas representing completed artifacts.
  6. Escalation Triggers: Explicit criteria that pause execution and alert human supervisors.
  7. Definition of Done (DoD): Objective, testable rules proving task completion.

Production Agent Specification Schema (TypeScript & Zod)

import { z } from "zod";

export const AgentSpecSchema = z.object({
  agentId: z.string().uuid(),
  role: z.string().min(3),
  targetOutcome: z.string(),
  allowedMcpTools: z.array(z.string()),
  forbiddenActions: z.array(z.string()),
  systemsOfRecord: z.array(z.string()),
  maxTokenBudgetPerRun: z.number().default(100_000),
  requireHumanApprovalFor: z.array(z.string()),
  escalationPolicy: z.enum(["PAUSE_AND_NOTIFY", "ABORT_AND_ROLLBACK", "RETRY_WITH_BACKOFF"]),
  definitionOfDone: z.object({
    requiredStateChanges: z.array(z.string()),
    verifiableOutputSchema: z.string(),
    minConfidenceScore: z.number().min(0.0).max(1.0).default(0.95),
  }),
});

export type AgentSpec = z.infer<typeof AgentSpecSchema>;

3. The Four-Layer Production Agent Architecture

Every enterprise-grade AI Worker relies on four distinct architectural layers. Skipping any layer introduces fatal state or trust bugs.

LayerFunctional ComponentEngineering Responsibility
1. Identity LayerRole & Policy ContractDefines organizational scope, owner, Zod Agent Spec, and policy boundaries.
2. Context LayerSystem of Context (SoC)Assembles token window: SKILL.md procedures, domain vectors, and state history.
3. Execution LayerAgent Harness RuntimeManages reasoning loop, MCP tool sandboxes, state checkpoints, and @require_approval gates.
4. Evaluation LayerVerification & ObservabilityRuns deterministic evals, judge-model audits, Maker-Checker validation, and distributed traces.

4. Context Engineering & The System of Context (SoC)

Production AI requires separating where facts live (System of Record) from how the model reasons about them (System of Context).

  • System of Record (SoR): Relational databases, transactional ERP ledgers, CRMs, and FHIR endpoints. Ground truth for data facts.
  • System of Context (SoC): Dynamically assembled context delivered into the token window during each step. Ground truth for how to operate.

Architectural Topology & Protocol Layers:

  • SYSTEM OF CONTEXT
  • | 1. Corpus Layer | | 2. SKILL.md Procedures| | 3. Reflexes & Rules |
  • | Domain manuals & | | Modular operational | | System constraints |
  • | policy vectors | | step-by-step guides | | & guardrails |
  • | 4. Task State & Checkpoints | | 5. Long-Term Memory |
  • | Active step, variables & history | | Cross-session facts |

The SKILL.md Standard: Modular Domain Intelligence

Instead of injecting massive, static system prompts that waste tokens, load operational procedures on demand via SKILL.md files:

---
name: vendor_invoice_reconciler
description: Procedure for matching vendor line items against purchase orders under SOX rules.
trigger_conditions: ["invoice_received", "payment_reconciliation_requested"]
required_mcp_tools: ["erp_ledger_read", "po_database_query", "payment_stage_write"]
requires_approval: true
---

# Operational Procedure: Vendor Invoice Reconciliation

## 1. Pre-Conditions
1. Invoice status must be `PENDING_REVIEW`.
2. Tax Identifier (EIN/VAT) must match authoritative vendor record in ERP.

## 2. Execution Steps
1. Query ERP for open Purchase Orders matching `vendor_id` via `po_database_query`.
2. Compare invoice line item unit prices against PO contract pricing.
3. If variance is <= 0.5%, stage payment record via `payment_stage_write`.
4. If variance is > 0.5%, halt execution and emit `PRICE_DISCREPANCY` event.

## 3. Failure Handling
- On missing PO: Tag invoice as `UNMATCHED_PO` and queue for human review.
- On database lock: Checkpoint active step, wait 30s, and retry up to 3 times.

5. The Agent Harness & MCP Tool Sandboxing

The foundation model accounts for roughly 10% of an AI Worker's system architecture. The remaining 90% is the Agent Harness—the runtime environment that makes non-deterministic models controllable, resilient, and safe.

                  
                  |            AGENT HARNESS RUNTIME             |
                  |                                              |
                  |      |
                  |  | Pre-Call Hooks   |  |  MCP Tool Server |  |
                  |  | (Schema/Perms)   |->|  (Sandboxed API) |  |
                  |      |
                  |           |                     |            |
 |      | 
|  Model Loop   | |  | State Checkpoint |  | Post-Call Hooks  | | | Production DB |
| (Reasoning)   |<-->| (Postgres/Redis) |<-| (Schema/Audit)   |<-->|(System of Rec)|
 |      | 
                  |                                              |
                  

High-Risk Tool Sandboxing with require_approval (Python)

import asyncio
from typing import Any, Dict
from pydantic import BaseModel, Field

class PaymentRequest(BaseModel):
    vendor_id: str = Field(..., description="Unique vendor UUID")
    amount: float = Field(..., gt=0, description="Amount in USD")
    po_number: str = Field(..., description="Associated Purchase Order number")

class AgentHarnessGate:
    def __init__(self, approval_threshold: float = 1000.00):
        self.approval_threshold = approval_threshold

    async def execute_tool(self, tool_name: str, payload: Dict[str, Any], user_role: str) -> Dict[str, Any]:
        # 1. Validate payload schema
        if tool_name == "stage_vendor_payment":
            req = PaymentRequest(**payload)
            
            # 2. Enforce human-in-the-loop gate for high-risk write operations
            if req.amount >= self.approval_threshold:
                return {
                    "status": "PAUSED_PENDING_APPROVAL",
                    "reason": f"Payment amount ${req.amount:.2f} exceeds threshold of ${self.approval_threshold:.2f}",
                    "approval_payload": req.model_dump()
                }
        
        # 3. Proceed with sandboxed tool call
        return await self._dispatch_mcp_call(tool_name, payload)

    async def _dispatch_mcp_call(self, tool_name: str, payload: Dict[str, Any]) -> Dict[str, Any]:
        # Sandboxed MCP Server Execution
        return {"status": "SUCCESS", "transaction_id": "tx_9984712948"}

6. Deterministic AI: State Machines & Idempotence

To eliminate non-deterministic hallucinations in business workflows, wrap language model reasoning inside a governing state machine. The LLM operates inside specific nodes to handle unstructured data, but the state machine dictates valid transitions.

stateDiagram-v2
    [*] --> SPECIFIED
    SPECIFIED --> CONTEXT_LOADED: Ingest SoC & Skills
    CONTEXT_LOADED --> REASONING: Evaluate Task Step
    REASONING --> HUMAN_GATE: Require Approval Triggered
    REASONING --> EXECUTING: Approved Action
    HUMAN_GATE --> EXECUTING: Supervisor Approves
    HUMAN_GATE --> ABORTED: Supervisor Rejects
    EXECUTING --> VERIFYING: Tool Step Executed
    VERIFYING --> COMPLETE: DoD Verified
    VERIFYING --> REASONING: Step Retry / Next Subtask

Idempotency Enforcement

Every tool execution must be strictly idempotent. If a network timeout occurs during execution, retrying the step must not produce duplicate database records or payments.

// Idempotent tool call implementation with deterministic keying
function generateIdempotencyKey(runId: string, stepIndex: number, toolName: string): string {
  return `${runId}_step_${stepIndex}_${toolName}`;
}

7. Autonomous Verification: The Maker-Checker Pattern

Never allow the model instance that performed an action to verify its own work. Probabilistic engines exhibit confirmation bias when reviewing their own output.

Production architectures enforce the Maker-Checker Pattern:

Architectural Topology & Protocol Layers:

  • MAKER AGENT | | STAGING REPOSITORY| | CHECKER AGENT
  • | | | |
  • Full execution |-------->| Staged records & |-------->| Independent read-
  • tools (Write to | | output evidence | | only verification
  • Staging DB) | | | | against DoD
  • v
  • Pass / Fail / Escalate
    • Maker Agent: Optimized for execution. Reads context, executes tools, and stages proposed state changes.
    • Checker Agent: Optimized for verification. Operates in an isolated context with read-only permissions, testing Maker output against the spec Definition of Done.
  • 8. The "Leaving the Laptop" Standard

  • The ultimate benchmark for production AI Workers is the Leaving the Laptop Standard: engineering digital workers that run autonomously, safely, and accurately overnight and across weekends without constant human supervision.
  • Achieving this standard requires moving from Mode 1 to Mode 2 engineering:
  • Mode 1: Ad-hoc Problem Solving --> Chatbot assistant for one-off tasks
  • Mode 2: Digital FTE Manufacturing --> Stateful, governed, self-verifying workers

Implementation Checklist for Engineering Leaders

  • Define Zod/Pydantic Agent Specifications before building prompt templates.
  • Decouple persistent state into a System of Context backed by Neon Postgres + pgvector.
  • Modularize domain procedures into human-auditable SKILL.md files.
  • Sandbox all enterprise database and API writes behind Model Context Protocol (MCP) servers.
  • Gate all write operations behind idempotency keys and @require_approval hooks.
  • Implement dual-agent Maker-Checker verification loops for objective testing.

By building structured systems around foundation models, forward-thinking teams transform probabilistic LLMs into reliable, production-ready Digital FTEs.

Continue reading

Next field note

The Agent Harness: Agent Factory's Blueprint for the Runtime that Makes AI Workers Controllable and Useful