diff --git a/site/.vitepress/dist/404.html b/site/.vitepress/dist/404.html index 5f50032..274c0da 100644 --- a/site/.vitepress/dist/404.html +++ b/site/.vitepress/dist/404.html @@ -9,9 +9,9 @@ - + - + @@ -29,7 +29,7 @@
- + \ No newline at end of file diff --git a/site/.vitepress/dist/api-keys.html b/site/.vitepress/dist/api-keys.html index 5270f19..575cece 100644 --- a/site/.vitepress/dist/api-keys.html +++ b/site/.vitepress/dist/api-keys.html @@ -9,9 +9,9 @@ - + - + @@ -40,7 +40,7 @@ # Mock (no key needed) python -c "from mock_llm import MockAnthropic; c=MockAnthropic(); print(c.messages.create(messages=[{'role':'user','content':'hi'}]).content[0].text)"

Free Tier Limits

ProviderFree CreditsRate Limit
Anthropic$5-10 signup creditVaries by model
OpenAI$5-18 signup creditVaries by tier
GeminiFree tier (60 req/min)60 requests/minute
OpenRouterVaries by modelVaries

The course uses ~$0.50-2.00 in API costs total with Anthropic, or $0 with the mock LLM.

- + \ No newline at end of file diff --git a/site/.vitepress/dist/assets/modules_m5-production.md.DTkLIrwQ.js b/site/.vitepress/dist/assets/modules_m5-production.md.DTkLIrwQ.js deleted file mode 100644 index 51f8bb2..0000000 --- a/site/.vitepress/dist/assets/modules_m5-production.md.DTkLIrwQ.js +++ /dev/null @@ -1,133 +0,0 @@ -import{c as a,Q as n,j as i,m as t}from"./chunks/framework.BPKcPtvA.js";const k=JSON.parse('{"title":"Module 5: Production Patterns","description":"","frontmatter":{},"headers":[],"relativePath":"modules/m5-production.md","filePath":"modules/m5-production.md","lastUpdated":1780488246000}'),e={name:"modules/m5-production.md"};function l(o,s,p,r,h,d){return n(),i("div",null,[...s[0]||(s[0]=[t(`

Module 5: Production Patterns

Lesson 5.1: What Production Means for Agents

Production for agents is fundamentally different from traditional software:

Traditional SoftwareAgent Systems
Deterministic outputNon-deterministic behavior
Fixed cost per operationVariable cost per session
Error = known exceptionError = unexpected behavior
Rollback = revert codeRollback = revert prompt + pin model
Monitoring = latency + errorsMonitoring = token usage + loop depth
Testing = unit + integrationTesting = golden datasets + evals

Production Readiness Checklist

[ ] Version-locked prompts (hashed, diffed, reviewed)
-[ ] Model pinning (not "latest", specific version)
-[ ] Cost budgets per session/task/user
-[ ] Iteration limits (max tool calls per session)
-[ ] Observability (every tool call logged)
-[ ] Shadow deployment capability
-[ ] Rollback plan (prompt + model + env)
-[ ] Security review (L3+ minimum)

Lesson 5.2: CI/CD for Agents

Golden Dataset

A curated set of input/output/behavior pairs that define correct agent behavior:

json
[
-  {
-    "input": "Find all users created in the last 24 hours",
-    "expected_tools": ["query_database"],
-    "expected_tool_params": {"query": "SELECT * FROM users WHERE created_at > now() - interval '24 hours'"},
-    "expected_output_contains": ["users", "24 hours"]
-  }
-]

Pipeline

1. Agent runs against golden dataset
-2. Compare: tool selections match expected?
-            params match expected?
-            output contains expected strings?
-3. Calculate pass@k
-4. If pass@k < threshold (e.g., 80%), FAIL build
-5. If pass, deploy new prompt/config

Lesson 5.2b: Case Study — The 5-Tool Production Stack

A real production multi-agent deployment uses multiple agent tools together, each for its strength. See TOOL-REFERENCE.md for full command references.

The Stack

agent-mux (Tauri UI) —— Meta-agent control plane
-    │   └── cc agent SDK, pi-coding-agent SDK, opencode SDK via sidecar
-
-mprocs (process monitor) —— Launches all agents
-    │   mprocs -c ~/mprocs-teams.yaml
-
-    ├── claude-lead (Claude Code)
-    │     └── psmux → tmux.exe → --teammate-mode → split panes
-    │           └── Each teammate = separate Claude session
-
-    ├── pi-agent (Pi Coding Agent)
-    │     └── Extensions: damage-control, tilldone, coms
-
-    ├── opencode (OpenCode CLI)
-    │     └── Model: opencode-go/deepseek-v4-flash (via proxy)
-
-    ├── hermes (Hermes Agent)
-    │     └── TypeScript-native, MCP-first workflows
-
-    ├── openclaw (OpenClaw daemon)
-    │     └── Always-on employee, heartbeat-driven
-
-    ├── gemini (Gemini fallback)
-    │     └── Fast/cheap tasks, cascade routing
-
-    ├── qwen (Qwen specialist)
-    │     └── Chinese + structured tasks
-
-    └── sidecar (agent-mux IPC proxy)
-          └── RPC bridge between Tauri UI and agent processes
-
-
-    psmux (tmux session manager)
-    │   tmux.exe at ~/.cargo/bin/tmux
-    │   Requires: start agent-teams first, then dmux inside it
-
-
-    dmux (git worktree isolation)
-        Each task gets an isolated worktree
-        Rollback = delete worktree

Tool Roles and Selection Logic

ToolRoleWhen to UseStack Position
Claude CodePrimary coding agentComplex multi-step tasks, general developmentclaude-lead in mprocs
Pi AgentCustomizable harnessCustom workflows, safety-critical ops, P2PSide agent with extensions
OpenCodeOSS alternativeBudget tasks, CI/CD, when license mattersBackup in mprocs
HermesTypeScript pipelinesMCP-native workflows, structured outputSpecialist in mprocs
OpenClawAlways-on employeeScheduled tasks, heartbeats, recurringDaemon (always running)
GeminiFast/cheap fallbackHigh-volume simple tasksCascade routing tier 1
QwenSpecialist modelChinese content, structured generationCascade routing tier 2

How They Work Together (Real Session Flow)

1. Human opens agent-mux Tauri UI
-2. mprocs launches all agents from mprocs-teams.yaml
-3. Claude Code (lead) runs in tmux via psmux
-     └── --teammate-mode creates split panes:
-           ├── pane 1: lead (primary coder)
-           ├── pane 2: worker (sub-tasks)
-           ├── pane 3: reviewer (code review)
-           └── pane 4: verifier (read-only checks)
-4. OpenCode runs alongside as budget-aware backup
-5. OpenClaw daemon handles scheduled background tasks
-6. dmux isolates each task in its own git worktree
-7. agent-mux sidecar collects status from all agents
-8. Human monitors via Tauri UI, intervenes when needed

Key Production Patterns

  1. Model heterogeneity — Different models for different roles. Cascade routing in practice (M6).
  2. Tool heterogeneity — Five CLIs, each with different strengths. No single point of failure.
  3. Process management — mprocs supervises. If one agent crashes, the stack keeps running.
  4. Session isolation — psmux (terminal sessions) + dmux (git worktrees) = two layers.
  5. Meta-control plane — agent-mux Tauri UI. Human watches and intervenes, not drives.
  6. Defense in depth — tool-level (damage-control), session-level (psmux), filesystem-level (dmux).

Lesson 5.2c: The Agent Manager Role

In enterprise deployments, someone owns the agent harness. This is the Agent Manager (or DevEx Lead for AI).

Responsibilities

Agent Manager
-├── Harness design (CLAUDE.md, skills, hooks, MCPs)
-├── Tool selection (which agent CLIs, which models)
-├── Security policy (damage-control rules, access levels)
-├── Cost management (budgets per agent/task, optimization)
-├── Quality gates (golden datasets, regression testing)
-├── Update cadence (prompt versioning, model pinning)
-└── Incident response (tool loops, cost spikes, failures)

90-Day Setup Playbook

Month 1: Foundation

Month 2: Scale

Month 3: Production


Lesson 5.3: Shadow Deployments

How It Works

Production agent: serves user traffic
-Shadow agent: runs IDENTICAL inputs, but outputs are NOT served
-Compare: did shadow make same decisions as production?
-         did shadow cost more/less?
-         did shadow hit any errors?
-Decision: if shadow improves on all metrics, swap them

When to Shadow Deploy


Lesson 5.4: Rollback Strategies

What Rollback Means for Agents

You can't just revert a Git commit. Agent behavior depends on:

  1. Prompt — the text of the system prompt + tools
  2. Model — which model version
  3. Parameters — temperature, top_p, etc.
  4. Configuration — tool list, iteration limits, budget

A proper rollback restores ALL four.

Implementation

yaml
# agent-config-v42.yaml
-prompt_hash: "a1b2c3d4"
-model: "claude-sonnet-4-20260501"  # pinned, not "latest"
-temperature: 0.0
-max_iterations: 25
-tools: ["read", "write", "bash", "search"]
-budget_per_session: 0.50

Rollback = cp agent-config-v41.yaml agent-config.yaml + reload.


Lesson 5.5: Observability & Monitoring

What to Trace (Every Single Turn)

  1. Input prompt (full, including system prompt)
  2. LLM response (including tool call choices)
  3. Tool calls (name, params, timestamp)
  4. Tool results (output, error status, duration)
  5. Token counts (input, output, cached)
  6. Cost (per-call and running total)
  7. Loop depth (current turn number)

Decision Tracing

Standard APM (Datadog, Grafana) captures latency and errors. Agents need decision tracing — the full chain of reasoning and actions:

json
{
-  "session_id": "sess_abc123",
-  "turn": 5,
-  "input_tokens": 12400,
-  "output_tokens": 350,
-  "tool_calls": [
-    {"tool": "search_web", "params": {"query": "latest pricing"}, "duration_ms": 1200}
-  ],
-  "decision": "Found pricing page, will extract"
-}

Key Metrics

MetricWarningCritical
Tool calls per session>20>50
Cost per session>$0.50>$2.00
Loop depth>15>30
Same tool >5x in rowInvestigate loopKill session
Context utilization>80%>95%

Lesson 5.6: Alerting on Agent-Specific Signals

What to Alert On

  1. Tool loop detected — same tool called 5+ times with same params
  2. Cost spike — session cost > 3x average
  3. Context overflow imminent — token count within 10% of limit
  4. Permission escalation — agent attempting blocked operations
  5. Error cascade — 3+ tool failures in a row
  6. Grinding detected — identical code rerun without changes

Alert Routing

P0 (immediate): Cost spike > $10, permission escalation, data exfil attempt
-P1 (within 5 min): Tool loop, error cascade, grinding
-P2 (within 1 hour): Context utilization high, cost trending up
-P3 (daily report): Average session cost, success rate, failure modes

When you run agents across 5+ tools (Claude Code, Pi, OpenCode, Gemini, OpenClaw), session history is scattered across different directories and formats.

The Problem

bash
~/.claude/sessions/*.jsonl      # Claude Code format
-~/.pi/sessions/*.jsonl          # Pi format
-~/.opencode/sessions/*          # OpenCode format
-~/.gemini/sessions/*.jsonl      # Gemini format
-mprocs-logs/*.log               # mprocs supervisor logs

Searching across all of them is impossible without a unified index.

The Solution

Reference implementation: Jeff Emanuel's coding_agent_session_search (783★)

Indexer:
-  ├── Watches all session directories
-  ├── Normalizes into canonical format
-  ├── Full-text indexes prompts, responses, tool calls
-  └── Stores in SQLite with FTS5
-
-Search CLI:
-  ├── Search across ALL providers from one command
-  ├── Filter by: provider, date, model, tool, token count
-  ├── Replay any session from any provider
-  └── Export sessions as markdown or JSON

Why This Matters for Production

  1. Debugging: Find what went wrong across all agents in one search
  2. Audit: Full history of every agent action, unified format
  3. Learning: Search past solutions instead of re-solving problems
  4. Cost analysis: Aggregate costs across all providers

Integration with Our Stack

bash
# Add to mprocs-teams.yaml as a sidecar service
-session-indexer:
-  cmd: ["python", "session-indexer.py", "--watch-dirs",
-        "~/.claude/sessions/", "~/.pi/sessions/",
-        "~/.opencode/sessions/", "logs/"]
-
-# Search across everything
-session-search "deployment error" --providers claude,pi,opencode
-# Returns results from all providers in unified format

Lesson 5.7: Deployment Modes

From Paperclip's deployment model:

ModeAuthExposureUse Case
Local trustedNonelocalhost onlySingle dev machine
Authenticated privateLogin requiredLAN/Tailscale/VPNTeam on private network
Authenticated publicLogin requiredInternet (behind reverse proxy)Production cloud deployment

Reachability

BindWhat It Means
loopbacklocalhost only (default)
lanAll interfaces (0.0.0.0)
tailnetTailscale IP only
customSpecific host/IP

Lesson 5.8: Cost Control

Budget Architecture

Company budget → Agent budgets → Session budgets → Per-call tracking

Budget Policies

yaml
budget_policies:
-  - metric: "monthly_cost_cents"
-    scope: "agent:backend-dev"
-    amount: 50000  # $500/month
-    warn_at: 80%   # warn at $400
-    hard_stop: true # kill at $500
-  - metric: "session_cost_cents"
-    scope: "global"
-    amount: 200     # $2/session max
-    hard_stop: true

Warning vs Hard Stop


Lab 5.9: Set Up Agent Observability

Objective: Trace every tool call + LLM completion to a local SQLite database.

Starter: course/labs/L5-observability/starter/

Lab 5.10: CI/CD Pipeline

Objective: Create a golden dataset and automated regression gate.

Starter: course/labs/L5-cicd/starter/

`,99)])])}const g=a(e,[["render",l]]);export{k as __pageData,g as default}; diff --git a/site/.vitepress/dist/assets/modules_m5-production.md.DTkLIrwQ.lean.js b/site/.vitepress/dist/assets/modules_m5-production.md.DTkLIrwQ.lean.js deleted file mode 100644 index eaa6810..0000000 --- a/site/.vitepress/dist/assets/modules_m5-production.md.DTkLIrwQ.lean.js +++ /dev/null @@ -1 +0,0 @@ -import{c as a,Q as n,j as i,m as t}from"./chunks/framework.BPKcPtvA.js";const k=JSON.parse('{"title":"Module 5: Production Patterns","description":"","frontmatter":{},"headers":[],"relativePath":"modules/m5-production.md","filePath":"modules/m5-production.md","lastUpdated":1780488246000}'),e={name:"modules/m5-production.md"};function l(o,s,p,r,h,d){return n(),i("div",null,[...s[0]||(s[0]=[t("",99)])])}const g=a(e,[["render",l]]);export{k as __pageData,g as default}; diff --git a/site/.vitepress/dist/blog/index.html b/site/.vitepress/dist/blog/index.html index 862c6cd..0fa74f4 100644 --- a/site/.vitepress/dist/blog/index.html +++ b/site/.vitepress/dist/blog/index.html @@ -9,11 +9,11 @@ - + - + - + @@ -28,8 +28,8 @@ -
Skip to content

Blog

Essays on agentic engineering, security, multi-agent systems, and production deployments.

Latest Posts

How to Choose the Right Model for Your Agent — June 22

A practical decision framework for model selection. Cascade routing, anti-patterns, and when to use local models.

Context Window Management for AI Agents — June 18

Sliding windows, summarization, mental models, and the 80/20 rule of context budget allocation.

Agent Loops: The Complete Guide — June 15

Three loop types, termination conditions, anti-patterns, and the 5 rules of production loops.

Cascade Routing: Cut API Costs by 66% — June 11

Use cheap models for simple steps, expensive models for complex reasoning.

The 3x Rule of Agent Costs — June 10

Why production agents cost 3x your prototype estimate.

Agent Memory: Mental Models — June 9

How agents remember across sessions using self-maintained expertise files.

The Verifier Pattern — June 8

A read-only verification agent that catches mistakes before production.

Choosing Your Security Level — June 7

Which L-level you need based on what your agent can access.

The 6-Level Security Ladder — June 6

How to stop your AI agents from destroying production. From ACIP to no-bash.

The Repo Is the Spec — June 5

Why every instruction your agent needs must live in a file.

Vibe Coding vs Agentic Engineering — June 4

The 5 hard rules that separate production from prompt gambling.

Why One Agent Is Not Enough — June 3

Context, capability, and reliability ceilings of single-agent systems.

What Is an AI Agent, Really? — June 2

LLM + Tools + Loop. The simplest correct explanation.

Posts are based on content from the Agentic Engineering Course. Each topic has a corresponding module with labs and exercises.

Last updated:

FDSA Agency — Agentic Engineering Course. Part of the fdsa.ai orchestration platform.

- +
Skip to content

Blog

Essays on agentic engineering, security, multi-agent systems, and production deployments.

Latest Posts

How to Choose the Right Model for Your Agent — June 22

A practical decision framework for model selection. Cascade routing, anti-patterns, and when to use local models.

Context Window Management for AI Agents — June 18

Sliding windows, summarization, mental models, and the 80/20 rule of context budget allocation.

Agent Loops: The Complete Guide — June 15

Three loop types, termination conditions, anti-patterns, and the 5 rules of production loops.

Cascade Routing: Cut API Costs by 66% — June 11

Use cheap models for simple steps, expensive models for complex reasoning.

The 3x Rule of Agent Costs — June 10

Why production agents cost 3x your prototype estimate.

Agent Memory: Mental Models — June 9

How agents remember across sessions using self-maintained expertise files.

The Verifier Pattern — June 8

A read-only verification agent that catches mistakes before production.

Choosing Your Security Level — June 7

Which L-level you need based on what your agent can access.

The 6-Level Security Ladder — June 6

How to stop your AI agents from destroying production. From ACIP to no-bash.

The Repo Is the Spec — June 5

Why every instruction your agent needs must live in a file.

Vibe Coding vs Agentic Engineering — June 4

The 5 hard rules that separate production from prompt gambling.

Why One Agent Is Not Enough — June 3

Context, capability, and reliability ceilings of single-agent systems.

What Is an AI Agent, Really? — June 2

LLM + Tools + Loop. The simplest correct explanation.

Posts are based on content from the Agentic Engineering Course. Each topic has a corresponding module with labs and exercises.

Last updated:

FDSA Agency — Agentic Engineering Course. Part of the fdsa.ai orchestration platform.

+ \ No newline at end of file diff --git a/site/.vitepress/dist/blog/posts/cascade-routing.html b/site/.vitepress/dist/blog/posts/cascade-routing.html index e24181a..d044148 100644 --- a/site/.vitepress/dist/blog/posts/cascade-routing.html +++ b/site/.vitepress/dist/blog/posts/cascade-routing.html @@ -9,9 +9,9 @@ - + - + @@ -40,7 +40,7 @@ return "claude-opus-4" elif task_complexity == "formatting": return "gemini-2.5-flash"

When Not to Cascade

If your task is a single critical decision, use the best model. Cascade routing shines when you have a pipeline of steps with varying complexity, which is most real-world agent systems.


From Module 6 of the Agentic Engineering Course. The full module includes a cost optimization lab with working code.

- + \ No newline at end of file diff --git a/site/.vitepress/dist/blog/posts/choosing-security-level.html b/site/.vitepress/dist/blog/posts/choosing-security-level.html index f76f3ef..ac9452f 100644 --- a/site/.vitepress/dist/blog/posts/choosing-security-level.html +++ b/site/.vitepress/dist/blog/posts/choosing-security-level.html @@ -9,9 +9,9 @@ - + - + @@ -29,7 +29,7 @@
Skip to content

Choosing Your Security Level

June 7, 2026

Not every agent needs Level 5 security. The right level depends on what your agent can access.

The Decision Table

If your agent has access to...Start at...Why
Nothing important (demos, tutorials)L1Blast radius is zero
Your source code and configsL3A bad git push costs a day
Production credentials (AWS, DB)L4-L5There is no acceptable failure
Customer data (PII, financial)L5Compliance requires it

Level 1-2: When You Can Get Away With It

L1 (system prompt rules) and L2 (safe-mode skill) work well for tutorial agents that only touch demo data, personal assistants with no production access, and agents running in isolated environments.

The model will refuse most dangerous requests. "Most" is the problem. At a 1% per-turn failure rate, over 100 turns there is a 63% chance of at least one failure.

Level 3: The Minimum for Production Code

L3 (blacklist hook) catches direct attacks like rm -rf /. But it misses the marquee break: the agent writes a Python script that does the damage, and the blacklist only sees "python cleanup.py" which is not in the blocklist.

Level 4: The Sweet Spot

Whitelist hooks only allow N safelisted commands. The agent cannot run python cleanup.py because python is not safelisted. This prevents the L3 marque break. Use L4 as your default for any agent with access to production systems.

Level 5: The Gold Standard

No bash at all. The agent has only purpose-built tools: Read, Write, Edit, Grep, Glob. Required for any agent handling customer data, financial transactions, or healthcare information.

Rule of Thumb

If the agent can touch anything you cannot easily roll back, start at L4 and plan to get to L5.


From Module 3 of the Agentic Engineering Course. The full module includes runnable code for all 6 security levels.

Last updated:

FDSA Agency — Agentic Engineering Course. Part of the fdsa.ai orchestration platform.

- + \ No newline at end of file diff --git a/site/.vitepress/dist/blog/posts/mental-models.html b/site/.vitepress/dist/blog/posts/mental-models.html index 423d7c6..80af7d3 100644 --- a/site/.vitepress/dist/blog/posts/mental-models.html +++ b/site/.vitepress/dist/blog/posts/mental-models.html @@ -9,9 +9,9 @@ - + - + @@ -39,7 +39,7 @@ - type: failure_pattern observation: "WebSocket reconnection needs backoff" status: unaddressed

The Rules

  1. Agents own their mental models. You do not touch them. The agent reads, writes, and updates its own expertise file.

  2. Self-improve commands validate against the codebase. The agent greps for evidence, checks if its knowledge is still accurate, and updates stale entries.

  3. Read-only expertise for critical knowledge. Billing workflows, deployment procedures, and security policies should never change.

  4. Knowledge compounds across sessions. Session 1: agent learns project structure. Session 2: learns common patterns. Session 3: learns failure modes. By session N, it operates at a senior engineer level for that codebase.

The Self-Improve Loop

bash
just self-improve-backend

This command triggers the agent to scan the codebase, validate its expertise against actual file contents, and update anything that has drifted.

Why This Matters

Without mental models, every agent session is Day 1. The agent rediscovers the same things repeatedly: "Oh, this project uses tRPC. Oh, tests go in the tests directory. Oh, we deploy via Docker." Mental models turn every session into Day 100.


From Module 4 of the Agentic Engineering Course. The full module covers multi-agent systems with domain locking, delegation, and P2P communication.

- + \ No newline at end of file diff --git a/site/.vitepress/dist/blog/posts/repo-is-spec.html b/site/.vitepress/dist/blog/posts/repo-is-spec.html index f0bda27..9b01dad 100644 --- a/site/.vitepress/dist/blog/posts/repo-is-spec.html +++ b/site/.vitepress/dist/blog/posts/repo-is-spec.html @@ -9,9 +9,9 @@ - + - + @@ -36,7 +36,7 @@ +-- tests/ # Expected outcomes as evidence +-- skills/ # Reusable skill definitions +-- .mcp.json # MCP server configuration

Why This Matters for Agents

An agent can only see what you put in front of it. A well-structured repo eliminates tribal knowledge because the agent discovers everything from files. It makes onboarding instant because a new agent reads the same files as the old one. It creates audit trails because every instruction is version-controlled. And it enables multi-agent teams because all agents read from the same source of truth.

The Rule

If an agent needs to know something to do its job, that information must be in a file in the repo. Not in your head. Not in Slack. Not in a README that nobody reads. In a file, checked into version control, readable by any agent at any time.


From Module 1 of the Agentic Engineering Course. The full module covers the agent loop, tool calling, and decision frameworks.

- + \ No newline at end of file diff --git a/site/.vitepress/dist/blog/posts/security-ladder.html b/site/.vitepress/dist/blog/posts/security-ladder.html index 4f806e9..669dd1c 100644 --- a/site/.vitepress/dist/blog/posts/security-ladder.html +++ b/site/.vitepress/dist/blog/posts/security-ladder.html @@ -9,9 +9,9 @@ - + - + @@ -42,7 +42,7 @@ L3: Blacklist hook L4: Whitelist hook L5: No bash, custom tools only

Each layer catches what the previous one missed. The agent must bypass ALL six to cause damage — not just one.


This is an excerpt from Module 3 of the Agentic Engineering Course. The full module includes runnable lab code for implementing every level.

- + \ No newline at end of file diff --git a/site/.vitepress/dist/blog/posts/three-x-rule.html b/site/.vitepress/dist/blog/posts/three-x-rule.html index a95c687..da63002 100644 --- a/site/.vitepress/dist/blog/posts/three-x-rule.html +++ b/site/.vitepress/dist/blog/posts/three-x-rule.html @@ -9,9 +9,9 @@ - + - + @@ -35,7 +35,7 @@ "with_retries": base * 1.5, "production": base * 3.0 }

Budget Accordingly

If your prototype agent costs $0.10 per task, plan for $0.30 in production. At 10,000 tasks per month, that is $3,000 per month, not $1,000. The 3x rule keeps you honest.


From Module 6 of the Agentic Engineering Course. The full module covers cost optimization, cascade routing, and pass@k evaluation.

- + \ No newline at end of file diff --git a/site/.vitepress/dist/blog/posts/verifier-pattern.html b/site/.vitepress/dist/blog/posts/verifier-pattern.html index 31aae2e..3350fa0 100644 --- a/site/.vitepress/dist/blog/posts/verifier-pattern.html +++ b/site/.vitepress/dist/blog/posts/verifier-pattern.html @@ -9,9 +9,9 @@ - + - + @@ -34,7 +34,7 @@ session.jsonl session.jsonl | | <--- verifier_prompt (corrective feedback) ----'

The builder doesn't know the verifier exists. The verifier CANNOT write code — it only reads files, greps for evidence, and reports confidence.

The Confidence Ladder

LevelMeaningBar Color
PERFECTEvery claim verified, zero gapsGreen
VERIFIEDAll passed, minor non-blocking gapsGreen
PARTIALNo failures, significant unverifiable gapsOrange
FEEDBACKClaims failed, correction sentOrange
FAILEDCannot verify, escalating to humanRed

Why This Works

  1. Spend tokens to save time — The verifier costs 2-5x more compute but collapses the review constraint from hours to seconds. Tokens are cheap. Your time is not.

  2. Structurally un-promptable — The verifier's input is locked. You can't drop one-off instructions into it. The only way to fix a verification gap is to edit the persona or the prompt template — improvements solve the entire problem class, not one instance.

  3. Defense in depth — The verifier has zero write tools. Even if compromised, it can't modify files. Its bash is restricted to read-only commands. This is the highest level of control you can give an agent.

The Feedback Loop

Every "could not verify" report becomes the next improvement. The verifier teaches you what your verifier is missing. This is how you build the system that builds the system.


This is an excerpt from Module 3 of the Agentic Engineering Course. The full module includes runnable code for setting up the verifier-builder pattern with Unix socket communication and the confidence ladder.

- + \ No newline at end of file diff --git a/site/.vitepress/dist/blog/posts/vibe-vs-agentic.html b/site/.vitepress/dist/blog/posts/vibe-vs-agentic.html index 1850727..3e5a92c 100644 --- a/site/.vitepress/dist/blog/posts/vibe-vs-agentic.html +++ b/site/.vitepress/dist/blog/posts/vibe-vs-agentic.html @@ -9,9 +9,9 @@ - + - + @@ -29,7 +29,7 @@
Skip to content

Vibe Coding vs Agentic Engineering

June 4, 2026

Vibe coding is prompting and shipping whatever comes out. Agentic engineering is building systems that produce reliable, verifiable results. They are not the same thing.

The 5 Hard Rules

1. Risk compounds with runtime. A 1% per-turn failure rate equals a 63% chance of disaster over 100 turns. Long-running agents are not safer. They are more exposed.

2. If your agent can write AND execute code, you are back at L1 security. The marquee break: agent writes cleanup.py, runs python cleanup.py, your production data is gone. The security hook never fired because it only saw "python cleanup.py."

3. Every turn is a roll of the dice. Modern models refuse well 99% of the time. That last 1% grows with every feature release. Engineer the harness for the 1%, not the 99%.

4. Token costs scale with loop depth, not task complexity. A simple task with a bad loop costs 10x more than a complex task with a clean loop. Optimize the loop first.

5. What you cannot measure, you cannot improve. Every agent system needs: cost per task, success rate, loop efficiency, failure mode tracking.

The Practical Difference

DimensionVibe CodingAgentic Engineering
ApproachPrompt and prayBuild and verify
SecurityTrust the modelTrust the harness
CostUnknown until the bill arrivesTracked and optimized
QualityWhatever comes outMeasured against golden dataset
IterationTry another promptFix the harness

The Karpathy Framing

At Sequoia Ascent 2026, Andrej Karpathy said: "Vibe coding raises the floor. Agentic engineering raises the ceiling." Vibe coding makes mediocre engineers productive. Agentic engineering makes great engineers extraordinary.


From Module 1 of the Agentic Engineering Course. The first module establishes the foundations that the rest of the course builds on.

Last updated:

FDSA Agency — Agentic Engineering Course. Part of the fdsa.ai orchestration platform.

- + \ No newline at end of file diff --git a/site/.vitepress/dist/blog/posts/what-is-an-agent.html b/site/.vitepress/dist/blog/posts/what-is-an-agent.html index 51d0fe2..44aba37 100644 --- a/site/.vitepress/dist/blog/posts/what-is-an-agent.html +++ b/site/.vitepress/dist/blog/posts/what-is-an-agent.html @@ -9,9 +9,9 @@ - + - + @@ -39,7 +39,7 @@ result = execute_tool(tool_name, tool_args) messages.append(response) messages.append(result)

Common Misconception

"The model is the agent." No. The model is the brain. The agent is the whole system: brain plus tools plus loop. A better brain helps, but better tools and a better loop help more.


From Module 1 of the Agentic Engineering Course. The full module includes your first lab: building a single-tool agent from scratch.

- + \ No newline at end of file diff --git a/site/.vitepress/dist/blog/posts/why-multi-agent.html b/site/.vitepress/dist/blog/posts/why-multi-agent.html index 57a2bd2..4f111fa 100644 --- a/site/.vitepress/dist/blog/posts/why-multi-agent.html +++ b/site/.vitepress/dist/blog/posts/why-multi-agent.html @@ -9,9 +9,9 @@ - + - + @@ -44,7 +44,7 @@ +-- Validation Team Lead +-- QA Engineer (worker) +-- Security Reviewer (worker)

Leads think, plan, and delegate. Workers execute. The orchestrator never touches code.

When to Go Multi-Agent

You need multiple agents when any of these are true:

If none of these are true, a single well-configured agent is simpler and cheaper.


This is an excerpt from Module 4 of the Agentic Engineering Course. The full module includes runnable lab code for building multi-agent systems with domain locking, mental models, and P2P communication.

- + \ No newline at end of file diff --git a/site/.vitepress/dist/buy.html b/site/.vitepress/dist/buy.html index 75e59aa..5b9f1e2 100644 --- a/site/.vitepress/dist/buy.html +++ b/site/.vitepress/dist/buy.html @@ -9,9 +9,9 @@ - + - + @@ -33,7 +33,7 @@ # If deploying the API separately, set: export STRIPE_SECRET_KEY="sk_live_..."

The checkout API is at api/checkout.js — deployable as a Cloudflare Worker, Vercel function, or standalone Node.js server.


Certificate

Students who complete the capstone project receive a Certificate of Completion. Verify at fdsa.agency/verify.


Questions? Contact artale@fdsa.agency

- + \ No newline at end of file diff --git a/site/.vitepress/dist/certificate.html b/site/.vitepress/dist/certificate.html index 42cb84e..07b6428 100644 --- a/site/.vitepress/dist/certificate.html +++ b/site/.vitepress/dist/certificate.html @@ -9,9 +9,9 @@ - + - + @@ -29,7 +29,7 @@
Skip to content
Certificate of Completion
This certifies that
____________________________
has successfully completed all requirements of the
Agentic Engineering
the Hard Way
65 lessons across 8 modules13 hands-on labsProduction-grade capstone
Verify at fdsa.agency/verify

About the Certificate

This certificate verifies completion of the Agentic Engineering the Hard Way course, covering:

  • Agent Harness (M1-M3): Foundations, architecture, safety & security
  • Software Factory (M4): Multi-agent orchestration, teams, chains, P2P
  • Production Systems (M5): CI/CD, observability, deployment, rollback
  • Model Economics (M6): Cascade routing, pass@k evals, cost optimization
  • Advanced Patterns (M7): Autoresearch, meta-agents, beyond MCP
  • Capstone (M8): Production multi-agent system from scratch

How to Get Your Certificate

  1. Complete all 8 modules and 13 labs
  2. Submit your capstone project for review
  3. Email your submission to artale@fdsa.agency
  4. Receive your signed certificate within 48 hours

Verification

Employers can verify certificates at fdsa.agency/verify using the certificate ID provided on each certificate.

Last updated:

FDSA Agency — Agentic Engineering Course. Part of the fdsa.ai orchestration platform.

- + \ No newline at end of file diff --git a/site/.vitepress/dist/free-preview.html b/site/.vitepress/dist/free-preview.html index 2918b1c..aaf0ec3 100644 --- a/site/.vitepress/dist/free-preview.html +++ b/site/.vitepress/dist/free-preview.html @@ -9,9 +9,9 @@ - + - + @@ -31,7 +31,7 @@
Skip to content

Free Preview: Lesson 1.1 — What Makes an Agent?

This is a sample lesson from Agentic Engineering the Hard Way (Module 1: Foundations). Full course includes 65 lessons, 13 labs, and 20 skill kits — all building from scratch, no black boxes.


Lesson 1.1: What Makes an Agent?

Definition: An AI agent = LLM + Tools + Loop. Without any one of these three, it's not an agent.

Agent = LLM (reasoning engine)
       + Tools (capability surface)
       + Loop (autonomous decision cycle)
  • A single LLM call with no tools = chatbot
  • An LLM with tools but no loop = augmented inference
  • Tools + loop + LLM = agent (it can decide what to do next)

The Three Components

LLM — The reasoning engine. Given context + available tools, it decides which tool to call and with what parameters. The LLM is NOT the agent — it's the brain of the agent. Different models have different reasoning capabilities, but the core function is the same: given a situation and available actions, decide what to do.

Tools — The capability surface. Functions the agent can call: read files, run commands, search the web, query databases, call APIs. Each tool has a name, description, and input schema. The tool surface defines what the agent CAN do — everything outside this surface is something the agent cannot do, no matter how smart the LLM is.

Loop — The autonomous decision cycle. Think (LLM decides) → Act (tool executes) → Observe (result comes back) → Repeat. The loop is what makes it autonomous. Without a loop, you have a single decision. With a loop, you have an agent that can work toward a goal across multiple steps.

Why This Matters

This definition is not academic. Every production agent failure I've seen traces back to one of these three:

FailureRoot Cause
Agent does something unexpectedLoop didn't terminate correctly
Agent can't do the taskTools are insufficient for the task
Agent makes bad decisionsLLM doesn't have enough context
Agent costs too muchLoop runs too many iterations

If you understand these three components and how they interact, you can debug any agent system. If you don't, you're guessing.


What You'll Learn in the Full Course

ModuleTopicLessonsLabs
M1Foundations8 lessons1 lab
M2Agent Architecture7 lessons2 labs
M3Safety & Security7 lessons2 labs
M4Multi-Agent Orchestration11 lessons2 labs
M5Production Systems10 lessons2 labs
M6Model Economics7 lessons2 labs
M7Advanced Patterns8 lessons2 labs
M8Capstone ProjectBuild & deploy

Enroll Now — $97 · View Full Curriculum

Note: This preview shows approximately 30% of a single lesson. Full lessons include code examples, diagrams, quiz questions, and lab exercises.

Last updated:

FDSA Agency — Agentic Engineering Course. Part of the fdsa.ai orchestration platform.

- + \ No newline at end of file diff --git a/site/.vitepress/dist/getting-started.html b/site/.vitepress/dist/getting-started.html index 657092e..d34d54e 100644 --- a/site/.vitepress/dist/getting-started.html +++ b/site/.vitepress/dist/getting-started.html @@ -9,9 +9,9 @@ - + - + @@ -49,7 +49,7 @@ # Single kit bash install.sh security
OrderModuleTimeDo This
1M1 Foundations4-6 hrsRead + Lab 1
2M2 Architecture6-8 hrsRead + Labs 2a, 2b
3M3 Safety5-7 hrsRead + Labs 3a, 3b
4M4 Orchestration7-9 hrsRead + Labs 4a, 4b
5M5 Production5-7 hrsRead + Labs 5a, 5b
6M6 Economics4-6 hrsRead + Labs 6a, 6b
7M7 Advanced5-7 hrsRead + Labs 7a, 7b
8M8 Capstone8-12 hrsBuild your project

Common Pitfalls

ProblemSolution
ModuleNotFoundError: anthropicRun pip install anthropic or use mock LLM (automatic fallback)
Lab runs but produces no outputCheck you called run_agent() at the end of the script
Tool loop never terminatesCheck MAX_ITERATIONS is set. Default is 15.
Mock LLM returns "No input provided"Check you're passing messages to create() not just prompt
YAML parse error in skillsCheck indentation — YAML uses 2-space indents

Getting Help


What You'll Learn

By the end of this course, you will be able to:

  1. Build single-tool and multi-tool agents from scratch
  2. Implement the 6-level security ladder (L0-L5) to protect your systems
  3. Design multi-agent systems with teams, chains, and peer-to-peer communication
  4. Deploy agents to production with CI/CD, observability, and rollback
  5. Optimize costs using cascade routing and evaluate performance with pass@k
  6. Build self-improving agents that experiment and learn
- + \ No newline at end of file diff --git a/site/.vitepress/dist/hashmap.json b/site/.vitepress/dist/hashmap.json index a459526..bc16d27 100644 --- a/site/.vitepress/dist/hashmap.json +++ b/site/.vitepress/dist/hashmap.json @@ -1 +1 @@ -{"404.md":"BiCvjdaY","api-keys.md":"D2Kyj8T3","blog_index.md":"CH9ul8Qh","blog_posts_agent-loops-complete-guide.md":"DrdeWzm3","blog_posts_cascade-routing.md":"DvBM3TSf","blog_posts_choosing-security-level.md":"BYXRZEDN","blog_posts_context-window-management.md":"40drllBG","blog_posts_mental-models.md":"BRY80gtq","blog_posts_model-selection-guide.md":"Ca-IsHa3","blog_posts_repo-is-spec.md":"BxY1cXc_","blog_posts_security-ladder.md":"DQaqn6Yt","blog_posts_three-x-rule.md":"BHO6bhvz","blog_posts_verifier-pattern.md":"Gha_L_u5","blog_posts_vibe-vs-agentic.md":"7mduPfz1","blog_posts_what-is-an-agent.md":"BU2wUq_Y","blog_posts_why-multi-agent.md":"BVRIN2vH","buy.md":"qEifz7WE","certificate.md":"DZ26T6CI","checkout.md":"Ccj6L__h","checkout_cancel.md":"DwL5mulX","checkout_success.md":"CYTg6xhL","downloads.md":"CEHJXSp0","free-preview.md":"C5BtRucn","getting-started.md":"Boo_V9xC","index.md":"BNS2TR1g","labs_index.md":"sAzXzfkI","labs_l1-first-agent.md":"BwU9yf-G","labs_l2-context.md":"BexGm8_s","labs_l2-multi-tool.md":"Bj3Mb-oj","labs_l3-verifier.md":"xilrGGap","labs_l3-whitelist-hook.md":"DJtbL66Y","labs_l4-agent-chain.md":"D89P8dwJ","labs_l4-multi-team.md":"DmSK8e2P","labs_l5-cicd.md":"Dz1Jl78z","labs_l5-observability.md":"BDpqVYjT","labs_l6-cost-optimization.md":"CabFK4GB","labs_l6-eval-harness.md":"CBwH6xOR","labs_l7-autoresearch.md":"BYlzPLYo","labs_l7-meta-agent.md":"iTswbOPg","modules_competitive-analysis.md":"BHMHacei","modules_curriculum.md":"D7UeKRfo","modules_debate.md":"DWctKMlA","modules_feynman.md":"DBw5sPBP","modules_field-manual.md":"hmt_NLf1","modules_m1-foundations.md":"CgHO7sNo","modules_m2-architecture.md":"DVowtmf9","modules_m3-safety.md":"RiQQ_HWX","modules_m4-orchestration.md":"DFLcAKBv","modules_m5-production.md":"DTkLIrwQ","modules_m6-economics.md":"HihVEOPb","modules_m7-advanced.md":"B_jVHqsw","modules_m8-capstone.md":"CqV39Gzl","modules_non-technical.md":"BnvuUCRo","modules_reference-stack.md":"D9FXitvn","modules_software-factory.md":"C5Yf8Zwe","modules_tool-reference.md":"B40mlgZJ","public_certificate_template.md":"Cg1kPB1b","resources.md":"DcUu1NrK","skills.md":"BX3RBeCK","troubleshooting.md":"B6difx2I","verify.md":"Cl5ZMWNd"} +{"404.md":"BiCvjdaY","api-keys.md":"D2Kyj8T3","blog_index.md":"BQLtHCMm","blog_posts_agent-loops-complete-guide.md":"DrdeWzm3","blog_posts_cascade-routing.md":"DvBM3TSf","blog_posts_choosing-security-level.md":"BYXRZEDN","blog_posts_context-window-management.md":"40drllBG","blog_posts_mental-models.md":"BRY80gtq","blog_posts_model-selection-guide.md":"C6aH6-MU","blog_posts_repo-is-spec.md":"BxY1cXc_","blog_posts_security-ladder.md":"DQaqn6Yt","blog_posts_three-x-rule.md":"BHO6bhvz","blog_posts_verifier-pattern.md":"Gha_L_u5","blog_posts_vibe-vs-agentic.md":"7mduPfz1","blog_posts_what-is-an-agent.md":"BU2wUq_Y","blog_posts_why-multi-agent.md":"BVRIN2vH","buy.md":"qEifz7WE","certificate.md":"DZ26T6CI","checkout.md":"Ccj6L__h","checkout_cancel.md":"DwL5mulX","checkout_success.md":"CYTg6xhL","downloads.md":"CEHJXSp0","free-preview.md":"C5BtRucn","getting-started.md":"Boo_V9xC","index.md":"BNS2TR1g","labs_index.md":"sAzXzfkI","labs_l1-first-agent.md":"BwU9yf-G","labs_l2-context.md":"BexGm8_s","labs_l2-multi-tool.md":"Bj3Mb-oj","labs_l3-verifier.md":"xilrGGap","labs_l3-whitelist-hook.md":"DJtbL66Y","labs_l4-agent-chain.md":"D89P8dwJ","labs_l4-multi-team.md":"DmSK8e2P","labs_l5-cicd.md":"Dz1Jl78z","labs_l5-observability.md":"BDpqVYjT","labs_l6-cost-optimization.md":"CabFK4GB","labs_l6-eval-harness.md":"CBwH6xOR","labs_l7-autoresearch.md":"BYlzPLYo","labs_l7-meta-agent.md":"iTswbOPg","modules_competitive-analysis.md":"BHMHacei","modules_curriculum.md":"D7UeKRfo","modules_debate.md":"DWctKMlA","modules_feynman.md":"DBw5sPBP","modules_field-manual.md":"hmt_NLf1","modules_m1-foundations.md":"G7whf-t_","modules_m2-architecture.md":"DVowtmf9","modules_m3-safety.md":"RiQQ_HWX","modules_m4-orchestration.md":"DFLcAKBv","modules_m5-production.md":"DcffxcPl","modules_m6-economics.md":"HihVEOPb","modules_m7-advanced.md":"C9NmmkkU","modules_m8-capstone.md":"CqV39Gzl","modules_non-technical.md":"BnvuUCRo","modules_reference-stack.md":"D9FXitvn","modules_software-factory.md":"C5Yf8Zwe","modules_tool-reference.md":"B40mlgZJ","public_certificate_template.md":"Cg1kPB1b","resources.md":"DcUu1NrK","skills.md":"BX3RBeCK","troubleshooting.md":"B6difx2I","verify.md":"Cl5ZMWNd"} diff --git a/site/.vitepress/dist/index.html b/site/.vitepress/dist/index.html index 1564123..2389362 100644 --- a/site/.vitepress/dist/index.html +++ b/site/.vitepress/dist/index.html @@ -9,9 +9,9 @@ - + - + @@ -29,7 +29,7 @@
Skip to content
THE HARD WAY

Agentic Engineering the Hard Way

Build every component from scratch. 65 lessons, 13 labs, 20 skill kits. No black boxes, no magic SDKs — just you, the harness, and the loop.

AGENT_PLANNER v2.1
> LOADING HARNESS... DONE
> DEPLOYING 8-AGENT SYSTEM
> SECURITY: LEVEL 4 (WHITELIST)
> ALL SYSTEMS OPERATIONAL
65Lessons
13Hands-on Labs
8Modules
20Skill Kits
What You'll Build

Production Systems. From Scratch.

settings_suggest

Agent Harness

Own your harness. 6-level security ladder, verifier pattern, hooks architecture across 5 subsystems.

speed

Software Factory

Systems that build systems. Agent chains, teams, P2P communication, depth-2 delegation.

psychology

Extensible Software

Pluggable, composable, swappable. Beyond MCP, tool design patterns, CI/CD for agent configs.

all_inclusive

Always-On Agents

Run 24/7. Autoresearch loops, heartbeat execution, meta-agents that improve themselves.

terminal

Agentic Access

API-first design. Tool surface design, deployment modes, service connectors, MCP integration.

trending_up

Tokenomics

3 levels of token value. Cascade routing, pass@k evals, the 3x cost rule, production optimization.

Curriculum

8 Modules. From Zero to Production.

01
psychology

Foundations

What agents are, harness vs model, decision frameworks, agent loops.

LLM+Tools+LoopHarnessTrust
02
handyman

Architecture

Tools, context, memory, skills system, codebase patterns, workspace design.

4 PillarsMemorySkills
03
shield

Safety

6-level security ladder, hooks, verifier pattern, defense-in-depth, ACIP.

L0-L5VerifierHooks
04
hub

Orchestration

Multi-agent patterns, P-threads, F-threads, P2P, CEO Board, domain locking.

TeamsChainsP2P
05
rocket_launch

Production

CI/CD for agents, shadow deploys, observability, rollback, 5-tool stack.

DeployMonitorRollback
06
analytics

Economics

Model pricing, cascade routing, pass@k evals, cost optimization per session.

100x Range3x RuleEvals
07
architecture

Advanced

Autoresearch, meta-agents, beyond MCP, always-on employee patterns.

Self-ImprovingMeta
08
trophy

Capstone

Build production multi-agent system. Brand Monitor, CEO Board, or Code Review Pipeline.

ShipDeployRubric
Trusted By

What Engineers Are Saying

"The security ladder alone is worth the price. Finally understand how to safely deploy agents in production — something no other course teaches."
M
Marcus W.
Staff Engineer, SaaS Company
"Went from vibe-coding to actually engineering agents. The harness vs model distinction changed how I think about every agent system I build."
P
Priya S.
Lead ML Engineer, FinTech
"Best practical course on multi-agent systems I've found. The CEO Board pattern alone saved me weeks of architecture work."
T
Tomás R.
CTO, AI Startup
"I've taken TAC and ClaudeFAST. FDSA is the most comprehensive — 65 lessons with actual labs that work offline. No other course has that."
D
Daniel K.
Senior Developer, E-Commerce
Your Instructor

Built by an Engineer, For Engineers

terminal

Artale

Founder, FDSA Agency

I've spent the last two years building production multi-agent systems — from CEO Boards for strategic decision-making to Brand Monitor for always-on reputation tracking, to UI Agents that generate production Vue components. This course distills everything I learned shipping real agent systems, not toy demos.

Every pattern in this course — the 6-level security ladder, P-threads, cascade routing, the verifier pattern — came from building systems that had to work reliably in production. We build everything from scratch. No black boxes, no SDK abstractions. This is Agentic Engineering the Hard Way.

Stay Updated

Get Free Agent Engineering Resources

Compared To

Why FDSA vs Other Courses

FDSA (the Hard Way)
  • check65 lessons + 13 labs
  • check20 skill kits included
  • checkBuild from scratch, no black boxes
  • checkMock LLM for offline work
  • checkTool-agnostic (any CLI)
  • check30-day guarantee
  • closeNewer platform
  • closeNo video content yet
  • closeCommunity still growing
TAC
  • check14 focused lessons
  • check4 reference repos
  • checkActive YouTube channel
  • checkProven track record
  • close$97-147 for less content
  • closeNo skill kits
  • closeNo capstone project
  • closeClaude Code focused only
ClaudeFAST
  • check280 skill files
  • check16 agent definitions
  • check$89 entry price
  • checkActive community
  • close$299 for full access
  • closeNo structured modules
  • closeNo hands-on labs
  • closeClaude Code only
Learn Harness
  • checkFree (Anthropic)
  • check6 projects
  • check11 languages
  • checkOfficial Anthropic
  • closeNo advanced patterns
  • closeNo skill kits
  • closeNo capstone
  • closeNo security ladder
Investment

Choose Your Path

Self-Paced
$97
one-time payment
  • check_circle65 lessons across 8 modules
  • check_circle13 scaffolded labs with solutions
  • check_circle56 quiz questions
  • check_circle20 SKILL.md files (7 kits)
  • check_circleLifetime access + updates
  • check_circleMock LLM for offline labs
Enroll Now
Enterprise
$199
one-time payment
  • check_circleEverything in Self-Paced
  • check_circlePrivate Discord channel
  • check_circle2 custom skills for your stack
  • check_circle1-hour onboarding call
  • check_circlePriority updates for 1 year
  • check_circleEarly access to new kits
Buy Enterprise
Cohort
$247
next cohort TBD
  • check_circleEverything in Enterprise
  • check_circle6-week structured schedule
  • check_circleWeekly live office hours
  • check_circleCapstone peer review
  • check_circleCompletion certificate
  • check_circleAlumni network
Join Cohort
FAQ

Common Questions

Do I need API keys to run the labs? expand_more
What tools/CLIs does this course cover? expand_more
How does FDSA compare to TAC or ClaudeFAST? expand_more
How long does the course take? expand_more
What's the refund policy? expand_more
Can I buy individual skill kits? expand_more

FDSA Agency — Agentic Engineering Course. Part of the fdsa.ai orchestration platform.

- + \ No newline at end of file diff --git a/site/.vitepress/dist/labs/index.html b/site/.vitepress/dist/labs/index.html index 3429352..abce857 100644 --- a/site/.vitepress/dist/labs/index.html +++ b/site/.vitepress/dist/labs/index.html @@ -9,9 +9,9 @@ - + - + @@ -39,7 +39,7 @@ # Check solution after attempting: python solution.py test.txt "What is this file about?"

Lab Structure

Each lab has:

Offline Mode

All labs include automatic mock LLM fallback. No API keys required. The mock client returns realistic, deterministic responses so you can verify your code logic without paying for API calls.

- + \ No newline at end of file diff --git a/site/.vitepress/dist/labs/l1-first-agent.html b/site/.vitepress/dist/labs/l1-first-agent.html index 494ddb7..b60c870 100644 --- a/site/.vitepress/dist/labs/l1-first-agent.html +++ b/site/.vitepress/dist/labs/l1-first-agent.html @@ -9,9 +9,9 @@ - + - + @@ -30,7 +30,7 @@
Skip to content

L1: Your First Agent

Build a single-tool agent from scratch.

Module: M1 Foundations
Est. Time: 60 min
Files: starter.py, solution.py

Objective

Create an agent that reads a file and answers questions about its contents.

Concepts

  • LLM + Tools + Loop = Agent
  • Tool definition with input schema
  • The agent loop (think → act → observe → repeat)
  • The reasoning parameter

Starter

bash
cd course/labs/L1-first-agent/
 python starter.py test.txt "What is this file about?"

The starter has TODO markers where you fill in:

  1. Define the read_file tool schema
  2. Implement the execute_tool function
  3. Implement the run_agent loop
  4. Wire up the main entry point

Solution

bash
python solution.py test.txt "What is this file about?"

Compare your implementation against the solution. Key differences to check:

  • Did you set MAX_ITERATIONS?
  • Does every tool call include reasoning?
  • Does the loop terminate on end_turn?

Checkpoints

  1. Tool call is made correctly (schema matches)
  2. Tool result is fed back to the LLM
  3. LLM produces final answer using tool result
  4. Loop terminates (doesn't run forever)

FDSA Agency — Agentic Engineering Course. Part of the fdsa.ai orchestration platform.

- + \ No newline at end of file diff --git a/site/.vitepress/dist/labs/l2-context.html b/site/.vitepress/dist/labs/l2-context.html index f3ee2c5..e92d0e3 100644 --- a/site/.vitepress/dist/labs/l2-context.html +++ b/site/.vitepress/dist/labs/l2-context.html @@ -9,9 +9,9 @@ - + - + @@ -30,7 +30,7 @@
Skip to content

L2b: Context-Aware Agent

Module: M2 Architecture
Files: starter.py, solution.py

Objective

Implement sliding window + summarization for long agent sessions.

Concepts

Refer to the corresponding module for full concept explanations.

Starter

bash
cd course/labs/l2-context/
 # Open starter file and fill in the TODOs

Checkpoints

  1. Build a ContextManager class
  2. Implement max_recent_turns sliding window
  3. Summarize old messages when window exceeds limit
  4. Build context from summary + recent messages

Solution

Compare against the solution file after attempting the starter.

FDSA Agency — Agentic Engineering Course. Part of the fdsa.ai orchestration platform.

- + \ No newline at end of file diff --git a/site/.vitepress/dist/labs/l2-multi-tool.html b/site/.vitepress/dist/labs/l2-multi-tool.html index 6161792..2b26834 100644 --- a/site/.vitepress/dist/labs/l2-multi-tool.html +++ b/site/.vitepress/dist/labs/l2-multi-tool.html @@ -9,9 +9,9 @@ - + - + @@ -30,7 +30,7 @@
Skip to content

L2a: Multi-Tool Agent

Module: M2 Architecture
Files: starter.py, solution.py

Objective

Add file operations AND web search to your agent.

Concepts

Refer to the corresponding module for full concept explanations.

Starter

bash
cd course/labs/l2-multi-tool/
 # Open starter file and fill in the TODOs

Checkpoints

  1. Define a read_file tool schema
  2. Define a search_web tool (DuckDuckGo or similar)
  3. Define a write_file tool
  4. Implement execute_tool for all three
  5. Run the agent loop with tool result feedback

Solution

Compare against the solution file after attempting the starter.

FDSA Agency — Agentic Engineering Course. Part of the fdsa.ai orchestration platform.

- + \ No newline at end of file diff --git a/site/.vitepress/dist/labs/l3-verifier.html b/site/.vitepress/dist/labs/l3-verifier.html index 5b2f3e2..0710903 100644 --- a/site/.vitepress/dist/labs/l3-verifier.html +++ b/site/.vitepress/dist/labs/l3-verifier.html @@ -9,9 +9,9 @@ - + - + @@ -30,7 +30,7 @@
Skip to content

L3b: Verifier Agent

Module: M3 Safety
Files: starter.py, solution.py

Objective

Create a read-only agent that checks the builder's work independently.

Concepts

Refer to the corresponding module for full concept explanations.

Starter

bash
cd course/labs/l3-verifier/
 # Open starter file and fill in the TODOs

Checkpoints

  1. Define read-only tools (read_file, grep_search, list_files)
  2. Implement claim verification logic
  3. Report confidence level (PERFECT through FAILED)
  4. No write/edit/bash tools allowed

Solution

Compare against the solution file after attempting the starter.

FDSA Agency — Agentic Engineering Course. Part of the fdsa.ai orchestration platform.

- + \ No newline at end of file diff --git a/site/.vitepress/dist/labs/l3-whitelist-hook.html b/site/.vitepress/dist/labs/l3-whitelist-hook.html index b8d8c87..294a8e0 100644 --- a/site/.vitepress/dist/labs/l3-whitelist-hook.html +++ b/site/.vitepress/dist/labs/l3-whitelist-hook.html @@ -9,9 +9,9 @@ - + - + @@ -34,7 +34,7 @@ rm -rf target/ → BLOCK python cleanup.py → BLOCK (L3 marque break) npm test && rm -rf / → BLOCK (compound operator) - + \ No newline at end of file diff --git a/site/.vitepress/dist/labs/l4-agent-chain.html b/site/.vitepress/dist/labs/l4-agent-chain.html index 5ff8d4c..281e4b2 100644 --- a/site/.vitepress/dist/labs/l4-agent-chain.html +++ b/site/.vitepress/dist/labs/l4-agent-chain.html @@ -9,9 +9,9 @@ - + - + @@ -30,7 +30,7 @@
Skip to content

L4a: Agent Chain

Module: M4 Orchestration
Files: starter.yaml, solution.yaml

Objective

Create a YAML-defined plan-build-review-verify pipeline.

Concepts

Refer to the corresponding module for full concept explanations.

Starter

bash
cd course/labs/l4-agent-chain/
 # Open starter file and fill in the TODOs

Checkpoints

  1. Define planner step with output format requirements
  2. Define builder step with implementation rules
  3. Define reviewer step with checklist criteria
  4. Define verifier step with confidence reporting

Solution

Compare against the solution file after attempting the starter.

FDSA Agency — Agentic Engineering Course. Part of the fdsa.ai orchestration platform.

- + \ No newline at end of file diff --git a/site/.vitepress/dist/labs/l4-multi-team.html b/site/.vitepress/dist/labs/l4-multi-team.html index 83e517a..2bc904b 100644 --- a/site/.vitepress/dist/labs/l4-multi-team.html +++ b/site/.vitepress/dist/labs/l4-multi-team.html @@ -9,9 +9,9 @@ - + - + @@ -30,7 +30,7 @@
Skip to content

L4b: Multi-Team Config

Module: M4 Orchestration
Files: starter-config.yaml, solution-config.yaml

Objective

Set up orchestrator + 2 teams with domain locking.

Concepts

Refer to the corresponding module for full concept explanations.

Starter

bash
cd course/labs/l4-multi-team/
 # Open starter file and fill in the TODOs

Checkpoints

  1. Define orchestrator with delegate-only tools
  2. Configure Engineering team with lead + members
  3. Configure Validation team with domain permissions
  4. Set per-agent permissions (read/upsert/delete scope)

Solution

Compare against the solution file after attempting the starter.

FDSA Agency — Agentic Engineering Course. Part of the fdsa.ai orchestration platform.

- + \ No newline at end of file diff --git a/site/.vitepress/dist/labs/l5-cicd.html b/site/.vitepress/dist/labs/l5-cicd.html index 5ef5f7d..49e66c0 100644 --- a/site/.vitepress/dist/labs/l5-cicd.html +++ b/site/.vitepress/dist/labs/l5-cicd.html @@ -9,9 +9,9 @@ - + - + @@ -30,7 +30,7 @@
Skip to content

L5b: CI/CD Pipeline

Module: M5 Production
Files: starter.py, solution.py

Objective

Create golden dataset + automated regression gate.

Concepts

Refer to the corresponding module for full concept explanations.

Starter

bash
cd course/labs/l5-cicd/
 # Open starter file and fill in the TODOs

Checkpoints

  1. Define golden test cases (input, expected tools, expected output)
  2. Implement score_case evaluation function
  3. Run pass@k evaluation (k=1, 3, 5)
  4. Gate deployment on pass rate threshold

Solution

Compare against the solution file after attempting the starter.

FDSA Agency — Agentic Engineering Course. Part of the fdsa.ai orchestration platform.

- + \ No newline at end of file diff --git a/site/.vitepress/dist/labs/l5-observability.html b/site/.vitepress/dist/labs/l5-observability.html index 505d37c..ff76987 100644 --- a/site/.vitepress/dist/labs/l5-observability.html +++ b/site/.vitepress/dist/labs/l5-observability.html @@ -9,9 +9,9 @@ - + - + @@ -30,7 +30,7 @@
Skip to content

L5a: Observability

Module: M5 Production
Files: starter.py, solution.py

Objective

Trace every tool call + LLM completion to SQLite.

Concepts

Refer to the corresponding module for full concept explanations.

Starter

bash
cd course/labs/l5-observability/
 # Open starter file and fill in the TODOs

Checkpoints

  1. Define SQLite schema for tool_calls and llm_completions
  2. Implement ObservabilityTracker class
  3. Log tool calls with params, result, duration
  4. Log LLM completions with token counts and cost
  5. Generate session summary report

Solution

Compare against the solution file after attempting the starter.

FDSA Agency — Agentic Engineering Course. Part of the fdsa.ai orchestration platform.

- + \ No newline at end of file diff --git a/site/.vitepress/dist/labs/l6-cost-optimization.html b/site/.vitepress/dist/labs/l6-cost-optimization.html index 3274127..a8a9ebc 100644 --- a/site/.vitepress/dist/labs/l6-cost-optimization.html +++ b/site/.vitepress/dist/labs/l6-cost-optimization.html @@ -9,9 +9,9 @@ - + - + @@ -30,7 +30,7 @@
Skip to content

L6b: Cost Optimization

Module: M6 Economics
Files: starter.py, solution.py

Objective

Profile a session, find savings, implement cascade routing.

Concepts

Refer to the corresponding module for full concept explanations.

Starter

bash
cd course/labs/l6-cost-optimization/
 # Open starter file and fill in the TODOs

Checkpoints

  1. Define model cost profiles (input/output $/M tokens)
  2. Calculate all-Opus session cost
  3. Implement cascade routing map (Flash/Sonnet/Opus by task)
  4. Calculate savings percentage

Solution

Compare against the solution file after attempting the starter.

FDSA Agency — Agentic Engineering Course. Part of the fdsa.ai orchestration platform.

- + \ No newline at end of file diff --git a/site/.vitepress/dist/labs/l6-eval-harness.html b/site/.vitepress/dist/labs/l6-eval-harness.html index f00981e..0a857a0 100644 --- a/site/.vitepress/dist/labs/l6-eval-harness.html +++ b/site/.vitepress/dist/labs/l6-eval-harness.html @@ -9,9 +9,9 @@ - + - + @@ -30,7 +30,7 @@
Skip to content

L6a: Eval Harness

Module: M6 Economics
Files: starter.py, solution.py

Objective

Build golden Q&A pairs + pass@k scoring system.

Concepts

Refer to the corresponding module for full concept explanations.

Starter

bash
cd course/labs/l6-eval-harness/
 # Open starter file and fill in the TODOs

Checkpoints

  1. Define 10+ test cases with tool and output expectations
  2. Implement EvalHarness class with score_case
  3. Compute pass@1, pass@3, pass@5 metrics
  4. Support weighted scoring by case importance

Solution

Compare against the solution file after attempting the starter.

FDSA Agency — Agentic Engineering Course. Part of the fdsa.ai orchestration platform.

- + \ No newline at end of file diff --git a/site/.vitepress/dist/labs/l7-autoresearch.html b/site/.vitepress/dist/labs/l7-autoresearch.html index d7d81a0..4e2632e 100644 --- a/site/.vitepress/dist/labs/l7-autoresearch.html +++ b/site/.vitepress/dist/labs/l7-autoresearch.html @@ -9,9 +9,9 @@ - + - + @@ -32,7 +32,7 @@ python starter.py

Solution

bash
python solution.py

Experiment Log Format

jsonl
{"run": 1, "status": "baseline", "metric": {"name": "latency", "value": 52, "unit": "ms"}}
 {"run": 2, "status": "keep", "metric": {"name": "latency", "value": 46}, "deltaPct": -11.5}
 {"run": 3, "status": "discard", "metric": {"name": "latency", "value": 53}, "deltaPct": +1.9}

Integrity Guards

ThreatDetectionPrevention
Grinding (same code re-run)Code hash comparisonSkip run
Noise-chasingMedian vs best comparisonUse median, not best
Reward hackingTiming function isolationVerify computation not shortcut
Test set leakageTest data hash verificationAssert data unchanged
- + \ No newline at end of file diff --git a/site/.vitepress/dist/labs/l7-meta-agent.html b/site/.vitepress/dist/labs/l7-meta-agent.html index 1aca8e7..f96df2c 100644 --- a/site/.vitepress/dist/labs/l7-meta-agent.html +++ b/site/.vitepress/dist/labs/l7-meta-agent.html @@ -9,9 +9,9 @@ - + - + @@ -30,7 +30,7 @@
Skip to content

L7b: Meta-Agent

Module: M7 Advanced
Files: starter.py, solution.py

Objective

Generate a new agent persona from documentation.

Concepts

Refer to the corresponding module for full concept explanations.

Starter

bash
cd course/labs/l7-meta-agent/
 # Open starter file and fill in the TODOs

Checkpoints

  1. Parse user description for agent requirements
  2. Infer appropriate tools from domain keywords
  3. Generate system prompt with persona and rules
  4. Create mental model YAML template
  5. Save all files to a named agent directory

Solution

Compare against the solution file after attempting the starter.

FDSA Agency — Agentic Engineering Course. Part of the fdsa.ai orchestration platform.

- + \ No newline at end of file diff --git a/site/.vitepress/dist/modules/competitive-analysis.html b/site/.vitepress/dist/modules/competitive-analysis.html index be551fc..aa84fab 100644 --- a/site/.vitepress/dist/modules/competitive-analysis.html +++ b/site/.vitepress/dist/modules/competitive-analysis.html @@ -9,9 +9,9 @@ - + - + @@ -41,7 +41,7 @@ ││ │ └────────────────────────────── FRAMEWORK-AGNOSTIC

Your competitive moat: You are framework-agnostic (like Anthropic, unlike LangChain/DL.AI) AND you have hands-on labs (like TAC, unlike Anthropic). No other course occupies both quadrants.

Unique selling points to emphasize:

  1. "From the engineer who reverse-engineered Anthropic's Mythos paper — learn what the frontier models CAN'T do"
  2. "13 runnable labs with starter code AND solutions"
  3. "The only course with a working verifier agent, bash security ladder, and autoresearch loop"
  4. "Based on 25,000+ files of production agent systems — not tutorials, but battle scars"

Pricing recommendation: $97-147 positions you directly against TAC with MORE content. $197-247 positions you as premium (justified by original research + working systems source code).


Validation: ClaudeFAST Articles (Published May 2026)

Fetched both articles to verify our course content against real published material.

Article 1: "The Agent Manager: Who Owns Claude Code?"

Published by: ClaudeFAST, citing Anthropic's May 2026 terminology
Thesis: The Agent Manager role exists because enterprises need someone to own the harness.

Their 3 failure modes without an agent manager:

  1. Tribal knowledge — Every dev evolves a personal AI layer; nothing is shared
  2. Inconsistent results — Same model, same codebase, different output quality
  3. Security drift — Permissions configured ad hoc, MCP servers with unbounded scope

Their 5 areas of ownership (maps to the 5 harness subsystems):

Our coverage in M5: We added the Agent Manager role lesson (5.2c) with the 90-day playbook, plus the 5-tool production stack case study (5.2b). Both align exactly with ClaudeFAST's framing. ✅

Grade: A — Our coverage matches the published standard.

Article 2: "Thread-Based Engineering: Scale Claude Code Sessions"

Published by: ClaudeFAST
Thesis: 6 fundamental thread patterns that scale AI-assisted engineering work.

Their 6 thread types vs our coverage:

ThreadClaudeFAST defines it asOur CoverageGrade
Base ThreadPrompt → Tool Calls → ReviewM1 agent loop✅ A
P-ThreadParallel instances (Boris runs 15)M4, added this session✅ A
L-ThreadLong-running, hours+M7 always-on✅ A
B-ThreadAgents managing agentsM4 delegation✅ A
F-ThreadFusion, N agents 1 winnerM4, added this session✅ A
C-ThreadCheckpoint gatesM5 HITL✅ A

ClaudeFAST explicitly names Boris Cherny (creator of Claude Code) running 5 tmux tabs + 5-10 web instances = 10-15 parallel P-threads. This matches HypeMan's psmux + mprocs stack exactly.

Our coverage in M4: All 6 thread types covered. ✅

What This Validates

  1. REFERENCE-STACK.md is production-accurate — Your stack mirrors Boris Cherny's own setup and ClaudeFAST's documented patterns.
  2. Agent Manager role is real — Anthropic published the terminology May 2026. Our M5 lesson matches.
  3. Thread-based engineering is the standard — Both ClaudeFAST and IndyDevDan teach it. We cover all 6 types.
  4. Your stack is ahead of the course — HypeMan runs exactly what ClaudeFAST teaches. REFERENCE-STACK.md documents it.

Live Comparison: IndyDevDan's Published Content (agenticengineer.com)

I fetched 5 pages from his site. Here's his published intellectual property and what it means for your course.

Page 1: "The Only Claude Code Competitor"

Core framework: 4 dimensions of agent control — context, model, prompt, tools3-tier customization ladder:

Thesis: "Claude Code is the starter pack. Pi is the endgame." He positions Claude Code for beginners (first 100 hours) and Pi for advanced users who need harness control.

Course gap analysis: Your M1-M4 already cover all 3 tiers. His 4-dimensions framing (context, model, prompt, tools) is cleaner than your current 4 pillars. Consider adopting his framing language.

Page 2: "Top 2% Agentic Engineering" — 10 Bets for 2026

Bet #TopicCovered in Your Course?
1Anthropic becomes a monster (ecosystem moat)Not covered as a thesis
2Tool calling is the opportunityCovered in M2
3Custom agents above allCovered in M2, M4
4Multi-agent orchestrationCovered in M4
5Agent sandboxesCovered in M7
6In-loop vs out-loop agentic codingNot framed this way
7Agentic Coding 2.0 (agents conducting agents)Covered in M4, M7
8The benchmark breakdown (skepticism)Not covered
9Agents eating software (market trend)Not covered
10Agent-native architecturePartial in M4

Gap: Bets 1, 6, 8, 9 are market/intellectual framing you don't address. They're opinion/positioning pieces.

Page 3: "Thinking in Threads" — His Signature Framework

ThreadWhat It IsIn Your Course?
Base ThreadPrompt → Tool Calls → ReviewM1 agent loop
P-ThreadRun N agents in parallelNot covered
C-ThreadCheckpoints, human gatesM5 (HITL)
F-ThreadFusion: N agents, 1 winnerNot covered
B-ThreadBranch: agents manage agentsM4 delegation
L-ThreadLong-running (hours/days)M7 always-on
Z-Threadatomic prompt→tools→shipM1 basic loop

Gap: P-threads (parallel) and F-threads (fusion) are missing. These are his most distinctive frameworks.

Page 4: "Engineering with Exponentials"

Thesis: "The prompt is the new fundamental unit of knowledge work programming." 3-part essay series: (1) Engineering with Exponentials, (2) AI Coding is Transitory, (3) Agentic Coding is the Endgame. No direct technical gaps. This is thought-leadership positioning.

Page 5: "Compute Advantage Equation"

Formula: (Compute Scaling × Autonomy) ÷ (Time + Effort + Monetary Cost)Purpose: Interactive calculator to compare AI coding tools. Gap: You don't have a unified "value equation" for agentic engineering.

Summary: His IP vs Your Coverage

His unique IP you should reference or adopt:

  1. 4 dimensions of control (context, model, prompt, tools) — cleaner framing for M1
  2. Thread framework (P-thread, F-thread, C-thread) — add as orchestration patterns in M4
  3. Compute Advantage Equation — add a version in M6 (economics)
  4. "Do you trust your agents?" — use this framing hook in M1

His gaps that you fill (your competitive moat):

Verdict: Dan is a thought leader with strong mental models (threads, 4 dimensions, compute advantage). You are a curriculum builder with more comprehensive technical coverage. The ideal course combines both — his mental models + your technical depth.

- + \ No newline at end of file diff --git a/site/.vitepress/dist/modules/curriculum.html b/site/.vitepress/dist/modules/curriculum.html index 94cae20..637e3b5 100644 --- a/site/.vitepress/dist/modules/curriculum.html +++ b/site/.vitepress/dist/modules/curriculum.html @@ -9,9 +9,9 @@ - + - + @@ -29,7 +29,7 @@
Skip to content

Curriculum

Module Overview

ModuleTitleHoursWhat You'll Learn
M1Foundations4-6What agents are, harness vs model, decision frameworks, trust
M2Architecture6-8Tools, loops, context, memory, skills, codebase patterns
M3Safety & Security5-76-level security ladder, hooks, verifier pattern, defense-in-depth
M4Orchestration7-9Multi-agent patterns, P-threads, delegation, P2P communication
M5Production5-7CI/CD, shadow deploys, observability, rollback, 5-tool stack
M6Economics4-6Model pricing, cascade routing, pass@k evals, cost optimization
M7Advanced5-7Autoresearch, meta-agents, beyond MCP, always-on agents
M8Capstone8-12Build a production-grade multi-agent system

Total: 44-62 hours, 65 lessons, 13 labs, 56 quizzes


Module 1: Foundations (4-6 hours)

LessonTopic
1.1What Makes an Agent? — Karpathy thesis, Software 3.0
1.2The Harness vs The Model — 5 subsystems, 4 dimensions
1.3The Repository IS the Spec
1.4Decision Framework: "Should I use an agent for this?"
1.5The Agent Loop: Think, Act, Observe, Repeat
1.6Tool Calling Deep Dive
1.7Vibe Coding vs Agentic Engineering
1.8Do You Trust Your Agents? — Hotz critique, Schmidt strategic view
LabYour First Agent (single-tool)

Module 2: Architecture (6-8 hours)

LessonTopic
2.1The Four Pillars: Tools, Loop, Context, Memory
2.2Tool Design Patterns: MCP, CLI, Script, Skills
2.3Agent Loop Variants: 5 levels
2.4Skills System Deep Dive: path-scoped, plugins, LSP
2.5Agent-Readable Workspace: init phase, feature lists
2.6Context Window Management
2.7Memory Patterns: mental models, scratch pads
2.8The Reasoning Parameter
2.9Codebase Architectures: 4 patterns
LabsMulti-Tool Agent + Context-Aware Agent

Module 3: Safety & Security (5-7 hours)

LessonTopic
3.1Prompt Injection (L0) + Why Bash Is the Problem
3.2The 6-Level Security Ladder
3.3The L3 Marque Break
3.4Damage Control: 3 access levels
3.5Hook Architecture: 13 lifecycle events
3.6The Verifier Pattern
3.7Defense-in-Depth Stacking
LabsWhitelist Hook + Verifier Agent

Module 4: Orchestration (7-9 hours)

LessonTopic
4.1Why One Agent Is Not Enough
4.2Orchestration Patterns: Dispatcher, Pipeline, P2P
4.3P-Threads: Parallel Agent Execution
4.4F-Threads: Fusion, N Agents One Winner
4.5Depth-2 Delegation
4.6Agent Experts That Remember
4.7Domain Locking
4.8TillDone Task Discipline
4.9Agent Chains
4.10P2P Communication + MCP Agent Mail
4.11Service Connectors
4.12Conversation Awareness
4.13CEO Board System
4.14UI Agents System
LabsAgent Chain + Multi-Team Config

Module 5: Production (5-7 hours)

LessonTopic
5.1What Production Means for Agents
5.2CI/CD for Agents
5.3The 5-Tool Production Stack
5.4The Agent Manager Role
5.5Shadow Deployments
5.6Rollback Strategies
5.7Observability + Cross-Provider Search
5.8Alerting and Monitoring
5.9Deployment Modes
5.10Cost Control
LabsObservability SQLite + CI/CD Pipeline

Module 6: Economics (4-6 hours)

LessonTopic
6.0The Compute Advantage Equation
6.1Tokenomics: 3 Levels
6.2LLM Pricing Landscape
6.3Cascade Routing
6.4Cost Per Session Math
6.5Agent Evaluation Metrics
6.6Automated Evaluation
6.7A/B Testing Agents
6.8Human Evaluation
LabsEval Harness + Cost Optimization

Module 7: Advanced (5-7 hours)

LessonTopic
7.1Autoresearch: Self-Improving Agents
7.2Integrity: Keeping the Loop Honest
7.3Meta-Agents: Agents That Build Agents
7.4Beyond MCP: Choosing Tool Channels
7.5Mac Mini Agent: Physical Sandbox
7.6Always-On Agents
LabsAutoresearch Loop + Meta-Agent

Module 8: Capstone (8-12 hours)

Build a production-grade multi-agent system. Choose from:

  • Brand Monitor — Multi-LLM brand mention tracking
  • Code Review Pipeline — Plan, Build, Review, Verify
  • Strategic Decision Board — 8-agent CEO board

Reference Documents

FDSA Agency — Agentic Engineering Course. Part of the fdsa.ai orchestration platform.

- + \ No newline at end of file diff --git a/site/.vitepress/dist/modules/debate.html b/site/.vitepress/dist/modules/debate.html index 3b193e6..0a8de60 100644 --- a/site/.vitepress/dist/modules/debate.html +++ b/site/.vitepress/dist/modules/debate.html @@ -9,9 +9,9 @@ - + - + @@ -29,7 +29,7 @@
Skip to content

The Great Agent Debate

Two opposing views from credible engineers. Both are essential context.

Armin Ronacher — "Building Pi With Pi"

Who: Creator of Flask, Sentry co-founder, Pi maintainer.
Post: lucumr.pocoo.org (May 24, 2026)

Key arguments:

  • Pi is built with Pi (agents building agent tools)
  • The harness matters most
  • We're not at full autonomy yet
  • AI-generated PRs create new OSS maintenance burdens

George Hotz — "The Eternal Sloptember"

Who: Founder of comma.ai, first iPhone jailbreaker.
Post: geohot.github.io (May 24, 2026)

Key arguments:

  • "Agents cannot program" — output is broken in increasingly hard-to-detect ways
  • It's not "you're using it wrong" — he tried all models, harnesses, prompts
  • Agents hurt large organizations more (slow feedback loops)
  • "Golden era for slop, dark age for quality"

The Synthesized View

Armin SaysGeorge SaysWe Teach
Harness is the productOutput is slopThe harness catches slop (M3)
Not at dark factory yetAgents can't programUse agents for what they're good at (M1)
Built with Pi is realSlot machine polish problemVerifier finishes the polish (M3)
OSS maintenance is hardLarge orgs will sufferProduction patterns prevent this (M5)

Both are right. Agents produce slop. The harness, verification, and production patterns turn slop into shipped quality. Without the harness, Hotz wins.

FDSA Agency — Agentic Engineering Course. Part of the fdsa.ai orchestration platform.

- + \ No newline at end of file diff --git a/site/.vitepress/dist/modules/feynman.html b/site/.vitepress/dist/modules/feynman.html index 3e79b1e..1c0ea51 100644 --- a/site/.vitepress/dist/modules/feynman.html +++ b/site/.vitepress/dist/modules/feynman.html @@ -9,9 +9,9 @@ - + - + @@ -32,7 +32,7 @@ 2. The agent does something (reads a file, runs a command) 3. The agent sees the result 4. The agent decides: "Am I done?" If yes, stop. If no, go back to step 1.

That's it. That's the entire loop. The magic is in what tools you give it and how you tell it to decide when to stop.


4. The Four Things You Control (M1)

Fancy version: Context, Model, Prompt, Tools — the 4 dimensions of control.

Simple version: You can only change four things about any agent:

  1. What it knows (context) — files, instructions, conversation history
  2. How smart it is (model) — which LLM powers it
  3. How you talk to it (prompt) — the system instructions
  4. What it can do (tools) — read, write, search, run commands

The trick: #2 (model) is the least important and most expensive. #4 (tools) is the most important and cheapest. Focus on tools.


5. The Repository IS the Spec (M1)

Fancy version: All necessary context should live in the repository as the single source of truth.

Simple version: Imagine you wake up an engineer at 3AM and drop them into a project. They need to know: What does this project do? How do I run tests? Where do I put new code? What rules should I follow?

If the answer is "ask Bob" — you fail. If the answer is "read CLAUDE.md in the repo" — you win.

An agent can only see what's in files. EVERYTHING the agent needs must be in a file. Not in your head. Not in tribal knowledge. In a file.


6. The Security Ladder (M3)

Fancy version: 6 levels of bash security from L0 to L5.

Simple version: Imagine your agent has a button that says "run any command on your computer." That's the most dangerous button in the world. Here's how to protect it:

The dirty secret: Most people stop at Level 2 and think they're safe. They're not. The math proves it: at a 1% failure rate, there's a 63% chance of disaster over 100 agent turns.


7. Why One Agent Is Not Enough (M4)

Fancy version: Context ceiling, capability ceiling, reliability ceiling.

Simple version: Imagine one person trying to be CEO, engineer, designer, QA, and customer support at the same time. They'd be bad at everything and exhausted.

One agent has the same problem:

The fix: multiple specialized agents. One plans. One codes. One reviews. One verifies. Each one good at its job. If the reviewer breaks, the coder keeps working.


8. Orchestration Patterns (M4)

Fancy version: Dispatcher, Pipeline, P2P — three patterns for multi-agent work.

Simple version:

Pattern 1 — The Manager (Dispatcher): One boss tells specialists what to do. Each specialist works independently. The boss collects results. Like a team lead assigning tickets.

Pattern 2 — The Assembly Line (Pipeline): Step 1 → Step 2 → Step 3. Planner makes a plan. Builder builds it. Reviewer checks it. Each step feeds into the next.

Pattern 3 — The Coworkers (P2P): No boss. Agents talk to each other directly like peers. "Hey, can you check this?" "Sure, here's what I found." Flat, fast, flexible.

Which to use: Manager for complex projects. Assembly line for well-defined workflows. Coworkers for creative collaboration.


9. TillDone — Task Discipline (M4)

Fancy version: Task list gating with live progress tracking.

Simple version: Before an agent can do anything, it must write down what it's going to do. No "just start coding." Write the task list first. Then do each task. Mark it done. If the session ends with incomplete tasks, the agent gets nudged: "Hey, you're not done yet."

This stops the #1 agent failure: starting without a plan and wandering off.


10. The 3x Rule (M6)

Fancy version: Production agent costs 3x your prototype estimate.

Simple version: When you build a quick prototype, the agent works perfectly on the happy path. In production, everything goes wrong:

The rule: Whatever you think the agent will cost, multiply by 3. If your prototype costs $0.10 per task, production will cost $0.30. Budget for it.


11. Cascade Routing (M6)

Fancy version: Use cheap models for simple steps, expensive models for complex steps.

Simple version: Don't use your smartest engineer to sort papers. Use the intern for sorting, the senior for decisions.

For agents:

This saves 66-80% compared to using Opus for everything. The work is the same quality because each model does what it's best at.


12. The Verifier (M3)

Fancy version: Two-agent observer pattern with read-only verification.

Simple version: Imagine you have two engineers. One writes code. The other checks the code. The checker CANNOT write code — they can only read files and point out mistakes.

The builder doesn't even know the checker exists. After every change, the checker automatically reviews it. If they find a problem, they send a note: "Hey, this file says X but the actual code does Y — fix it."

After 3 failed checks, the checker calls you: "I can't verify this, come look."

This catches mistakes BEFORE they hit production. And because the checker can't write code, they can't make things worse.


13. The Confidence Ladder (M3)

Fancy version: PERFECT → VERIFIED → PARTIAL → FEEDBACK → FAILED

Simple version: After the verifier checks the work, they give a grade:

GradeMeaningWhat You Do
PERFECTEverything checks out, no issuesShip it
VERIFIEDMinor non-blocking gapsShip it, note the gaps
PARTIALNo failures, but some things can't be checkedReview the unchecked parts
FEEDBACKSomething failed, correction sentWait for the fix
FAILEDCan't verify at allInvestigate immediately

14. Autoresearch (M7)

Fancy version: Self-improving agents with integrity guards.

Simple version: An agent that experiments on itself. It tries a change, measures if it helped, and keeps it if it did. Like a scientist running experiments.

The problem: Agents cheat. They run the same code 160 times hoping for a lucky result (grinding). They move work outside the timing function (reward hacking). They find and train on the test data (data leakage).

The fix: Integrity guards.


15. The Universal Truth

Fancy version: Deterministic orchestrates non-deterministic. Code is the harness. AI is the engine.

Simple version: Use regular code for things that never change. Use AI for things that need intelligence. Don't ask AI to do what a simple script can do.

Or as Kelsey Hightower put it: "Don't waste tokens on deterministic work."

The practical rule: If you can write a bash command or a Python function that does it, DO THAT. Only use AI when you need judgment, creativity, or adaptation. Every token you save is money and reliability you keep.

- + \ No newline at end of file diff --git a/site/.vitepress/dist/modules/field-manual.html b/site/.vitepress/dist/modules/field-manual.html index 5c8e2ae..e4f2234 100644 --- a/site/.vitepress/dist/modules/field-manual.html +++ b/site/.vitepress/dist/modules/field-manual.html @@ -9,9 +9,9 @@ - + - + @@ -77,7 +77,7 @@ ECONOMICS: CA = (CS × A) ÷ (T + E + MC) 3x rule Cascade 66-80% EVALS: pass@k = 1 - (1-p)^k Cost/task Tool call accuracy TRUST: "Yes, because I've engineered it" — not blind faith - + \ No newline at end of file diff --git a/site/.vitepress/dist/modules/m1-foundations.html b/site/.vitepress/dist/modules/m1-foundations.html index 63aea4f..fd0ea64 100644 --- a/site/.vitepress/dist/modules/m1-foundations.html +++ b/site/.vitepress/dist/modules/m1-foundations.html @@ -9,11 +9,11 @@ - + - + - + @@ -89,8 +89,8 @@ # 5. Print the final answer import json -# Your code here...

Checkpoints:

  1. Tool call is made correctly (schema matches)
  2. Tool result is fed back to the LLM
  3. LLM produces final answer using tool result
  4. Loop terminates (doesn't run forever)

Solution: course/labs/L1-first-agent/solution.py


Quiz M1

  1. What three components make an AI agent? (Multiple choice)
  2. True/False: The model quality matters more than the harness design
  3. When should you NOT use an agent? (Scenario-based)
  4. What does the reasoning parameter do?
  5. Calculate: If an agent has a 2% failure rate per turn and runs 50 turns, what's the probability of at least one failure?
- +# Your code here...

Checkpoints:

  1. Tool call is made correctly (schema matches)
  2. Tool result is fed back to the LLM
  3. LLM produces final answer using tool result
  4. Loop terminates (doesn't run forever)

Solution: course/labs/L1-first-agent/solution.py


Quiz M1

  1. What three components make an AI agent? (Multiple choice)
  2. True/False: The model quality matters more than the harness design
  3. When should you NOT use an agent? (Scenario-based)
  4. What does the reasoning parameter do?
  5. Calculate: If an agent has a 2% failure rate per turn and runs 50 turns, what's the probability of at least one failure?
+ \ No newline at end of file diff --git a/site/.vitepress/dist/modules/m2-architecture.html b/site/.vitepress/dist/modules/m2-architecture.html index 9201128..eff843d 100644 --- a/site/.vitepress/dist/modules/m2-architecture.html +++ b/site/.vitepress/dist/modules/m2-architecture.html @@ -9,9 +9,9 @@ - + - + @@ -128,7 +128,7 @@ if attempt == MAX_RETRIES - 1: return {"error": "API unavailable after 3 retries", "fallback": "use cached result"} time.sleep(2 ** attempt) # exponential backoff

Lab 2.8: Multi-Tool Agent

Objective: Add file operations + web search tools to the agent from Lab 1.

Starter: course/labs/L2-multi-tool/starter.py
Solution: course/labs/L2-multi-tool/solution.py


Lab 2.9: Context-Aware Agent

Objective: Implement sliding window + summarization for long sessions.

Starter: course/labs/L2-context/starter.py
Solution: course/labs/L2-context/solution.py

- + \ No newline at end of file diff --git a/site/.vitepress/dist/modules/m3-safety.html b/site/.vitepress/dist/modules/m3-safety.html index 06dfc2d..4ae87de 100644 --- a/site/.vitepress/dist/modules/m3-safety.html +++ b/site/.vitepress/dist/modules/m3-safety.html @@ -9,9 +9,9 @@ - + - + @@ -109,7 +109,7 @@ # 3. Check against safelist # 4. Block if not safelisted, allow if matched # 5. Handle the compound shell operator case (&&, ||, ;, |)

Lab 3.9: Build a Verifier Agent

Objective: Create a read-only agent that checks the builder's work.

Starter: course/labs/L3-verifier/starter.py

Checkpoints:

  1. Verifier can read builder's file changes
  2. Verifier can grep/search for evidence
  3. Verifier has NO write/edit/bash tools
  4. Verifier reports confidence level
  5. Builder can receive and act on verifier feedback
- + \ No newline at end of file diff --git a/site/.vitepress/dist/modules/m4-orchestration.html b/site/.vitepress/dist/modules/m4-orchestration.html index 58b31c7..1bdb703 100644 --- a/site/.vitepress/dist/modules/m4-orchestration.html +++ b/site/.vitepress/dist/modules/m4-orchestration.html @@ -9,9 +9,9 @@ - + - + @@ -114,7 +114,7 @@ Connector → authenticates → calls API → returns result Agent → processes result → continues work Orchestrator → synthesizes final output

Lesson 4.10: The CEO Board System

8 specialist agents for strategic decision-making:

Board MemberFocusTime Horizon
RevenueCash flow, short-term wins30-90 days
CompounderTrust, long-term value6-24 months
ContrarianAssumptions, blind spots3x weight on dissent
Technical ArchitectSystem durabilityOngoing
Product StrategistProblem selectionQuarterly
Customer OracleUser behaviorOngoing
Market StrategistPositioningQuarterly
MoonshotAsymmetric upside1-5 years

Flow

  1. CEO frames the decision
  2. Board debates (sources required, no "I think")
  3. Verifier checks facts (2+ sources per claim)
  4. Executor creates execution plan
  5. Tracker logs for quarterly review

Lesson 4.11: UI Agents System

12 agents across 4 teams for brand-consistent UI generation:

Brand → Product → Tree → Branch → Leaf

Each level has its own brand.yaml with CSS custom properties. Zero hardcoded values. Agents generate Vue components that use only CSS custom properties from the brand config.

Lab 4.12: Build an Agent Chain

Objective: Create a plan→build→review pipeline in YAML.

Starter: course/labs/L4-agent-chain/starter.yamlSolution: course/labs/L4-agent-chain/solution.yaml

Checkpoints:

  1. Planner produces structured plan with tasks and file paths
  2. Builder creates code matching the plan
  3. Reviewer identifies issues with severity (critical/major/minor)
  4. Verifier confirms each claim with file:line evidence

Lab 4.13: Deploy a Multi-Team System

Objective: Set up orchestrator + 2 teams with domain locking.

Starter: course/labs/L4-multi-team/starter-config.yamlSolution: course/labs/L4-multi-team/solution-config.yaml

Checkpoints:

  1. Orchestrator delegates, never executes
  2. Each team has lead + members with distinct roles
  3. Domain permissions restrict each agent to its scope
  4. Mental model files exist for each agent
- + \ No newline at end of file diff --git a/site/.vitepress/dist/modules/m5-production.html b/site/.vitepress/dist/modules/m5-production.html index 3fb98c3..b47ff84 100644 --- a/site/.vitepress/dist/modules/m5-production.html +++ b/site/.vitepress/dist/modules/m5-production.html @@ -9,11 +9,11 @@ - + - + - + @@ -160,8 +160,59 @@ - metric: "session_cost_cents" scope: "global" amount: 200 # $2/session max - hard_stop: true

Warning vs Hard Stop


Lab 5.9: Set Up Agent Observability

Objective: Trace every tool call + LLM completion to a local SQLite database.

Starter: course/labs/L5-observability/starter/

Lab 5.10: CI/CD Pipeline

Objective: Create a golden dataset and automated regression gate.

Starter: course/labs/L5-cicd/starter/

- + hard_stop: true

Warning vs Hard Stop


Lesson 5.8b: Dry-Run Workflow for Agent Actions

Before an agent executes a destructive action (write file, delete, deploy), you want a preview mode that shows what the agent WILL do without actually doing it.

The Dry-Run Pattern

Agent proposes action → Preview output → Human reviews → Approve/Reject → Execute
python
class DryRunContext:
+    """Wrap tool execution in dry-run mode."""
+    
+    def __init__(self, dry_run=True):
+        self.dry_run = dry_run
+        self.proposed_actions = []
+    
+    def execute(self, tool_name, params):
+        if self.dry_run:
+            # Log what WOULD happen
+            self.proposed_actions.append({
+                "tool": tool_name,
+                "params": params,
+                "preview": self._generate_preview(tool_name, params),
+            })
+            return f"[DRY RUN] Would call {tool_name} with {params}"
+        else:
+            # Actually execute
+            return real_execute(tool_name, params)
+    
+    def _generate_preview(self, tool_name, params):
+        if tool_name == "write_file":
+            return f"Would write {len(params.get('content',''))} chars to {params.get('path')}"
+        elif tool_name == "exec_command":
+            return f"Would run: {params.get('command','')[:100]}..."
+        elif tool_name == "delete_file":
+            return f"Would DELETE: {params.get('path')}"
+        return f"Would call {tool_name}"

Implementation Strategies

StrategyHow It WorksBest For
Flag-based--dry-run flag on agent startDevelopment, testing
Hook-basedPre-tool hook logs intent, skips executionProduction agents
UI-basedAgent shows preview, human clicks ConfirmInteractive sessions
Two-passAgent plans first (dry), then executes (wet)Complex multi-step tasks

Docker Dry-Run Example

From the dry-run workflow pattern — a Docker-based calculator that logs operations without running them:

bash
# Build the dry-run sandbox
+docker build -t dry-run-calc -f calculator/Dockerfile .
+
+# Run in preview mode
+docker run --rm -e DRY_RUN=true dry-run-calc add 5 3
+# Output: [DRY RUN] Would add 5 + 3 = 8
+
+# Run for real
+docker run --rm -e DRY_RUN=false dry-run-calc add 5 3
+# Output: 8

When to Use Dry-Run


Lesson 5.8c: Cross-Platform Agent Skills

Skills should work on any agent — Claude Code, Pi Agent, OpenCode, or Codex. The cross-platform format uses YAML frontmatter and tool-agnostic instructions:

markdown
---
+name: init-agents-md
+description: Create or refresh AGENTS.md for coding agents.
+  Works with Claude Code, Pi Agent, and Codex.
+---
+
+# Initialize AGENTS.md
+
+Create a short, repo-specific AGENTS.md.
+
+## Workflow
+
+1. Check if AGENTS.md already exists — if so, stop and ask
+2. Explore the repository structure
+3. Draft AGENTS.md with project purpose, stack, and conventions
+4. Mirror same context into CLAUDE.md if needed

Key Principles

  1. Use ~~ or --- frontmatter — not agent-specific config
  2. Avoid CLI flags — describe the desired outcome, not the command
  3. Include trigger patterns — tell the agent when to invoke this skill
  4. One SKILL.md per skill — no platform-specific variations

Lab 5.9: Set Up Agent Observability

Objective: Trace every tool call + LLM completion to a local SQLite database.

Starter: course/labs/L5-observability/starter/

Lab 5.10: CI/CD Pipeline

Objective: Create a golden dataset and automated regression gate.

Starter: course/labs/L5-cicd/starter/

+ \ No newline at end of file diff --git a/site/.vitepress/dist/modules/m6-economics.html b/site/.vitepress/dist/modules/m6-economics.html index 3e0afd5..79e8fa6 100644 --- a/site/.vitepress/dist/modules/m6-economics.html +++ b/site/.vitepress/dist/modules/m6-economics.html @@ -9,9 +9,9 @@ - + - + @@ -75,7 +75,7 @@ ├── 288 runs/day × $0.08 = $23.04/day = $691/month ├── With cascade + dedup + scheduling: $4.15/day = $125/month └── Savings: 82%

The 80/20 Rule

90% of cost savings come from three changes:

  1. Model cascade — use cheap models for routine work (saves 50-80%)
  2. Iteration limits — cap loops at 3-5 turns (saves 40-60%)
  3. Deduplication — don't re-read the same context (saves 20-30%)

Do these three first before any other optimization.


Lab 6.8: Build an Eval Harness

Objective: Create golden Q&A pairs + automated pass/fail scoring.

Starter: course/labs/L6-eval-harness/starter.py

Lab 6.9: Cost Optimization

Objective: Profile a session, identify savings, implement cascade routing.

Starter: course/labs/L6-cost-optimization/starter.py

- + \ No newline at end of file diff --git a/site/.vitepress/dist/modules/m7-advanced.html b/site/.vitepress/dist/modules/m7-advanced.html index 2609fb2..1f38711 100644 --- a/site/.vitepress/dist/modules/m7-advanced.html +++ b/site/.vitepress/dist/modules/m7-advanced.html @@ -9,11 +9,11 @@ - + - + - + @@ -123,8 +123,36 @@ max_sessions: 1 wake_command: "claude -p 'Check brand mentions since last run'" sleep_command: "pkill -f 'claude.*brand-monitor'" - log_path: "/var/log/openclaw/brand-monitor.log"

It starts, checks for work, executes if needed, then goes back to sleep. No continuous billing, no context window overflow, no runaway loops. This is the pattern for production always-on agents.

When NOT to Use Always-On

Always-on adds complexity. Before building one, verify you actually need it:

Always-on makes sense when you need adaptive scheduling, dynamic task generation, or autonomous decision-making about what to work on next.


Lab 7.7: Build an Autoresearch Loop

Objective: Agent runs experiment, measures result, logs it, decides keep/discard.

Starter: course/labs/L7-autoresearch/starter.py

Checkpoints:

  1. Run code, measure baseline metric
  2. Modify code (agent makes change)
  3. Re-measure, compare, log
  4. Discard if regression, keep if improvement
  5. Include integrity guard (code hashing)

Lab 7.8: Meta-Agent

Objective: Agent generates a new agent persona from documentation.

Starter: course/labs/L7-meta-agent/starter.py

- + log_path: "/var/log/openclaw/brand-monitor.log"

It starts, checks for work, executes if needed, then goes back to sleep. No continuous billing, no context window overflow, no runaway loops. This is the pattern for production always-on agents.

When NOT to Use Always-On

Always-on adds complexity. Before building one, verify you actually need it:

Always-on makes sense when you need adaptive scheduling, dynamic task generation, or autonomous decision-making about what to work on next.


Lesson 7.7: MCP + Identity — Authenticated Agent Tools

The Problem

Every MCP server so far has been public and unauthenticated. But production agents need to access private data — Google Drive, Slack, GitHub, SaaS APIs. That means OAuth, tokens, and identity management.

The Pattern: External Auth via MCP

Agent → MCP Server → OAuth Provider → External API
+
+            Access Token (stored by MCP server)

The MCP server handles the OAuth flow. The agent just calls tools. The server manages token refresh, storage, and authentication headers.

Descope + Google Drive Example

From the agent-identity pattern, an MCP server that authenticates via Descope before accessing Google Drive:

python
from fastmcp import FastMCP
+import descope  # OAuth management
+
+mcp = FastMCP("google-drive-mcp")
+
+@mcp.tool()
+def search_drive(query: str):
+    """Search Google Drive. Handles OAuth internally."""
+    token = descope.get_token("google-drive")
+    headers = {"Authorization": f"Bearer {token}"}
+    resp = requests.get(
+        "https://www.googleapis.com/drive/v3/files",
+        params={"q": query},
+        headers=headers,
+    )
+    return resp.json()

The agent doesn't know about OAuth, tokens, or refresh flows. It just calls search_drive("budget 2026") and gets results.

Identity Layer Options

ApproachComplexityBest For
Descope (managed)LowTeams, multiple services, audit logs
OAuth2 ProxyMediumSelf-hosted, single service
API Key passthroughLowSimple integrations, personal use
MCP with auth headersMediumDirect API access, dev tools

MCP Auth Spec (Upcoming)

The MCP protocol is standardizing auth. Future MCP servers will include:

yaml
# .mcp.json with auth
+{
+  "mcpServers": {
+    "google-drive": {
+      "command": "uv",
+      "args": ["run", "google_drive_server.py"],
+      "env": {
+        "DESCOPE_MANAGEMENT_KEY": "${DESCOPE_KEY}"
+      }
+    }
+  }
+}

The key insight: the agent doesn't manage auth. The MCP server does. This keeps the agent simple and the auth secure.


Lab 7.7: Build an Autoresearch Loop

Objective: Agent runs experiment, measures result, logs it, decides keep/discard.

Starter: course/labs/L7-autoresearch/starter.py

Checkpoints:

  1. Run code, measure baseline metric
  2. Modify code (agent makes change)
  3. Re-measure, compare, log
  4. Discard if regression, keep if improvement
  5. Include integrity guard (code hashing)

Lab 7.8: Meta-Agent

Objective: Agent generates a new agent persona from documentation.

Starter: course/labs/L7-meta-agent/starter.py

+ \ No newline at end of file diff --git a/site/.vitepress/dist/modules/m8-capstone.html b/site/.vitepress/dist/modules/m8-capstone.html index ecf4494..a27e2a1 100644 --- a/site/.vitepress/dist/modules/m8-capstone.html +++ b/site/.vitepress/dist/modules/m8-capstone.html @@ -9,9 +9,9 @@ - + - + @@ -107,7 +107,7 @@ [ ] Cost analysis ($/task, optimization opportunities) [ ] Security audit (which L-level, what gaps remain) [ ] Retrospective (max 1 page)

Pass Criteria

CriterionMinimumTarget
System runs without manual intervention
All agents have domain-locked permissions
Each agent has mental model file
pass@k (k=3) on golden dataset>60%>80%
Cost analysis within 2x of optimal
Security audit identifies ≥2 improvements
Observability captures all tool calls
Architecture document submitted

Grading Rubric

AreaWeightPoor (0)Good (1)Excellent (2)
Architecture20%No diagram, unclear designDiagram present, mostly clearClear diagram, justified choices
Implementation25%Agents don't workAgents work on happy pathAgents handle errors gracefully
Security20%L1 onlyL3+ with damage-controlL4+ with verifier
Testing15%No evalpass@k computedpass@k + cost analysis + grind detection
Documentation10%MinimalArchitecture + setupArchitecture + setup + retrospective
Cost Optimization10%Single modelCascade routingCascade + verified savings
- + \ No newline at end of file diff --git a/site/.vitepress/dist/modules/non-technical.html b/site/.vitepress/dist/modules/non-technical.html index d3c7c33..72fb9ec 100644 --- a/site/.vitepress/dist/modules/non-technical.html +++ b/site/.vitepress/dist/modules/non-technical.html @@ -9,9 +9,9 @@ - + - + @@ -75,7 +75,7 @@ ├── <$50/month → Use cheapest model (Gemini Flash) ├── $50-500/month → Cascade routing (mix models) └── >$500/month → Multi-agent with verification - + \ No newline at end of file diff --git a/site/.vitepress/dist/modules/reference-stack.html b/site/.vitepress/dist/modules/reference-stack.html index 1d7707d..b91d952 100644 --- a/site/.vitepress/dist/modules/reference-stack.html +++ b/site/.vitepress/dist/modules/reference-stack.html @@ -9,9 +9,9 @@ - + - + @@ -90,7 +90,7 @@ # Heartbeat schedule claw schedule --cron "0 */6 * * *" --task "daily-report"

Cost Analysis

ToolBest ForEst. Cost/TaskAutonomy Level
Claude CodeComplex multi-step tasks$0.05-$0.30High (with hooks)
Pi AgentCustom workflows, safety-critical$0.02-$0.15Very high (extensible)
OpenCodeOSS-compatible, budget tasks$0.01-$0.05Medium
GeminiHigh-volume, simple tasks$0.002-$0.01Low
OpenClawScheduled, always-on tasks$0.01-$0.10Autonomous

Key Production Patterns

  1. Model heterogeneity: Different models for different roles. Claude for complex reasoning, Gemini for fast/cheap tasks, Qwen as specialist.

  2. Tool heterogeneity: Not one agent CLI, but five. Each has different strengths. The stack uses each where it excels.

  3. Defense in depth: psmux isolates sessions. dmux isolates files. damage-control restricts commands. mprocs restarts failed processes.

  4. Observability: agent-mux shows live status. mprocs logs output. Session history enables replay debugging.

  5. No single point of failure: If Claude Code fails, Pi or OpenCode can take over. The mprocs supervisor restarts crashed processes.

What This Stack Proves

This architecture demonstrates every concept taught in Modules 1-7:

ConceptWhere It Appears
Agent loopEvery tool follows think→act→observe→repeat
Tool designEach tool provides different tools (read, write, bash, search)
Securitydamage-control, psmux isolation, dmux isolation
Multi-agentteammate-mode, mprocs launching 5 agents
Productionmprocs supervision, cost tracking, worktree isolation
EconomicsCascade routing across 5 tools by task type
Advancedagent-mux as meta-agent controlling other agents
- + \ No newline at end of file diff --git a/site/.vitepress/dist/modules/software-factory.html b/site/.vitepress/dist/modules/software-factory.html index 0ab7585..cb3e54f 100644 --- a/site/.vitepress/dist/modules/software-factory.html +++ b/site/.vitepress/dist/modules/software-factory.html @@ -9,9 +9,9 @@ - + - + @@ -34,7 +34,7 @@ (all JWT authenticated)

Authentication Tiers

TierTrust ModelTokenUse Case
1. LocalSame machineShort-lived JWT (48h)Local dev
2. CLIShell accessLong-lived API keyRemote agents
3. Self-registerAutonomousInvite URL to JWTOpenClaw agents

Quick Start

bash
cd paperclip
 pnpm dev --bind lan
 curl -sS http://127.0.0.1:3100/api/health | jq

Status

Paperclip's auth plan documents all 3 tiers. Tier 1 is partially implemented — env vars are passed but PAPERCLIP_API_KEY (JWT) needs to be added to the env injection. This is the last code change needed to close the factory loop.

- + \ No newline at end of file diff --git a/site/.vitepress/dist/modules/tool-reference.html b/site/.vitepress/dist/modules/tool-reference.html index 917bb33..c6a32b1 100644 --- a/site/.vitepress/dist/modules/tool-reference.html +++ b/site/.vitepress/dist/modules/tool-reference.html @@ -9,9 +9,9 @@ - + - + @@ -96,7 +96,7 @@ ├── Budget constrained → OpenCode + Go models ├── Maximum control → Pi Agent + extensions └── Enterprise rollout → Claude Code + Agent Manager - + \ No newline at end of file diff --git a/site/.vitepress/dist/public/certificate/template.html b/site/.vitepress/dist/public/certificate/template.html index 460058a..196bfc3 100644 --- a/site/.vitepress/dist/public/certificate/template.html +++ b/site/.vitepress/dist/public/certificate/template.html @@ -9,9 +9,9 @@ - + - + @@ -29,7 +29,7 @@
Skip to content

Certificate of Completion

This certifies that

________________________

has completed the

FDSA Agentic Engineering Course

65 lessons · 13 labs · 56 quizzes · 20 skill kits

Awarded: ________________


This course covers: agent harnesses, multi-agent orchestration, production deployment, security (6-level ladder), model economics, autoresearch, and meta-agents. Framework-agnostic across Claude Code, Pi Agent, OpenCode, Hermes, and OpenClaw.

Verify at: https://fdsa.agency/verify

Last updated:

FDSA Agency — Agentic Engineering Course. Part of the fdsa.ai orchestration platform.

- + \ No newline at end of file diff --git a/site/.vitepress/dist/resources.html b/site/.vitepress/dist/resources.html index 10a6f2c..0f1b6be 100644 --- a/site/.vitepress/dist/resources.html +++ b/site/.vitepress/dist/resources.html @@ -9,9 +9,9 @@ - + - + @@ -33,7 +33,7 @@ # Mac/Linux bash install.sh - + \ No newline at end of file diff --git a/site/.vitepress/dist/skills.html b/site/.vitepress/dist/skills.html index 26b161b..0ce9a6b 100644 --- a/site/.vitepress/dist/skills.html +++ b/site/.vitepress/dist/skills.html @@ -9,9 +9,9 @@ - + - + @@ -41,7 +41,7 @@ │ ├── observability/ (4 skills) │ └── ceo-board/ (11 agents) └── .claude-plugin/marketplace.json - + \ No newline at end of file diff --git a/site/.vitepress/dist/troubleshooting.html b/site/.vitepress/dist/troubleshooting.html index 47af7ae..dd7628b 100644 --- a/site/.vitepress/dist/troubleshooting.html +++ b/site/.vitepress/dist/troubleshooting.html @@ -9,9 +9,9 @@ - + - + @@ -29,7 +29,7 @@
Skip to content

Troubleshooting & FAQ

Installation

Q: pip install anthropic fails with SSL error
A: Update pip: python -m pip install --upgrade pip. If on Windows behind a corporate proxy, set set HTTPS_PROXY=http://proxy:port.

Q: python not found on Windows
A: Install from python.org. Check "Add Python to PATH" during installation.

Q: ModuleNotFoundError: No module named 'yaml'
A: pip install pyyaml

Labs

Q: Lab returns "No input provided"
A: Check you're passing messages parameter, not prompt. The mock LLM expects: messages=[{"role": "user", "content": "your prompt"}]

Q: Agent loops forever
A: MAX_ITERATIONS is not set or is too high. Set it to 10-15 for labs.

Q: Tool call returns empty result
A: The mock LLM generates tool calls based on keyword detection. If your prompt doesn't contain trigger words (read, search, write), it won't generate tool calls.

Q: str_replace_editor not found
A: That's an Anthropic-specific tool type. The mock LLM only supports basic tool_use blocks. Use the standard tool format shown in the labs.

Skills

Q: Installed skills don't appear in /skills menu
A: Restart Claude Code after installation. Skills are loaded at startup.

Q: Skill says "not user-invocable"
A: Check the YAML frontmatter has user-invocable: true. Kit master files intentionally omit this (they're documentation, not invocable skills).

Q: $ARGUMENTS not being replaced
A: $ARGUMENTS is a placeholder. The agent (Claude Code / Pi) replaces it with your input when you invoke the skill via /command.

API Keys

Q: "This model is not available" from Anthropic
A: You might need to request access to Claude Sonnet 4 / Opus 4. Check docs.anthropic.com for available models for your tier.

Q: Mock LLM works but real API returns 401
A: Check ANTHROPIC_API_KEY is set correctly. Test with: python -c "import os; print(os.environ.get('ANTHROPIC_API_KEY', 'NOT SET')[:10])"

Q: OpenRouter returns 402 Payment Required
A: Your free credits may be exhausted. Add payment method or switch to a different provider.

General

Q: The course files use \u2192 characters that show as garbage
A: The course uses Unicode arrows (→) in diagrams. If your terminal doesn't support UTF-8, set $env:PYTHONIOENCODING='utf-8' on Windows or use a UTF-8 capable terminal (Windows Terminal, iTerm2, Ghostty).

Q: How do I cite this course?
A: Reference "Agentic Engineering Course" with the module and lesson number.

Q: Can I teach this course?
A: Course materials are provided for personal study. Contact for teaching license.

Last updated:

FDSA Agency — Agentic Engineering Course. Part of the fdsa.ai orchestration platform.

- + \ No newline at end of file diff --git a/site/.vitepress/dist/verify.html b/site/.vitepress/dist/verify.html index 536bb06..b8cd389 100644 --- a/site/.vitepress/dist/verify.html +++ b/site/.vitepress/dist/verify.html @@ -9,9 +9,9 @@ - + - + @@ -29,7 +29,7 @@
Skip to content

Verify Certificate

Enter the certificate ID to verify:

Certificate verification system coming soon. For now, contact artale@fdsa.agency to verify a certificate.


Back to home

Last updated:

FDSA Agency — Agentic Engineering Course. Part of the fdsa.ai orchestration platform.

- + \ No newline at end of file diff --git a/site/modules/m5-production.md b/site/modules/m5-production.md index f4d0728..b5393a3 100644 --- a/site/modules/m5-production.md +++ b/site/modules/m5-production.md @@ -408,6 +408,113 @@ budget_policies: --- +## Lesson 5.8b: Dry-Run Workflow for Agent Actions + +Before an agent executes a destructive action (write file, delete, deploy), you want a **preview mode** that shows what the agent WILL do without actually doing it. + +### The Dry-Run Pattern + +``` +Agent proposes action → Preview output → Human reviews → Approve/Reject → Execute +``` + +```python +class DryRunContext: + """Wrap tool execution in dry-run mode.""" + + def __init__(self, dry_run=True): + self.dry_run = dry_run + self.proposed_actions = [] + + def execute(self, tool_name, params): + if self.dry_run: + # Log what WOULD happen + self.proposed_actions.append({ + "tool": tool_name, + "params": params, + "preview": self._generate_preview(tool_name, params), + }) + return f"[DRY RUN] Would call {tool_name} with {params}" + else: + # Actually execute + return real_execute(tool_name, params) + + def _generate_preview(self, tool_name, params): + if tool_name == "write_file": + return f"Would write {len(params.get('content',''))} chars to {params.get('path')}" + elif tool_name == "exec_command": + return f"Would run: {params.get('command','')[:100]}..." + elif tool_name == "delete_file": + return f"Would DELETE: {params.get('path')}" + return f"Would call {tool_name}" +``` + +### Implementation Strategies + +| Strategy | How It Works | Best For | +|----------|-------------|----------| +| **Flag-based** | `--dry-run` flag on agent start | Development, testing | +| **Hook-based** | Pre-tool hook logs intent, skips execution | Production agents | +| **UI-based** | Agent shows preview, human clicks Confirm | Interactive sessions | +| **Two-pass** | Agent plans first (dry), then executes (wet) | Complex multi-step tasks | + +### Docker Dry-Run Example + +From the dry-run workflow pattern — a Docker-based calculator that logs operations without running them: + +```bash +# Build the dry-run sandbox +docker build -t dry-run-calc -f calculator/Dockerfile . + +# Run in preview mode +docker run --rm -e DRY_RUN=true dry-run-calc add 5 3 +# Output: [DRY RUN] Would add 5 + 3 = 8 + +# Run for real +docker run --rm -e DRY_RUN=false dry-run-calc add 5 3 +# Output: 8 +``` + +### When to Use Dry-Run + +- **Always** for file writes, deletes, and deploys +- **Sometimes** for commands that modify state (DB migrations, config changes) +- **Never** for read-only operations (search, read file, list directory) + +--- + +## Lesson 5.8c: Cross-Platform Agent Skills + +Skills should work on any agent — Claude Code, Pi Agent, OpenCode, or Codex. The cross-platform format uses YAML frontmatter and tool-agnostic instructions: + +```markdown +--- +name: init-agents-md +description: Create or refresh AGENTS.md for coding agents. + Works with Claude Code, Pi Agent, and Codex. +--- + +# Initialize AGENTS.md + +Create a short, repo-specific AGENTS.md. + +## Workflow + +1. Check if AGENTS.md already exists — if so, stop and ask +2. Explore the repository structure +3. Draft AGENTS.md with project purpose, stack, and conventions +4. Mirror same context into CLAUDE.md if needed +``` + +### Key Principles + +1. **Use `~~` or `---` frontmatter** — not agent-specific config +2. **Avoid CLI flags** — describe the desired outcome, not the command +3. **Include trigger patterns** — tell the agent when to invoke this skill +4. **One `SKILL.md` per skill** — no platform-specific variations + +--- + ## Lab 5.9: Set Up Agent Observability **Objective**: Trace every tool call + LLM completion to a local SQLite database. diff --git a/site/modules/m7-advanced.md b/site/modules/m7-advanced.md index 013ddf2..537faf7 100644 --- a/site/modules/m7-advanced.md +++ b/site/modules/m7-advanced.md @@ -277,6 +277,79 @@ Always-on makes sense when you need adaptive scheduling, dynamic task generation --- +## Lesson 7.7: MCP + Identity — Authenticated Agent Tools + +### The Problem + +Every MCP server so far has been public and unauthenticated. But production agents need to access private data — Google Drive, Slack, GitHub, SaaS APIs. That means OAuth, tokens, and identity management. + +### The Pattern: External Auth via MCP + +``` +Agent → MCP Server → OAuth Provider → External API + ↓ + Access Token (stored by MCP server) +``` + +The MCP server handles the OAuth flow. The agent just calls tools. The server manages token refresh, storage, and authentication headers. + +### Descope + Google Drive Example + +From the agent-identity pattern, an MCP server that authenticates via Descope before accessing Google Drive: + +```python +from fastmcp import FastMCP +import descope # OAuth management + +mcp = FastMCP("google-drive-mcp") + +@mcp.tool() +def search_drive(query: str): + """Search Google Drive. Handles OAuth internally.""" + token = descope.get_token("google-drive") + headers = {"Authorization": f"Bearer {token}"} + resp = requests.get( + "https://www.googleapis.com/drive/v3/files", + params={"q": query}, + headers=headers, + ) + return resp.json() +``` + +The agent doesn't know about OAuth, tokens, or refresh flows. It just calls `search_drive("budget 2026")` and gets results. + +### Identity Layer Options + +| Approach | Complexity | Best For | +|----------|-----------|----------| +| **Descope** (managed) | Low | Teams, multiple services, audit logs | +| **OAuth2 Proxy** | Medium | Self-hosted, single service | +| **API Key passthrough** | Low | Simple integrations, personal use | +| **MCP with auth headers** | Medium | Direct API access, dev tools | + +### MCP Auth Spec (Upcoming) + +The MCP protocol is standardizing auth. Future MCP servers will include: + +```yaml +# .mcp.json with auth +{ + "mcpServers": { + "google-drive": { + "command": "uv", + "args": ["run", "google_drive_server.py"], + "env": { + "DESCOPE_MANAGEMENT_KEY": "${DESCOPE_KEY}" + } + } + } +} +``` + +The key insight: the agent doesn't manage auth. The MCP server does. This keeps the agent simple and the auth secure. + +--- + ## Lab 7.7: Build an Autoresearch Loop **Objective**: Agent runs experiment, measures result, logs it, decides keep/discard.