Contributing
This workshop belongs to the community. Fixes, translations, new attacks and new modules are all welcome.
Run the site locally
Section titled “Run the site locally”The site is built with Astro Starlight. You need Node.js 22 or newer.
npm installnpm run devOpen the address it prints. Pages update as you save.
Where things live
Section titled “Where things live”src/content/docs/ the pages of this site (Markdown and MDX) workshop/ the modules attendees follow organizers/ the organizer kit reference/ providers, troubleshooting, glossaryastro.config.mjs site settings and the sidebarsrc/styles/custom.css brand colorscode/ the Python workshop code agentlab/ shared helpers, tools and event data tests/ offline tests (no model needed)To add a page, create a Markdown file under src/content/docs/ and add it to the sidebar in astro.config.mjs.
Test the code
Section titled “Test the code”From the code folder:
pip install -e ".[dev]"pytest -qThe tests replace the model with scripted replies, so they’re fast and need no model. They run automatically on every pull request.
If you change a solution file, update the matching starter file and the module page too, so all three stay in step.
Writing style
Section titled “Writing style”- Write for someone with some Python experience and no AI background.
- Short sentences. Explain why, not only what.
- Keep it vendor neutral. Name a provider only next to its alternatives.
- Every new feature should come with a way to test it, and every new attack with an eval case.
Translations
Section titled “Translations”Starlight has built-in support for multiple languages. If you’d like to translate the workshop, open an issue first so we can set up the language folder and avoid duplicate work.
Adapting it for your event
Section titled “Adapting it for your event”You’re welcome to change the example data (the Lumen AI Summit lives in code/agentlab/data/) to match a local event or a topic your community cares about. If you change the data, update the eval cases in code/04-evaluate/dataset.jsonl to match.