---
title: "Agents, workflows, planning, and bounded autonomy"
chapter: "16"
---

# Agents, workflows, planning, and bounded autonomy

An agent is a model-driven control loop that observes state, chooses an action,
uses tools, evaluates progress, and stops. Many products called “agents” are
better implemented as deterministic workflows with one or two model steps.

## Agent loop

`goal → observe → plan/select → tool → result → update state → stop/continue`

Define maximum iterations, wall time, tokens, tool calls, cost, and retry
limits. A stop condition is a product requirement.

## Choose the simplest pattern

- prompt/response for transformation;
- fixed chain for known steps;
- router for a small set of paths;
- state machine for business workflow;
- agent loop for genuinely open-ended tool choice;
- human queue for judgment or authorization.

## State

Persist explicit workflow state, not only a transcript. Record goal, plan,
completed actions, tool inputs/outputs, approvals, evidence, budget, current
status, and idempotency keys. Resume only after checking whether previous tools
actually completed.

## Planning

Plans are hypotheses. Replan after material evidence but prevent endless
analysis. For simple tasks, planning overhead lowers reliability.

## Reflection

Self-critique may improve output but adds another probabilistic call. Prefer
external validators, executable tests, retrieval metrics, or deterministic
business rules when available.

## Spring AI implementation

Compose `ChatClient`, Advisors, tools, MCP callbacks, structured state, and
application workflow code. Keep the domain state machine outside free-form
model text.

## Feynman check

An agent is a junior operator allowed to choose the next approved tool. A
workflow is a checklist. Use the checklist whenever the job is known.
