agentic-ai-engineering/site/.vitepress/dist/blog/posts/security-ladder.html

54 lines
29 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en-US" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>The 6-Level Security Ladder | Agentic Engineering the Hard Way</title>
<meta name="description" content="Build every component from scratch. 65 lessons, 13 labs, 20 skill kits. No black boxes.">
<meta name="generator" content="VitePress v1.6.4">
<link rel="preload stylesheet" href="/assets/style.B5wEIFXZ.css" as="style">
<link rel="preload stylesheet" href="/vp-icons.css" as="style">
<script type="module" src="/assets/app.uHEZofur.js"></script>
<link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
<link rel="modulepreload" href="/assets/chunks/theme.CMNNqU7g.js">
<link rel="modulepreload" href="/assets/chunks/framework.BPKcPtvA.js">
<link rel="modulepreload" href="/assets/blog_posts_security-ladder.md.BVjSEWoa.lean.js">
<link rel="icon" href="/favicon.svg">
<meta name="theme-color" content="#0f0f0f">
<meta property="og:title" content="Agentic Engineering the Hard Way">
<meta property="og:description" content="65 lessons, 13 labs, 20 skill kits. Build production-grade AI agent systems from scratch. No black boxes.">
<meta property="og:image" content="/og-image.svg">
<meta name="twitter:card" content="summary_large_image">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
<link href="https://fonts.googleapis.com/css2?family=DM+Sans:opsz,wght@9..40,400;9..40,500;9..40,700;9..40,800&amp;family=DM+Mono:wght@400;500&amp;display=swap" rel="stylesheet">
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0,0" rel="stylesheet">
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
</head>
<body>
<div id="app"><div class="fdsa-app"><div class="Layout" data-v-d8b57b2d><!--[--><!--]--><!--[--><span tabindex="-1" data-v-fcbfc0e0></span><a href="#VPContent" class="VPSkipLink visually-hidden" data-v-fcbfc0e0>Skip to content</a><!--]--><!----><header class="VPNav" data-v-d8b57b2d data-v-7ad780c2><div class="VPNavBar" data-v-7ad780c2 data-v-9fd4d1dd><div class="wrapper" data-v-9fd4d1dd><div class="container" data-v-9fd4d1dd><div class="title" data-v-9fd4d1dd><div class="VPNavBarTitle" data-v-9fd4d1dd data-v-9f43907a><a class="title" href="/" data-v-9f43907a><!--[--><!--]--><!----><span data-v-9f43907a>FDSA</span><!--[--><!--]--></a></div></div><div class="content" data-v-9fd4d1dd><div class="content-body" data-v-9fd4d1dd><!--[--><!--]--><div class="VPNavBarSearch search" data-v-9fd4d1dd><!--[--><!----><div id="local-search"><button type="button" class="DocSearch DocSearch-Button" aria-label="Search"><span class="DocSearch-Button-Container"><span class="vp-icon DocSearch-Search-Icon"></span><span class="DocSearch-Button-Placeholder">Search</span></span><span class="DocSearch-Button-Keys"><kbd class="DocSearch-Button-Key"></kbd><kbd class="DocSearch-Button-Key">K</kbd></span></button></div><!--]--></div><nav aria-labelledby="main-nav-aria-label" class="VPNavBarMenu menu" data-v-9fd4d1dd data-v-afb2845e><span id="main-nav-aria-label" class="visually-hidden" data-v-afb2845e> Main Navigation </span><!--[--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/modules/m1-foundations" tabindex="0" data-v-afb2845e data-v-815115f5><!--[--><span data-v-815115f5>Course</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/labs/l1-first-agent" tabindex="0" data-v-afb2845e data-v-815115f5><!--[--><span data-v-815115f5>Labs</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink" href="/skills" tabindex="0" data-v-afb2845e data-v-815115f5><!--[--><span data-v-815115f5>Skills</span><!--]--></a><!--]--><!--[--><a class="VPLink link VPNavBarMenuLink active" href="/blog" tabindex="0" data-v-afb2845e data-v-815115f5><!--[--><span data-v-815115f5>Blog</span><!--]--></a><!--]--><!--[--><div class="VPFlyout VPNavBarMenuGroup" data-v-afb2845e data-v-bfe7971f><button type="button" class="button" aria-haspopup="true" aria-expanded="false" data-v-bfe7971f><span class="text" data-v-bfe7971f><!----><span data-v-bfe7971f>More</span><span class="vpi-chevron-down text-icon" data-v-bfe7971f></span></span></button><div class="menu" data-v-bfe7971f><div class="VPMenu" data-v-bfe7971f data-v-20ed86d6><div class="items" data-v-20ed86d6><!--[--><!--[--><div class="VPMenuLink" data-v-20ed86d6 data-v-7eeeb2dc><a class="VPLink link" href="/modules/curriculum" data-v-7eeeb2dc><!--[--><span data-v-7eeeb2dc>Curriculum</span><!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-20ed86d6 data-v-7eeeb2dc><a class="VPLink link" href="/modules/debate" data-v-7eeeb2dc><!--[--><span data-v-7eeeb2dc>Debate</span><!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-20ed86d6 data-v-7eeeb2dc><a class="VPLink link" href="/troubleshooting" data-v-7eeeb2dc><!--[--><span data-v-7eeeb2dc>FAQ</span><!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-20ed86d6 data-v-7eeeb2dc><a class="VPLink link" href="/certificate" data-v-7eeeb2dc><!--[--><span data-v-7eeeb2dc>Certificate</span><!--]--></a></div><!--]--><!--[--><div class="VPMenuLink" data-v-20ed86d6 data-v-7eeeb2dc><a class="VPLink link" href="/buy" data-v-7eeeb2dc><!--[--><span data-v-7eeeb2dc>Buy</span><!--]--></a></div><!--]--><!--]--></div><!--[--><!--]--></div></div></div><!--]--><!--]--></nav><!----><div class="VPNavBarAppearance appearance" data-v-9fd4d1dd data-v-3f90c1a5><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-3f90c1a5 data-v-be9742d9 data-v-b4ccac88><span class="check" data-v-b4ccac88><span class="icon" data-v-b4ccac88><!--[--><span class="vpi-sun sun" data-v-be9742d9></span><span class="vpi-moon moon" data-v-be9742d9></span><!--]--></span></span></button></div><div class="VPSocialLinks VPNavBarSocialLinks social-links" data-v-9fd4d1dd data-v-ef6192dc data-v-e71e869c><!--[--><a class="VPSocialLink no-icon" href="http://185.239.209.216:3001/artale/agentic-engineering-course" aria-label="github" target="_blank" rel="noopener" data-v-e71e869c data-v-60a9a2d3><span class="vpi-social-github"></span></a><!--]--></div><div class="VPFlyout VPNavBarExtra extra" data-v-9fd4d1dd data-v-f953d92f data-v-bfe7971f><button type="button" class="button" aria-haspopup="true" aria-expanded="false" aria-label="extra navigation" data-v-bfe7971f><span class="vpi-more-horizontal icon" data-v-bfe7971f></span></button><div class="menu" data-v-bfe7971f><div class="VPMenu" data-v-bfe7971f data-v-20ed86d6><!----><!--[--><!--[--><!----><div class="group" data-v-f953d92f><div class="item appearance" data-v-f953d92f><p class="label" data-v-f953d92f>Appearance</p><div class="appearance-action" data-v-f953d92f><button class="VPSwitch VPSwitchAppearance" type="button" role="switch" title aria-checked="false" data-v-f953d92f data-v-be9742d9 data-v-b4ccac88><span class="check" data-v-b4ccac88><span class="icon" data-v-b4ccac88><!--[--><span class="vpi-sun sun" data-v-be9742d9></span><span class="vpi-moon moon" data-v-be9742d9></span><!--]--></span></span></button></div></div></div><div class="group" data-v-f953d92f><div class="item social-links" data-v-f953d92f><div class="VPSocialLinks social-links-list" data-v-f953d92f data-v-e71e869c><!--[--><a class="VPSocialLink no-icon" href="http://185.239.209.216:3001/artale/agentic-engineering-course" aria-label="github" target="_blank" rel="noopener" data-v-e71e869c data-v-60a9a2d3><span class="vpi-social-github"></span></a><!--]--></div></div></div><!--]--><!--]--></div></div></div><!--[--><!--]--><button type="button" class="VPNavBarHamburger hamburger" aria-label="mobile navigation" aria-expanded="false" aria-controls="VPNavScreen" data-v-9fd4d1dd data-v-6bee1efd><span class="container" data-v-6bee1efd><span class="top" data-v-6bee1efd></span><span class="middle" data-v-6bee1efd></span><span class="bottom" data-v-6bee1efd></span></span></button></div></div></div></div><div class="divider" data-v-9fd4d1dd><div class="divider-line" data-v-9fd4d1dd></div></div></div><!----></header><div class="VPLocalNav empty fixed" data-v-d8b57b2d data-v-2488c25a><div class="container" data-v-2488c25a><!----><div class="VPLocalNavOutlineDropdown" style="--vp-vh:0px;" data-v-2488c25a data-v-6b867909><button data-v-6b867909>Return to top</button><!----></div></div></div><!----><div class="VPContent" id="VPContent" data-v-d8b57b2d data-v-9a6c75ad><div class="VPDoc has-aside" data-v-9a6c75ad data-v-e6f2a212><!--[--><!--]--><div class="container" data-v-e6f2a212><div class="aside" data-v-e6f2a212><div class="aside-curtain" data-v-e6f2a212></div><div class="aside-container" data-v-e6f2a212><div class="aside-content" data-v-e6f2a212><div class="VPDocAside" data-v-e6f2a212 data-v-cb998dce><!--[--><!--]--><!--[--><!--]--><nav aria-labelledby="doc-outline-aria-label" class="VPDocAsideOutline" data-v-cb998dce data-v-f610f197><div class="content" data-v-f610f197><div class="outline-marker" data-v-f610f197></div><div aria-level="2" class="outline-title" id="doc-outline-aria-label" role="heading" data-v-f610f197>On this page</div><ul class="VPDocOutlineItem root" data-v-f610f197 data-v-53c99d69><!--[--><!--]--></ul></div></nav><!--[--><!--]--><div class="spacer" data-v-cb998dce></div><!--[--><!--]--><!----><!--[--><!--]--><!--[--><!--]--></div></div></div></div><div class="content" data-v-e6f2a212><div class="content-container" data-v-e6f2a212><!--[--><!--]--><main class="main" data-v-e6f2a212><div style="position:relative;" class="vp-doc _blog_posts_security-ladder" data-v-e6f2a212><div><h1 id="the-6-level-security-ladder" tabindex="-1">The 6-Level Security Ladder <a class="header-anchor" href="#the-6-level-security-ladder" aria-label="Permalink to &quot;The 6-Level Security Ladder&quot;"></a></h1><p><strong>June 6, 2026</strong></p><p>Every AI agent has access to bash. One tool — every dangerous verb: <code>rm -rf</code>, <code>curl</code>, <code>git clean -fdx</code>, <code>terraform destroy</code>, <code>DROP DATABASE</code>.</p><p>The math is brutal. At a 1% per-turn failure rate, there&#39;s a <strong>63.4% chance of catastrophe over 100 turns</strong>. This isn&#39;t theoretical — it&#39;s the actual threat model for every agent in production.</p><p>Most engineers stop at Level 2 (system prompt rules) and think they&#39;re safe. They&#39;re not. Here&#39;s the full 6-level ladder that actually works.</p><h2 id="level-0-acip-prompt-injection-defense" tabindex="-1">Level 0: ACIP (Prompt Injection Defense) <a class="header-anchor" href="#level-0-acip-prompt-injection-defense" aria-label="Permalink to &quot;Level 0: ACIP (Prompt Injection Defense)&quot;"></a></h2><p>Before bash security, there&#39;s prompt injection. An attacker can trick the agent into ignoring its instructions through:</p><ul><li>Direct injection (&quot;ignore previous instructions&quot;)</li><li>Indirect injection (malicious content in web pages the agent reads)</li><li>Role-playing bypasses (&quot;you are now a free AI&quot;)</li></ul><p>ACIP (Advanced Cognitive Inoculation Prompt) is a system prompt patch that makes agents resistant. It costs nothing (zero runtime overhead) and blocks simple attacks. <a href="https://github.com/Dicklesworthstone/acip" target="_blank" rel="noreferrer">Jeff Emanuel&#39;s ACIP</a> is the reference implementation.</p><h2 id="level-1-2-theatre-skills-system-prompts" tabindex="-1">Level 1-2: Theatre (Skills + System Prompts) <a class="header-anchor" href="#level-1-2-theatre-skills-system-prompts" aria-label="Permalink to &quot;Level 1-2: Theatre (Skills + System Prompts)&quot;"></a></h2><p>These levels ask the model to behave. They work most of the time on frontier models. But &quot;most of the time&quot; is not a production guarantee. A 99% refusal rate means a 63% failure rate over 100 turns. Use them as accelerators, not enforcement.</p><h2 id="level-3-blacklist-hook" tabindex="-1">Level 3: Blacklist Hook <a class="header-anchor" href="#level-3-blacklist-hook" aria-label="Permalink to &quot;Level 3: Blacklist Hook&quot;"></a></h2><p>A regex blacklist intercepts dangerous commands before execution. It catches <code>rm -rf /</code> directly. But here&#39;s the marquee break: the agent writes a Python script:</p><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>User prompt: &quot;Clean up the target directory&quot;</span></span>
<span class="line"><span>Agent writes cleanup.py with os.remove() and shutil.rmtree()</span></span>
<span class="line"><span>Agent runs: python cleanup.py</span></span>
<span class="line"><span>Hook sees: &quot;python cleanup.py&quot; (not in blacklist)</span></span>
<span class="line"><span>Result: target/ is destroyed. Blacklist never fired.</span></span></code></pre></div><p>Level 3 is where most engineers stop. It&#39;s not enough.</p><h2 id="level-4-whitelist-hook" tabindex="-1">Level 4: Whitelist Hook <a class="header-anchor" href="#level-4-whitelist-hook" aria-label="Permalink to &quot;Level 4: Whitelist Hook&quot;"></a></h2><p>Invert the approach. Only N safelisted commands are allowed:</p><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>^npm test$</span></span>
<span class="line"><span>^git status$</span></span>
<span class="line"><span>^uv run pytest</span></span>
<span class="line"><span>^cat [\w/\.-]+$</span></span>
<span class="line"><span>^pwd$</span></span></code></pre></div><p>Everything else is blocked. The agent can&#39;t run <code>python cleanup.py</code> because <code>python</code> isn&#39;t on the list. The L3 marquee break is prevented.</p><h2 id="level-5-no-bash" tabindex="-1">Level 5: No Bash <a class="header-anchor" href="#level-5-no-bash" aria-label="Permalink to &quot;Level 5: No Bash&quot;"></a></h2><p>Bash doesn&#39;t exist. The agent has only purpose-built tools: Read, Write, Edit, Grep, Glob, and a capped-output test runner. No shell, no subprocess, no danger.</p><p>This is the production target. At L5, the agent cannot:</p><ul><li>Delete files (no <code>rm</code>, no <code>os.remove()</code>)</li><li>Install packages (no <code>npm install</code>, no <code>pip install</code>)</li><li>Access the network (no <code>curl</code>, no <code>wget</code>)</li><li>Run arbitrary code (no <code>python</code>, no <code>node</code>)</li><li>Modify system config (no <code>chmod</code>, no <code>apt</code>)</li></ul><p><strong>What the agent CAN do</strong>: Read files, write to specific paths, search for patterns, and run tests in a sandbox. That&#39;s enough for most coding tasks and eliminates the entire attack surface.</p><h2 id="which-level-do-you-need" tabindex="-1">Which Level Do You Need? <a class="header-anchor" href="#which-level-do-you-need" aria-label="Permalink to &quot;Which Level Do You Need?&quot;"></a></h2><table tabindex="0"><thead><tr><th>Scenario</th><th>Minimum Level</th><th>Recommended</th></tr></thead><tbody><tr><td>Personal assistant, local dev</td><td>L3</td><td>L3</td></tr><tr><td>CI/CD pipeline agent</td><td>L3</td><td>L4</td></tr><tr><td>Production deployment agent</td><td>L4</td><td>L5</td></tr><tr><td>Customer-facing agent</td><td>L4</td><td>L5</td></tr><tr><td>Database-admin agent</td><td>L4</td><td>L5 (no bash)</td></tr><tr><td>Research agent (runs arbitrary code)</td><td>L3</td><td>L3 + sandbox</td></tr></tbody></table><p>The rule: if the agent can cause more than $100 of damage in one session, it needs L4 or higher. If it can cause irreversible damage (data loss, security breach), it needs L5.</p><h2 id="defense-in-depth-—-why-you-need-all-six-levels" tabindex="-1">Defense in Depth — Why You Need ALL Six Levels <a class="header-anchor" href="#defense-in-depth-—-why-you-need-all-six-levels" aria-label="Permalink to &quot;Defense in Depth — Why You Need ALL Six Levels&quot;"></a></h2><p>Each level catches failures from the level above it:</p><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>Attack → L0 (ACIP rejects injection) → PASSES → L1 (system prompt) → PASSES</span></span>
<span class="line"><span> → L2 (skill says &quot;be careful&quot;) → PASSES → L3 (blacklist) → PASSES</span></span>
<span class="line"><span> → L4 (whitelist blocks python) → BLOCKED</span></span>
<span class="line"><span></span></span>
<span class="line"><span>Without L4: python cleanup.py runs and destroys the directory</span></span>
<span class="line"><span>Without L3: rm -rf / runs and destroys the server</span></span>
<span class="line"><span>Without L0: prompt injection bypasses everything below</span></span></code></pre></div><p>A single level is not security. The full ladder is security. Each layer independently catches what the layers above missed.</p><p>This is production-grade. Use it for any agent with access to credentials, customer data, or production infrastructure.</p><h2 id="the-full-stack" tabindex="-1">The Full Stack <a class="header-anchor" href="#the-full-stack" aria-label="Permalink to &quot;The Full Stack&quot;"></a></h2><p>In production, stack all six:</p><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>L0: ACIP (prompt defense)</span></span>
<span class="line"><span>L1: System prompt rules</span></span>
<span class="line"><span>L2: Safe-mode skill</span></span>
<span class="line"><span>L3: Blacklist hook</span></span>
<span class="line"><span>L4: Whitelist hook</span></span>
<span class="line"><span>L5: No bash, custom tools only</span></span></code></pre></div><p>Each layer catches what the previous one missed. The agent must bypass ALL six to cause damage — not just one.</p><hr><p><em>This is an excerpt from Module 3 of the <a href="/">Agentic Engineering Course</a>. The full module includes runnable lab code for implementing every level.</em></p></div></div></main><footer class="VPDocFooter" data-v-e6f2a212 data-v-1bcd8184><!--[--><!--]--><div class="edit-info" data-v-1bcd8184><!----><div class="last-updated" data-v-1bcd8184><p class="VPLastUpdated" data-v-1bcd8184 data-v-1bb0c8a8>Last updated: <time datetime="2026-06-03T12:07:52.000Z" data-v-1bb0c8a8></time></p></div></div><!----></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><footer class="VPFooter" data-v-d8b57b2d data-v-566314d4><div class="container" data-v-566314d4><p class="message" data-v-566314d4>FDSA Agency — Agentic Engineering Course. Part of the fdsa.ai orchestration platform.</p><p class="copyright" data-v-566314d4>Copyright 2026</p></div></footer><!--[--><!--]--></div></div></div>
<script>window.__VP_HASH_MAP__=JSON.parse("{\"404.md\":\"BiCvjdaY\",\"api-keys.md\":\"D2Kyj8T3\",\"blog_index.md\":\"BQLtHCMm\",\"blog_posts_agent-loops-complete-guide.md\":\"DrdeWzm3\",\"blog_posts_cascade-routing.md\":\"CqNc_hQm\",\"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\":\"BVjSEWoa\",\"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\":\"CQM9GgQF\",\"modules_m3-safety.md\":\"DPrpDssO\",\"modules_m4-orchestration.md\":\"DFLcAKBv\",\"modules_m5-production.md\":\"D_QeGRCO\",\"modules_m6-economics.md\":\"CY8iFztQ\",\"modules_m7-advanced.md\":\"BH2d_mFp\",\"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\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Agentic Engineering the Hard Way\",\"description\":\"Build every component from scratch. 65 lessons, 13 labs, 20 skill kits. No black boxes.\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"logo\":false,\"siteTitle\":\"FDSA\",\"nav\":[{\"text\":\"Course\",\"link\":\"/modules/m1-foundations\",\"activeMatch\":\"/modules/\"},{\"text\":\"Labs\",\"link\":\"/labs/l1-first-agent\",\"activeMatch\":\"/labs/\"},{\"text\":\"Skills\",\"link\":\"/skills\"},{\"text\":\"Blog\",\"link\":\"/blog\",\"activeMatch\":\"/blog/\"},{\"text\":\"More\",\"items\":[{\"text\":\"Curriculum\",\"link\":\"/modules/curriculum\"},{\"text\":\"Debate\",\"link\":\"/modules/debate\"},{\"text\":\"FAQ\",\"link\":\"/troubleshooting\"},{\"text\":\"Certificate\",\"link\":\"/certificate\"},{\"text\":\"Buy\",\"link\":\"/buy\"}]}],\"sidebar\":{\"/modules/\":[{\"text\":\"Module 1: Foundations\",\"link\":\"/modules/m1-foundations\",\"collapsed\":true,\"items\":[{\"text\":\"1.1 What Makes an Agent?\",\"link\":\"/modules/m1-foundations#lesson-11-what-makes-an-agent\"},{\"text\":\"1.2 Harness vs The Model\",\"link\":\"/modules/m1-foundations#lesson-12-the-harness-vs-the-model\"},{\"text\":\"1.3 Decision Framework\",\"link\":\"/modules/m1-foundations#lesson-13-decision-framework\"},{\"text\":\"1.4 Repository IS the Spec\",\"link\":\"/modules/m1-foundations#lesson-13a-the-repository-is-the-spec\"},{\"text\":\"1.5 The Agent Loop\",\"link\":\"/modules/m1-foundations#lesson-14-the-agent-loop\"},{\"text\":\"1.6 Tool Calling\",\"link\":\"/modules/m1-foundations#lesson-15-tool-calling-deep-dive\"},{\"text\":\"1.7 Vibe Coding vs Engineering\",\"link\":\"/modules/m1-foundations#lesson-16-vibe-coding-vs-agentic-engineering\"},{\"text\":\"1.8 Do You Trust Your Agents?\",\"link\":\"/modules/m1-foundations#lesson-17-do-you-trust-your-agents\"},{\"text\":\"Lab 1.9: First Agent\",\"link\":\"/labs/l1-first-agent\"}]},{\"text\":\"Module 2: Architecture\",\"link\":\"/modules/m2-architecture\",\"collapsed\":true,\"items\":[{\"text\":\"2.1-2.3 Core Architecture\",\"link\":\"/modules/m2-architecture#lesson-21-the-four-pillars\"},{\"text\":\"2.4-2.6 Skills & Workspace\",\"link\":\"/modules/m2-architecture#lesson-23b-skills-system-deep-dive\"},{\"text\":\"2.7-2.9 Advanced Patterns\",\"link\":\"/modules/m2-architecture#lesson-24-context-window-management\"},{\"text\":\"Labs 2.10-2.11\",\"link\":\"/labs/l2-multi-tool\"}]},{\"text\":\"Module 3: Safety & Security\",\"link\":\"/modules/m3-safety\",\"collapsed\":true,\"items\":[{\"text\":\"3.1-3.2 Bash & Ladder\",\"link\":\"/modules/m3-safety#lesson-31-why-bash-is-the-single-point-of-failure\"},{\"text\":\"3.3-3.5 Hooks & Control\",\"link\":\"/modules/m3-safety#lesson-33-the-l3-marque-break\"},{\"text\":\"3.6-3.7 Verifier & Stacking\",\"link\":\"/modules/m3-safety#lesson-36-the-verifier-pattern\"},{\"text\":\"Labs 3.8-3.9\",\"link\":\"/labs/l3-whitelist-hook\"}]},{\"text\":\"Module 4: Orchestration\",\"link\":\"/modules/m4-orchestration\",\"collapsed\":true,\"items\":[{\"text\":\"4.1-4.4 Patterns\",\"link\":\"/modules/m4-orchestration#lesson-41-why-one-agent-is-not-enough\"},{\"text\":\"4.5-4.9 Teams & Comms\",\"link\":\"/modules/m4-orchestration#lesson-43-depth-2-delegation\"},{\"text\":\"4.10-4.11 Case Studies\",\"link\":\"/modules/m4-orchestration#lesson-410-the-ceo-board-system\"},{\"text\":\"Labs 4.12-4.13\",\"link\":\"/labs/l4-agent-chain\"}]},{\"text\":\"Module 5: Production\",\"link\":\"/modules/m5-production\",\"collapsed\":true,\"items\":[{\"text\":\"5.1-5.4 CI/CD & Stack\",\"link\":\"/modules/m5-production#lesson-51-what-production-means-for-agents\"},{\"text\":\"5.5-5.8 Deploy & Monitor\",\"link\":\"/modules/m5-production#lesson-53-shadow-deployments\"},{\"text\":\"Labs 5.9-5.10\",\"link\":\"/labs/l5-observability\"}]},{\"text\":\"Module 6: Economics\",\"link\":\"/modules/m6-economics\",\"collapsed\":true,\"items\":[{\"text\":\"6.0-6.2 Pricing\",\"link\":\"/modules/m6-economics#lesson-60-the-compute-advantage-equation\"},{\"text\":\"6.3-6.5 Eval Metrics\",\"link\":\"/modules/m6-economics#lesson-63-cost-per-session-math\"},{\"text\":\"6.6-6.7 Testing\",\"link\":\"/modules/m6-economics#lesson-66-ab-testing-agents\"},{\"text\":\"Labs 6.8-6.9\",\"link\":\"/labs/l6-eval-harness\"}]},{\"text\":\"Module 7: Advanced\",\"link\":\"/modules/m7-advanced\",\"collapsed\":true,\"items\":[{\"text\":\"7.1-7.3 Autoresearch\",\"link\":\"/modules/m7-advanced#lesson-71-autoresearch\"},{\"text\":\"7.4-7.6 Meta & Beyond\",\"link\":\"/modules/m7-advanced#lesson-73-meta-agents\"},{\"text\":\"Labs 7.7-7.8\",\"link\":\"/labs/l7-autoresearch\"}]},{\"text\":\"Module 8: Capstone\",\"link\":\"/modules/m8-capstone\",\"collapsed\":true,\"items\":[{\"text\":\"Project Options\",\"link\":\"/modules/m8-capstone#project-options\"},{\"text\":\"Phases\",\"link\":\"/modules/m8-capstone#capstone-phases\"},{\"text\":\"Rubric\",\"link\":\"/modules/m8-capstone#grading-rubric\"}]}],\"/labs/\":[{\"text\":\"All Labs\",\"link\":\"/labs/l1-first-agent\"},{\"text\":\"L1: First Agent\",\"link\":\"/labs/l1-first-agent\"},{\"text\":\"L2a: Multi-Tool Agent\",\"link\":\"/labs/l2-multi-tool\"},{\"text\":\"L2b: Context-Aware Agent\",\"link\":\"/labs/l2-context\"},{\"text\":\"L3a: Whitelist Hook\",\"link\":\"/labs/l3-whitelist-hook\"},{\"text\":\"L3b: Verifier Agent\",\"link\":\"/labs/l3-verifier\"},{\"text\":\"L4a: Agent Chain\",\"link\":\"/labs/l4-agent-chain\"},{\"text\":\"L4b: Multi-Team Config\",\"link\":\"/labs/l4-multi-team\"},{\"text\":\"L5a: Observability\",\"link\":\"/labs/l5-observability\"},{\"text\":\"L5b: CI/CD Pipeline\",\"link\":\"/labs/l5-cicd\"},{\"text\":\"L6a: Eval Harness\",\"link\":\"/labs/l6-eval-harness\"},{\"text\":\"L6b: Cost Optimization\",\"link\":\"/labs/l6-cost-optimization\"},{\"text\":\"L7a: Autoresearch\",\"link\":\"/labs/l7-autoresearch\"},{\"text\":\"L7b: Meta-Agent\",\"link\":\"/labs/l7-meta-agent\"}]},\"socialLinks\":[{\"icon\":\"github\",\"link\":\"http://185.239.209.216:3001/artale/agentic-engineering-course\"}],\"footer\":{\"message\":\"FDSA Agency — Agentic Engineering Course. Part of the fdsa.ai orchestration platform.\",\"copyright\":\"Copyright 2026\"},\"search\":{\"provider\":\"local\"},\"locales\":{\"root\":{\"label\":\"English\",\"lang\":\"en-US\",\"title\":\"Agentic Engineering the Hard Way\",\"description\":\"Build every component from scratch. 65 lessons, 13 labs, 20 skill kits. No black boxes, no magic SDKs.\"},\"es\":{\"label\":\"Español\",\"lang\":\"es-ES\",\"title\":\"Agentic Engineering the Hard Way\",\"description\":\"Construye cada componente desde cero. 65 lecciones, 13 laboratorios, 20 kits de habilidades.\",\"link\":\"/es/\"},\"pt\":{\"label\":\"Português\",\"lang\":\"pt-BR\",\"title\":\"Agentic Engineering the Hard Way\",\"description\":\"Construa cada componente do zero. 65 lições, 13 laboratórios, 20 kits de habilidades.\",\"link\":\"/pt/\"},\"it\":{\"label\":\"Italiano\",\"lang\":\"it-IT\",\"title\":\"Agentic Engineering the Hard Way\",\"description\":\"Costruisci ogni componente da zero. 65 lezioni, 13 laboratori, 20 kit di abilità.\",\"link\":\"/it/\"},\"ar\":{\"label\":\"العربية\",\"lang\":\"ar-SA\",\"title\":\"هندسة الوكلاء بالطريقة الصعبة\",\"description\":\"بناء كل مكون من الصفر. 65 درسًا، 13 مختبرًا، 20 مجموعة مهارات.\",\"link\":\"/ar/\",\"dir\":\"rtl\"}}},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":true}");</script>
</body>
</html>