Your First 30 Minutes with FCC¶
A timed, minute-by-minute walkthrough for brand-new users. By the end you will have installed FCC, run a simulation, read a trace, inspected a persona, and edited a YAML file.
No AI API keys required -- everything here runs in mock mode.
The 30-Minute Arc¶
flowchart LR
A["0–5 min<br/>Install"] --> B["5–10 min<br/>First simulation"]
B --> C["10–15 min<br/>Read the trace"]
C --> D["15–20 min<br/>Explore a persona"]
D --> E["20–30 min<br/>Edit a YAML"]
style A fill:#e3f2fd
style B fill:#e8f5e9
style C fill:#fff3e0
style D fill:#f3e5f5
style E fill:#fce4ec
Before You Start¶
- Python 3.10+
- Git
- A terminal (macOS/Linux shell, WSL, or PowerShell)
- About 30 minutes
- No API keys needed
0-5 min: Install (budget 5 minutes)¶
Clone, create a virtual environment, install:
git clone https://github.com/rollingthunderfourtytwo-afk/l2_fcc_agent_team_ext.git
cd l2_fcc_agent_team_ext
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -e .
Verify:
Expected output:
Troubleshooting - What if
pip installfails? The two most common causes are (a) Python older than 3.10 and (b) a missing C compiler on Linux. Runpython --versionto check version. On Debian/Ubuntu trysudo apt install build-essential python3-dev. Windows users should install the Microsoft C++ Build Tools.
5-10 min: Run your first simulation (budget 5 minutes)¶
Open a Python REPL:
Now run:
from fcc.personas.registry import PersonaRegistry
from fcc.scenarios.loader import ScenarioLoader
from fcc.simulation.engine import SimulationEngine
registry = PersonaRegistry.from_package_data()
scenarios = ScenarioLoader.from_package_data()
scenario = scenarios.get("basic_fcc_cycle")
engine = SimulationEngine(registry=registry, mode="mock")
trace = engine.run(scenario)
print(f"Duration: {trace.duration_ms} ms")
print(f"Steps: {len(trace.steps)}")
Expected output (values will vary):
That's it -- you ran an end-to-end FCC cycle in mock mode.
Troubleshooting - What if no AI provider is configured? Nothing breaks. Mock mode is always available and deterministic. AI providers (anthropic, openai, ollama, litellm) are only engaged when you set
mode="ai"and the relevant env var is set. See the AI provider matrix for details.
10-15 min: Read the trace (budget 5 minutes)¶
A trace records every step: which persona acted, which phase (FIND / CREATE / CRITIQUE), and a summary.
Expected output excerpt:
[FIND ] research_catalyst Surveyed the problem space and identified ...
[FIND ] evidence_gatherer Collected supporting data points ...
[CREATE ] solution_architect Drafted an initial solution outline ...
[CRITIQUE] critique_lead Reviewed draft against quality gates ...
Three things to notice:
- Each step is attributed to a persona -- you can always audit "who did what".
- The phase tells you where in the Find-Create-Critique cycle the step sits.
- The summary is short on purpose. Full content is available on each step
via
step.output.
15-20 min: Explore a persona (budget 5 minutes)¶
Each persona follows the 10-component R.I.S.C.E.A.R. specification.
persona = registry.get("research_catalyst")
print(f"Name: {persona.name}")
print(f"Category: {persona.category}")
print(f"Role: {persona.riscear.role}")
print(f"Style: {persona.riscear.style}")
print(f"Archetype:{persona.riscear.archetype}")
print()
print("Responsibilities:")
for r in persona.riscear.responsibilities:
print(f" - {r}")
Expected output excerpt:
Name: Research Catalyst
Category: open_science
Role: Surface high-leverage research questions ...
Style: Probing, generative, hypothesis-rich
Archetype: The Navigator
Try a different persona to compare:
20-30 min: Edit a YAML (budget 10 minutes)¶
FCC personas are plain YAML under src/fcc/data/personas/. You can author
your own in a separate directory and layer them on top.
Create my_personas/friendly_explainer.yaml:
id: friendly_explainer
name: Friendly Explainer
category: docs_as_code
riscear:
role: "Explain technical concepts in plain language"
input: "Any technical topic"
style: "Warm, patient, example-heavy"
constraints: "Avoid jargon; always include at least one analogy"
expected_output: "Plain-English explanation plus 1 analogy"
archetype: "The Teacher"
responsibilities:
- "Translate technical concepts for non-specialists"
- "Produce analogies and worked examples"
role_skills:
- "Technical writing"
- "Analogy generation"
role_collaborators: []
role_adoption_checklist:
- "Identify target audience reading level"
- "Gather source material"
Load it alongside the built-ins:
registry = PersonaRegistry.from_package_data()
registry.load_directory("my_personas/")
print(registry.get("friendly_explainer").name)
Expected output:
You can now reference this persona in custom scenarios, plug it into a workflow, or generate docs-as-code for it.
Troubleshooting - Validation errors when loading YAML? FCC validates every persona against the R.I.S.C.E.A.R. JSON schema. A missing required field (like
archetype) raises aValidationErrorwith the offending path. See common mistakes for the 15 most frequent errors.
What next?¶
You have just done the complete beginner loop. Recommended follow-ups:
- Common mistakes and their fixes -- FAQ-style debugging
- Glossary -- 30 essential terms
- Visual tour -- See the web frontend
- Notebook
01_fcc_fundamentals.ipynb-- Interactive version of this walkthrough - Notebook
03_persona_exploration.ipynb-- Deeper persona tour - 12-week curriculum if you want formal structure
Cheat sheet¶
| Goal | One-liner |
|---|---|
| Check version | fcc --version |
| Load all personas | PersonaRegistry.from_package_data() |
| Run mock simulation | SimulationEngine(registry, mode="mock").run(scenario) |
| List categories | registry.categories() |
| Validate docs | fcc validate-docs --input-dir ./generated-docs |
Welcome to FCC. The rest of the framework builds on exactly these primitives.