# Labs Overview

13 hands-on labs covering the full agentic engineering stack. Each lab has a `starter.py` (fill in the blanks) and `solution.py` (reference answer).

## Lab Index

| Lab | Module | Topic | Est. Time |
|-----|--------|-------|-----------|
| [L1: First Agent](/labs/l1-first-agent) | M1 | Single-tool agent from scratch | 60 min |
| [L2a: Multi-Tool Agent](/labs/l2-multi-tool) | M2 | File ops + web search | 75 min |
| [L2b: Context-Aware](/labs/l2-context) | M2 | Sliding window + summarization | 60 min |
| [L3a: Whitelist Hook](/labs/l3-whitelist-hook) | M3 | L4 security implementation | 60 min |
| [L3b: Verifier Agent](/labs/l3-verifier) | M3 | Read-only verification | 75 min |
| [L4a: Agent Chain](/labs/l4-agent-chain) | M4 | YAML pipeline | 60 min |
| [L4b: Multi-Team](/labs/l4-multi-team) | M4 | Team config + domain locking | 90 min |
| [L5a: Observability](/labs/l5-observability) | M5 | SQLite tool tracing | 60 min |
| [L5b: CI/CD](/labs/l5-cicd) | M5 | Golden dataset + regression gate | 60 min |
| [L6a: Eval Harness](/labs/l6-eval-harness) | M6 | pass@k evaluation | 60 min |
| [L6b: Cost Optimization](/labs/l6-cost-optimization) | M6 | Cascade routing | 45 min |
| [L7a: Autoresearch](/labs/l7-autoresearch) | M7 | Self-improving experiment loop | 75 min |
| [L7b: Meta-Agent](/labs/l7-meta-agent) | M7 | Agent that builds agents | 60 min |

## Running Labs

```bash
cd course/labs/L1-first-agent/

# Without API key (uses mock LLM automatically):
python starter.py test.txt "What is this file about?"

# With API key:
export ANTHROPIC_API_KEY="sk-ant-..."
python starter.py test.txt "What is this file about?"

# Check solution after attempting:
python solution.py test.txt "What is this file about?"
```

## Lab Structure

Each lab has:

- `starter.py` — Code skeleton with TODO markers
- `solution.py` — Complete reference implementation
- No additional files needed — all labs are self-contained

## 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.
