{
  "schemaVersion": 1,
  "catalogVersion": "2026-09-18.1",
  "ruleVersion": "2026-09-18.1",
  "sourceCheckDate": "2026-09-18",
  "title": "AI Agent Architecture Pattern Selector",
  "methodology": "Editorial rule ordering, not an experimentally validated optimum. Source bindings support pattern mechanisms; the exact thresholds, exclusions and write restrictions are authored design choices. No source endorses this selector.",
  "inputs": {
    "flow": "Control flow",
    "independentWork": "Independent planned work",
    "specialists": "Separate specialist contexts",
    "feedback": "Useful external feedback",
    "modelBudget": "Model calls per task",
    "fixedFlow": "Fixed control flow required",
    "writeMode": "External writes",
    "writeControls": "Write controls reviewed (self-report)"
  },
  "precedence": [
    "Reject every contradictory constraint before selecting.",
    "Single task: single model call.",
    "Known steps: fixed workflow, including configured branches.",
    "Separate specialist contexts: supervisor.",
    "Planned independent work: dependency-aware execution.",
    "Other planned work: plan and execute.",
    "Otherwise: ReAct.",
    "Add feedback only to eligible iterative, read-only work."
  ],
  "patterns": [
    {
      "id": "single-call",
      "name": "Single model call",
      "kind": "Baseline",
      "summary": "One bounded model task with an input contract and a checked output.",
      "fit": "Extraction, classification or drafting that needs no model-directed tool loop.",
      "breaks": "The next action depends on a tool observation, or the task needs several model steps.",
      "artifact": "An input/output schema and a small representative acceptance set.",
      "steps": [
        "Input contract",
        "One model call",
        "Validate output"
      ],
      "sources": [
        "S01",
        "S02"
      ]
    },
    {
      "id": "fixed-workflow",
      "name": "Fixed workflow",
      "kind": "Defined sequence",
      "summary": "Application code owns several model steps and their allowed transitions.",
      "fit": "A known sequence, router or configured fan-out with explicit merge rules.",
      "breaks": "The task requires the model to invent new steps or delegates during execution.",
      "artifact": "A transition table with branch conditions, merge rules and failure exits.",
      "steps": [
        "Validate input",
        "Configured steps or branches",
        "Merge and validate"
      ],
      "sources": [
        "S01",
        "S02"
      ]
    },
    {
      "id": "react",
      "name": "ReAct loop",
      "kind": "Observation-driven",
      "summary": "Reasoning, actions and observations alternate as the task unfolds.",
      "fit": "A tool-using task where the next useful action depends on the latest observation.",
      "breaks": "You cannot bound the available tools, iterations or stopping condition.",
      "artifact": "An allowed-tool contract and a trace showing stop, failure and budget exits.",
      "steps": [
        "Choose action",
        "Call scoped tool",
        "Observe and stop or repeat"
      ],
      "sources": [
        "S03"
      ]
    },
    {
      "id": "plan-execute",
      "name": "Plan and execute",
      "kind": "Planned decomposition",
      "summary": "A planner creates steps, an executor performs them, and a later check may trigger replanning.",
      "fit": "A decomposable goal whose steps can be reviewed before execution.",
      "breaks": "The initial plan cannot name useful steps, or replanning may bypass required approval.",
      "artifact": "A versioned plan with dependencies and a reapproval rule for plan changes.",
      "steps": [
        "Plan steps",
        "Execute a step",
        "Check completion or replan"
      ],
      "sources": [
        "S06"
      ]
    },
    {
      "id": "dag",
      "name": "Dependency-aware execution",
      "kind": "LLMCompiler-style",
      "summary": "A task graph makes dependencies explicit so independent function calls can be scheduled together.",
      "fit": "A planned task with demonstrably independent branches and a defined join.",
      "breaks": "Hidden shared state or output dependencies make the proposed parallel work unsafe.",
      "artifact": "A dependency graph with read/write sets, join semantics and partial-failure handling.",
      "steps": [
        "Plan dependency graph",
        "Run ready independent tasks",
        "Join results"
      ],
      "sources": [
        "S04",
        "S02"
      ]
    },
    {
      "id": "supervisor",
      "name": "Supervisor and specialists",
      "kind": "Dynamic delegation",
      "summary": "A coordinator delegates work to separate specialist contexts and integrates their results.",
      "fit": "Dynamic work requires distinct tools, context boundaries or specialist responsibilities.",
      "breaks": "Delegation adds no necessary separation, or coordinator authority and handoffs remain undefined.",
      "artifact": "A responsibility map covering context, tool permissions, handoffs and final decision ownership.",
      "steps": [
        "Coordinator assigns",
        "Specialists work in scoped contexts",
        "Coordinator integrates"
      ],
      "sources": [
        "S01",
        "S02"
      ]
    },
    {
      "id": "reflexion",
      "name": "Reflexion-style feedback",
      "kind": "Optional overlay",
      "summary": "Feedback from an attempt becomes textual memory that can guide a later attempt.",
      "fit": "An iterative read-only task has a useful external check and room for another model call.",
      "breaks": "Feedback is unreliable, memory retains sensitive data, or retrying could repeat a write.",
      "artifact": "A feedback rubric, memory retention boundary and an explicit retry limit.",
      "steps": [
        "Attempt and check",
        "Record useful feedback",
        "Bounded next attempt"
      ],
      "sources": [
        "S05"
      ]
    }
  ],
  "reasons": {
    "R_SINGLE": {
      "text": "The workload is one bounded model task; start with a single call.",
      "sources": [
        "S01",
        "S02"
      ],
      "kind": "editorial decision rationale"
    },
    "R_FIXED": {
      "text": "Several steps are known in advance, so code can own their sequence.",
      "sources": [
        "S01",
        "S02"
      ],
      "kind": "editorial decision rationale"
    },
    "KNOWN_FANOUT": {
      "text": "Independent known branches can remain configured parts of a fixed workflow.",
      "sources": [
        "S02"
      ],
      "kind": "editorial decision rationale"
    },
    "KNOWN_SPECIALISTS": {
      "text": "Known specialist steps can retain fixed transitions; dynamic delegation is unnecessary here.",
      "sources": [
        "S02"
      ],
      "kind": "editorial decision rationale"
    },
    "R_SPECIALISTS": {
      "text": "Separate specialist contexts take precedence in this editorial decision rule.",
      "sources": [
        "S01",
        "S02"
      ],
      "kind": "editorial decision rationale"
    },
    "R_DAG": {
      "text": "The task is planned and independent work is declared; test those dependencies before parallel execution.",
      "sources": [
        "S04",
        "S02"
      ],
      "kind": "editorial decision rationale"
    },
    "R_PLAN": {
      "text": "The goal is decomposed before execution, without a declared independent fan-out.",
      "sources": [
        "S06"
      ],
      "kind": "editorial decision rationale"
    },
    "R_REACT": {
      "text": "The next action depends on observations gathered while working.",
      "sources": [
        "S03"
      ],
      "kind": "editorial decision rationale"
    },
    "DAG_UNPROVEN": {
      "text": "Runtime action discovery does not establish a dependency graph in advance.",
      "sources": [
        "S04"
      ],
      "kind": "editorial decision rationale"
    },
    "R_FEEDBACK": {
      "text": "External feedback can support a bounded, read-only improvement loop.",
      "sources": [
        "S05"
      ],
      "kind": "editorial decision rationale"
    },
    "FIXED_FLOW_CONFLICT": {
      "text": "Model-directed action discovery or planning conflicts with your fixed-flow requirement.",
      "sources": [],
      "kind": "editorial decision rationale"
    },
    "SINGLE_SCOPE_CONFLICT": {
      "text": "A single bounded task conflicts with declared independent subtasks or separate specialists.",
      "sources": [],
      "kind": "editorial decision rationale"
    },
    "SINGLE_CALL_CONFLICT": {
      "text": "Several model steps cannot fit a one-call budget. Change the flow or the budget.",
      "sources": [],
      "kind": "editorial decision rationale"
    },
    "WRITE_CONTROLS_MISSING": {
      "text": "Write authorization, duplicate prevention and recovery have not been reported as reviewed.",
      "sources": [
        "S07"
      ],
      "kind": "editorial decision rationale"
    },
    "NOT_SINGLE_TASK": {
      "text": "Your selected flow requires more than one bounded model task.",
      "sources": [],
      "kind": "editorial decision rationale"
    },
    "FLEXIBLE_FLOW_NEEDED": {
      "text": "Your selected flow gives the model planning or action-selection responsibility.",
      "sources": [],
      "kind": "editorial decision rationale"
    },
    "NOT_ADAPTIVE_TASK": {
      "text": "A single task or known sequence does not need an observation-driven loop.",
      "sources": [],
      "kind": "editorial decision rationale"
    },
    "FIXED_FLOW_REQUIRED": {
      "text": "You prohibit model-directed control-flow changes.",
      "sources": [],
      "kind": "editorial decision rationale"
    },
    "MULTI_CALL_REQUIRED": {
      "text": "This pattern needs a budget for multiple model calls.",
      "sources": [],
      "kind": "editorial decision rationale"
    },
    "SEPARATE_CONTEXTS_REQUIRED": {
      "text": "The specialist requirement takes precedence over a single shared agent context.",
      "sources": [],
      "kind": "editorial decision rationale"
    },
    "PLAN_NOT_SPECIFIED": {
      "text": "You have not selected decomposition before execution.",
      "sources": [],
      "kind": "editorial decision rationale"
    },
    "INDEPENDENCE_NOT_ESTABLISHED": {
      "text": "Independent planned work has not been declared.",
      "sources": [],
      "kind": "editorial decision rationale"
    },
    "SPECIALISTS_NOT_NEEDED": {
      "text": "You have not identified a need for separate specialist contexts.",
      "sources": [],
      "kind": "editorial decision rationale"
    },
    "STATIC_FLOW_SUFFICIENT": {
      "text": "A single task or configured sequence already describes this flow.",
      "sources": [],
      "kind": "editorial decision rationale"
    },
    "NO_FEEDBACK": {
      "text": "No useful external feedback signal has been declared.",
      "sources": [],
      "kind": "editorial decision rationale"
    },
    "WRITES_NOT_RETRIED": {
      "text": "This selector never adds the feedback overlay to a task with writes.",
      "sources": [],
      "kind": "editorial decision rationale"
    },
    "ITERATIVE_BASE_REQUIRED": {
      "text": "The overlay requires an eligible iterative primary pattern.",
      "sources": [],
      "kind": "editorial decision rationale"
    },
    "PRECEDENCE_OTHER": {
      "text": "Compatible with some constraints, but another pattern wins the stated rule order.",
      "sources": [],
      "kind": "editorial decision rationale"
    }
  },
  "controls": {
    "MODEL_OUTPUT_VALIDATION": {
      "title": "Validate outputs",
      "text": "Check schemas, required evidence and task-specific acceptance criteria.",
      "sources": [
        "S01",
        "S07"
      ],
      "kind": "review requirement, not certification"
    },
    "SCOPED_ACCESS": {
      "title": "Scope tool access",
      "text": "Limit tools, data and credentials to the task and responsible component.",
      "sources": [
        "S07"
      ],
      "kind": "review requirement, not certification"
    },
    "TRACE_AND_VERSION": {
      "title": "Retain a decision trace",
      "text": "Record model, prompt, tool and rule versions with material execution events.",
      "sources": [
        "S07"
      ],
      "kind": "review requirement, not certification"
    },
    "ITERATION_AND_COST_LIMITS": {
      "title": "Bound repeated work",
      "text": "Set call, time and spend ceilings with an explicit stop path.",
      "sources": [
        "S01",
        "S07"
      ],
      "kind": "review requirement, not certification"
    },
    "ARGUMENT_AUTHORIZATION": {
      "title": "Authorize each write",
      "text": "Validate tool arguments and the authority for the exact intended change.",
      "sources": [
        "S07"
      ],
      "kind": "review requirement, not certification"
    },
    "DUPLICATE_PREVENTION": {
      "title": "Prevent duplicate writes",
      "text": "Define idempotency or a duplicate check before retrying a side effect.",
      "sources": [],
      "kind": "review requirement, not certification"
    },
    "FAILURE_RECONCILIATION": {
      "title": "Reconcile uncertain outcomes",
      "text": "An uncertain write result needs state reconciliation before another attempt.",
      "sources": [],
      "kind": "review requirement, not certification"
    },
    "TESTED_COMPENSATION": {
      "title": "Test compensation",
      "text": "Demonstrate how this specific reversible change is undone and where undo can fail.",
      "sources": [],
      "kind": "review requirement, not certification"
    },
    "HUMAN_AUTHORIZATION": {
      "title": "Require human authorization",
      "text": "This rule set requires explicit human authorization for an irreversible action.",
      "sources": [
        "S07"
      ],
      "kind": "review requirement, not certification"
    },
    "NO_GENERIC_ROLLBACK": {
      "title": "Do not assume rollback",
      "text": "Document consequences and the point after which the action cannot be undone.",
      "sources": [],
      "kind": "review requirement, not certification"
    },
    "RECORDED_TRANSITIONS": {
      "title": "Record allowed transitions",
      "text": "Keep model outputs separate from code-owned transition rules.",
      "sources": [
        "S01"
      ],
      "kind": "review requirement, not certification"
    },
    "EXTERNAL_FEEDBACK_CHECK": {
      "title": "Validate the feedback",
      "text": "Use a task-relevant external check; a second opinion alone is not ground truth.",
      "sources": [
        "S05"
      ],
      "kind": "review requirement, not certification"
    },
    "MEMORY_BOUNDARY": {
      "title": "Bound feedback memory",
      "text": "Set retention, access and relevance rules for feedback carried into later attempts.",
      "sources": [
        "S05"
      ],
      "kind": "review requirement, not certification"
    }
  },
  "sources": [
    {
      "id": "S01",
      "publisher": "Anthropic",
      "title": "Building effective agents",
      "url": "https://www.anthropic.com/engineering/building-effective-agents",
      "checkedAt": "2026-09-18T06:16:31.663384+00:00",
      "snapshotSha256": "6e137644bfee05b4fcfecc1db9843114db36e4821a110c9633880da2dc61a915",
      "scope": "Pattern concepts only. The page flags changed tooling. No current SDK recommendation is inferred."
    },
    {
      "id": "S02",
      "publisher": "Microsoft Azure Architecture Center",
      "title": "AI agent orchestration patterns",
      "url": "https://learn.microsoft.com/en-us/azure/architecture/ai-ml/guide/ai-agent-design-patterns",
      "checkedAt": "2026-09-18T06:16:31.791026+00:00",
      "snapshotSha256": "a2e52539ff25ccf06cb42f1dda4ef71ac0c750010cadcb56bfd84a3ba33b3e8b",
      "scope": "Descriptive architecture guidance, not comparative performance evidence."
    },
    {
      "id": "S03",
      "publisher": "Yao et al.",
      "title": "ReAct: Synergizing Reasoning and Acting in Language Models",
      "url": "https://arxiv.org/abs/2210.03629",
      "checkedAt": "2026-09-18T06:16:32.689222+00:00",
      "snapshotSha256": "a343bf95baa1521c0010ae6467049b6296bc38c91797eea28bd696acbb7b1606",
      "scope": "Abstract-level mechanism evidence. Reported benchmark gains are not transferred to this selector."
    },
    {
      "id": "S04",
      "publisher": "Kim et al.",
      "title": "An LLM Compiler for Parallel Function Calling",
      "url": "https://arxiv.org/abs/2312.04511",
      "checkedAt": "2026-09-18T06:16:33.452789+00:00",
      "snapshotSha256": "aea2c7d8ac159a23e9bb17ee8eb9f7da89ebeef244778e9e9853f98c6373deec",
      "scope": "Dependency-aware execution concept. No speed or cost improvement is promised."
    },
    {
      "id": "S05",
      "publisher": "Shinn et al.",
      "title": "Reflexion: Language Agents with Verbal Reinforcement Learning",
      "url": "https://arxiv.org/abs/2303.11366",
      "checkedAt": "2026-09-18T06:16:33.762215+00:00",
      "snapshotSha256": "23213e5703f133ec82acf956daf67ea1bd4ae3ea78b03b5580d906ed826b3589",
      "scope": "Verbal feedback and episodic memory. This selector imposes stricter external-feedback and read-only conditions than the paper."
    },
    {
      "id": "S06",
      "publisher": "LangChain",
      "title": "Plan-and-Execute Agents",
      "url": "https://www.langchain.com/blog/planning-agents",
      "checkedAt": "2026-09-18T06:16:34.438007+00:00",
      "snapshotSha256": "ac3328daec0d87b6db5be72f5caa8b933e94868b9816fb79ac19fa97b37d2f46",
      "scope": "Planner/executor/replanning concepts, not a current API implementation contract."
    },
    {
      "id": "S07",
      "publisher": "Pharos Production",
      "title": "AI Agent Architecture Patterns: A Decision Framework",
      "url": "https://pharosproduction.com/insights/engineering/ai-agent-architecture-patterns-2026/",
      "checkedAt": "2026-09-18T06:16:36.089236+00:00",
      "snapshotSha256": "270803c194cd3418e16b8d953eaca200d2a606fd6d5826522a29d5e9d92f0ca9",
      "scope": "Publisher method evidence for scoped tools and write checks. Not independent validation or a measured outcome."
    }
  ]
}
