import{c as a,Q as i,j as s,m as e}from"./chunks/framework.BPKcPtvA.js";const k=JSON.parse('{"title":"Labs Overview","description":"","frontmatter":{},"headers":[],"relativePath":"labs/index.md","filePath":"labs/index.md","lastUpdated":1780488472000}'),n={name:"labs/index.md"};function l(d,t,r,h,o,p){return i(),s("div",null,[...t[0]||(t[0]=[e(`<h1 id="labs-overview" tabindex="-1">Labs Overview <a class="header-anchor" href="#labs-overview" aria-label="Permalink to &quot;Labs Overview&quot;">​</a></h1><p>13 hands-on labs covering the full agentic engineering stack. Each lab has a <code>starter.py</code> (fill in the blanks) and <code>solution.py</code> (reference answer).</p><h2 id="lab-index" tabindex="-1">Lab Index <a class="header-anchor" href="#lab-index" aria-label="Permalink to &quot;Lab Index&quot;">​</a></h2><table tabindex="0"><thead><tr><th>Lab</th><th>Module</th><th>Topic</th><th>Est. Time</th></tr></thead><tbody><tr><td><a href="/labs/l1-first-agent">L1: First Agent</a></td><td>M1</td><td>Single-tool agent from scratch</td><td>60 min</td></tr><tr><td><a href="/labs/l2-multi-tool">L2a: Multi-Tool Agent</a></td><td>M2</td><td>File ops + web search</td><td>75 min</td></tr><tr><td><a href="/labs/l2-context">L2b: Context-Aware</a></td><td>M2</td><td>Sliding window + summarization</td><td>60 min</td></tr><tr><td><a href="/labs/l3-whitelist-hook">L3a: Whitelist Hook</a></td><td>M3</td><td>L4 security implementation</td><td>60 min</td></tr><tr><td><a href="/labs/l3-verifier">L3b: Verifier Agent</a></td><td>M3</td><td>Read-only verification</td><td>75 min</td></tr><tr><td><a href="/labs/l4-agent-chain">L4a: Agent Chain</a></td><td>M4</td><td>YAML pipeline</td><td>60 min</td></tr><tr><td><a href="/labs/l4-multi-team">L4b: Multi-Team</a></td><td>M4</td><td>Team config + domain locking</td><td>90 min</td></tr><tr><td><a href="/labs/l5-observability">L5a: Observability</a></td><td>M5</td><td>SQLite tool tracing</td><td>60 min</td></tr><tr><td><a href="/labs/l5-cicd">L5b: CI/CD</a></td><td>M5</td><td>Golden dataset + regression gate</td><td>60 min</td></tr><tr><td><a href="/labs/l6-eval-harness">L6a: Eval Harness</a></td><td>M6</td><td>pass@k evaluation</td><td>60 min</td></tr><tr><td><a href="/labs/l6-cost-optimization">L6b: Cost Optimization</a></td><td>M6</td><td>Cascade routing</td><td>45 min</td></tr><tr><td><a href="/labs/l7-autoresearch">L7a: Autoresearch</a></td><td>M7</td><td>Self-improving experiment loop</td><td>75 min</td></tr><tr><td><a href="/labs/l7-meta-agent">L7b: Meta-Agent</a></td><td>M7</td><td>Agent that builds agents</td><td>60 min</td></tr></tbody></table><h2 id="running-labs" tabindex="-1">Running Labs <a class="header-anchor" href="#running-labs" aria-label="Permalink to &quot;Running Labs&quot;">​</a></h2><div class="language-bash vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">cd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> course/labs/L1-first-agent/</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># Without API key (uses mock LLM automatically):</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">python</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> starter.py</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> test.txt</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;What is this file about?&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># With API key:</span></span>
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">export</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> ANTHROPIC_API_KEY</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">=</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;sk-ant-...&quot;</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">python</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> starter.py</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> test.txt</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;What is this file about?&quot;</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># Check solution after attempting:</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">python</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> solution.py</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> test.txt</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;What is this file about?&quot;</span></span></code></pre></div><h2 id="lab-structure" tabindex="-1">Lab Structure <a class="header-anchor" href="#lab-structure" aria-label="Permalink to &quot;Lab Structure&quot;">​</a></h2><p>Each lab has:</p><ul><li><code>starter.py</code> — Code skeleton with TODO markers</li><li><code>solution.py</code> — Complete reference implementation</li><li>No additional files needed — all labs are self-contained</li></ul><h2 id="offline-mode" tabindex="-1">Offline Mode <a class="header-anchor" href="#offline-mode" aria-label="Permalink to &quot;Offline Mode&quot;">​</a></h2><p>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.</p>`,11)])])}const b=a(n,[["render",l]]);export{k as __pageData,b as default};
