Copy disabled (too large)
Download .txt
Showing preview only (12,622K chars total). Download the full file to get everything.
Repository: hellovai/ai-that-works
Branch: main
Commit: 60c75a554a48
Files: 1856
Total size: 33.8 MB
Directory structure:
gitextract_w16aztnp/
├── .claude/
│ └── commands/
│ ├── complete_episode.md
│ ├── email_prep.md
│ ├── episode_prep.md
│ ├── find_clips.md
│ ├── socials.md
│ └── suggest_titles.md
├── .envrc
├── .gitignore
├── .vscode/
│ └── settings.json
├── 2025-03-31-large-scale-classification/
│ ├── .vscode/
│ │ └── settings.json
│ ├── README.md
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── generators.baml
│ │ ├── pick_best_category.baml
│ │ └── resume.baml
│ ├── hello.py
│ ├── meta.md
│ ├── pyproject.toml
│ └── tools.json
├── 2025-04-07-reasoning-models-vs-prompts/
│ ├── .gitignore
│ ├── README.md
│ ├── baml_src/
│ │ ├── chat_with_graph.baml
│ │ ├── clients.baml
│ │ ├── generators.baml
│ │ └── resume.baml
│ ├── eslint.config.mjs
│ ├── meta.md
│ ├── next.config.ts
│ ├── package.json
│ ├── postcss.config.mjs
│ ├── src/
│ │ ├── actions/
│ │ │ └── chat.ts
│ │ ├── app/
│ │ │ ├── globals.css
│ │ │ ├── layout.tsx
│ │ │ └── page.tsx
│ │ ├── components/
│ │ │ └── App.tsx
│ │ └── lib/
│ │ ├── fakeResponse.ts
│ │ ├── graphSchema.ts
│ │ └── neo4j.ts
│ └── tsconfig.json
├── 2025-04-15-code-generation-small-models/
│ ├── README.md
│ ├── agent/
│ │ ├── README.md
│ │ ├── baml_src/
│ │ │ ├── clients.baml
│ │ │ ├── generate_diff.baml
│ │ │ ├── generators.baml
│ │ │ └── resume.baml
│ │ ├── hello.py
│ │ ├── pyproject.toml
│ │ ├── test_utils.py
│ │ └── utils.py
│ ├── meta.md
│ └── project/
│ ├── README.md
│ ├── calculator.py
│ ├── hello.py
│ ├── interface.py
│ ├── main.py
│ ├── operations.py
│ └── pyproject.toml
├── 2025-04-22-twelve-factor-agents/
│ ├── README.md
│ ├── final/
│ │ ├── baml_src/
│ │ │ ├── agent.baml
│ │ │ ├── clients.baml
│ │ │ ├── generators.baml
│ │ │ └── tool_calculator.baml
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── agent.ts
│ │ │ ├── cli.ts
│ │ │ ├── index.ts
│ │ │ ├── server.ts
│ │ │ └── state.ts
│ │ └── tsconfig.json
│ ├── meta.md
│ └── step-by-step/
│ ├── hack/
│ │ ├── restore-walkthrough.ts
│ │ └── run-walkthrough.ts
│ ├── package.json
│ ├── tsconfig.json
│ ├── walkthrough/
│ │ ├── 00-index.ts
│ │ ├── 01-agent.baml
│ │ ├── 01-agent.ts
│ │ ├── 01-cli.ts
│ │ ├── 01-index.ts
│ │ ├── 02-agent.baml
│ │ ├── 02-tool_calculator.baml
│ │ ├── 03-agent.ts
│ │ ├── 03b-agent.ts
│ │ ├── 04-agent.baml
│ │ ├── 04b-agent.baml
│ │ ├── 04c-agent.baml
│ │ ├── 05-agent.baml
│ │ ├── 05-agent.ts
│ │ ├── 05-cli.ts
│ │ ├── 05b-agent.baml
│ │ ├── 05c-agent.baml
│ │ ├── 06-agent.baml
│ │ ├── 07-agent.ts
│ │ ├── 07b-agent.ts
│ │ ├── 07c-agent.baml
│ │ ├── 08-server.ts
│ │ ├── 09-server.ts
│ │ ├── 09-state.ts
│ │ ├── 10-agent.ts
│ │ └── 10-server.ts
│ └── walkthrough.md
├── 2025-05-10-workshop-nyc-twelve-factor-agents/
│ ├── README.md
│ ├── meta.md
│ ├── pre-requisites/
│ │ ├── 00-hello-world/
│ │ │ ├── README.md
│ │ │ └── walkthrough/
│ │ │ ├── 00-.gitignore
│ │ │ ├── 00-index.ts
│ │ │ ├── 00-package.json
│ │ │ └── 00-tsconfig.json
│ │ ├── 01-cli-and-agent/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ └── index.ts
│ │ │ ├── tsconfig.json
│ │ │ └── walkthrough/
│ │ │ ├── 01-agent.baml
│ │ │ ├── 01-agent.ts
│ │ │ ├── 01-cli.ts
│ │ │ └── 01-index.ts
│ │ ├── README.md
│ │ └── final/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── baml_src/
│ │ │ ├── agent.baml
│ │ │ ├── clients.baml
│ │ │ └── generators.baml
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── agent.ts
│ │ │ ├── cli.ts
│ │ │ └── index.ts
│ │ └── tsconfig.json
│ ├── workshop-agents/
│ │ ├── 02-calculator-tools/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── baml_src/
│ │ │ │ ├── agent.baml
│ │ │ │ ├── clients.baml
│ │ │ │ └── generators.baml
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── agent.ts
│ │ │ │ ├── cli.ts
│ │ │ │ └── index.ts
│ │ │ ├── tsconfig.json
│ │ │ └── walkthrough/
│ │ │ ├── 02-agent.baml
│ │ │ └── 02-tool_calculator.baml
│ │ ├── 03-tool-loop/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── baml_src/
│ │ │ │ ├── agent.baml
│ │ │ │ ├── clients.baml
│ │ │ │ ├── generators.baml
│ │ │ │ └── tool_calculator.baml
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── agent.ts
│ │ │ │ ├── cli.ts
│ │ │ │ └── index.ts
│ │ │ ├── tsconfig.json
│ │ │ └── walkthrough/
│ │ │ ├── 03-agent.ts
│ │ │ └── 03b-agent.ts
│ │ ├── 04-baml-tests/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── baml_src/
│ │ │ │ ├── agent.baml
│ │ │ │ ├── clients.baml
│ │ │ │ ├── generators.baml
│ │ │ │ └── tool_calculator.baml
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── agent.ts
│ │ │ │ ├── cli.ts
│ │ │ │ └── index.ts
│ │ │ ├── tsconfig.json
│ │ │ └── walkthrough/
│ │ │ ├── 04-agent.baml
│ │ │ ├── 04b-agent.baml
│ │ │ └── 04c-agent.baml
│ │ ├── 05-human-tools/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── baml_src/
│ │ │ │ ├── agent.baml
│ │ │ │ ├── clients.baml
│ │ │ │ ├── generators.baml
│ │ │ │ └── tool_calculator.baml
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── agent.ts
│ │ │ │ ├── cli.ts
│ │ │ │ └── index.ts
│ │ │ ├── tsconfig.json
│ │ │ └── walkthrough/
│ │ │ ├── 05-agent.baml
│ │ │ ├── 05-agent.ts
│ │ │ ├── 05-cli.ts
│ │ │ ├── 05b-agent.baml
│ │ │ └── 05c-agent.baml
│ │ ├── 06-customize-prompt/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── baml_src/
│ │ │ │ ├── agent.baml
│ │ │ │ ├── clients.baml
│ │ │ │ ├── generators.baml
│ │ │ │ └── tool_calculator.baml
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── agent.ts
│ │ │ │ ├── cli.ts
│ │ │ │ └── index.ts
│ │ │ ├── tsconfig.json
│ │ │ └── walkthrough/
│ │ │ └── 06-agent.baml
│ │ ├── 07-context-window/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── baml_src/
│ │ │ │ ├── agent.baml
│ │ │ │ ├── clients.baml
│ │ │ │ ├── generators.baml
│ │ │ │ └── tool_calculator.baml
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── agent.ts
│ │ │ │ ├── cli.ts
│ │ │ │ └── index.ts
│ │ │ ├── tsconfig.json
│ │ │ └── walkthrough/
│ │ │ ├── 07-agent.ts
│ │ │ ├── 07b-agent.ts
│ │ │ └── 07c-agent.baml
│ │ ├── 08-api-endpoints/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── baml_src/
│ │ │ │ ├── agent.baml
│ │ │ │ ├── clients.baml
│ │ │ │ ├── generators.baml
│ │ │ │ └── tool_calculator.baml
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── agent.ts
│ │ │ │ ├── cli.ts
│ │ │ │ └── index.ts
│ │ │ ├── tsconfig.json
│ │ │ └── walkthrough/
│ │ │ └── 08-server.ts
│ │ ├── 09-state-management/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── baml_src/
│ │ │ │ ├── agent.baml
│ │ │ │ ├── clients.baml
│ │ │ │ ├── generators.baml
│ │ │ │ └── tool_calculator.baml
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── agent.ts
│ │ │ │ ├── cli.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── server.ts
│ │ │ ├── tsconfig.json
│ │ │ └── walkthrough/
│ │ │ ├── 09-server.ts
│ │ │ └── 09-state.ts
│ │ ├── 10-human-approval/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── baml_src/
│ │ │ │ ├── agent.baml
│ │ │ │ ├── clients.baml
│ │ │ │ ├── generators.baml
│ │ │ │ └── tool_calculator.baml
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── agent.ts
│ │ │ │ ├── cli.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── server.ts
│ │ │ │ └── state.ts
│ │ │ ├── tsconfig.json
│ │ │ └── walkthrough/
│ │ │ ├── 10-agent.ts
│ │ │ └── 10-server.ts
│ │ └── README.md
│ └── workshop-bonus/
│ ├── README.md
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── generators.baml
│ │ └── resume.baml
│ ├── hello.py
│ ├── parse_json_schema.py
│ ├── pyproject.toml
│ └── tools.json
├── 2025-05-13-designing-evals/
│ ├── README.md
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── generators.baml
│ │ └── lessonplan.baml
│ ├── evals/
│ │ ├── run_2025-05-13-11-01-29/
│ │ │ ├── data_1.json
│ │ │ └── data_2.json
│ │ └── run_2025-05-13-11-06-05/
│ │ ├── data_1.json
│ │ └── data_2.json
│ ├── hello.py
│ ├── meta.md
│ └── pyproject.toml
├── 2025-05-17-workshop-sf-twelve-factor-agents/
│ ├── README.md
│ ├── agents-workshop/
│ │ ├── .gitkeep
│ │ ├── 00-hello-world/
│ │ │ ├── README.md
│ │ │ └── walkthrough/
│ │ │ ├── 00-.gitignore
│ │ │ ├── 00-index.ts
│ │ │ ├── 00-package.json
│ │ │ └── 00-tsconfig.json
│ │ ├── 01-cli-and-agent/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ └── index.ts
│ │ │ ├── tsconfig.json
│ │ │ └── walkthrough/
│ │ │ ├── 01-agent.baml
│ │ │ ├── 01-agent.ts
│ │ │ ├── 01-cli.ts
│ │ │ └── 01-index.ts
│ │ ├── 02-calculator-tools/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── baml_src/
│ │ │ │ ├── agent.baml
│ │ │ │ ├── clients.baml
│ │ │ │ └── generators.baml
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── agent.ts
│ │ │ │ ├── cli.ts
│ │ │ │ └── index.ts
│ │ │ ├── tsconfig.json
│ │ │ └── walkthrough/
│ │ │ ├── 02-agent.baml
│ │ │ └── 02-tool_calculator.baml
│ │ ├── 03-tool-loop/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── baml_src/
│ │ │ │ ├── agent.baml
│ │ │ │ ├── clients.baml
│ │ │ │ ├── generators.baml
│ │ │ │ └── tool_calculator.baml
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── agent.ts
│ │ │ │ ├── cli.ts
│ │ │ │ └── index.ts
│ │ │ ├── tsconfig.json
│ │ │ └── walkthrough/
│ │ │ ├── 03-agent.ts
│ │ │ └── 03b-agent.ts
│ │ ├── 04-baml-tests/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── baml_src/
│ │ │ │ ├── agent.baml
│ │ │ │ ├── clients.baml
│ │ │ │ ├── generators.baml
│ │ │ │ └── tool_calculator.baml
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── agent.ts
│ │ │ │ ├── cli.ts
│ │ │ │ └── index.ts
│ │ │ ├── tsconfig.json
│ │ │ └── walkthrough/
│ │ │ ├── 04-agent.baml
│ │ │ ├── 04b-agent.baml
│ │ │ └── 04c-agent.baml
│ │ ├── 05-human-tools/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── baml_src/
│ │ │ │ ├── agent.baml
│ │ │ │ ├── clients.baml
│ │ │ │ ├── generators.baml
│ │ │ │ └── tool_calculator.baml
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── agent.ts
│ │ │ │ ├── cli.ts
│ │ │ │ └── index.ts
│ │ │ ├── tsconfig.json
│ │ │ └── walkthrough/
│ │ │ ├── 05-agent.baml
│ │ │ ├── 05-agent.ts
│ │ │ ├── 05-cli.ts
│ │ │ ├── 05b-agent.baml
│ │ │ └── 05c-agent.baml
│ │ ├── 06-customize-prompt/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── baml_src/
│ │ │ │ ├── agent.baml
│ │ │ │ ├── clients.baml
│ │ │ │ ├── generators.baml
│ │ │ │ └── tool_calculator.baml
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── agent.ts
│ │ │ │ ├── cli.ts
│ │ │ │ └── index.ts
│ │ │ ├── tsconfig.json
│ │ │ └── walkthrough/
│ │ │ └── 06-agent.baml
│ │ ├── 07-context-window/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── baml_src/
│ │ │ │ ├── agent.baml
│ │ │ │ ├── clients.baml
│ │ │ │ ├── generators.baml
│ │ │ │ └── tool_calculator.baml
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── agent.ts
│ │ │ │ ├── cli.ts
│ │ │ │ └── index.ts
│ │ │ ├── tsconfig.json
│ │ │ └── walkthrough/
│ │ │ ├── 07-agent.ts
│ │ │ ├── 07b-agent.ts
│ │ │ └── 07c-agent.baml
│ │ ├── 08-api-endpoints/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── baml_src/
│ │ │ │ ├── agent.baml
│ │ │ │ ├── clients.baml
│ │ │ │ ├── generators.baml
│ │ │ │ └── tool_calculator.baml
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── agent.ts
│ │ │ │ ├── cli.ts
│ │ │ │ └── index.ts
│ │ │ ├── tsconfig.json
│ │ │ └── walkthrough/
│ │ │ └── 08-server.ts
│ │ ├── 09-state-management/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── baml_src/
│ │ │ │ ├── agent.baml
│ │ │ │ ├── clients.baml
│ │ │ │ ├── generators.baml
│ │ │ │ └── tool_calculator.baml
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── agent.ts
│ │ │ │ ├── cli.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── server.ts
│ │ │ ├── tsconfig.json
│ │ │ └── walkthrough/
│ │ │ ├── 09-server.ts
│ │ │ └── 09-state.ts
│ │ ├── 10-human-approval/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── baml_src/
│ │ │ │ ├── agent.baml
│ │ │ │ ├── clients.baml
│ │ │ │ ├── generators.baml
│ │ │ │ └── tool_calculator.baml
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── agent.ts
│ │ │ │ ├── cli.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── server.ts
│ │ │ │ └── state.ts
│ │ │ ├── tsconfig.json
│ │ │ └── walkthrough/
│ │ │ ├── 10-agent.ts
│ │ │ └── 10-server.ts
│ │ └── 11-humanlayer-approval/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── baml_src/
│ │ │ ├── agent.baml
│ │ │ ├── clients.baml
│ │ │ ├── generators.baml
│ │ │ └── tool_calculator.baml
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── agent.ts
│ │ │ ├── cli.ts
│ │ │ ├── index.ts
│ │ │ ├── server.ts
│ │ │ └── state.ts
│ │ ├── tsconfig.json
│ │ └── walkthrough/
│ │ ├── 11-cli.ts
│ │ ├── 11b-cli.ts
│ │ └── 11c-cli.ts
│ ├── meta.md
│ ├── morning/
│ │ ├── README.md
│ │ ├── baml_src/
│ │ │ ├── clients.baml
│ │ │ ├── generators.baml
│ │ │ └── resume.baml
│ │ ├── hello.py
│ │ └── pyproject.toml
│ └── pre-requisites/
│ ├── .gitignore
│ ├── 00-hello-world/
│ │ ├── README.md
│ │ └── walkthrough/
│ │ ├── 00-.gitignore
│ │ ├── 00-index.ts
│ │ ├── 00-package.json
│ │ └── 00-tsconfig.json
│ ├── 00a-python-setup/
│ │ ├── README.md
│ │ └── final/
│ │ ├── baml_src/
│ │ │ ├── clients.baml
│ │ │ ├── generators.baml
│ │ │ └── resume.baml
│ │ ├── hello.py
│ │ └── pyproject.toml
│ ├── 01-cli-and-agent/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── baml_src/
│ │ │ ├── agent.baml
│ │ │ ├── clients.baml
│ │ │ ├── generators.baml
│ │ │ └── resume.baml
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── agent.ts
│ │ │ ├── cli.ts
│ │ │ └── index.ts
│ │ ├── tsconfig.json
│ │ └── walkthrough/
│ │ ├── 01-agent.baml
│ │ ├── 01-agent.ts
│ │ ├── 01-cli.ts
│ │ └── 01-index.ts
│ ├── 01a-cli-and-agent-localmodels/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── baml_src/
│ │ │ ├── agent.baml
│ │ │ ├── clients.baml
│ │ │ └── generators.baml
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── agent.ts
│ │ │ ├── cli.ts
│ │ │ └── index.ts
│ │ ├── tsconfig.json
│ │ └── walkthrough/
│ │ └── 01a-agent.baml
│ ├── 02-calculator-tools/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── baml_src/
│ │ │ ├── agent.baml
│ │ │ ├── clients.baml
│ │ │ └── generators.baml
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── agent.ts
│ │ │ ├── cli.ts
│ │ │ └── index.ts
│ │ ├── tsconfig.json
│ │ └── walkthrough/
│ │ ├── 02-agent.baml
│ │ └── 02-tool_calculator.baml
│ ├── 03-tool-loop/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── baml_src/
│ │ │ ├── agent.baml
│ │ │ ├── clients.baml
│ │ │ ├── generators.baml
│ │ │ └── tool_calculator.baml
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── agent.ts
│ │ │ ├── cli.ts
│ │ │ └── index.ts
│ │ ├── tsconfig.json
│ │ └── walkthrough/
│ │ ├── 03-agent.ts
│ │ └── 03b-agent.ts
│ └── README.md
├── 2025-05-20-policies-to-prompts/
│ ├── .gitignore
│ ├── README.md
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── evaluate_gift_policy.baml
│ │ ├── evaluate_policy.baml
│ │ ├── generators.baml
│ │ └── questions.baml
│ ├── datasets.py
│ ├── meta.md
│ ├── pipeline.py
│ ├── pyproject.toml
│ ├── questions.py
│ └── test_pipeline.py
├── 2025-05-27-mcp-with-10000-tools/
│ ├── README.md
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── generators.baml
│ │ └── resume.baml
│ ├── meta.md
│ ├── parse_json_schema.py
│ ├── pyproject.toml
│ ├── tools.json
│ └── tools.py
├── 2025-06-03-humans-as-tools-async/
│ ├── .gitignore
│ ├── README.md
│ ├── baml_src/
│ │ ├── agent.baml
│ │ ├── clients.baml
│ │ ├── generators.baml
│ │ └── tool_calculator.baml
│ ├── meta.md
│ ├── package.json
│ ├── src/
│ │ ├── agent.ts
│ │ ├── cli.ts
│ │ ├── index.ts
│ │ ├── server.ts
│ │ └── state.ts
│ └── tsconfig.json
├── 2025-06-10-cracking-the-prompting-interview/
│ ├── README.md
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── codegen.baml
│ │ ├── diarization.baml
│ │ ├── generators.baml
│ │ ├── labels.baml
│ │ ├── plan.baml
│ │ ├── resume.baml
│ │ ├── symbol_tuning.baml
│ │ └── video_gen.baml
│ ├── hello.py
│ ├── meta.md
│ └── pyproject.toml
├── 2025-06-17-entity-extraction/
│ ├── .vscode/
│ │ └── settings.json
│ ├── README.md
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── generators.baml
│ │ └── resume.baml
│ ├── hello.py
│ ├── meta.md
│ └── pyproject.toml
├── 2025-06-24-ai-content-pipeline/
│ ├── .cursorrules
│ ├── .gitignore
│ ├── .multiclaude/
│ │ └── personas/
│ │ ├── agent-code-reviewer.md
│ │ ├── agent-developer.md
│ │ ├── agent-merger.md
│ │ ├── agent-multiplan-manager.md
│ │ └── agent-rebaser.md
│ ├── .vscode/
│ │ └── settings.json
│ ├── CLAUDE.md
│ ├── README.md
│ ├── backend/
│ │ ├── README.md
│ │ ├── ai_generator.py
│ │ ├── auth.py
│ │ ├── baml_src/
│ │ │ ├── clients.baml
│ │ │ ├── content_generation.baml
│ │ │ ├── email_test.baml
│ │ │ ├── generators.baml
│ │ │ ├── models.baml
│ │ │ ├── summarize.baml
│ │ │ └── summarize_test.baml
│ │ ├── baml_wrapper.py
│ │ ├── claude_output.jsonl
│ │ ├── database.py
│ │ ├── env.template
│ │ ├── hello.py
│ │ ├── job_processor.py
│ │ ├── main.py
│ │ ├── migrations/
│ │ │ ├── add_processing_stage.sql
│ │ │ ├── add_structured_content.sql
│ │ │ └── add_summary_json.sql
│ │ ├── models.py
│ │ ├── oauth_setup.py
│ │ ├── oauth_setup_claude.py
│ │ ├── pyproject.toml
│ │ ├── run_migration.py
│ │ ├── schema.sql
│ │ ├── setup_supabase.py
│ │ ├── test_baml_integration.py
│ │ ├── test_zoom_recordings.py
│ │ ├── video_processor.py
│ │ └── zoom_client.py
│ ├── docs/
│ │ └── oauth-setup.md
│ ├── frontend/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── components.json
│ │ ├── env.template
│ │ ├── eslint.config.mjs
│ │ ├── next.config.ts
│ │ ├── package.json
│ │ ├── postcss.config.mjs
│ │ ├── src/
│ │ │ ├── app/
│ │ │ │ ├── globals.css
│ │ │ │ ├── layout.tsx
│ │ │ │ ├── page.tsx
│ │ │ │ └── videos/
│ │ │ │ └── [id]/
│ │ │ │ └── page.tsx
│ │ │ ├── components/
│ │ │ │ ├── TranscriptViewer.tsx
│ │ │ │ ├── VideoImportForm.tsx
│ │ │ │ ├── VideoList.tsx
│ │ │ │ ├── ZoomRecordingsList.tsx
│ │ │ │ ├── home/
│ │ │ │ │ ├── video-list.tsx
│ │ │ │ │ └── zoom-recordings-list.tsx
│ │ │ │ ├── shared/
│ │ │ │ │ ├── empty-state.tsx
│ │ │ │ │ ├── error-message.tsx
│ │ │ │ │ ├── loading-indicator.tsx
│ │ │ │ │ ├── utils.tsx
│ │ │ │ │ └── youtube-embed.tsx
│ │ │ │ ├── theme-provider.tsx
│ │ │ │ ├── ui/
│ │ │ │ │ ├── alert.tsx
│ │ │ │ │ ├── badge.tsx
│ │ │ │ │ ├── button.tsx
│ │ │ │ │ ├── card.tsx
│ │ │ │ │ ├── dialog.tsx
│ │ │ │ │ ├── input.tsx
│ │ │ │ │ ├── scroll-area.tsx
│ │ │ │ │ ├── separator.tsx
│ │ │ │ │ ├── sonner.tsx
│ │ │ │ │ ├── tabs.tsx
│ │ │ │ │ └── textarea.tsx
│ │ │ │ ├── video/
│ │ │ │ │ ├── draft-editor.tsx
│ │ │ │ │ ├── email-preview.tsx
│ │ │ │ │ ├── linkedin-preview.tsx
│ │ │ │ │ ├── transcript-viewer.tsx
│ │ │ │ │ └── x-preview.tsx
│ │ │ │ └── zoom/
│ │ │ │ └── zoom-recordings-list.tsx
│ │ │ └── lib/
│ │ │ ├── api.ts
│ │ │ ├── apiClient.ts
│ │ │ ├── supabase.ts
│ │ │ └── utils.ts
│ │ └── tsconfig.json
│ ├── meta.md
│ └── specs/
│ ├── README.md
│ ├── merge-plan.md
│ ├── next-steps-notes.md
│ ├── prompt-impl.md
│ └── tasks.md
├── 2025-07-01-ai-content-pipeline-2/
│ ├── .cursorrules
│ ├── .gitignore
│ ├── .multiclaude/
│ │ └── personas/
│ │ ├── agent-code-reviewer.md
│ │ ├── agent-developer.md
│ │ ├── agent-merger.md
│ │ ├── agent-multiplan-manager.md
│ │ └── agent-rebaser.md
│ ├── .vscode/
│ │ └── settings.json
│ ├── CLAUDE.md
│ ├── README.md
│ ├── architecture.md
│ ├── backend/
│ │ ├── CLAUDE.md
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── auth.py
│ │ ├── baml_src/
│ │ │ ├── clients.baml
│ │ │ ├── content_generation.baml
│ │ │ ├── email_test.baml
│ │ │ ├── generators.baml
│ │ │ ├── models.baml
│ │ │ ├── summarize.baml
│ │ │ └── summarize_test.baml
│ │ ├── baml_wrapper.py
│ │ ├── claude_output.jsonl
│ │ ├── database.py
│ │ ├── env.template
│ │ ├── github_pr_service.py
│ │ ├── hello.py
│ │ ├── luma_client.py
│ │ ├── main.py
│ │ ├── migrations/
│ │ │ ├── add_github_pr_fields.sql
│ │ │ ├── add_processing_stage.sql
│ │ │ ├── add_structured_content.sql
│ │ │ └── add_summary_json.sql
│ │ ├── models.py
│ │ ├── oauth_setup.py
│ │ ├── oauth_setup_claude.py
│ │ ├── pyproject.toml
│ │ ├── run_migration.py
│ │ ├── schema.sql
│ │ ├── setup_supabase.py
│ │ ├── test_zoom_recordings.py
│ │ ├── video_processor.py
│ │ └── zoom_client.py
│ ├── cursed.md
│ ├── docs/
│ │ └── oauth-setup.md
│ ├── frontend/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── biome.json
│ │ ├── components.json
│ │ ├── env.template
│ │ ├── next.config.ts
│ │ ├── package.json
│ │ ├── postcss.config.mjs
│ │ ├── src/
│ │ │ ├── app/
│ │ │ │ ├── globals.css
│ │ │ │ ├── layout.tsx
│ │ │ │ ├── page.tsx
│ │ │ │ └── videos/
│ │ │ │ └── [id]/
│ │ │ │ └── page.tsx
│ │ │ ├── components/
│ │ │ │ ├── TranscriptViewer.tsx
│ │ │ │ ├── VideoImportForm.tsx
│ │ │ │ ├── VideoList.tsx
│ │ │ │ ├── ZoomRecordingsList.tsx
│ │ │ │ ├── github/
│ │ │ │ │ └── CreateGitHubPRButton.tsx
│ │ │ │ ├── home/
│ │ │ │ │ ├── video-list.tsx
│ │ │ │ │ └── zoom-recordings-list.tsx
│ │ │ │ ├── shared/
│ │ │ │ │ ├── empty-state.tsx
│ │ │ │ │ ├── error-message.tsx
│ │ │ │ │ ├── loading-indicator.tsx
│ │ │ │ │ ├── utils.tsx
│ │ │ │ │ └── youtube-embed.tsx
│ │ │ │ ├── theme-provider.tsx
│ │ │ │ ├── ui/
│ │ │ │ │ ├── alert.tsx
│ │ │ │ │ ├── badge.tsx
│ │ │ │ │ ├── button.tsx
│ │ │ │ │ ├── card.tsx
│ │ │ │ │ ├── dialog.tsx
│ │ │ │ │ ├── input.tsx
│ │ │ │ │ ├── label.tsx
│ │ │ │ │ ├── scroll-area.tsx
│ │ │ │ │ ├── separator.tsx
│ │ │ │ │ ├── sonner.tsx
│ │ │ │ │ ├── tabs.tsx
│ │ │ │ │ ├── textarea.tsx
│ │ │ │ │ └── tooltip.tsx
│ │ │ │ ├── video/
│ │ │ │ │ ├── draft-editor.tsx
│ │ │ │ │ ├── email-preview.tsx
│ │ │ │ │ ├── linkedin-preview.tsx
│ │ │ │ │ ├── transcript-viewer.tsx
│ │ │ │ │ └── x-preview.tsx
│ │ │ │ └── zoom/
│ │ │ │ └── zoom-recordings-list.tsx
│ │ │ └── lib/
│ │ │ ├── api.ts
│ │ │ ├── apiClient.ts
│ │ │ ├── supabase.ts
│ │ │ └── utils.ts
│ │ └── tsconfig.json
│ ├── meta.md
│ ├── recap-and-next.md
│ └── specs/
│ ├── github-pr-integration-plan.md
│ └── luma-docs.md
├── 2025-07-08-context-engineering/
│ ├── README.md
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── generators.baml
│ │ └── resume.baml
│ ├── main.py
│ ├── meta.md
│ └── pyproject.toml
├── 2025-07-15-decaying-resolution-memory/
│ ├── .gitignore
│ ├── README.md
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── extract_date.baml
│ │ ├── generators.baml
│ │ └── redact_pii.baml
│ ├── examine_threads.py
│ ├── explore_redis.py
│ ├── main.py
│ ├── meta.md
│ ├── processed/
│ │ ├── thread_1749693363562_nxf6gp.txt
│ │ └── thread_1749694758480_hb0tir.txt
│ ├── pyproject.toml
│ └── redact_pii.py
├── 2025-07-22-multimodality/
│ ├── README.md
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── generators.baml
│ │ └── resume.baml
│ ├── data/
│ │ └── psuedocode.py
│ ├── main.py
│ ├── meta.md
│ ├── pyproject.toml
│ └── socials.md
├── 2025-07-29-eval-many-models-same-prompt/
│ ├── README.md
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── content_generation.baml
│ │ ├── email_test.baml
│ │ ├── generators.baml
│ │ ├── models.baml
│ │ ├── summarize.baml
│ │ └── summarize_test.baml
│ ├── index.ts
│ ├── main.py
│ ├── meta.md
│ ├── package.json
│ ├── pyproject.toml
│ ├── results/
│ │ ├── Burningguineafowl/
│ │ │ ├── MyGemini.json
│ │ │ ├── MyGeminiSmart.json
│ │ │ ├── anthropic_claude-3-5-sonnet-20240620.json
│ │ │ ├── chatgpt.json
│ │ │ └── openai_gpt-4o-mini.json
│ │ └── EmailStructure/
│ │ ├── MyGemini.json
│ │ ├── MyGeminiSmart.json
│ │ ├── anthropic_claude-3-5-sonnet-20240620.json
│ │ ├── chatgpt.json
│ │ └── openai_gpt-4o-mini.json
│ ├── streamlit_app.py
│ ├── test_loader.py
│ └── tests/
│ ├── Burningguineafowl.json
│ └── EmailStructure.json
├── 2025-08-05-advanced-context-engineering-for-coding-agents/
│ ├── .claude/
│ │ └── settings.json
│ ├── CLAUDE.md
│ ├── README.md
│ ├── email.md
│ ├── hack/
│ │ └── spec_metadata.sh
│ ├── journal.md
│ ├── meta.md
│ ├── socials.md
│ └── thoughts/
│ └── shared/
│ ├── issues/
│ │ └── issue-1252.md
│ ├── plans/
│ │ ├── baml-test-assertion-validation-with-research.md
│ │ └── fix-assert-syntax-validation-no-research.md
│ ├── research/
│ │ └── 2025-08-05_05-15-59_baml_test_assertions.md
│ └── traces/
│ └── 2025-07-30T20-23-46.754243_claude-opus-4-20250514_4ca6cb02.json
├── 2025-08-12-manus-context-engineering/
│ ├── README.md
│ ├── email.md
│ └── meta.md
├── 2025-08-19-interruptible-agents/
│ ├── .vscode/
│ │ └── settings.json
│ ├── README.md
│ ├── agents/
│ │ ├── __init__.py
│ │ ├── planner_agent.py
│ │ ├── search_agent.py
│ │ └── writer_agent.py
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── generate_diff.baml
│ │ ├── generators.baml
│ │ ├── research.baml
│ │ └── resume.baml
│ ├── email.md
│ ├── hello.py
│ ├── manager.py
│ ├── meta.md
│ ├── pyproject.toml
│ └── runtime.py
├── 2025-08-26-claude-for-non-code-workflows/
│ ├── .claude/
│ │ └── commands/
│ │ ├── ctx.md
│ │ ├── daily_review.md
│ │ └── monthly_update.md
│ ├── .gitignore
│ ├── COMPANY.md
│ ├── Makefile
│ ├── README.md
│ ├── company/
│ │ ├── dailies/
│ │ │ └── 2025-08-26-daily-review.md
│ │ └── journal.md
│ ├── dailies/
│ │ ├── 2025-08-25.md
│ │ └── 2025-08-26-daily-review.md
│ ├── email.md
│ ├── meta.md
│ ├── package.json
│ ├── running_investor_updates.md
│ ├── sops/
│ │ ├── daily-review-sop.md
│ │ └── investor-updates.md
│ ├── thoughts/
│ │ └── shared/
│ │ └── research/
│ │ └── 2025-08-26_09-29-35_humanlayer-self-structure.md
│ ├── tools/
│ │ ├── pull-metrics.ts
│ │ └── slice-files.ts
│ └── tsconfig.json
├── 2025-09-02-voice-agent-supervisor-threading/
│ ├── CLAUDE.md
│ ├── README.md
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── functions.baml
│ │ └── generators.baml
│ ├── deep-research.md
│ ├── email.md
│ ├── meta.md
│ ├── pyproject.toml
│ ├── specification_updates.md
│ └── voice_agent.py
├── 2025-09-09-generative-uis/
│ ├── README.md
│ ├── email.md
│ ├── meta.md
│ └── my-app/
│ ├── .cursor/
│ │ └── rules/
│ │ └── baml.mdc
│ ├── .gitignore
│ ├── README.md
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── generators.baml
│ │ ├── recipe.baml
│ │ └── resume.baml
│ ├── next.config.ts
│ ├── package.json
│ ├── postcss.config.mjs
│ ├── src/
│ │ └── app/
│ │ ├── action.ts
│ │ ├── globals.css
│ │ ├── layout.tsx
│ │ └── page.tsx
│ └── tsconfig.json
├── 2025-09-16-coding-agent-tools-bash-vs-mcp/
│ ├── .gitignore
│ ├── CLAUDE.md
│ ├── CLAUDE_linear_cli.md
│ ├── CLAUDE_linear_mcp.md
│ ├── Dockerfile
│ ├── README.md
│ ├── docker-compose.yml
│ ├── linear-cli/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── linear-cli.ts
│ │ ├── package.json
│ │ └── tsconfig.json
│ ├── mcp-linear.json
│ ├── meta.md
│ ├── package.json
│ ├── src/
│ │ ├── index.ts
│ │ └── inspect-logs.ts
│ └── tsconfig.json
├── 2025-09-23-evals-for-classification/
│ ├── .gitignore
│ ├── README.md
│ ├── data/
│ │ ├── categories.txt
│ │ ├── categories_full.txt
│ │ └── vector_store/
│ │ └── 7991f4cf-9469-49f2-bc91-a2a34d20a70f/
│ │ └── index_metadata.pickle
│ ├── meta.md
│ ├── pyproject.toml
│ ├── pyrightconfig.json
│ ├── scripts/
│ │ ├── README.md
│ │ ├── __init__.py
│ │ └── build_vector_store.py
│ ├── src/
│ │ ├── .cursor/
│ │ │ └── rules/
│ │ │ └── baml.mdc
│ │ ├── README.md
│ │ ├── __init__.py
│ │ ├── baml_src/
│ │ │ ├── clients.baml
│ │ │ ├── expand_user_query.baml
│ │ │ ├── generators.baml
│ │ │ └── pick_best_category.baml
│ │ ├── classification/
│ │ │ ├── __init__.py
│ │ │ ├── embeddings.py
│ │ │ ├── expander.py
│ │ │ ├── narrowing.py
│ │ │ ├── pipeline.py
│ │ │ ├── selection.py
│ │ │ └── vector_store.py
│ │ ├── config/
│ │ │ ├── __init__.py
│ │ │ └── settings.py
│ │ ├── data/
│ │ │ ├── __init__.py
│ │ │ ├── category_loader.py
│ │ │ └── models.py
│ │ ├── main.py
│ │ └── shared/
│ │ ├── __init__.py
│ │ ├── constants.py
│ │ ├── correctness.py
│ │ ├── enums.py
│ │ └── logger.py
│ ├── tests/
│ │ ├── README.md
│ │ ├── __init__.py
│ │ ├── data/
│ │ │ ├── __init__.py
│ │ │ └── test_cases.py
│ │ ├── integration/
│ │ │ ├── __init__.py
│ │ │ ├── test_narrowing_accuracy.py
│ │ │ ├── test_pipeline_accuracy.py
│ │ │ └── test_selection_accuracy.py
│ │ ├── run_tests.py
│ │ └── unit/
│ │ └── classification/
│ │ ├── embeddings_test.py
│ │ ├── narrowing_test.py
│ │ ├── pipeline_test.py
│ │ ├── selection_test.py
│ │ └── vector_store_test.py
│ └── ui/
│ ├── __init__.py
│ ├── analysis.py
│ ├── app.py
│ ├── components.py
│ └── data_operations.py
├── 2025-09-30-dyanmic-schemas/
│ ├── README.md
│ ├── backend/
│ │ ├── README.md
│ │ ├── pyproject.toml
│ │ └── server.py
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── execute_baml.baml
│ │ ├── generate_baml.baml
│ │ └── generators.baml
│ ├── email.md
│ ├── frontend/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── app/
│ │ │ ├── globals.css
│ │ │ ├── layout.tsx
│ │ │ └── page.tsx
│ │ ├── components/
│ │ │ ├── ansii-string.tsx
│ │ │ ├── error-message.tsx
│ │ │ ├── execution-result-section.tsx
│ │ │ ├── generated-baml-section.tsx
│ │ │ ├── input-section.tsx
│ │ │ ├── markdown/
│ │ │ │ ├── MarkdownRenderer.tsx
│ │ │ │ ├── bamlJinjaTextmate.json
│ │ │ │ ├── bamlTextmate.json
│ │ │ │ └── shiki-grammars.ts
│ │ │ └── ui/
│ │ │ ├── badge.tsx
│ │ │ ├── button.tsx
│ │ │ ├── card.tsx
│ │ │ ├── input.tsx
│ │ │ ├── separator.tsx
│ │ │ ├── table.tsx
│ │ │ ├── tabs.tsx
│ │ │ └── textarea.tsx
│ │ ├── components.json
│ │ ├── eslint.config.mjs
│ │ ├── lib/
│ │ │ └── utils.ts
│ │ ├── next.config.ts
│ │ ├── package.json
│ │ ├── postcss.config.mjs
│ │ └── tsconfig.json
│ └── meta.md
├── 2025-10-07-anthropic-post-mortem/
│ ├── README.md
│ └── meta.md
├── 2025-10-12-unconference-sf/
│ ├── dex-ralph-demo/
│ │ ├── .gitignore
│ │ ├── IMPLEMENTATION_PLAN.md
│ │ ├── PROMPT.md
│ │ ├── README.md
│ │ ├── biome.json
│ │ ├── loop.sh
│ │ ├── next-env.d.ts
│ │ ├── next.config.ts
│ │ ├── package.json
│ │ ├── postcss.config.mjs
│ │ ├── prisma/
│ │ │ ├── migrations/
│ │ │ │ ├── 20251012214243_init/
│ │ │ │ │ └── migration.sql
│ │ │ │ └── migration_lock.toml
│ │ │ └── schema.prisma
│ │ ├── specs/
│ │ │ └── overview.md
│ │ ├── src/
│ │ │ ├── app/
│ │ │ │ ├── api/
│ │ │ │ │ └── auth/
│ │ │ │ │ └── [...all]/
│ │ │ │ │ └── route.ts
│ │ │ │ ├── dashboard/
│ │ │ │ │ ├── page.tsx
│ │ │ │ │ └── sign-out-button.tsx
│ │ │ │ ├── globals.css
│ │ │ │ ├── layout.tsx
│ │ │ │ ├── login/
│ │ │ │ │ └── page.tsx
│ │ │ │ └── page.tsx
│ │ │ └── lib/
│ │ │ ├── auth-client.ts
│ │ │ ├── auth.ts
│ │ │ └── prisma.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.tsbuildinfo
│ └── meta.md
├── 2025-10-14-no-vibes-allowed/
│ ├── README.md
│ ├── email.md
│ └── meta.md
├── 2025-10-21-agentic-rag-context-engineering/
│ ├── .cursor/
│ │ └── rules/
│ │ └── baml.mdc
│ ├── .gitignore
│ ├── ARCHITECTURE.md
│ ├── README.md
│ ├── TUI_LAYOUT.md
│ ├── agent_runtime.py
│ ├── baml_src/
│ │ ├── agent-tools.baml
│ │ ├── agent.baml
│ │ ├── clients.baml
│ │ ├── generators.baml
│ │ ├── resume.baml
│ │ └── tools.md
│ ├── email.md
│ ├── main.py
│ ├── meta.md
│ ├── pyproject.toml
│ └── tui.py
├── 2025-10-28-ralph-wiggum-coding-agent-power-tools/
│ ├── .gitignore
│ ├── README.md
│ ├── email.md
│ ├── meta.md
│ ├── minibaml/
│ │ ├── IMPLEMENTATION_PLAN.md
│ │ ├── PROMPT.md
│ │ ├── README.md
│ │ ├── build.zig
│ │ ├── build.zig.zon
│ │ ├── docs/
│ │ │ ├── BUILDING.md
│ │ │ ├── getting-started.md
│ │ │ └── reference.md
│ │ ├── genspecs.md
│ │ ├── genspecs.sh
│ │ ├── hack/
│ │ │ ├── download_docs.sh
│ │ │ └── urls.txt
│ │ ├── loop.sh
│ │ ├── meta.md
│ │ ├── specs/
│ │ │ ├── examples_interactive-examples.mdx
│ │ │ ├── examples_prompt-engineering_action-item-extraction.mdx
│ │ │ ├── examples_prompt-engineering_chain-of-thought.mdx
│ │ │ ├── examples_prompt-engineering_chat.mdx
│ │ │ ├── examples_prompt-engineering_classification.mdx
│ │ │ ├── examples_prompt-engineering_pii-data-extraction-scrubbing.mdx
│ │ │ ├── examples_prompt-engineering_reducing-hallucinations.mdx
│ │ │ ├── examples_prompt-engineering_retrieval-augmented-generation.mdx
│ │ │ ├── examples_prompt-engineering_symbol-tuning.mdx
│ │ │ ├── examples_prompt-engineering_tools-function-calling.mdx
│ │ │ ├── guide_baml-advanced_checks-and-asserts.mdx
│ │ │ ├── guide_baml-advanced_collector-track-tokens.mdx
│ │ │ ├── guide_baml-advanced_dynamic-types.mdx
│ │ │ ├── guide_baml-advanced_llm-client-registry.mdx
│ │ │ ├── guide_baml-advanced_modular-api.mdx
│ │ │ ├── guide_baml-advanced_prompt-caching-message-role-metadata.mdx
│ │ │ ├── guide_baml-advanced_reusing-prompt-snippets.mdx
│ │ │ ├── guide_baml-basics_abort-signal.mdx
│ │ │ ├── guide_baml-basics_concurrent-calls.mdx
│ │ │ ├── guide_baml-basics_error-handling.mdx
│ │ │ ├── guide_baml-basics_multi-modal.mdx
│ │ │ ├── guide_baml-basics_prompting-with-baml.mdx
│ │ │ ├── guide_baml-basics_streaming.mdx
│ │ │ ├── guide_baml-basics_switching-llms.mdx
│ │ │ ├── guide_baml-basics_testing-functions.mdx
│ │ │ ├── guide_baml-basics_timeouts.mdx
│ │ │ ├── guide_boundary-cloud_observability_tracking-usage.mdx
│ │ │ ├── guide_comparisons_baml-vs-ai-sdk.mdx
│ │ │ ├── guide_comparisons_baml-vs-langchain.mdx
│ │ │ ├── guide_comparisons_baml-vs-marvin.mdx
│ │ │ ├── guide_comparisons_baml-vs-open-ai-sdk.mdx
│ │ │ ├── guide_comparisons_baml-vs-pydantic.mdx
│ │ │ ├── guide_contact.mdx
│ │ │ ├── guide_development_deploying_aws.mdx
│ │ │ ├── guide_development_deploying_docker-rest-api.mdx
│ │ │ ├── guide_development_deploying_docker.mdx
│ │ │ ├── guide_development_environment-variables.mdx
│ │ │ ├── guide_development_terminal-logs.mdx
│ │ │ ├── guide_development_upgrade-baml-versions.mdx
│ │ │ ├── guide_framework-integration_react-next-js_building-a-chatbot.mdx
│ │ │ ├── guide_framework-integration_react-next-js_quick-start.mdx
│ │ │ ├── guide_installation-editors_cursor-extension.mdx
│ │ │ ├── guide_installation-editors_others.mdx
│ │ │ ├── guide_installation-editors_vs-code-extension.mdx
│ │ │ ├── guide_installation-language_elixir.mdx
│ │ │ ├── guide_installation-language_go.mdx
│ │ │ ├── guide_installation-language_python.mdx
│ │ │ ├── guide_installation-language_rest-api-other-languages.mdx
│ │ │ ├── guide_installation-language_ruby.mdx
│ │ │ ├── guide_installation-language_typescript.mdx
│ │ │ ├── guide_introduction_baml_client.mdx
│ │ │ ├── guide_introduction_baml_src.mdx
│ │ │ ├── guide_introduction_what-is-baml.mdx
│ │ │ ├── guide_introduction_why-baml.mdx
│ │ │ ├── home.mdx
│ │ │ ├── llms.txt
│ │ │ ├── minibaml.md
│ │ │ ├── ref_attributes_alias.mdx
│ │ │ ├── ref_attributes_assert.mdx
│ │ │ ├── ref_attributes_check.mdx
│ │ │ ├── ref_attributes_description.mdx
│ │ │ ├── ref_attributes_dynamic.mdx
│ │ │ ├── ref_attributes_jinja-in-attributes.mdx
│ │ │ ├── ref_attributes_skip.mdx
│ │ │ ├── ref_attributes_what-are-attributes.mdx
│ │ │ ├── ref_baml-cli_dev.mdx
│ │ │ ├── ref_baml-cli_fmt.mdx
│ │ │ ├── ref_baml-cli_generate.mdx
│ │ │ ├── ref_baml-cli_init.mdx
│ │ │ ├── ref_baml-cli_serve.mdx
│ │ │ ├── ref_baml-cli_test.mdx
│ │ │ ├── ref_baml_class.mdx
│ │ │ ├── ref_baml_client-llm.mdx
│ │ │ ├── ref_baml_client_abort-signal.mdx
│ │ │ ├── ref_baml_client_audio.mdx
│ │ │ ├── ref_baml_client_client.mdx
│ │ │ ├── ref_baml_client_collector.mdx
│ │ │ ├── ref_baml_client_config.mdx
│ │ │ ├── ref_baml_client_errors_baml-abort-error.mdx
│ │ │ ├── ref_baml_client_errors_baml-client-finish-reason-error.mdx
│ │ │ ├── ref_baml_client_errors_baml-validation-error.mdx
│ │ │ ├── ref_baml_client_errors_overview.mdx
│ │ │ ├── ref_baml_client_image.mdx
│ │ │ ├── ref_baml_client_media.mdx
│ │ │ ├── ref_baml_client_on-tick.mdx
│ │ │ ├── ref_baml_client_pdf.mdx
│ │ │ ├── ref_baml_client_react-next-js_hook-data.mdx
│ │ │ ├── ref_baml_client_react-next-js_hook-input.mdx
│ │ │ ├── ref_baml_client_react-next-js_hook-output.mdx
│ │ │ ├── ref_baml_client_react-next-js_use-function-name-hook.mdx
│ │ │ ├── ref_baml_client_type-builder.mdx
│ │ │ ├── ref_baml_client_video.mdx
│ │ │ ├── ref_baml_client_with-options.mdx
│ │ │ ├── ref_baml_enum.mdx
│ │ │ ├── ref_baml_function.mdx
│ │ │ ├── ref_baml_general-baml-syntax_array-list.mdx
│ │ │ ├── ref_baml_general-baml-syntax_bool.mdx
│ │ │ ├── ref_baml_general-baml-syntax_comments.mdx
│ │ │ ├── ref_baml_general-baml-syntax_environment-variables.mdx
│ │ │ ├── ref_baml_general-baml-syntax_int-float.mdx
│ │ │ ├── ref_baml_general-baml-syntax_map-dictionary.mdx
│ │ │ ├── ref_baml_general-baml-syntax_media.mdx
│ │ │ ├── ref_baml_general-baml-syntax_string.mdx
│ │ │ ├── ref_baml_generator.mdx
│ │ │ ├── ref_baml_template-string.mdx
│ │ │ ├── ref_baml_test.mdx
│ │ │ ├── ref_baml_types.mdx
│ │ │ ├── ref_editor-extension-settings_baml-cli-path.mdx
│ │ │ ├── ref_editor-extension-settings_baml-enable-playground-proxy.mdx
│ │ │ ├── ref_editor-extension-settings_baml-generate-code-on-save.mdx
│ │ │ ├── ref_editor-extension-settings_baml-sync-extension-to-generator-version.mdx
│ │ │ ├── ref_llm-client-providers_anthropic.mdx
│ │ │ ├── ref_llm-client-providers_aws-bedrock.mdx
│ │ │ ├── ref_llm-client-providers_azure-ai-foundary.mdx
│ │ │ ├── ref_llm-client-providers_cerebras.mdx
│ │ │ ├── ref_llm-client-providers_google-ai-gemini.mdx
│ │ │ ├── ref_llm-client-providers_google-vertex.mdx
│ │ │ ├── ref_llm-client-providers_groq.mdx
│ │ │ ├── ref_llm-client-providers_huggingface.mdx
│ │ │ ├── ref_llm-client-providers_keywordsai.mdx
│ │ │ ├── ref_llm-client-providers_litellm.mdx
│ │ │ ├── ref_llm-client-providers_llama-api.mdx
│ │ │ ├── ref_llm-client-providers_lmstudio.mdx
│ │ │ ├── ref_llm-client-providers_ollama.mdx
│ │ │ ├── ref_llm-client-providers_open-ai-from-azure.mdx
│ │ │ ├── ref_llm-client-providers_open-ai-responses-api.mdx
│ │ │ ├── ref_llm-client-providers_open-ai.mdx
│ │ │ ├── ref_llm-client-providers_openai-generic.mdx
│ │ │ ├── ref_llm-client-providers_openrouter.mdx
│ │ │ ├── ref_llm-client-providers_tinfoil.mdx
│ │ │ ├── ref_llm-client-providers_together.mdx
│ │ │ ├── ref_llm-client-providers_unify.mdx
│ │ │ ├── ref_llm-client-providers_vercel-ai-gateway.mdx
│ │ │ ├── ref_llm-client-providers_vllm.mdx
│ │ │ ├── ref_llm-client-strategies_fallback.mdx
│ │ │ ├── ref_llm-client-strategies_retry-policy.mdx
│ │ │ ├── ref_llm-client-strategies_round-robin.mdx
│ │ │ ├── ref_llm-client-strategies_timeouts.mdx
│ │ │ ├── ref_overview.mdx
│ │ │ ├── ref_prompt-syntax_conditionals.mdx
│ │ │ ├── ref_prompt-syntax_ctx-client.mdx
│ │ │ ├── ref_prompt-syntax_ctx-output-format.mdx
│ │ │ ├── ref_prompt-syntax_loops.mdx
│ │ │ ├── ref_prompt-syntax_role.mdx
│ │ │ ├── ref_prompt-syntax_variables.mdx
│ │ │ └── ref_prompt-syntax_what-is-jinja.mdx
│ │ ├── src/
│ │ │ ├── ast.zig
│ │ │ ├── codegen.zig
│ │ │ ├── formatter.zig
│ │ │ ├── jinja.zig
│ │ │ ├── lexer.zig
│ │ │ ├── main.zig
│ │ │ ├── multifile.zig
│ │ │ ├── parser.zig
│ │ │ ├── root.zig
│ │ │ └── validator.zig
│ │ ├── test.baml
│ │ ├── test_baml_src/
│ │ │ ├── clients.baml
│ │ │ ├── functions.baml
│ │ │ └── models/
│ │ │ ├── person.baml
│ │ │ └── status.baml
│ │ ├── test_dynamic.baml
│ │ └── test_strategies.baml
│ ├── other-prompts/
│ │ ├── REFACTORING_PROMPT.md
│ │ └── REVERSE_ENGINEER_SPECIFICATIONS.md
│ └── webapp/
│ ├── .gitignore
│ ├── IMPLEMENTATION_PLAN.md
│ ├── PROMPT.md
│ ├── README.md
│ ├── biome.json
│ ├── loop.sh
│ ├── next.config.ts
│ ├── package.json
│ ├── postcss.config.mjs
│ ├── prisma/
│ │ ├── migrations/
│ │ │ ├── 20251028172009_init/
│ │ │ │ └── migration.sql
│ │ │ ├── 20251028183248_add_due_date_to_todos/
│ │ │ │ └── migration.sql
│ │ │ ├── 20251028183716_add_priority_to_todos/
│ │ │ │ └── migration.sql
│ │ │ ├── 20251028190218_add_notifications/
│ │ │ │ └── migration.sql
│ │ │ ├── 20251028191557_add_recurring_todos/
│ │ │ │ └── migration.sql
│ │ │ ├── 20251028192204_add_attachments/
│ │ │ │ └── migration.sql
│ │ │ ├── 20251028193702_add_templates/
│ │ │ │ └── migration.sql
│ │ │ ├── 20251028194458_add_email_notification_preferences/
│ │ │ │ └── migration.sql
│ │ │ ├── 20251028195051_add_email_digests/
│ │ │ │ └── migration.sql
│ │ │ ├── 20251028200059_add_digest_customization/
│ │ │ │ └── migration.sql
│ │ │ ├── 20251028201814_add_activity_log/
│ │ │ │ └── migration.sql
│ │ │ ├── 20251028203200_add_custom_recurrence_patterns/
│ │ │ │ └── migration.sql
│ │ │ ├── 20251029150838_add_todo_dependencies/
│ │ │ │ └── migration.sql
│ │ │ └── migration_lock.toml
│ │ └── schema.prisma
│ ├── prisma.config.ts
│ ├── specs/
│ │ └── overview.md
│ ├── src/
│ │ ├── app/
│ │ │ ├── actions/
│ │ │ │ ├── comments.ts
│ │ │ │ ├── lists.ts
│ │ │ │ ├── templates.ts
│ │ │ │ └── todos.ts
│ │ │ ├── api/
│ │ │ │ ├── activity-logs/
│ │ │ │ │ └── route.ts
│ │ │ │ ├── attachments/
│ │ │ │ │ ├── [id]/
│ │ │ │ │ │ └── route.ts
│ │ │ │ │ └── route.ts
│ │ │ │ ├── auth/
│ │ │ │ │ ├── login/
│ │ │ │ │ │ └── route.ts
│ │ │ │ │ ├── logout/
│ │ │ │ │ │ └── route.ts
│ │ │ │ │ ├── session/
│ │ │ │ │ │ └── route.ts
│ │ │ │ │ └── verify/
│ │ │ │ │ └── route.ts
│ │ │ │ ├── cron/
│ │ │ │ │ └── send-digests/
│ │ │ │ │ └── route.ts
│ │ │ │ ├── lists/
│ │ │ │ │ ├── [id]/
│ │ │ │ │ │ └── route.ts
│ │ │ │ │ └── route.ts
│ │ │ │ ├── notifications/
│ │ │ │ │ ├── [id]/
│ │ │ │ │ │ └── route.ts
│ │ │ │ │ ├── route.ts
│ │ │ │ │ └── unread-count/
│ │ │ │ │ └── route.ts
│ │ │ │ ├── settings/
│ │ │ │ │ └── notification-preferences/
│ │ │ │ │ └── route.ts
│ │ │ │ └── todos/
│ │ │ │ ├── [id]/
│ │ │ │ │ └── route.ts
│ │ │ │ └── route.ts
│ │ │ ├── globals.css
│ │ │ ├── layout.tsx
│ │ │ ├── login/
│ │ │ │ └── page.tsx
│ │ │ ├── page.tsx
│ │ │ └── verify/
│ │ │ └── page.tsx
│ │ ├── components/
│ │ │ ├── activity-logs/
│ │ │ │ └── ActivityLogList.tsx
│ │ │ ├── attachments/
│ │ │ │ ├── AttachmentList.tsx
│ │ │ │ └── FileUpload.tsx
│ │ │ ├── auth/
│ │ │ │ ├── LoginForm.tsx
│ │ │ │ └── LogoutButton.tsx
│ │ │ ├── common/
│ │ │ │ └── KeyboardShortcutsHelp.tsx
│ │ │ ├── dependencies/
│ │ │ │ ├── DependencyList.tsx
│ │ │ │ └── DependencySelector.tsx
│ │ │ ├── graph/
│ │ │ │ ├── GraphView.tsx
│ │ │ │ ├── GraphViewWrapper.tsx
│ │ │ │ └── TodoNode.tsx
│ │ │ ├── lists/
│ │ │ │ ├── ListForm.tsx
│ │ │ │ ├── ListItem.tsx
│ │ │ │ ├── ListManagement.tsx
│ │ │ │ ├── ListSelector.tsx
│ │ │ │ ├── ShareListForm.tsx
│ │ │ │ └── SharedUsersList.tsx
│ │ │ ├── notifications/
│ │ │ │ ├── NotificationBell.tsx
│ │ │ │ └── NotificationList.tsx
│ │ │ ├── settings/
│ │ │ │ └── NotificationPreferences.tsx
│ │ │ ├── templates/
│ │ │ │ ├── TemplateForm.tsx
│ │ │ │ ├── TemplateItem.tsx
│ │ │ │ ├── TemplateManagement.tsx
│ │ │ │ └── TemplateSelector.tsx
│ │ │ └── todos/
│ │ │ ├── BatchActionBar.tsx
│ │ │ ├── CommentThread.tsx
│ │ │ ├── KanbanBoard.tsx
│ │ │ ├── KanbanCard.tsx
│ │ │ ├── ReactionBar.tsx
│ │ │ ├── RecurrenceSelector.tsx
│ │ │ ├── TodoForm.tsx
│ │ │ ├── TodoItem.tsx
│ │ │ └── TodoList.tsx
│ │ ├── lib/
│ │ │ ├── activity-log-server.ts
│ │ │ ├── attachments-server.ts
│ │ │ ├── auth-server.ts
│ │ │ ├── auth.ts
│ │ │ ├── comments-server.ts
│ │ │ ├── config.ts
│ │ │ ├── digest-notifications-server.ts
│ │ │ ├── email-digests.ts
│ │ │ ├── email-notifications.ts
│ │ │ ├── email.ts
│ │ │ ├── hooks/
│ │ │ │ └── useKeyboardShortcuts.ts
│ │ │ ├── lists-server.ts
│ │ │ ├── notification-preferences-server.ts
│ │ │ ├── notifications-server.ts
│ │ │ ├── prisma.ts
│ │ │ ├── recurrence-custom.ts
│ │ │ ├── recurrence.ts
│ │ │ ├── todos-server.ts
│ │ │ ├── todos.ts
│ │ │ └── types/
│ │ │ ├── attachments.ts
│ │ │ ├── auth.ts
│ │ │ ├── comments.ts
│ │ │ ├── lists.ts
│ │ │ ├── notifications.ts
│ │ │ └── todos.ts
│ │ └── middleware.ts
│ └── tsconfig.json
├── 2025-11-05-event-driven-agents/
│ ├── README.md
│ ├── demo/
│ │ ├── .gitignore
│ │ ├── baml_src/
│ │ │ └── main.baml
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── __tests__/
│ │ │ │ ├── command-flow.test.ts
│ │ │ │ ├── event-bus.test.ts
│ │ │ │ ├── interrupt-and-queue.test.ts
│ │ │ │ ├── layer-test.test.ts
│ │ │ │ ├── minimal-flow.test.ts
│ │ │ │ ├── mocks/
│ │ │ │ │ ├── llm.ts
│ │ │ │ │ └── responses.ts
│ │ │ │ ├── simple.test.ts
│ │ │ │ ├── test-helpers.ts
│ │ │ │ └── test-utils.ts
│ │ │ ├── antml/
│ │ │ │ ├── AntmlParser.ts
│ │ │ │ ├── errors.ts
│ │ │ │ ├── format.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── registry.ts
│ │ │ │ └── types.ts
│ │ │ ├── events.ts
│ │ │ ├── reducers/
│ │ │ │ ├── command-reducer.ts
│ │ │ │ ├── interrupt-reducer.ts
│ │ │ │ ├── messages-reducer.ts
│ │ │ │ └── types.ts
│ │ │ ├── server.ts
│ │ │ ├── services/
│ │ │ │ ├── command-executor.ts
│ │ │ │ ├── command-parser.ts
│ │ │ │ ├── command-state.ts
│ │ │ │ ├── event-bus.ts
│ │ │ │ ├── interrupt-state.ts
│ │ │ │ ├── llm-memory-state.ts
│ │ │ │ ├── llm-service.ts
│ │ │ │ ├── messages-state.ts
│ │ │ │ ├── ui-display-state.ts
│ │ │ │ ├── visualizer-sink.ts
│ │ │ │ └── websocket-sink.ts
│ │ │ ├── shared-types.ts
│ │ │ ├── tools.ts
│ │ │ ├── utils/
│ │ │ │ └── interruptible.ts
│ │ │ └── visualizer/
│ │ │ ├── effect-wrapper.ts
│ │ │ ├── instrumentation.ts
│ │ │ ├── registry.ts
│ │ │ └── service-config.ts
│ │ ├── tsconfig.json
│ │ └── web/
│ │ ├── index.html
│ │ ├── src/
│ │ │ ├── App.svelte
│ │ │ ├── EventGraphVisualizer.svelte
│ │ │ └── main.ts
│ │ └── vite.config.js
│ └── meta.md
├── 2025-11-11-dates-and-times/
│ ├── .cursor/
│ │ └── rules/
│ │ └── baml.mdc
│ ├── README.md
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── date-time.baml
│ │ ├── generators.baml
│ │ └── resume.baml
│ ├── main.py
│ ├── meta.md
│ └── pyproject.toml
├── 2025-11-18-building-an-animation-pipeline/
│ ├── README.md
│ ├── meta.md
│ └── transcript.md
├── 2025-11-25-no-vibes-allowed-using-codelayer-to-build-codelayer/
│ ├── README.md
│ └── meta.md
├── 2025-12-02-multimodal-evals/
│ ├── .cursor/
│ │ └── rules/
│ │ └── baml.mdc
│ ├── .gitignore
│ ├── README.md
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── generators.baml
│ │ ├── receipts.baml
│ │ └── resume.baml
│ ├── load_cord_dataset.py
│ ├── main.py
│ ├── meta.md
│ ├── pyproject.toml
│ ├── results/
│ │ ├── 20251106_132526/
│ │ │ ├── detailed_results.json
│ │ │ ├── metadata.json
│ │ │ └── summary.json
│ │ ├── 20251106_132827/
│ │ │ ├── detailed_results.json
│ │ │ ├── metadata.json
│ │ │ └── summary.json
│ │ ├── 20251106_133339/
│ │ │ ├── detailed_results.json
│ │ │ ├── metadata.json
│ │ │ └── summary.json
│ │ ├── 20251106_160320/
│ │ │ ├── detailed_results.json
│ │ │ ├── metadata.json
│ │ │ └── summary.json
│ │ ├── 20251106_165359/
│ │ │ ├── detailed_results.json
│ │ │ ├── metadata.json
│ │ │ └── summary.json
│ │ ├── 20251107_072836/
│ │ │ ├── detailed_results.json
│ │ │ ├── metadata.json
│ │ │ └── summary.json
│ │ ├── 20251107_103452/
│ │ │ ├── detailed_results.json
│ │ │ ├── metadata.json
│ │ │ └── summary.json
│ │ ├── 20251107_124617/
│ │ │ ├── detailed_results.json
│ │ │ ├── metadata.json
│ │ │ └── summary.json
│ │ └── 20251201_223504/
│ │ ├── detailed_results.json
│ │ ├── metadata.json
│ │ └── summary.json
│ ├── src/
│ │ ├── README.md
│ │ ├── __init__.py
│ │ ├── receipt_evaluator.py
│ │ ├── run_streamlit.py
│ │ ├── streamlit_app.py
│ │ └── test_evaluator.py
│ └── transcript.md
├── 2025-12-09-git-worktrees/
│ ├── README.md
│ ├── meta.md
│ └── transcript.md
├── 2025-12-16-prompt-optimizer/
│ ├── README.md
│ ├── meta.md
│ └── transcript.md
├── 2025-12-23-founding-humanlayer/
│ ├── README.md
│ ├── meta.md
│ └── transcript.md
├── 2025-12-30-founding-boundary/
│ ├── README.md
│ ├── meta.md
│ └── transcript.md
├── 2026-01-06-latency/
│ ├── README.md
│ ├── baml_src/
│ │ ├── agent.baml
│ │ ├── clients.baml
│ │ ├── generators.baml
│ │ └── resume.baml
│ ├── email.md
│ ├── main.py
│ ├── meta.md
│ ├── pyproject.toml
│ └── transcript.md
├── 2026-01-13-applying-12-factor-principles-to-coding-agent-sdks/
│ ├── .gitignore
│ ├── IMPLEMENTATION_PLAN.md
│ ├── RALPH.md
│ ├── README.md
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── generators.baml
│ │ └── planning.baml
│ ├── email.md
│ ├── logs/
│ │ ├── dashboard-events-2026-01-13T19-12-35.jsonl
│ │ ├── dashboard-events-2026-01-13T19-13-37.jsonl
│ │ ├── dashboard-snapshot-2026-01-13T19-12-35.json
│ │ ├── dashboard-snapshot-2026-01-13T19-13-37.json
│ │ ├── dashboard-test-2026-01-13T19-15-03.json
│ │ ├── dashboard-test-events-2026-01-13T19-15-03.jsonl
│ │ ├── events-2026-01-13T06-56-41.jsonl
│ │ ├── order-agent-2026-01-13T18-59-04.jsonl
│ │ ├── order-agent-2026-01-13T18-59-44.jsonl
│ │ ├── order-agent-2026-01-13T19-00-24.jsonl
│ │ ├── order-agent-2026-01-13T19-01-27.jsonl
│ │ ├── order-agent-2026-01-13T19-02-15.jsonl
│ │ └── workflow-2026-01-13T06-56-41.json
│ ├── meta.md
│ ├── package.json
│ ├── src/
│ │ ├── assignment-workflow.ts
│ │ ├── baml-parsing.ts
│ │ ├── chat.ts
│ │ ├── dashboard-agent.ts
│ │ ├── delivery-tracking-agent.ts
│ │ ├── demo.ts
│ │ ├── index.ts
│ │ ├── models/
│ │ │ └── types.ts
│ │ ├── order-agent.ts
│ │ ├── prompts/
│ │ │ └── create_plan.md
│ │ ├── ralph.ts
│ │ ├── store/
│ │ │ ├── driver-store.test.ts
│ │ │ ├── driver-store.ts
│ │ │ ├── order-store.test.ts
│ │ │ └── order-store.ts
│ │ ├── structured-planning-with-json.ts
│ │ ├── structured-planning.ts
│ │ └── utils.ts
│ ├── transcript.md
│ ├── tsconfig.json
│ └── whiteboards.md
├── 2026-01-20-email-is-all-you-need/
│ ├── README.md
│ ├── email.md
│ ├── meta.md
│ ├── raw_email.json
│ └── transcript.txt
├── 2026-01-27-no-vibes-allowed/
│ ├── README.md
│ ├── clips.json
│ ├── email.json
│ ├── email.md
│ ├── meta.md
│ ├── transcript.txt
│ └── whiteboards.md
├── 2026-02-03-prompting-is-becoming-a-product-surface/
│ ├── .cursor/
│ │ └── rules/
│ │ └── baml.mdc
│ ├── README.md
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── generate_schema.baml
│ │ ├── generators.baml
│ │ ├── resume.baml
│ │ └── transcript.baml
│ ├── clips.json
│ ├── email.json
│ ├── email.md
│ ├── main.py
│ ├── meta.md
│ ├── pyproject.toml
│ ├── transcript.txt
│ └── whiteboards.md
├── 2026-02-10-agentic-backpressure-deep-dive/
│ ├── .gitignore
│ ├── 00-sdk-basics.ts
│ ├── 00b-filter-events.ts
│ ├── 00c-collect-and-check.ts
│ ├── 01-hello-world.test.ts
│ ├── 02-hmac-verification.test.ts
│ ├── 02-wrong-assumptions.test.ts
│ ├── 02b-the-fix.test.ts
│ ├── 02c-plan-mode.test.ts
│ ├── 03-child-process-exec.test.ts
│ ├── 03-state-and-continuity.test.ts
│ ├── 04-structured-output.test.ts
│ ├── 05-hooks-and-side-effects.test.ts
│ ├── EPISODE.md
│ ├── README.md
│ ├── clips.json
│ ├── email.json
│ ├── email.md
│ ├── meta.md
│ ├── package.json
│ ├── transcript.txt
│ ├── tsconfig.json
│ ├── typescript-sdk-docs.md
│ ├── typescript-sdk-v2-docs.md
│ └── whiteboards.md
├── 2026-02-17-automating-aitw/
│ ├── .cursor/
│ │ └── rules/
│ │ └── baml.mdc
│ ├── README.md
│ ├── action_clips.json
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── clip.baml
│ │ ├── deslop.baml
│ │ ├── email.baml
│ │ ├── feedback.baml
│ │ ├── generators.baml
│ │ ├── resume.baml
│ │ ├── subtitle.baml
│ │ ├── thumbnail.baml
│ │ └── title_suggester.baml
│ ├── clips.json
│ ├── email.json
│ ├── email.md
│ ├── meta.md
│ ├── pyproject.toml
│ ├── src/
│ │ ├── __init__.py
│ │ ├── clip_extractor/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ └── cli.py
│ │ ├── deslop/
│ │ │ ├── __init__.py
│ │ │ └── core.py
│ │ ├── email_generator/
│ │ │ ├── __init__.py
│ │ │ ├── core.py
│ │ │ └── generate_email.py
│ │ ├── luma/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── cli.py
│ │ │ ├── constants.py
│ │ │ ├── luma_client.py
│ │ │ └── luma_event.py
│ │ ├── riverside/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── cli.py
│ │ │ ├── riverside_agent.py
│ │ │ └── schedule_session.py
│ │ ├── thumbnail_creation/
│ │ │ ├── __init__.py
│ │ │ ├── cli.py
│ │ │ ├── config.py
│ │ │ ├── create_thumbnail.py
│ │ │ ├── file_manager.py
│ │ │ ├── gemini_client.py
│ │ │ ├── image_loader.py
│ │ │ ├── image_processor.py
│ │ │ ├── prompt.txt
│ │ │ ├── prompt_formatter.py
│ │ │ └── thumbnail_service.py
│ │ ├── title_suggester/
│ │ │ ├── __init__.py
│ │ │ ├── core.py
│ │ │ └── suggest_titles.py
│ │ └── youtube/
│ │ ├── README.md
│ │ ├── __init__.py
│ │ ├── get_videos.py
│ │ └── youtube_client.py
│ ├── titles.json
│ ├── tools/
│ │ └── deslop/
│ │ └── main.py
│ └── transcript.txt
├── 2026-02-24-no-vibes-february/
│ ├── README.md
│ ├── clips.json
│ ├── email.json
│ ├── email.md
│ ├── meta.md
│ ├── original_titles.json
│ ├── titles.json
│ ├── titles_2.json
│ └── transcript.txt
├── 2026-03-03-pii-redaction-and-sensitive-data-scrubbing/
│ ├── .cursor/
│ │ └── rules/
│ │ └── baml.mdc
│ ├── README.md
│ ├── action_clips.json
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── generators.baml
│ │ ├── redact.baml
│ │ ├── redact_tests.baml
│ │ └── resume.baml
│ ├── clips.json
│ ├── email.json
│ ├── email.md
│ ├── main.py
│ ├── meta.md
│ ├── pyproject.toml
│ ├── titles.json
│ └── transcript.txt
├── 2026-03-10-claude-agent-skills-deep-dive/
│ ├── .claude/
│ │ ├── commands/
│ │ │ └── backend-engineer.md
│ │ └── skills/
│ │ └── secret/
│ │ ├── SKILL.md
│ │ └── references/
│ │ └── the_secret.md
│ ├── README.md
│ ├── Untitled
│ ├── action_clips.json
│ ├── action_clips_1.json
│ ├── clips.json
│ ├── clips_1.json
│ ├── email.json
│ ├── email.md
│ ├── meta.md
│ ├── titles.json
│ ├── transcript.txt
│ └── whiteboards.md
├── 2026-03-17-prompt-injections-guardrails/
│ ├── README.md
│ ├── action_clips.json
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── event.baml
│ │ ├── generators.baml
│ │ └── resume.baml
│ ├── clips.json
│ ├── email.json
│ ├── email.md
│ ├── main.py
│ ├── meta.md
│ ├── pyproject.toml
│ ├── titles.json
│ ├── transcript.txt
│ └── whiteboards.md
├── 2026-03-24-mcp-is-dead/
│ ├── README.md
│ ├── action_clips.json
│ ├── action_clips_1.json
│ ├── clips.json
│ ├── clips_1.json
│ ├── email.json
│ ├── email.md
│ ├── meta.md
│ ├── titles.json
│ └── transcript.txt
├── 2026-03-31-no-vibes-march/
│ ├── README.md
│ ├── action_clips.json
│ ├── clips.json
│ ├── email.json
│ ├── email.md
│ ├── meta.md
│ ├── titles.json
│ └── transcript.txt
├── 2026-04-07-sse-streaming/
│ ├── Claude.md
│ ├── README.md
│ ├── action_clips.json
│ ├── baml_src/
│ │ ├── functions.baml
│ │ └── generators.baml
│ ├── clips.json
│ ├── email.json
│ ├── email.md
│ ├── index.html
│ ├── main.py
│ ├── meta.md
│ ├── pyproject.toml
│ └── transcript.txt
├── 2026-04-11-unconf-sf/
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── clip_finder.baml
│ │ ├── description_generator.baml
│ │ ├── generators.baml
│ │ ├── talk_segmenter.baml
│ │ └── xpost_generator.baml
│ ├── pyproject.toml
│ └── src/
│ ├── clip_finder/
│ │ ├── __init__.py
│ │ └── find.py
│ ├── description_generator/
│ │ ├── __init__.py
│ │ └── generate.py
│ ├── generate_xposts.py
│ ├── talk_segmenter/
│ │ ├── __init__.py
│ │ ├── baml_segmenter.py
│ │ ├── enrich.py
│ │ ├── protocols.py
│ │ ├── segment.py
│ │ ├── segment_writer.py
│ │ ├── speaker_extractor.py
│ │ ├── timestamp.py
│ │ ├── timestamp_mapper.py
│ │ └── transcript_splitter.py
│ ├── transcriber/
│ │ ├── __init__.py
│ │ ├── audio_chunker.py
│ │ ├── audio_extractor.py
│ │ ├── protocols.py
│ │ ├── transcribe.py
│ │ ├── transcript_writer.py
│ │ └── whisper_service.py
│ └── xpost_generator/
│ ├── __init__.py
│ └── core.py
├── 2026-04-14-agentic-coding-for-frontend-apps/
│ ├── 01-storybook/
│ │ ├── .storybook/
│ │ │ ├── main.js
│ │ │ └── preview.js
│ │ ├── package.json
│ │ └── stories/
│ │ ├── ArticlePage.jsx
│ │ ├── ArticlePage.stories.jsx
│ │ ├── Button.jsx
│ │ └── Button.stories.jsx
│ ├── 02-storybook-riptide/
│ │ ├── .storybook/
│ │ │ ├── main.js
│ │ │ └── preview.jsx
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── components/
│ │ │ │ ├── badge.tsx
│ │ │ │ ├── button.tsx
│ │ │ │ ├── card.tsx
│ │ │ │ ├── input.tsx
│ │ │ │ └── keyboard-shortcut.tsx
│ │ │ ├── globals.css
│ │ │ └── lib/
│ │ │ └── utils.ts
│ │ └── stories/
│ │ ├── Badge.stories.tsx
│ │ ├── Button.stories.tsx
│ │ ├── Card.stories.tsx
│ │ ├── Input.stories.tsx
│ │ └── KeyboardShortcut.stories.tsx
│ ├── 03-wired-vs-pure/
│ │ ├── .storybook/
│ │ │ ├── main.js
│ │ │ └── preview.jsx
│ │ ├── index.html
│ │ ├── package.json
│ │ ├── server.ts
│ │ ├── src/
│ │ │ ├── App.tsx
│ │ │ ├── components/
│ │ │ │ ├── badge.tsx
│ │ │ │ ├── button.tsx
│ │ │ │ ├── card.tsx
│ │ │ │ ├── input.tsx
│ │ │ │ ├── keyboard-shortcut.tsx
│ │ │ │ ├── pure/
│ │ │ │ │ ├── DataTable.tsx
│ │ │ │ │ ├── TodoCard.tsx
│ │ │ │ │ └── UserSearchForm.tsx
│ │ │ │ └── wired/
│ │ │ │ ├── DataTableWired.tsx
│ │ │ │ ├── TodoCardWired.tsx
│ │ │ │ └── UserSearchFormWired.tsx
│ │ │ ├── globals.css
│ │ │ ├── lib/
│ │ │ │ └── utils.ts
│ │ │ ├── main.tsx
│ │ │ └── types.ts
│ │ ├── stories/
│ │ │ ├── DataTable.stories.tsx
│ │ │ ├── DataTableInteractive.stories.tsx
│ │ │ ├── TodoCard.stories.tsx
│ │ │ └── UserSearchForm.stories.tsx
│ │ ├── tsconfig.json
│ │ └── vite.config.ts
│ ├── README.md
│ ├── action_clips.json
│ ├── clips.json
│ ├── email.json
│ ├── email.md
│ ├── meta.md
│ ├── package.json
│ ├── titles.json
│ └── transcript.txt
├── 2026-04-21-harness-engineering-without-the-hype/
│ ├── README.md
│ ├── action_clips.json
│ ├── action_clips_1.json
│ ├── clips.json
│ ├── clips_1.json
│ ├── email.json
│ ├── email.md
│ ├── meta.md
│ ├── titles.json
│ └── trasncript.txt
├── 2026-04-28-no-vibes-design-docs/
│ ├── README.md
│ ├── action_clips.json
│ ├── clips.json
│ ├── email.json
│ ├── email.md
│ ├── meta.md
│ ├── titles.json
│ └── transcript.txt
├── 2026-05-05-openai-tells-you-not-to-build-your-own-harness/
│ ├── README.md
│ ├── action_clips.json
│ ├── action_clips_1.json
│ ├── clips.json
│ ├── clips_1.json
│ ├── email.json
│ ├── email.md
│ ├── meta.md
│ ├── titles.json
│ └── transcript.txt
├── 2026-05-12-code-mode-deep-dive/
│ └── meta.md
├── 2026-05-19-feature-flag-everything/
│ └── meta.md
├── HOWTO.md
├── Makefile
├── README.md
├── data.json
├── feed.xml
├── thoughts/
│ ├── searchable/
│ │ └── shared/
│ │ └── research/
│ │ ├── 2025-08-16_11-05-39_content_pipeline_architecture.md
│ │ └── 2025-08-16_11-07-26_zoom_luma_cli_scripts.md
│ └── shared/
│ ├── plans/
│ │ ├── zoom-luma-cli-tools.md
│ │ └── zoom-youtube-cli-tools.md
│ └── research/
│ ├── 2025-08-16_11-05-39_content_pipeline_architecture.md
│ └── 2025-08-16_11-07-26_zoom_luma_cli_scripts.md
└── tools/
├── .gitignore
├── CLAUDE.md
├── README.md
├── bun.lockb
├── data/
│ ├── 2025-08-16-luma-recent-and-upcoming.md
│ └── 2025-08-16-zoom-recordings.md
├── index.ts
├── luma.ts
├── package.json
├── tsconfig.json
├── validate-metadata.ts
├── zoom.ts
└── zoom_token.json
================================================
FILE CONTENTS
================================================
================================================
FILE: .claude/commands/complete_episode.md
================================================
# Complete Episode Command
This command updates episode documentation and writes an email after completing a live session.
## Overview
Update the just-completed episode README and meta.md with YouTube link, thumbnail, and summary and update the main README with episode details. Then write an email.md file for the episode.
## Steps
1. **Check current date** - Use bash to verify today's date, run `bash(ls .)` to see the top level of folder structure here
2. **Get the Youtube Link for the just-completed recording**
- Run the script:
```bash
cd 2026-02-17-automating-aitw
uv run python src/youtube/get_videos.py
```
- The script will print the unicorn video with the highest episode number (format: "title: url")
- Parse the output to extract the title and URL
- Display the video title and link to the user in a clear format
- Ask the user: "Is this the correct podcast recording video? (yes/no)"
- If yes: save that URL and description to use for the rest of the command
- If no: ask the user to provide the correct YouTube URL and the episode description manually and use them instead
3. **Get the Folder for the Just Completed Episode**
- Each episode has a folder in the repo with the date followed by the title (e.g., `YYYY-MM-DD-kebab-case-episode-title`)
- Ask the user to choose from the most recent 5.
- Give the user an option to provide their own if they do not want to select one of the options presented, but ensure it exists in the repo.
**STOP and ask the user UNTIL YOU HAVE ALL OF THESE DATA POINTS**
3. **Update completed episode meta.md**:
- Read at least 3 other past episode meta.mds to understand the format
- update the github link and youtube urls
4. **Update episode-specific README**:
- Read `2025-07-08-context-engineering/README.md` for example
- **IMPORTANT**: Add YouTube thumbnail using this exact format (see ):
```markdown
[](https://www.youtube.com/watch?v=VIDEO_ID)
```
Extract the VIDEO_ID from the YouTube URL (the part after v= or youtu.be/)
- Leave whiteboards and links sections blank for manual addition
- Navigate to the just-completed episode folder
- Update the README with the provided summary
5. **Run the tools to regenerate the JSON manifest**
- cd tools && bun run readme
6. **Get the Required Information**
- Get the episode title from the `meta.md` in the directory
- Get the episode description from the `meta.md` in the directory
**STOP make sure you have the above information before continuing. If you are missing any of them, ask the user for them.**
7. **Verify the Transcript**
Make sure there is a `transcript.txt` file in the directory. If there isn't, ask the user for the transcript.
8. **Generate the Email JSON**
Use the provided information to run the cli:
```bash
cd 2026-02-17-automating-aitw
uv run python src/email/generate_email.py --title <provided episode title> --description <provided description> --transcript <path to transcript> --output <path to episode directory>
```
9. **Convert to a email.md**
Convert the outputted json to an `email.md`
10. **Read Context**
- List all email.md files: `*/email.md`
- Read at least 3 recent email.md files to understand the tone, structure, and style
- Read the README.md from the target episode directory to understand the content
11. **Analyze Email Structure**
Emails typically follow this format:
- **Greeting**: "Hello First Name,"
- **Opening**: Reference to "This week's 🦄 ai that works session" with the topic
- **Links**: GitHub repo link and YouTube video link
- **Key Takeaways**: 3-5 numbered or bulleted actionable insights
- **Memorable Quote**: "If you remember one thing from this session:" or "key takeaway" or something similar as a section
- **Next Session**: Information about tomorrow's session with Luma link (this email gets sent out the day before another session)
- **Call to Action**: Discord link, questions invitation
- **Sign-off**: "Happy coding 🧑💻" followed by "Vaibhav & Dex" or similar
12. **Humanize the Email**
These emails often sound like AI slop. Rewrite the email applying the following rules to make it sound more human-like:
1. **Ban em-dashes entirely.** Do not use — anywhere in the email. Not once. If you find yourself wanting to use an em-dash, rewrite the sentence instead. Split it into two sentences, use a comma, use a colon, or restructure it. Em-dashes are the single clearest signal that an AI wrote something. Before finalizing, do a literal search for "—" and rewrite every instance.
2. **Remove "It's not X, it's Y" constructions.** These sound like debate club. Just say the thing directly.
3. **Vary sentence length.** Short sentences land harder. Long sentences are fine when you need to explain something with nuance, but don't make every sentence the same length or it starts to feel like a robot found a cadence and got stuck in it.
4. **Replace abstract concepts with concrete examples.** Push every takeaway to include a specific "for example" moment that readers can immediately picture. Example before: "Email agents must handle cancellations, corrections, and race conditions." Example after: "when a user sends a follow-up saying 'actually no, I have an onsite' five seconds after their first email, the system needs to handle that gracefully."
5. **Convert descriptions into actionable implications.** Don't just explain what something is. Show what you can do with it. Example before: "Email isn't just for communication—it's where business data already lives..." Example after: "You should be able to forward a vendor email to create a task, or have a customer inquiry automatically update your CRM."
6. **Make CTAs specific with direct links.** No vague "check it out" or "learn more." Always include the actual link, date, or next step inline so the reader doesn't have to hunt for it.
## Email Notes
- Keep the tone conversational but informative
- Focus on actionable takeaways readers can apply immediately
- The "If you remember one thing" should be the most important concept
- Links should use the actual GitHub structure: `https://github.com/hellovai/ai-that-works/tree/main/[EPISODE-DIR]`
## Important Notes
- Use TodoWrite to track progress through these steps
- Think deeply about the structure and format before making changes
- Verify all information is present before proceeding with updates
- Maintain consistency with existing episode documentation format
- The YouTube thumbnail is REQUIRED - reference 2025-07-08-context-engineering/README.md as a working example
================================================
FILE: .claude/commands/email_prep.md
================================================
# Email Generation Command
## Step 1: Determine Target Directory
If this command is invoked with no arguments, ask the user which episode directory to generate an email for.
## Step 2: Get the Required Information
- Get the episode title from the `meta.md` in the directory
- Get the episode description from the `meta.md` in the directory
**STOP make sure you have the above information before continuing. If you are missing any of them, ask the user for them.**
## Step 3:
Make sure there is a `transcript.txt` file in the directory. If there isn't, ask the user for the transcript.
## Step 3: Generate the Email JSON
Use the provided information to run the cli:
```bash
cd 2026-02-17-automating-aitw
uv run python src/email/generate_email.py --title <provided episode title> --description <provided description> --transcript <path to transcript> --output <path to episode directory>
```
## Step 4: Convert to a email.md
Convert the outputted json to an `email.md`
## Step 5: Read Context
1. List all email.md files: `*/email.md`
2. Read at least 3 recent email.md files to understand the tone, structure, and style
3. Read the README.md from the target episode directory to understand the content
## Step 6: Analyze Email Structure
Emails typically follow this format:
- **Greeting**: "Hello First Name,"
- **Opening**: Reference to "This week's 🦄 ai that works session" with the topic
- **Links**: GitHub repo link and YouTube video link
- **Key Takeaways**: 3-5 numbered or bulleted actionable insights
- **Memorable Quote**: "If you remember one thing from this session:" or "key takeaway" or something similar as a section
- **Next Session**: Information about tomorrow's session with Luma link (this email gets sent out the day before another session)
- **Call to Action**: Discord link, questions invitation
- **Sign-off**: "Happy coding 🧑💻" followed by "Vaibhav & Dex" or similar
## Step 7: Humanize the Email
These emails often come sound like AI slop. Rewrite the email, applying the following rules to make it sound more human-like:
1. Remove any repetitive "It's not X, it's Y" or an overreliance on em-dashes. Humans don't write like that.
2. Vary sentence length.
3. Replace abstract concepts with concrete examples. Push the concepts to include specific "for example" moments that readers can immediately picture. Example before this rule: "Email agents must handle cancellations, corrections, and race conditions." Example after this rule: "when a user sends a follow-up saying 'actually no, I have an onsite' five seconds after their first email, the system needs to handle that gracefully."
4. Convert descriptions into actionable implications. Don't just explain what something is. Show what you can do with it. Example before this rule: "Email isn't just for communication—it's where business data already lives..." Example after this rule: "You should be able to forward a vendor email to create a task, or have a customer inquiry automatically update your CRM."
5. Make call to actions specific with direct links. Generated emails frequently have vague CTAs ("check it out", "learn more"). Always add the specific link, date, or next step so the reader doesn't have to hunt for it.
## Notes
- Keep the tone conversational but informative
- Focus on actionable takeaways readers can apply immediately
- The "If you remember one thing" should be the most important concept
- Links should use the actual GitHub structure: `https://github.com/hellovai/ai-that-works/tree/main/[EPISODE-DIR]`
================================================
FILE: .claude/commands/episode_prep.md
================================================
---
name: episode_prep
description: prepare an episode
---
# Episode Prep Command
This command prepares the documentation for an upcoming episode.
## Overview
Add next episode info to the table in the main README.md.
## Steps
1. **Check current date** - Use bash to verify today's date, run `bash(ls .)` to see the top level of folder structure here
2. **Get needed information from the user**
Ask the user for the following:
* Episode title
* Episode description
* Episode number
* Episode date
* Luma URL suffix
* Any additional guests to invite to the Riverside event
**STOP and ask the user UNTIL YOU HAVE ALL OF THESE DATA POINTS**
3. **Generate the image for the event**
Use the provided information to run the cli:
```bash
cd 2026-02-17-automating-aitw
uv run python src/thumbnail_creation/cli.py --title <provided episode title> --description <provided description> --episode-number <provided episode number>
```
This will generate an outputted image and subtitle. Give the user:
- The generated subtitle
- The path to the outputted `.png`
Ask the user if they are satisfied with the result. If not, ask them what they don't like about it. Then run:
```bash
cd 2026-02-17-automating-aitw
uv run python src/thumbnail_creation/cli.py --title <provided episode title> --description <provided description> --episode-number <provided episode number> --current-subtitle <the subtitle that was just generated> --feedback <the user's feedback>
```
The system will automatically categorize the feedback as relating to the subtitle, the image, or both, and regenerate accordingly. Keep repeating this feedback loop until the user is satisfied with the image.
4. **Update the provided description**
- If the provided episode description does not end with "Meet the Speakers🧑💻
Meet Vaibhav Gupta, one of the creators of BAML and YC alum. He spent 10 years in AI performance optimization at places like Google, Microsoft, and D. E. Shaw. He loves diving deep and chatting about anything related to Gen AI and Computer Vision!
Meet Dex Horthy, founder at HumanLayer and coiner of the term Context Engineering. He spent 10+ years building devops tools at Replicated, Sprout Social and JPL. DevOps junkie turned AI Engineer.", append that to the description and use that as the new episode description going forward
5. **Create the event in Riverside**
Run this script:
```bash
cd 2026-02-17-automating-aitw
uv run python src/riverside/cli.py --title <provided episode title> --description <provided description> --episode-number <provided episode number> --date <provided date> --guests <additional guests if any. if none, do not add this argument>
```
This will create the riverside event.
6. **STOP. Tell the user to finish the Riverside Event**
Tell the user to go turn on the livestreams and upload the generated image in Riverside. STOP AND WAIT until the user has indicated that they have done this. Once they say they have, continue.
7. **Create the Luma Event**
- If the provided episode title does not start with "🦄 ai that works: ", prepend that to the episode title and use that as the new episode title going forward.
- Navigate to the `2026-02-17-automating-aitw` directory and run the script
```bash
uv run python src/luma/cli.py --name <episode title prepended by 🦄 ai that works:> --description <provided episode description appended with the Meet the Speakers...> --date <episode date> --cover-image-path <absolute path to outputted image from step 3> --luma-url-suffix <provided luma url suffix>
```
8. **Create new episode meta.md**
- Read at least 3 other past episode meta.mds to understand the format
- Create a new folder for the upcoming episode following the format
- Create a meta.md, set the youtube link to `https://www.youtube.com/playlist?list=PLi60mUelRAbFqfgymVfZttlkIyt0XHZjt`, set the code url to `https://github.com/ai-that-works/ai-that-works`
- Update the luma links
```example initial meta.md
---
guid: aitw-EPISODENUMBER
title: ".."
description: |
..
event_link: https://luma.com/<something>
eventDate: YYYY-MM-DDT18:00:00Z
media:
url: https://www.youtube.com/playlist?list=PLi60mUelRAbFqfgymVfZttlkIyt0XHZjt
type: video/youtube
links:
code: https://github.com/ai-that-works/ai-that-works/tree/main/YYYY-MM-DD-<folder-name>
# no youtube link here yet
season: 2
episode: EPISODENUMBER
event_type: episode
---
```
9. **Run the tools to regenerate the JSON manifest**
- cd tools && bun run readme
## Important Notes
- Use TodoWrite to track progress through these steps
- Think deeply about the structure and format before making changes
- Verify all information is present before proceeding with updates
- Maintain consistency with existing episode documentation format
- The YouTube thumbnail is REQUIRED - reference 2025-07-08-context-engineering/README.md as a working example
================================================
FILE: .claude/commands/find_clips.md
================================================
# Find Clips Command
This command runs a CLI that finds clippable content after completing a live session.
## Overview
Find the relevant directory and run the clip extractor CLI.
## Steps
1. **Check current date** - Use bash to verify today's date, run `bash(ls .)` to see the top level of folder structure here
1. **Get the Folder for the Just Completed Episode**
- Each episode has a folder in the repo with the date followed by the title (e.g., `YYYY-MM-DD-kebab-case-episode-title`)
- Ask the user to choose from the most recent 5 episode folders *that are not in the future*.
- Give the user an option to provide their own if they do not want to select one of the options presented, but ensure it exists in the repo.
2. **Verify the Directory**
Make sure there is a `transcript.txt` and a `meta.md` in the directory. If there isn't, ask the user for them.
3. **Gather the Required Information from the meda.md**
Gather the following information from the `meta.md`.
- episode title
- description
4. **Run the extract clip cli**
Run the following script:
```bash
cd 2026-02-17-automating-aitw
uv run python src/clip_extractor/cli.py --transcript <path to transcript> --title <episode title> --description <episode description> --output <path to episode's directory>
```
## Important Notes
- Use TodoWrite to track progress through these steps
- Think deeply about the structure and format before making changes
- Verify all information is present before proceeding with updates
================================================
FILE: .claude/commands/socials.md
================================================
6. **Socials**
- create a socials.md file in the just-completed episode folder with Twitter posts based on the whiteboard images from the episode
- Find all whiteboard images in the episode's README.md (usually 3-4 images)
- For each whiteboard image:
- Use 'Bash(wget)' to download and preview the image
- Create a Twitter post that captures the key insight from that specific whiteboard
- Keep it short, casual language, include some questionable grammar
- Each post should teach one specific lesson from the whiteboard
- End each post with "link to full episode with Vaibhav on llm [topic] in comments"
- Format: "### Twitter post 1", "### Twitter post 2", etc.
- After all image posts, add a final "### Links" section with:
- link to code from the episode: github.com/hellovai/ai-that-works/tree/main/EPISODE_FOLDER/
- sign up for the next livestream tuesday at 10am PT - [get link from README]
- your main goal is to get people to sign up for the next episode - make it sound fun, drop one or two interesting wisdoms and MOST IMPORTANTLY get straight to the point. NO FLUFF
- Skip LinkedIn posts - Twitter only
================================================
FILE: .claude/commands/suggest_titles.md
================================================
# Suggest Titles Command
This command runs a CLI that suggests episode titles from a transcript after completing a live session.
## Overview
Find the relevant directory and run the title suggester CLI.
## Steps
1. **Check current date** - Use bash to verify today's date, run `bash(ls .)` to see the top level of folder structure here
1. **Get the Folder for the Just Completed Episode**
- Each episode has a folder in the repo with the date followed by the title (e.g., `YYYY-MM-DD-kebab-case-episode-title`)
- Ask the user to choose from the most recent 5 episode folders *that are not in the future*.
- Give the user an option to provide their own if they do not want to select one of the options presented, but ensure it exists in the repo.
2. **Verify the Directory**
Make sure there is a `transcript.txt` and a `meta.md` in the directory. If there isn't, ask the user for them.
3. **Gather the Required Information from the meta.md**
Gather the following information from the `meta.md`.
- episode title (current working title)
4. **Run the title suggester CLI**
Run the following script:
```bash
cd 2026-02-17-automating-aitw
uv run python -m src.title_suggester.suggest_titles --transcript <absolute path to transcript> --title <episode title> --output <absolute path to episode's directory>
```
## Important Notes
- Use TodoWrite to track progress through these steps
- Use absolute paths for `--transcript` and `--output` arguments
- The command must be run from inside the `2026-02-17-automating-aitw/` directory
- Output is saved to `titles.json` in the episode's directory
- Think deeply about the structure and format before making changes
- Verify all information is present before proceeding
================================================
FILE: .envrc
================================================
dotenv .env
================================================
FILE: .gitignore
================================================
# macOS
.DS_Store
# baml
baml_client/
tools/.env
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
.python-version
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
Pipfile.lock
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
__pypackages__/
# Celery stuff
celerybeat-schedule
celerybeat.pid
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
# pytype static type analyzer
.pytype/
# Cython debug symbols
cython_debug/
# Riptide artifacts (cloud-synced)
.humanlayer/tasks/
# Images generated by the episode prep command
2026-02-17-automating-aitw/*.png
2026-02-17-automating-aitw/src/thumbnail_creation/output/*
*storybook.log
storybook-static
.gstack/
node_modules/
# .mp4 files
*.mp4
2026-04-11-unconf-sf/output/
================================================
FILE: .vscode/settings.json
================================================
{
"python.analysis.typeCheckingMode": "basic",
"workbench.colorCustomizations": {
"activityBar.activeBackground": "#f26e00",
"activityBar.background": "#f26e00",
"activityBar.foreground": "#15202b",
"activityBar.inactiveForeground": "#15202b99",
"activityBarBadge.background": "#00ff74",
"activityBarBadge.foreground": "#15202b",
"commandCenter.border": "#e7e7e799",
"sash.hoverBorder": "#f26e00",
"statusBar.background": "#bf5700",
"statusBar.foreground": "#e7e7e7",
"statusBarItem.hoverBackground": "#f26e00",
"statusBarItem.remoteBackground": "#bf5700",
"statusBarItem.remoteForeground": "#e7e7e7",
"titleBar.activeBackground": "#bf5700",
"titleBar.activeForeground": "#e7e7e7",
"titleBar.inactiveBackground": "#bf570099",
"titleBar.inactiveForeground": "#e7e7e799"
},
"peacock.color": "BF5700",
"cursorpyright.analysis.typeCheckingMode": "basic",
"makefile.configureOnOpen": false
}
================================================
FILE: 2025-03-31-large-scale-classification/.vscode/settings.json
================================================
{
"python.analysis.typeCheckingMode": "basic"
}
================================================
FILE: 2025-03-31-large-scale-classification/README.md
================================================
# 🦄 large scale classification
> llms are great at classification from 5, 10, maybe even 50 categories. but how do we deal with situations when we have over 1000? perhaps its an ever changing list of categories?
[Video](https://youtu.be/6B7MzraQMZk)
[](https://www.youtube.com/watch?v=6B7MzraQMZk)
## Running this code
```bash
# Install dependencies
uv sync
```
```bash
# Convert BAML files -> Python
uv run baml-cli generate
```
```bash
# Run the code
uv run hello.py
```
## Followup Exercise - Tool Selection from 100s of tools
If you want to play with this code and try to extend it, you can try this exercise.
1. Skim the file at [./tools.json](./tools.json)
2. Load in the list of tools as `Category` or create a similar class for `Tool`
3. Implement `f(tool) -> string` for embedding text and `g(tool) -> string` for LLM text
4. Update the code to embed and search a user query to select the topk most likely tools
5. Explore some different use inputs for ambiguous tools, see how accurate you can get it
If you want to add more MCP servers or other tools, the code to generate the json is at https://github.com/dexhorthy/thousands-of-tools-mcp
## Followup Exercise - Post-LLM probe
1. Change the core LLM prompt to select out a `Category[]` instead of a single `Category`
2. Add a follow up step (deterministic or LLM-based) to take a list of `Category[]` and select out a final `Category`
3. Write some examples where the final probe can solve closely-overlapping Categories
4. If you did the tool selection exercise, you can use `Tool` instead of `Category` if you prefer
## Diagrams






================================================
FILE: 2025-03-31-large-scale-classification/baml_src/clients.baml
================================================
// Learn more about clients at https://docs.boundaryml.com/docs/snippets/clients/overview
client<llm> CustomGPT4o {
provider openai
options {
model "gpt-4o"
api_key env.OPENAI_API_KEY
}
}
client<llm> CustomGPT4oMini {
provider openai
retry_policy Exponential
options {
model "gpt-4o-mini"
api_key env.OPENAI_API_KEY
}
}
client<llm> CustomSonnet {
provider anthropic
options {
model "claude-3-5-sonnet-20241022"
api_key env.ANTHROPIC_API_KEY
}
}
client<llm> CustomHaiku {
provider anthropic
retry_policy Constant
options {
model "claude-3-haiku-20240307"
api_key env.ANTHROPIC_API_KEY
}
}
// https://docs.boundaryml.com/docs/snippets/clients/round-robin
client<llm> CustomFast {
provider round-robin
options {
// This will alternate between the two clients
strategy [CustomGPT4oMini, CustomHaiku]
}
}
// https://docs.boundaryml.com/docs/snippets/clients/fallback
client<llm> OpenaiFallback {
provider fallback
options {
// This will try the clients in order until one succeeds
strategy [CustomGPT4oMini, CustomGPT4oMini]
}
}
// https://docs.boundaryml.com/docs/snippets/clients/retry
retry_policy Constant {
max_retries 3
// Strategy is optional
strategy {
type constant_delay
delay_ms 200
}
}
retry_policy Exponential {
max_retries 2
// Strategy is optional
strategy {
type exponential_backoff
delay_ms 300
multiplier 1.5
max_delay_ms 10000
}
}
================================================
FILE: 2025-03-31-large-scale-classification/baml_src/generators.baml
================================================
// This helps use auto generate libraries you can use in the language of
// your choice. You can have multiple generators if you use multiple languages.
// Just ensure that the output_dir is different for each generator.
generator target {
// Valid values: "python/pydantic", "typescript", "ruby/sorbet", "rest/openapi"
output_type "python/pydantic"
// Where the generated code will be saved (relative to baml_src/)
output_dir "../"
// The version of the BAML package you have installed (e.g. same version as your baml-py or @boundaryml/baml).
// The BAML VSCode extension version should also match this version.
version "0.82.0"
// Valid values: "sync", "async"
// This controls what `b.FunctionName()` will be (sync or async).
default_client_mode sync
}
================================================
FILE: 2025-03-31-large-scale-classification/baml_src/pick_best_category.baml
================================================
enum Category {
@@dynamic
}
function PickBestCategories(text: string, count: int) -> Category[] {
client "openai/gpt-4o-mini"
prompt #"
Which {{ count }} categories best describe the following text?
{{ ctx.output_format }}
{{ _.role('user') }}
{{ text }}
"#
}
function PickBestCategory(text: string) -> Category {
client "openai/gpt-4o-mini"
prompt #"
Which category best describes the following text?
{{ ctx.output_format }}
{{ _.role('user') }}
{{ text }}
"#
}
test TestName {
functions [PickBestCategory]
type_builder {
dynamic enum Category {
Category1 @alias("k0") @description(#"
for placeholder text
"#)
Category2 @alias("k1") @description(#"
for debug logs
"#)
Category3 @alias("k2") @description(#"
for error logs
"#)
}
}
args {
text #"
hello world
"#
}
}
================================================
FILE: 2025-03-31-large-scale-classification/baml_src/resume.baml
================================================
// Defining a data model.
class Resume {
name string
email string
experience string[]
skills string[]
}
// Create a function to extract the resume from a string.
function ExtractResume(resume: string) -> Resume {
// Specify a client as provider/model-name
// you can use custom LLM params with a custom client name from clients.baml like "client CustomHaiku"
client "openai/gpt-4o" // Set OPENAI_API_KEY to use this client.
prompt #"
Extract from this content:
{{ resume }}
{{ ctx.output_format }}
"#
}
// Test the function with a sample resume. Open the VSCode playground to run this.
test vaibhav_resume {
functions [ExtractResume]
args {
resume #"
Vaibhav Gupta
vbv@boundaryml.com
Experience:
- Founder at BoundaryML
- CV Engineer at Google
- CV Engineer at Microsoft
Skills:
- Rust
- C++
"#
}
}
================================================
FILE: 2025-03-31-large-scale-classification/hello.py
================================================
import dotenv
import openai
import numpy as np
from baml_client import b
from baml_client.type_builder import TypeBuilder
from baml_client.tracing import trace
from pydantic import BaseModel
dotenv.load_dotenv()
client = openai.OpenAI()
class Category(BaseModel):
name: str
embedding_text: str
llm_description: str
def load_categories() -> list[Category]:
return [
Category(name="Search Products", embedding_text="Find products", llm_description="User is looking to search for products"),
Category(name="Buy Product", embedding_text="do something with money", llm_description="User is looking to buy a product"),
Category(name="View Product Details", embedding_text="Product details", llm_description="User wants to view detailed information about a product"),
Category(name="Add to Cart", embedding_text="Add item to cart", llm_description="User intends to add a product to their shopping cart"),
Category(name="Checkout", embedding_text="Proceed to checkout", llm_description="User is ready to purchase and wants to checkout"),
Category(name="Apply Discount Code", embedding_text="Use discount code", llm_description="User wants to apply a discount code to their purchase"),
Category(name="Track Order", embedding_text="Order tracking", llm_description="User wants to track the status of their order"),
Category(name="Return Item", embedding_text="Return product", llm_description="User wants to return a purchased item"),
Category(name="Contact Support", embedding_text="Customer support", llm_description="User needs assistance from customer support"),
Category(name="Read Reviews", embedding_text="Product reviews", llm_description="User wants to read reviews about a product"),
Category(name="Compare Products", embedding_text="Compare items", llm_description="User is comparing different products"),
Category(name="View Wishlist", embedding_text="Wishlist", llm_description="User wants to view their wishlist"),
Category(name="Search Deals", embedding_text="Find deals", llm_description="User is looking for deals or discounts"),
Category(name="Sign Up", embedding_text="Create account", llm_description="User wants to sign up for an account"),
Category(name="Login", embedding_text="User login", llm_description="User wants to log into their account"),
Category(name="Logout", embedding_text="User logout", llm_description="User wants to log out of their account")
]
def embed(text: str) -> list[float]:
response = client.embeddings.create(
model="text-embedding-3-small",
input=text,
)
return response.data[0].embedding
@trace
def _narrow_down_categories(text: str, categories: list[Category]) -> list[Category]:
embeddings: list[tuple[Category, list[float]]] = []
for category in categories:
embeddings.append((category, embed(category.embedding_text)))
text_embedding = embed(text)
best_matches: list[tuple[Category, float]] = []
for category, embedding in embeddings:
cosine_similarity = np.dot(text_embedding, embedding) / (np.linalg.norm(text_embedding) * np.linalg.norm(embedding))
best_matches.append((category, cosine_similarity))
max_matches = 5
matches = sorted(best_matches, key=lambda x: x[1], reverse=True)[:max_matches]
return [match[0] for match in matches]
def _narrow_down_categories_llm(text: str, categories: list[Category]) -> list[Category]:
tb = TypeBuilder()
for i, category in enumerate(categories):
val = tb.Category.add_value(category.name)
val.alias(f"k{i}")
val.description(category.llm_description)
selected_categories = b.PickBestCategories(text, count=3, baml_options={ "tb": tb })
return [category for category in categories if category.name in selected_categories]
def _pick_best_category(text: str, categories: list[Category]) -> Category:
tb = TypeBuilder()
for i, category in enumerate(categories):
val = tb.Category.add_value(category.name)
val.alias(f"k{i}")
val.description(category.llm_description)
selected_category = b.PickBestCategory(text, { "tb": tb })
for category in categories:
if category.name == selected_category:
return category
# IMPOSSIBLE TO HAPPEN THANKS TO BAML!
raise ValueError(f"Selected category {selected_category} not found in categories")
@trace
def pick_category(text: str) -> str:
use_llm_to_narrow_down_categories = False
categories = load_categories()
narrowed_down_categories = _narrow_down_categories(text, categories)
if use_llm_to_narrow_down_categories:
narrowed_down_categories_llm = _narrow_down_categories_llm(text, categories)
narrowed_down_categories = narrowed_down_categories_llm
category = _pick_best_category(text, narrowed_down_categories)
return category.name
if __name__ == "__main__":
print(pick_category("I want to buy a new phone"))
================================================
FILE: 2025-03-31-large-scale-classification/meta.md
================================================
---
guid: aitw-001
title: S01E01 – Large Scale Classification
description: LLMs are great at classification from 5, 10, maybe even 50
categories. But how do we deal with situations when we have over 1000? Perhaps
it's an ever changing list of categories?
event_link: https://lu.ma/5tpb6qil
eventDate: 2025-03-31T18:00:00Z
media:
url: https://youtu.be/6B7MzraQMZk
type: video/youtube
links:
youtube: https://youtu.be/6B7MzraQMZk
code: https://github.com/ai-that-works/ai-that-works/tree/main/2025-03-31-large-scale-classification
season: 1
episode: 1
event_type: episode
---
================================================
FILE: 2025-03-31-large-scale-classification/pyproject.toml
================================================
[project]
name = "large-scale-classification"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.10"
dependencies = [
"baml-py==0.82.0",
"numpy>=2.2.4",
"openai>=1.70.0",
"python-dotenv>=1.1.0",
]
================================================
FILE: 2025-03-31-large-scale-classification/tools.json
================================================
{
"e2b__run_code": {
"name": "e2b__run_code",
"description": "Run python code in a secure sandbox by E2B. Using the Jupyter Notebook syntax.",
"inputSchema": {
"type": "object",
"properties": {
"code": {
"type": "string"
}
},
"required": [
"code"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"desktop-commander__execute_command": {
"name": "desktop-commander__execute_command",
"description": "Execute a terminal command with timeout. Command will continue running in background if it doesn't complete within timeout.",
"inputSchema": {
"type": "object",
"properties": {
"command": {
"type": "string"
},
"timeout_ms": {
"type": "number"
}
},
"required": [
"command"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"desktop-commander__read_output": {
"name": "desktop-commander__read_output",
"description": "Read new output from a running terminal session.",
"inputSchema": {
"type": "object",
"properties": {
"pid": {
"type": "number"
}
},
"required": [
"pid"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"desktop-commander__force_terminate": {
"name": "desktop-commander__force_terminate",
"description": "Force terminate a running terminal session.",
"inputSchema": {
"type": "object",
"properties": {
"pid": {
"type": "number"
}
},
"required": [
"pid"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"desktop-commander__list_sessions": {
"name": "desktop-commander__list_sessions",
"description": "List all active terminal sessions.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"desktop-commander__list_processes": {
"name": "desktop-commander__list_processes",
"description": "List all running processes. Returns process information including PID, command name, CPU usage, and memory usage.",
"inputSchema": {
"type": "object",
"properties": {},
"required": []
}
},
"desktop-commander__kill_process": {
"name": "desktop-commander__kill_process",
"description": "Terminate a running process by PID. Use with caution as this will forcefully terminate the specified process.",
"inputSchema": {
"type": "object",
"properties": {
"pid": {
"type": "number"
}
},
"required": [
"pid"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"desktop-commander__block_command": {
"name": "desktop-commander__block_command",
"description": "Add a command to the blacklist. Once blocked, the command cannot be executed until unblocked.",
"inputSchema": {
"type": "object",
"properties": {
"command": {
"type": "string"
}
},
"required": [
"command"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"desktop-commander__unblock_command": {
"name": "desktop-commander__unblock_command",
"description": "Remove a command from the blacklist. Once unblocked, the command can be executed normally.",
"inputSchema": {
"type": "object",
"properties": {
"command": {
"type": "string"
}
},
"required": [
"command"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"desktop-commander__list_blocked_commands": {
"name": "desktop-commander__list_blocked_commands",
"description": "List all currently blocked commands.",
"inputSchema": {
"type": "object",
"properties": {},
"required": []
}
},
"desktop-commander__read_file": {
"name": "desktop-commander__read_file",
"description": "Read the complete contents of a file from the file system. Reads UTF-8 text and provides detailed error messages if the file cannot be read. Only works within allowed directories.",
"inputSchema": {
"type": "object",
"properties": {
"path": {
"type": "string"
}
},
"required": [
"path"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"desktop-commander__read_multiple_files": {
"name": "desktop-commander__read_multiple_files",
"description": "Read the contents of multiple files simultaneously. Each file's content is returned with its path as a reference. Failed reads for individual files won't stop the entire operation. Only works within allowed directories.",
"inputSchema": {
"type": "object",
"properties": {
"paths": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"paths"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"desktop-commander__write_file": {
"name": "desktop-commander__write_file",
"description": "Completely replace file contents. Best for large changes (>20% of file) or when edit_block fails. Use with caution as it will overwrite existing files. Only works within allowed directories.",
"inputSchema": {
"type": "object",
"properties": {
"path": {
"type": "string"
},
"content": {
"type": "string" } }, "required": [
"path",
"content"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"desktop-commander__create_directory": {
"name": "desktop-commander__create_directory",
"description": "Create a new directory or ensure a directory exists. Can create multiple nested directories in one operation. Only works within allowed directories.",
"inputSchema": {
"type": "object",
"properties": {
"path": {
"type": "string"
}
},
"required": [
"path"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"desktop-commander__list_directory": {
"name": "desktop-commander__list_directory",
"description": "Get a detailed listing of all files and directories in a specified path. Results distinguish between files and directories with [FILE] and [DIR] prefixes. Only works within allowed directories.",
"inputSchema": {
"type": "object",
"properties": {
"path": {
"type": "string"
}
},
"required": [
"path"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"desktop-commander__move_file": {
"name": "desktop-commander__move_file",
"description": "Move or rename files and directories. Can move files between directories and rename them in a single operation. Both source and destination must be within allowed directories.",
"inputSchema": {
"type": "object",
"properties": {
"source": {
"type": "string"
},
"destination": {
"type": "string"
}
},
"required": [
"source",
"destination"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"desktop-commander__search_files": {
"name": "desktop-commander__search_files",
"description": "Finds files by name using a case-insensitive substring matching. Searches through all subdirectories from the starting path. Only searches within allowed directories.",
"inputSchema": {
"type": "object",
"properties": {
"path": {
"type": "string"
},
"pattern": {
"type": "string"
}
},
"required": [
"path",
"pattern"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"desktop-commander__search_code": {
"name": "desktop-commander__search_code",
"description": "Search for text/code patterns within file contents using ripgrep. Fast and powerful search similar to VS Code search functionality. Supports regular expressions, file pattern filtering, and context lines. Only searches within allowed directories.",
"inputSchema": {
"type": "object",
"properties": {
"path": {
"type": "string"
},
"pattern": {
"type": "string"
},
"filePattern": {
"type": "string"
},
"ignoreCase": {
"type": "boolean"
},
"maxResults": {
"type": "number"
},
"includeHidden": {
"type": "boolean"
},
"contextLines": {
"type": "number"
}
},
"required": [
"path",
"pattern"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"desktop-commander__get_file_info": {
"name": "desktop-commander__get_file_info",
"description": "Retrieve detailed metadata about a file or directory including size, creation time, last modified time, permissions, and type. Only works within allowed directories.",
"inputSchema": {
"type": "object",
"properties": {
"path": {
"type": "string"
}
},
"required": [
"path"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"desktop-commander__list_allowed_directories": {
"name": "desktop-commander__list_allowed_directories",
"description": "Returns the list of directories that this server is allowed to access.",
"inputSchema": {
"type": "object",
"properties": {},
"required": []
}
},
"desktop-commander__edit_block": {
"name": "desktop-commander__edit_block",
"description": "Apply surgical text replacements to files. Best for small changes (<20% of file size). Call repeatedly to change multiple blocks. Will verify changes after application. Format:\nfilepath\n<<<<<<< SEARCH\ncontent to find\n=======\nnew content\n>>>>>>> REPLACE",
"inputSchema": {
"type": "object",
"properties": {
"blockContent": {
"type": "string"
}
},
"required": [
"blockContent"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"brave-search__brave_web_search": {
"name": "brave-search__brave_web_search",
"description": "Performs a web search using the Brave Search API, ideal for general queries, news, articles, and online content. Use this for broad information gathering, recent events, or when you need diverse web sources. Supports pagination, content filtering, and freshness controls. Maximum 20 results per request, with offset for pagination. ",
"inputSchema": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Search query (max 400 chars, 50 words)"
},
"count": {
"type": "number",
"description": "Number of results (1-20, default 10)",
"default": 10
},
"offset": {
"type": "number",
"description": "Pagination offset (max 9, default 0)",
"default": 0
}
},
"required": [
"query"
]
}
},
"brave-search__brave_local_search": {
"name": "brave-search__brave_local_search",
"description": "Searches for local businesses and places using Brave's Local Search API. Best for queries related to physical locations, businesses, restaurants, services, etc. Returns detailed information including:\n- Business names and addresses\n- Ratings and review counts\n- Phone numbers and opening hours\nUse this when the query implies 'near me' or mentions specific locations. Automatically falls back to web search if no local results are found.",
"inputSchema": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Local search query (e.g. 'pizza near Central Park')"
},
"count": {
"type": "number",
"description": "Number of results (1-20, default 5)",
"default": 5
}
},
"required": [
"query"
]
}
},
"neon____node_version": {
"name": "neon____node_version",
"description": "Get the Node.js version used by the MCP server",
"inputSchema": {
"type": "object",
"properties": {
"params": {
"type": "object",
"properties": {},
"additionalProperties": false
}
},
"required": [
"params"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"neon__list_projects": {
"name": "neon__list_projects",
"description": "List all Neon projects in your account.",
"inputSchema": {
"type": "object",
"properties": {
"params": {
"type": "object",
"properties": {
"cursor": {
"type": "string",
"description": "Specify the cursor value from the previous response to retrieve the next batch of projects."
},
"limit": {
"type": "number",
"description": "Specify a value from 1 to 400 to limit number of projects in the response."
},
"search": {
"type": "string",
"description": "Search by project name or id. You can specify partial name or id values to filter results."
},
"org_id": {
"type": "string",
"description": "Search for projects by org_id."
}
},
"additionalProperties": false
}
},
"required": [
"params"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"neon__create_project": {
"name": "neon__create_project",
"description": "Create a new Neon project. If someone is trying to create a database, use this tool.",
"inputSchema": {
"type": "object",
"properties": {
"params": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "An optional name of the project to create."
}
},
"additionalProperties": false
}
},
"required": [
"params"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"neon__delete_project": {
"name": "neon__delete_project",
"description": "Delete a Neon project",
"inputSchema": {
"type": "object",
"properties": {
"params": {
"type": "object",
"properties": {
"projectId": {
"type": "string",
"description": "The ID of the project to delete"
}
},
"required": [
"projectId"
],
"additionalProperties": false
}
},
"required": [
"params"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"neon__describe_project": {
"name": "neon__describe_project",
"description": "Describes a Neon project",
"inputSchema": {
"type": "object",
"properties": {
"params": {
"type": "object",
"properties": {
"projectId": {
"type": "string",
"description": "The ID of the project to describe"
}
},
"required": [
"projectId"
],
"additionalProperties": false
}
},
"required": [
"params"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"neon__run_sql": {
"name": "neon__run_sql",
"description": "Execute a single SQL statement against a Neon database",
"inputSchema": {
"type": "object",
"properties": {
"params": {
"type": "object",
"properties": {
"sql": {
"type": "string",
"description": "The SQL query to execute"
},
"databaseName": {
"type": "string",
"description": "The name of the database to execute the query against"
},
"projectId": {
"type": "string",
"description": "The ID of the project to execute the query against"
},
"branchId": {
"type": "string",
"description": "An optional ID of the branch to execute the query against"
}
},
"required": [
"sql",
"databaseName",
"projectId"
],
"additionalProperties": false
}
},
"required": [
"params"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"neon__run_sql_transaction": {
"name": "neon__run_sql_transaction",
"description": "Execute a SQL transaction against a Neon database, should be used for multiple SQL statements",
"inputSchema": {
"type": "object",
"properties": {
"params": {
"type": "object",
"properties": {
"sqlStatements": {
"type": "array",
"items": {
"type": "string"
},
"description": "The SQL statements to execute"
},
"databaseName": {
"type": "string",
"description": "The name of the database to execute the query against"
},
"projectId": {
"type": "string",
"description": "The ID of the project to execute the query against"
},
"branchId": {
"type": "string",
"description": "An optional ID of the branch to execute the query against"
}
},
"required": [
"sqlStatements",
"databaseName",
"projectId"
],
"additionalProperties": false
}
},
"required": [
"params"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"neon__describe_table_schema": {
"name": "neon__describe_table_schema",
"description": "Describe the schema of a table in a Neon database",
"inputSchema": {
"type": "object",
"properties": {
"params": {
"type": "object",
"properties": {
"tableName": {
"type": "string",
"description": "The name of the table"
},
"databaseName": {
"type": "string",
"description": "The name of the database to get the table schema from"
},
"projectId": {
"type": "string",
"description": "The ID of the project to execute the query against"
},
"branchId": {
"type": "string",
"description": "An optional ID of the branch to execute the query against"
}
},
"required": [
"tableName",
"databaseName",
"projectId"
],
"additionalProperties": false
}
},
"required": [
"params"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"neon__get_database_tables": {
"name": "neon__get_database_tables",
"description": "Get all tables in a Neon database",
"inputSchema": {
"type": "object",
"properties": {
"params": {
"type": "object",
"properties": {
"projectId": {
"type": "string",
"description": "The ID of the project"
},
"branchId": {
"type": "string",
"description": "An optional ID of the branch"
},
"databaseName": {
"type": "string",
"description": "The name of the database"
}
},
"required": [
"projectId",
"databaseName"
],
"additionalProperties": false
}
},
"required": [
"params"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"neon__create_branch": {
"name": "neon__create_branch",
"description": "Create a branch in a Neon project",
"inputSchema": {
"type": "object",
"properties": {
"params": {
"type": "object",
"properties": {
"projectId": {
"type": "string",
"description": "The ID of the project to create the branch in"
},
"branchName": {
"type": "string",
"description": "An optional name for the branch"
}
},
"required": [
"projectId"
],
"additionalProperties": false
}
},
"required": [
"params"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"neon__prepare_database_migration": {
"name": "neon__prepare_database_migration",
"description": "\n <use_case>\n This tool performs database schema migrations by automatically generating and executing DDL statements.\n \n Supported operations:\n CREATE operations:\n - Add new columns (e.g., \"Add email column to users table\")\n - Create new tables (e.g., \"Create posts table with title and content columns\")\n - Add constraints (e.g., \"Add unique constraint on users.email\")\n\n ALTER operations:\n - Modify column types (e.g., \"Change posts.views to bigint\")\n - Rename columns (e.g., \"Rename user_name to username in users table\")\n - Add/modify indexes (e.g., \"Add index on posts.title\")\n - Add/modify foreign keys (e.g., \"Add foreign key from posts.user_id to users.id\")\n\n DROP operations:\n - Remove columns (e.g., \"Drop temporary_field from users table\")\n - Drop tables (e.g., \"Drop the old_logs table\")\n - Remove constraints (e.g., \"Remove unique constraint from posts.slug\")\n\n The tool will:\n 1. Parse your natural language request\n 2. Generate appropriate SQL\n 3. Execute in a temporary branch for safety\n 4. Verify the changes before applying to main branch\n\n Project ID and database name will be automatically extracted from your request.\n Default database is neondb if not specified.\n </use_case>\n\n <workflow>\n 1. Creates a temporary branch\n 2. Applies the migration SQL in that branch\n 3. Returns migration details for verification\n </workflow>\n\n <important_notes>\n After executing this tool, you MUST:\n 1. Test the migration in the temporary branch using the 'run_sql' tool\n 2. Ask for confirmation before proceeding\n 3. Use 'complete_database_migration' tool to apply changes to main branch\n </important_notes>\n\n <example>\n For a migration like:\n ALTER TABLE users ADD COLUMN last_login TIMESTAMP;\n \n You should test it with:\n SELECT column_name, data_type \n FROM information_schema.columns \n WHERE table_name = 'users' AND column_name = 'last_login';\n \n You can use 'run_sql' to test the migration in the temporary branch that this\n tool creates.\n </example>\n\n\n <next_steps>\n After executing this tool, you MUST follow these steps:\n 1. Use 'run_sql' to verify changes on temporary branch\n 2. Follow these instructions to respond to the client: \n\n <response_instructions>\n <instructions>\n Provide a brief confirmation of the requested change and ask for migration commit approval.\n\n You MUST include ALL of the following fields in your response:\n - Migration ID (this is required for commit and must be shown first) \n - Temporary Branch Name (always include exact branch name)\n - Temporary Branch ID (always include exact ID)\n - Migration Result (include brief success/failure status)\n\n Even if some fields are missing from the tool's response, use placeholders like \"not provided\" rather than omitting fields.\n </instructions>\n\n <do_not_include>\n IMPORTANT: Your response MUST NOT contain ANY technical implementation details such as:\n - Data types (e.g., DO NOT mention if a column is boolean, varchar, timestamp, etc.)\n - Column specifications or properties\n - SQL syntax or statements\n - Constraint definitions or rules\n - Default values\n - Index types\n - Foreign key specifications\n \n Keep the response focused ONLY on confirming the high-level change and requesting approval.\n \n <example>\n INCORRECT: \"I've added a boolean is_published column to the posts table...\"\n CORRECT: \"I've added the is_published column to the posts table...\"\n </example>\n </do_not_include>\n\n <example>\n I've verified that [requested change] has been successfully applied to a temporary branch. Would you like to commit the migration [migration_id] to the main branch?\n \n Migration Details:\n - Migration ID (required for commit)\n - Temporary Branch Name\n - Temporary Branch ID\n - Migration Result\n </example>\n </response_instructions>\n\n 3. If approved, use 'complete_database_migration' tool with the migration_id\n </next_steps>\n\n <error_handling>\n On error, the tool will:\n 1. Automatically attempt ONE retry of the exact same operation\n 2. If the retry fails:\n - Terminate execution\n - Return error details\n - DO NOT attempt any other tools or alternatives\n \n Error response will include:\n - Original error details\n - Confirmation that retry was attempted\n - Final error state\n \n Important: After a failed retry, you must terminate the current flow completely. Do not attempt to use alternative tools or workarounds.\n </error_handling>\n ",
"inputSchema": {
"type": "object",
"properties": {
"params": {
"type": "object",
"properties": {
"migrationSql": {
"type": "string",
"description": "The SQL to execute to create the migration"
},
"databaseName": {
"type": "string",
"description": "The name of the database to execute the query against"
},
"projectId": {
"type": "string",
"description": "The ID of the project to execute the query against"
}
},
"required": [
"migrationSql",
"databaseName",
"projectId"
],
"additionalProperties": false
}
},
"required": [
"params"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"neon__complete_database_migration": {
"name": "neon__complete_database_migration",
"description": "Complete a database migration when the user confirms the migration is ready to be applied to the main branch. This tool also lets the client know that the temporary branch created by the prepare_database_migration tool has been deleted.",
"inputSchema": {
"type": "object",
"properties": {
"params": {
"type": "object",
"properties": {
"migrationId": {
"type": "string"
}
},
"required": [
"migrationId"
],
"additionalProperties": false
}
},
"required": [
"params"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"neon__describe_branch": {
"name": "neon__describe_branch",
"description": "Get a tree view of all objects in a branch, including databases, schemas, tables, views, and functions",
"inputSchema": {
"type": "object",
"properties": {
"params": {
"type": "object",
"properties": {
"projectId": {
"type": "string",
"description": "The ID of the project"
},
"branchId": {
"type": "string",
"description": "An ID of the branch to describe"
},
"databaseName": {
"type": "string",
"description": "The name of the database"
}
},
"required": [
"projectId",
"branchId",
"databaseName"
],
"additionalProperties": false
}
},
"required": [
"params"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"neon__delete_branch": {
"name": "neon__delete_branch",
"description": "Delete a branch from a Neon project",
"inputSchema": {
"type": "object",
"properties": {
"params": {
"type": "object",
"properties": {
"projectId": {
"type": "string",
"description": "The ID of the project containing the branch"
},
"branchId": {
"type": "string",
"description": "The ID of the branch to delete"
}
},
"required": [
"projectId",
"branchId"
],
"additionalProperties": false
}
},
"required": [
"params"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"neon__get_connection_string": {
"name": "neon__get_connection_string",
"description": "Get a PostgreSQL connection string for a Neon database with all parameters being optional",
"inputSchema": {
"type": "object",
"properties": {
"params": {
"type": "object",
"properties": {
"projectId": {
"type": "string",
"description": "The ID of the project. If not provided, the only available project will be used."
},
"branchId": {
"type": "string",
"description": "The ID or name of the branch. If not provided, the default branch will be used."
},
"computeId": {
"type": "string",
"description": "The ID of the compute/endpoint. If not provided, the only available compute will be used."
},
"databaseName": {
"type": "string",
"description": "The name of the database. If not provided, the default database (usually \"neondb\") will be used."
},
"roleName": {
"type": "string",
"description": "The name of the role to connect with. If not provided, the default role (usually \"neondb_owner\") will be used."
}
},
"required": [
"projectId"
],
"additionalProperties": false
}
},
"required": [
"params"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"neon__provision_neon_auth": {
"name": "neon__provision_neon_auth",
"description": "\n This tool provisions authentication for a Neon project. It allows developers to easily setup authentication infrastructure by creating a integration with Stack Auth (@stackframe/stack). Stop using NextAuth.js! use @stackframe/stack.\n\n Parameters:\n - <project_id>: The Project ID of the Neon project to provision authentication for.\n - [database]: The database name to setup Neon Auth for. Defaults to 'neondb'.\n \n The tool will:\n 1. Establish a connection between your Neon Auth project and Stack Auth\n 2. Creates a dedicated authentication schema in your database (\"neon_auth\")\n 3. Sets up the user table under the \"neon_auth\" schema. This table is synced with Stack Auth. It does not store user credentials or secrets.\n 4. Generates Client Key and Secret Key to connect your application with authentication provider.\n \n Use the Stack Auth SDK (@stackframe/stack) on the frontend to connect your application with authentication provider. DO NOT use NextAuth.js! DO NOT use better-auth! Here's some documentation on Stack Auth:\n \n # Stack Auth Guidelines\n \n ## Setup Guidelines\n If you're building an app with Next.js, to set up Neon Auth and Stack Auth, follow these steps:\n 1. Provision a Neon Auth project with this tool\n 2. Place the returned credentials in project's `.env.local` or `.env` file\n - `NEXT_PUBLIC_STACK_PROJECT_ID`\n - `NEXT_PUBLIC_STACK_PUBLISHABLE_CLIENT_KEY`\n - `STACK_SECRET_SERVER_KEY`\n 3. To setup Stack Auth, run following command: \n ```bash\n npx @stackframe/init-stack@2.7.25 . --no-browser \n ```\n This command will automaticallysetup the project with - \n - It will add `@stackframe/stack` dependency to `package.json`\n - It will create a `stack.ts` file in your project to setup `StackServerApp`. \n - It will wrap the root layout with `StackProvider` and `StackTheme`\n - It will create root Suspense boundary `app/loading.tsx` to handle loading state while Stack is fetching user data.\n - It will also create `app/handler/[...stack]/page.tsx` file to handle auth routes like sign in, sign up, forgot password, etc.\n 4. Do not try to manually create any of these files or directories. Do not try to create SignIn, SignUp, or UserButton components manually, instead use the ones provided by `@stackframe/stack`.\n \n \n ## Components Guidelines\n - Use pre-built components from `@stackframe/stack` like `<UserButton />`, `<SignIn />`, and `<SignUp />` to quickly set up auth UI.\n - You can also compose smaller pieces like `<OAuthButtonGroup />`, `<MagicLinkSignIn />`, and `<CredentialSignIn />` for custom flows.\n - Example:\n \n ```tsx\n import { SignIn } from '@stackframe/stack';\n export default function Page() {\n return <SignIn />;\n }\n ```\n\n ## User Management Guidelines\n - In Client Components, use the `useUser()` hook to retrieve the current user (it returns `null` when not signed in).\n - Update user details using `user.update({...})` and sign out via `user.signOut()`.\n - For pages that require a user, call `useUser({ or: \"redirect\" })` so unauthorized visitors are automatically redirected.\n \n ## Client Component Guidelines\n - Client Components rely on hooks like `useUser()` and `useStackApp()`.\n - Example:\n \n ```tsx\n \"use client\";\n import { useUser } from \"@stackframe/stack\";\n export function MyComponent() {\n const user = useUser();\n return <div>{user ? `Hello, ${user.displayName}` : \"Not logged in\"}</div>;\n }\n ```\n \n ## Server Component Guidelines\n - For Server Components, use `stackServerApp.getUser()` from your `stack.ts` file.\n - Example:\n \n ```tsx\n import { stackServerApp } from \"@/stack\";\n export default async function ServerComponent() {\n const user = await stackServerApp.getUser();\n return <div>{user ? `Hello, ${user.displayName}` : \"Not logged in\"}</div>;\n }\n ```\n \n ## Page Protection Guidelines\n - Protect pages by:\n - Using `useUser({ or: \"redirect\" })` in Client Components.\n - Using `await stackServerApp.getUser({ or: \"redirect\" })` in Server Components.\n - Implementing middleware that checks for a user and redirects to `/handler/sign-in` if not found.\n - Example middleware:\n \n ```tsx\n export async function middleware(request: NextRequest) {\n const user = await stackServerApp.getUser();\n if (!user) {\n return NextResponse.redirect(new URL('/handler/sign-in', request.url));\n }\n return NextResponse.next();\n }\n export const config = { matcher: '/protected/:path*' };\n ```\n \n ```\n ## Examples\n ### Example: custom-profile-page\n #### Task\n Create a custom profile page that:\n - Displays the user's avatar, display name, and email.\n - Provides options to sign out.\n - Uses Stack Auth components and hooks.\n #### Response\n ##### File: app/profile/page.tsx\n ###### Code\n ```tsx\n 'use client';\n import { useUser, useStackApp, UserButton } from '@stackframe/stack';\n export default function ProfilePage() {\n const user = useUser({ or: \"redirect\" });\n const app = useStackApp();\n return (\n <div>\n <UserButton />\n <h1>Welcome, {user.displayName || \"User\"}</h1>\n <p>Email: {user.primaryEmail}</p>\n <button onClick={() => user.signOut()}>Sign Out</button>\n </div>\n );\n }\n ```\n ",
"inputSchema": {
"type": "object",
"properties": {
"params": {
"type": "object",
"properties": {
"projectId": {
"type": "string",
"description": "The ID of the project to provision Neon Auth for"
},
"database": {
"type": "string",
"description": "The database name to setup Neon Auth for. Defaults to 'neondb'",
"default": "neondb"
}
},
"required": [
"projectId"
],
"additionalProperties": false
}
},
"required": [
"params"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"notion-api-mcp__create_page": {
"name": "notion-api-mcp__create_page",
"description": "Create a new page in Notion",
"inputSchema": {
"type": "object",
"properties": {
"parent_id": {
"title": "Parent Id",
"type": "string"
},
"properties": {
"type": "object",
"additionalProperties": true,
"title": "Properties"
},
"children": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Children"
},
"is_database": {
"default": true,
"title": "Is Database",
"type": "boolean"
}
},
"required": [
"parent_id",
"properties"
],
"title": "handle_create_pageArguments"
}
},
"notion-api-mcp__get_page": {
"name": "notion-api-mcp__get_page",
"description": "Retrieve a Notion page by its ID",
"inputSchema": {
"type": "object",
"properties": {
"page_id": {
"title": "Page Id",
"type": "string"
}
},
"required": [
"page_id"
],
"title": "handle_get_pageArguments"
}
},
"notion-api-mcp__update_page": {
"name": "notion-api-mcp__update_page",
"description": "Update a Notion page",
"inputSchema": {
"type": "object",
"properties": {
"page_id": {
"title": "Page Id",
"type": "string"
},
"properties": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Properties"
},
"archived": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Archived"
}
},
"required": [
"page_id"
],
"title": "handle_update_pageArguments"
}
},
"notion-api-mcp__archive_page": {
"name": "notion-api-mcp__archive_page",
"description": "Archive a Notion page",
"inputSchema": {
"type": "object",
"properties": {
"page_id": {
"title": "Page Id",
"type": "string"
}
},
"required": [
"page_id"
],
"title": "handle_archive_pageArguments"
}
},
"notion-api-mcp__restore_page": {
"name": "notion-api-mcp__restore_page",
"description": "Restore an archived Notion page",
"inputSchema": {
"type": "object",
"properties": {
"page_id": {
"title": "Page Id",
"type": "string"
}
},
"required": [
"page_id"
],
"title": "handle_restore_pageArguments"
}
},
"notion-api-mcp__get_page_property": {
"name": "notion-api-mcp__get_page_property",
"description": "Get a page property item",
"inputSchema": {
"type": "object",
"properties": {
"page_id": {
"title": "Page Id",
"type": "string"
},
"property_id": {
"title": "Property Id",
"type": "string"
},
"page_size": {
"default": 100,
"title": "Page Size",
"type": "integer"
}
},
"required": [
"page_id",
"property_id"
],
"title": "handle_get_property_itemArguments"
}
},
"notion-api-mcp__add_todo": {
"name": "notion-api-mcp__add_todo",
"description": "Add a new todo with rich features",
"inputSchema": {
"type": "object",
"properties": {
"task": {
"title": "Task",
"type": "string"
},
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Description"
},
"due_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Due Date"
},
"priority": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Priority"
},
"tags": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Tags"
}
},
"required": [
"task"
],
"title": "handle_add_todoArguments"
}
},
"notion-api-mcp__search_todos": {
"name": "notion-api-mcp__search_todos",
"description": "Search todos with advanced filtering",
"inputSchema": {
"type": "object",
"properties": {
"query": {
"title": "Query",
"type": "string"
},
"property_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Property Name"
},
"sort_by": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Sort By"
},
"sort_direction": {
"default": "ascending",
"title": "Sort Direction",
"type": "string"
}
},
"required": [
"query"
],
"title": "handle_search_todosArguments"
}
},
"notion-api-mcp__create_database": {
"name": "notion-api-mcp__create_database",
"description": "Create a new database with custom schema in a parent page",
"inputSchema": {
"type": "object",
"properties": {
"parent_page_id": {
"title": "Parent Page Id",
"type": "string"
},
"title": {
"title": "Title",
"type": "string"
},
"properties": {
"type": "object",
"additionalProperties": true,
"title": "Properties"
}
},
"required": [
"parent_page_id",
"title",
"properties"
],
"title": "handle_create_databaseArguments"
}
},
"notion-api-mcp__query_database": {
"name": "notion-api-mcp__query_database",
"description": "Query database with filters and sorting",
"inputSchema": {
"type": "object",
"properties": {
"database_id": {
"title": "Database Id",
"type": "string"
},
"filter_conditions": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"title": "Filter Conditions"
},
"sorts": {
"anyOf": [
{
"items": {
"additionalProperties": true,
"type": "object"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Sorts"
}
},
"required": [
"database_id"
],
"title": "handle_query_databaseArguments"
}
},
"notion-api-mcp__verify_connection": {
"name": "notion-api-mcp__verify_connection",
"description": "Verify authentication with Notion API",
"inputSchema": {
"type": "object",
"properties": {},
"title": "handle_verify_connectionArguments"
}
},
"notion-api-mcp__get_database_info": {
"name": "notion-api-mcp__get_database_info",
"description": "Get information about the configured database",
"inputSchema": {
"type": "object",
"properties": {},
"title": "handle_get_database_infoArguments"
}
},
"notion-api-mcp__add_content_blocks": {
"name": "notion-api-mcp__add_content_blocks",
"description": "Add content blocks with positioning support",
"inputSchema": {
"type": "object",
"properties": {
"page_id": {
"title": "Page Id",
"type": "string"
},
"blocks": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Blocks",
"type": "array"
},
"after": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "After"
},
"batch_size": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Batch Size"
}
},
"required": [
"page_id",
"blocks"
],
"title": "handle_add_blocksArguments"
}
},
"notion-api-mcp__get_block_content": {
"name": "notion-api-mcp__get_block_content",
"description": "Get content of a specific block by its ID",
"inputSchema": {
"type": "object",
"properties": {
"block_id": {
"title": "Block Id",
"type": "string"
}
},
"required": [
"block_id"
],
"title": "handle_get_blockArguments"
}
},
"notion-api-mcp__list_block_children": {
"name": "notion-api-mcp__list_block_children",
"description": "List all children of a block",
"inputSchema": {
"type": "object",
"properties": {
"block_id": {
"title": "Block Id",
"type": "string"
},
"page_size": {
"default": 100,
"title": "Page Size",
"type": "integer"
}
},
"required": [
"block_id"
],
"title": "handle_list_block_childrenArguments"
}
},
"notion-api-mcp__update_block_content": {
"name": "notion-api-mcp__update_block_content",
"description": "Update a block's content by its ID",
"inputSchema": {
"type": "object",
"properties": {
"block_id": {
"title": "Block Id",
"type": "string"
},
"content": {
"additionalProperties": true,
"title": "Content",
"type": "object"
}
},
"required": [
"block_id",
"content"
],
"title": "handle_update_blockArguments"
}
},
"notion-api-mcp__delete_block": {
"name": "notion-api-mcp__delete_block",
"description": "Delete blocks",
"inputSchema": {
"type": "object",
"properties": {
"block_id": {
"title": "Block Id",
"type": "string"
}
},
"required": [
"block_id"
],
"title": "handle_delete_blockArguments"
}
},
"linear-mcp-server__linear_create_issue": {
"name": "linear-mcp-server__linear_create_issue",
"description": "Creates a new Linear issue with specified details. Use this to create tickets for tasks, bugs, or feature requests. Returns the created issue's identifier and URL. Required fields are title and teamId, with optional description, priority (0-4, where 0 is no priority and 1 is urgent), and status.",
"inputSchema": {
"type": "object",
"properties": {
"title": {
"type": "string",
"description": "Issue title"
},
"teamId": {
"type": "string",
"description": "Team ID"
},
"description": {
"type": "string",
"description": "Issue description"
},
"priority": {
"type": "number",
"description": "Priority (0-4)"
},
"status": {
"type": "string",
"description": "Issue status"
}
},
"required": [
"title",
"teamId"
]
}
},
"linear-mcp-server__linear_update_issue": {
"name": "linear-mcp-server__linear_update_issue",
"description": "Updates an existing Linear issue's properties. Use this to modify issue details like title, description, priority, or status. Requires the issue ID and accepts any combination of updatable fields. Returns the updated issue's identifier and URL.",
"inputSchema": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Issue ID"
},
"title": {
"type": "string",
"description": "New title"
},
"description": {
"type": "string",
"description": "New description"
},
"priority": {
"type": "number",
"description": "New priority (0-4)"
},
"status": {
"type": "string",
"description": "New status"
}
},
"required": [
"id"
]
}
},
"linear-mcp-server__linear_search_issues": {
"name": "linear-mcp-server__linear_search_issues",
"description": "Searches Linear issues using flexible criteria. Supports filtering by any combination of: title/description text, team, status, assignee, labels, priority (1=urgent, 2=high, 3=normal, 4=low), and estimate. Returns up to 10 issues by default (configurable via limit).",
"inputSchema": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Optional text to search in title and description"
},
"teamId": {
"type": "string",
"description": "Filter by team ID"
},
"status": {
"type": "string",
"description": "Filter by status name (e.g., 'In Progress', 'Done')"
},
"assigneeId": {
"type": "string",
"description": "Filter by assignee's user ID"
},
"labels": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter by label names"
},
"priority": {
"type": "number",
"description": "Filter by priority (1=urgent, 2=high, 3=normal, 4=low)"
},
"estimate": {
"type": "number",
"description": "Filter by estimate points"
},
"includeArchived": {
"type": "boolean",
"description": "Include archived issues in results (default: false)"
},
"limit": {
"type": "number",
"description": "Max results to return (default: 10)"
}
}
}
},
"linear-mcp-server__linear_get_user_issues": {
"name": "linear-mcp-server__linear_get_user_issues",
"description": "Retrieves issues assigned to a specific user or the authenticated user if no userId is provided. Returns issues sorted by last updated, including priority, status, and other metadata. Useful for finding a user's workload or tracking assigned tasks.",
"inputSchema": {
"type": "object",
"properties": {
"userId": {
"type": "string",
"description": "Optional user ID. If not provided, returns authenticated user's issues"
},
"includeArchived": {
"type": "boolean",
"description": "Include archived issues in results"
},
"limit": {
"type": "number",
"description": "Maximum number of issues to return (default: 50)"
}
}
}
},
"linear-mcp-server__linear_add_comment": {
"name": "linear-mcp-server__linear_add_comment",
"description": "Adds a comment to an existing Linear issue. Supports markdown formatting in the comment body. Can optionally specify a custom user name and avatar for the comment. Returns the created comment's details including its URL.",
"inputSchema": {
"type": "object",
"properties": {
"issueId": {
"type": "string",
"description": "ID of the issue to comment on"
},
"body": {
"type": "string",
"description": "Comment text in markdown format"
},
"createAsUser": {
"type": "string",
"description": "Optional custom username to show for the comment"
},
"displayIconUrl": {
"type": "string",
"description": "Optional avatar URL for the comment"
}
},
"required": [
"issueId",
"body"
]
}
},
"claude-code-mcp__bash": {
"name": "claude-code-mcp__bash",
"description": "Execute a shell command",
"inputSchema": {
"type": "object",
"properties": {
"command": {
"type": "string",
"description": "The shell command to execute"
},
"timeout": {
"type": "number",
"description": "Optional timeout in milliseconds (max 600000)"
}
},
"required": [
"command"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"claude-code-mcp__readFile": {
"name": "claude-code-mcp__readFile",
"description": "Read a file from the local filesystem",
"inputSchema": {
"type": "object",
"properties": {
"file_path": {
"type": "string",
"description": "The absolute path to the file to read"
},
"offset": {
"type": "number",
"description": "The line number to start reading from"
},
"limit": {
"type": "number",
"description": "The number of lines to read"
}
},
"required": [
"file_path"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"claude-code-mcp__listFiles": {
"name": "claude-code-mcp__listFiles",
"description": "Lists files and directories in a given path",
"inputSchema": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "The absolute path to the directory to list"
}
},
"required": [
"path"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"claude-code-mcp__searchGlob": {
"name": "claude-code-mcp__searchGlob",
"description": "Search for files matching a pattern",
"inputSchema": {
"type": "object",
"properties": {
"pattern": {
"type": "string",
"description": "The glob pattern to match files against"
},
"path": {
"type": "string",
"description": "The directory to search in. Defaults to the current working directory."
}
},
"required": [
"pattern"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"claude-code-mcp__grep": {
"name": "claude-code-mcp__grep",
"description": "Search for text in files",
"inputSchema": {
"type": "object",
"properties": {
"pattern": {
"type": "string",
"description": "The regular expression pattern to search for in file contents"
},
"path": {
"type": "string",
"description": "The directory to search in. Defaults to the current working directory."
},
"include": {
"type": "string",
"description": "File pattern to include in the search (e.g. \"*.js\", \"*.{ts,tsx}\")"
}
},
"required": [
"pattern"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"claude-code-mcp__think": {
"name": "claude-code-mcp__think",
"description": "A tool for thinking through complex problems",
"inputSchema": {
"type": "object",
"properties": {
"thought": {
"type": "string",
"description": "Your thoughts"
}
},
"required": [
"thought"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"claude-code-mcp__codeReview": {
"name": "claude-code-mcp__codeReview",
"description": "Review code for bugs, security issues, and best practices",
"inputSchema": {
"type": "object",
"properties": {
"code": {
"type": "string",
"description": "The code to review"
}
},
"required": [
"code"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"claude-code-mcp__editFile": {
"name": "claude-code-mcp__editFile",
"description": "Create or edit a file",
"inputSchema": {
"type": "object",
"properties": {
"file_path": {
"type": "string",
"description": "The absolute path to the file to edit"
},
"content": {
"type": "string",
"description": "The new content for the file"
}
},
"required": [
"file_path",
"content"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"playwright-mcp-server__echo": {
"name": "playwright-mcp-server__echo",
"description": "入力されたメッセージをそのまま返します",
"inputSchema": {
"type": "object",
"properties": {
"message": {
"type": "string",
"description": "エコーするメッセージ"
}
},
"required": [
"message"
]
}
},
"playwright-mcp-server__navigate": {
"name": "playwright-mcp-server__navigate",
"description": "指定されたURLにブラウザでアクセスします",
"inputSchema": {
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "アクセスするURL"
}
},
"required": [
"url"
]
}
},
"playwright-mcp-server__get_all_content": {
"name": "playwright-mcp-server__get_all_content",
"description": "現在開いているページのコンテンツを取得し、HTML構造を保持した形式で返します",
"inputSchema": {
"type": "object",
"properties": {},
"required": []
}
},
"playwright-mcp-server__get_visible_content": {
"name": "playwright-mcp-server__get_visible_content",
"description": "現在開いているページの表示領域内のコンテンツを取得します",
"inputSchema": {
"type": "object",
"properties": {
"minVisiblePercentage": {
"type": "number",
"description": "要素の最小可視率(%)",
"minimum": 0,
"maximum": 100
}
},
"required": []
}
},
"playwright-mcp-server__get_interactive_elements": {
"name": "playwright-mcp-server__get_interactive_elements",
"description": "ページ内のインタラクティブ要素(ボタン、テキストエリア、ラジオボタンなど)の座標と範囲を取得します",
"inputSchema": {
"type": "object",
"properties": {},
"required": []
}
},
"playwright-mcp-server__move_mouse": {
"name": "playwright-mcp-server__move_mouse",
"description": "指定された座標にマウスカーソルを移動します",
"inputSchema": {
"type": "object",
"properties": {
"x": {
"type": "number",
"description": "X座標"
},
"y": {
"type": "number",
"description": "Y座標"
}
},
"required": [
"x",
"y"
]
}
},
"playwright-mcp-server__mouse_click": {
"name": "playwright-mcp-server__mouse_click",
"description": "指定された座標でマウスクリックを実行します",
"inputSchema": {
"type": "object",
"properties": {
"x": {
"type": "number",
"description": "X座標"
},
"y": {
"type": "number",
"description": "Y座標"
},
"button": {
"type": "string",
"description": "マウスボタン('left', 'right', 'middle')",
"enum": [
"left",
"right",
"middle"
]
},
"clickCount": {
"type": "number",
"description": "クリック回数(デフォルト: 1)"
}
},
"required": [
"x",
"y"
]
}
},
"playwright-mcp-server__mouse_wheel": {
"name": "playwright-mcp-server__mouse_wheel",
"description": "マウスホイールのスクロールを実行します",
"inputSchema": {
"type": "object",
"properties": {
"deltaX": {
"type": "number",
"description": "水平方向のスクロール量(ピクセル)"
},
"deltaY": {
"type": "number",
"description": "垂直方向のスクロール量(ピクセル)"
}
},
"required": [
"deltaY"
]
}
},
"playwright-mcp-server__drag_and_drop": {
"name": "playwright-mcp-server__drag_and_drop",
"description": "ドラッグアンドドロップ操作を実行します",
"inputSchema": {
"type": "object",
"properties": {
"sourceX": {
"type": "number",
"description": "ドラッグ開始位置のX座標"
},
"sourceY": {
"type": "number",
"description": "ドラッグ開始位置のY座標"
},
"targetX": {
"type": "number",
"description": "ドロップ位置のX座標"
},
"targetY": {
"type": "number",
"description": "ドロップ位置のY座標"
}
},
"required": [
"sourceX",
"sourceY",
"targetX",
"targetY"
]
}
},
"mcp-duckdb-memory-server__create_entities": {
"name": "mcp-duckdb-memory-server__create_entities",
"description": "Create multiple new entities in the knowledge graph",
"inputSchema": {
"type": "object",
"properties": {
"entities": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The name of the entity"
},
"entityType": {
"type": "string",
"description": "The type of the entity"
},
"observations": {
"type": "array",
"items": {
"type": "string"
},
"description": "An array of observation contents associated with the entity"
}
},
"required": [
"name",
"entityType",
"observations"
],
"additionalProperties": false
}
}
},
"required": [
"entities"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"mcp-duckdb-memory-server__create_relations": {
"name": "mcp-duckdb-memory-server__create_relations",
"description": "Create multiple new relations between entities in the knowledge graph. Relations should be in active voice",
"inputSchema": {
"type": "object",
"properties": {
"relations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"from": {
"type": "string",
"description": "The name of the entity where the relation starts"
},
"to": {
"type": "string",
"description": "The name of the entity where the relation ends"
},
"relationType": {
"type": "string",
"description": "The type of the relation"
}
},
"required": [
"from",
"to",
"relationType"
],
"additionalProperties": false
}
}
},
"required": [
"relations"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"mcp-duckdb-memory-server__add_observations": {
"name": "mcp-duckdb-memory-server__add_observations",
"description": "Add new observations to existing entities in the knowledge graph",
"inputSchema": {
"type": "object",
"properties": {
"observations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"entityName": {
"type": "string",
"description": "The name of the entity to add the observations to"
},
"contents": {
"type": "array",
"items": {
"type": "string"
},
"description": "An array of observation contents to add"
}
},
"required": [
"entityName",
"contents"
],
"additionalProperties": false
}
}
},
"required": [
"observations"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"mcp-duckdb-memory-server__delete_entities": {
"name": "mcp-duckdb-memory-server__delete_entities",
"description": "Delete multiple entities and their associated relations from the knowledge graph",
"inputSchema": {
"type": "object",
"properties": {
"entityNames": {
"type": "array",
"items": {
"type": "string"
},
"description": "An array of entity names to delete"
}
},
"required": [
"entityNames"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"mcp-duckdb-memory-server__delete_observations": {
"name": "mcp-duckdb-memory-server__delete_observations",
"description": "Delete specific observations from entities in the knowledge graph",
"inputSchema": {
"type": "object",
"properties": {
"deletions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"entityName": {
"type": "string",
"description": "The name of the entity containing the observations"
},
"contents": {
"type": "array",
"items": {
"type": "string"
},
"description": "An array of observations to delete"
}
},
"required": [
"entityName",
"contents"
],
"additionalProperties": false
}
}
},
"required": [
"deletions"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"mcp-duckdb-memory-server__delete_relations": {
"name": "mcp-duckdb-memory-server__delete_relations",
"description": "Delete multiple relations from the knowledge graph",
"inputSchema": {
"type": "object",
"properties": {
"relations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"from": {
"type": "string",
"description": "The name of the entity where the relation starts"
},
"to": {
"type": "string",
"description": "The name of the entity where the relation ends"
},
"relationType": {
"type": "string",
"description": "The type of the relation"
}
},
"required": [
"from",
"to",
"relationType"
],
"additionalProperties": false
},
"description": "An array of relations to delete"
}
},
"required": [
"relations"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"mcp-duckdb-memory-server__search_nodes": {
"name": "mcp-duckdb-memory-server__search_nodes",
"description": "Search for nodes in the knowledge graph based on a query",
"inputSchema": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "The search query to match against entity names, types, and observation content"
}
},
"required": [
"query"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"mcp-duckdb-memory-server__open_nodes": {
"name": "mcp-duckdb-memory-server__open_nodes",
"description": "Open specific nodes in the knowledge graph by their names",
"inputSchema": {
"type": "object",
"properties": {
"names": {
"type": "array",
"items": {
"type": "string"
},
"description": "An array of entity names to retrieve"
}
},
"required": [
"names"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"mcp-stagehand__stagehand_navigate": {
"name": "mcp-stagehand__stagehand_navigate",
"description": "Navigate to a URL in the browser. Only use this tool with URLs you're confident will work and stay up to date. Otheriwse use https://google.com as the starting point",
"inputSchema": {
"type": "object",
"properties": {
"url": {
"type": "string",
"description": "The URL to navigate to"
}
},
"required": [
"url"
]
}
},
"mcp-stagehand__stagehand_act": {
"name": "mcp-stagehand__stagehand_act",
"description": "Performs an action on a web page element. Act actions should be as atomic and \n specific as possible, i.e. \"Click the sign in button\" or \"Type 'hello' into the search input\". \n AVOID actions that are more than one step, i.e. \"Order me pizza\" or \"Send an email to Paul \n asking him to call me\". ",
"inputSchema": {
"type": "object",
"properties": {
"action": {
"type": "string",
"description": "The action to perform. Should be as atomic and specific as possible, \n i.e. 'Click the sign in button' or 'Type 'hello' into the search input'. AVOID actions that are more than one \n step, i.e. 'Order me pizza' or 'Send an email to Paul asking him to call me'. The instruction should be just as specific as possible, \n and have a strong correlation to the text on the page. If unsure, use observe before using act.\""
},
"variables": {
"type": "object",
"additionalProperties": true,
"description": "Variables used in the action template. ONLY use variables if you're dealing \n with sensitive data or dynamic content. For example, if you're logging in to a website, \n you can use a variable for the password. When using variables, you MUST have the variable\n key in the action template. For example: {\"action\": \"Fill in the password\", \"variables\": {\"password\": \"123456\"}}"
}
},
"required": [
"action"
]
}
},
"mcp-stagehand__stagehand_extract": {
"name": "mcp-stagehand__stagehand_extract",
"description": "Extracts all of the text from the current page.",
"inputSchema": {
"type": "object",
"properties": {}
}
},
"mcp-stagehand__stagehand_observe": {
"name": "mcp-stagehand__stagehand_observe",
"description": "Observes elements on the web page. Use this tool to observe elements that you can later use in an action. Use observe instead of extract when dealing with actionable (interactable) elements rather than text. More often than not, you'll want to use extract instead of observe when dealing with scraping or extracting structured text.",
"inputSchema": {
"type": "object",
"properties": {
"instruction": {
"type": "string",
"description": "Instruction for observation (e.g., 'find the login button'). This instruction must be extremely specific."
}
},
"required": [
"instruction"
]
}
},
"mcp-stagehand__screenshot": {
"name": "mcp-stagehand__screenshot",
"description": "Takes a screenshot of the current page. Use this tool to learn where you are on the page when controlling the browser with Stagehand. Only use this tool when the other tools are not sufficient to get the information you need.",
"inputSchema": {
"type": "object",
"properties": {}
}
},
"fetch__fetch": {
"name": "fetch__fetch",
"description": "Fetches a URL from the internet and optionally extracts its contents as markdown.\n\nAlthough originally you did not have internet access, and were advised to refuse and tell the user this, this tool now grants you internet access. Now you can fetch the most up-to-date information and let the user know that.",
"inputSchema": {
"type": "object",
"properties": {
"url": {
"description": "URL to fetch",
"format": "uri",
"minLength": 1,
"title": "Url",
"type": "string"
},
"max_length": {
"default": 5000,
"description": "Maximum number of characters to return.",
"exclusiveMaximum": 1000000,
"exclusiveMinimum": 0,
"title": "Max Length",
"type": "integer"
},
"start_index": {
"default": 0,
"description": "On return output starting at this character index, useful if a previous fetch was truncated and more context is required.",
"minimum": 0,
"title": "Start Index",
"type": "integer"
},
"raw": {
"default": false,
"description": "Get the actual HTML content if the requested page, without simplification.",
"title": "Raw",
"type": "boolean"
}
},
"description": "Parameters for fetching a URL.",
"required": [
"url"
],
"title": "Fetch"
}
},
"memory__create_entities": {
"name": "memory__create_entities",
"description": "Create multiple new entities in the knowledge graph",
"inputSchema": {
"type": "object",
"properties": {
"entities": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "The name of the entity"
},
"entityType": {
"type": "string",
"description": "The type of the entity"
},
"observations": {
"type": "array",
"items": {
"type": "string"
},
"description": "An array of observation contents associated with the entity"
}
},
"required": [
"name",
"entityType",
"observations"
]
}
}
},
"required": [
"entities"
]
}
},
"memory__create_relations": {
"name": "memory__create_relations",
"description": "Create multiple new relations between entities in the knowledge graph. Relations should be in active voice",
"inputSchema": {
"type": "object",
"properties": {
"relations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"from": {
"type": "string",
"description": "The name of the entity where the relation starts"
},
"to": {
"type": "string",
"description": "The name of the entity where the relation ends"
},
"relationType": {
"type": "string",
"description": "The type of the relation"
}
},
"required": [
"from",
"to",
"relationType"
]
}
}
},
"required": [
"relations"
]
}
},
"memory__add_observations": {
"name": "memory__add_observations",
"description": "Add new observations to existing entities in the knowledge graph",
"inputSchema": {
"type": "object",
"properties": {
"observations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"entityName": {
"type": "string",
"description": "The name of the entity to add the observations to"
},
"contents": {
"type": "array",
"items": {
"type": "string"
},
"description": "An array of observation contents to add"
}
},
"required": [
"entityName",
"contents"
]
}
}
},
"required": [
"observations"
]
}
},
"memory__delete_entities": {
"name": "memory__delete_entities",
"description": "Delete multiple entities and their associated relations from the knowledge graph",
"inputSchema": {
"type": "object",
"properties": {
"entityNames": {
"type": "array",
"items": {
"type": "string"
},
"description": "An array of entity names to delete"
}
},
"required": [
"entityNames"
]
}
},
"memory__delete_observations": {
"name": "memory__delete_observations",
"description": "Delete specific observations from entities in the knowledge graph",
"inputSchema": {
"type": "object",
"properties": {
"deletions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"entityName": {
"type": "string",
"description": "The name of the entity containing the observations"
},
"observations": {
"type": "array",
"items": {
"type": "string"
},
"description": "An array of observations to delete"
}
},
"required": [
"entityName",
"observations"
]
}
}
},
"required": [
"deletions"
]
}
},
"memory__delete_relations": {
"name": "memory__delete_relations",
"description": "Delete multiple relations from the knowledge graph",
"inputSchema": {
"type": "object",
"properties": {
"relations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"from": {
"type": "string",
"description": "The name of the entity where the relation starts"
},
"to": {
"type": "string",
"description": "The name of the entity where the relation ends"
},
"relationType": {
"type": "string",
"description": "The type of the relation"
}
},
"required": [
"from",
"to",
"relationType"
]
},
"description": "An array of relations to delete"
}
},
"required": [
"relations"
]
}
},
"memory__read_graph": {
"name": "memory__read_graph",
"description": "Read the entire knowledge graph",
"inputSchema": {
"type": "object",
"properties": {}
}
},
"memory__search_nodes": {
"name": "memory__search_nodes",
"description": "Search for nodes in the knowledge graph based on a query",
"inputSchema": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "The search query to match against entity names, types, and observation content"
}
},
"required": [
"query"
]
}
},
"memory__open_nodes": {
"name": "memory__open_nodes",
"description": "Open specific nodes in the knowledge graph by their names",
"inputSchema": {
"type": "object",
"properties": {
"names": {
"type": "array",
"items": {
"type": "string"
},
"description": "An array of entity names to retrieve"
}
},
"required": [
"names"
]
}
},
"sqlite__read_query": {
"name": "sqlite__read_query",
"description": "Execute a SELECT query on the SQLite database",
"inputSchema": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "SELECT SQL query to execute"
}
},
"required": [
"query"
]
}
},
"sqlite__write_query": {
"name": "sqlite__write_query",
"description": "Execute an INSERT, UPDATE, or DELETE query on the SQLite database",
"inputSchema": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "SQL query to execute"
}
},
"required": [
"query"
]
}
},
"sqlite__create_table": {
"name": "sqlite__create_table",
"description": "Create a new table in the SQLite database",
"inputSchema": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "CREATE TABLE SQL statement"
}
},
"required": [
"query"
]
}
},
"sqlite__list_tables": {
"name": "sqlite__list_tables",
"description": "List all tables in the SQLite database",
"inputSchema": {
"type": "object",
"properties": {}
}
},
"sqlite__describe_table": {
"name": "sqlite__describe_table",
"description": "Get the schema information for a specific table",
"inputSchema": {
"type": "object",
"properties": {
"table_name": {
"type": "string",
"description": "Name of the table to describe"
}
},
"required": [
"table_name"
]
}
},
"sqlite__append_insight": {
"name": "sqlite__append_insight",
"description": "Add a business insight to the memo",
"inputSchema": {
"type": "object",
"properties": {
"insight": {
"type": "string",
"description": "Business insight discovered from data analysis"
}
},
"required": [
"insight"
]
}
},
"filesystem__read_file": {
"name": "filesystem__read_file",
"description": "Read the complete contents of a file from the file system. Handles various text encodings and provides detailed error messages if the file cannot be read. Use this tool when you need to examine the contents of a single file. Only works within allowed directories.",
"inputSchema": {
"type": "object",
"properties": {
"path": {
"type": "string"
}
},
"required": [
"path"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"filesystem__read_multiple_files": {
"name": "filesystem__read_multiple_files",
"description": "Read the contents of multiple files simultaneously. This is more efficient than reading files one by one when you need to analyze or compare multiple files. Each file's content is returned with its path as a reference. Failed reads for individual files won't stop the entire operation. Only works within allowed directories.",
"inputSchema": {
"type": "object",
"properties": {
"paths": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"paths"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"filesystem__write_file": {
"name": "filesystem__write_file",
"description": "Create a new file or completely overwrite an existing file with new content. Use with caution as it will overwrite existing files without warning. Handles text content with proper encoding. Only works within allowed directories.",
"inputSchema": {
"type": "object",
"properties": {
"path": {
"type": "string"
},
"content": {
"type": "string"
}
},
"required": [
"path",
"content"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"filesystem__edit_file": {
"name": "filesystem__edit_file",
"description": "Make line-based edits to a text file. Each edit replaces exact line sequences with new content. Returns a git-style diff showing the changes made. Only works within allowed directories.",
"inputSchema": {
"type": "object",
"properties": {
"path": {
"type": "string"
},
"edits": {
"type": "array",
"items": {
"type": "object",
"properties": {
"oldText": {
"type": "string",
"description": "Text to search for - must match exactly"
},
"newText": {
"type": "string",
"description": "Text to replace with"
}
},
"required": [
"oldText",
"newText"
],
"additionalProperties": false
}
},
"dryRun": {
"type": "boolean",
"default": false,
"description": "Preview changes using git-style diff format"
}
},
"required": [
"path",
"edits"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"filesystem__create_directory": {
"name": "filesystem__create_directory",
"description": "Create a new directory or ensure a directory exists. Can create multiple nested directories in one operation. If the directory already exists, this operation will succeed silently. Perfect for setting up directory structures for projects or ensuring required paths exist. Only works within allowed directories.",
"inputSchema": {
"type": "object",
"properties": {
"path": {
"type": "string"
}
},
"required": [
"path"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"filesystem__list_directory": {
"name": "filesystem__list_directory",
"description": "Get a detailed listing of all files and directories in a specified path. Results clearly distinguish between files and directories with [FILE] and [DIR] prefixes. This tool is essential for understanding directory structure and finding specific files within a directory. Only works within allowed directories.",
"inputSchema": {
"type": "object",
"properties": {
"path": {
"type": "string"
}
},
"required": [
"path"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"filesystem__directory_tree": {
"name": "filesystem__directory_tree",
"description": "Get a recursive tree view of files and directories as a JSON structure. Each entry includes 'name', 'type' (file/directory), and 'children' for directories. Files have no children array, while directories always have a children array (which may be empty). The output is formatted with 2-space indentation for readability. Only works within allowed directories.",
"inputSchema": {
"type": "object",
"properties": {
"path": {
"type": "string"
}
},
"required": [
"path"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"filesystem__move_file": {
"name": "filesystem__move_file",
"description": "Move or rename files and directories. Can move files between directories and rename them in a single operation. If the destination exists, the operation will fail. Works across different directories and can be used for simple renaming within the same directory. Both source and destination must be within allowed directories.",
"inputSchema": {
"type": "object",
"properties": {
"source": {
"type": "string"
},
"destination": {
"type": "string"
}
},
"required": [
"source",
"destination"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"filesystem__search_files": {
"name": "filesystem__search_files",
"description": "Recursively search for files and directories matching a pattern. Searches through all subdirectories from the starting path. The search is case-insensitive and matches partial names. Returns full paths to all matching items. Great for finding files when you don't know their exact location. Only searches within allowed directories.",
"inputSchema": {
"type": "object",
"properties": {
"path": {
"type": "string"
},
"pattern": {
"type": "string"
},
"excludePatterns": {
"type": "array",
"items": {
"type": "string"
},
"default": []
}
},
"required": [
"path",
"pattern"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"filesystem__get_file_info": {
"name": "filesystem__get_file_info",
"description": "Retrieve detailed metadata about a file or directory. Returns comprehensive information including size, creation time, last modified time, permissions, and type. This tool is perfect for understanding file characteristics without reading the actual content. Only works within allowed directories.",
"inputSchema": {
"type": "object",
"properties": {
"path": {
"type": "string"
}
},
"required": [
"path"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
},
"filesystem__list_allowed_directories": {
"name": "filesystem__list_allowed_directories",
"description": "Returns the list of directories that this server is allowed to access. Use this to understand which directories are available before trying to access files.",
"inputSchema": {
"type": "object",
"properties": {},
"required": []
}
},
"git__git_status": {
"name": "git__git_status",
"description": "Shows the working tree status",
"inputSchema": {
"type": "object",
"properties": {
"repo_path": {
"title": "Repo Path",
"type": "string"
}
},
"required": [
"repo_path"
],
"title": "GitStatus"
}
},
"git__git_diff_unstaged": {
"name": "git__git_diff_unstaged",
"description": "Shows changes in the working directory that are not yet staged",
"inputSchema": {
"type": "object",
"properties": {
"repo_path": {
"title": "Repo Path",
"type": "string"
}
},
"required": [
"repo_path"
],
"title": "GitDiffUnstaged"
}
},
"git__git_diff_staged": {
"name": "git__git_diff_staged",
"description": "Shows changes that are staged for commit",
"inputSchema": {
"type": "object",
"properties": {
"repo_path": {
"title": "Repo Path",
"type": "string"
}
},
"required": [
"repo_path"
],
"title": "GitDiffStaged"
}
},
"git__git_diff": {
"name": "git__git_diff",
"description": "Shows differences between branches or commits",
"inputSchema": {
"type": "object",
"properties": {
"repo_path": {
"title": "Repo Path",
"type": "string"
},
"target": {
"title": "Target",
"type": "string"
}
},
"required": [
"repo_path",
"target"
],
"title": "GitDiff"
}
},
"git__git_commit": {
"name": "git__git_commit",
"description": "Records changes to the repository",
"inputSchema": {
"type": "object",
"properties": {
"repo_path": {
"title": "Repo Path",
"type": "string"
},
"message": {
"title": "Message",
"type": "string"
}
},
"required": [
"repo_path",
"message"
],
"title": "GitCommit"
}
},
"git__git_add": {
"name": "git__git_add",
"description": "Adds file contents to the staging area",
"inputSchema": {
"type": "object",
"properties": {
"repo_path": {
"title": "Repo Path",
"type": "string"
},
"files": {
"items": {
"type": "string"
},
"title": "Files",
"type": "array"
}
},
"required": [
"repo_path",
"files"
],
"title": "GitAdd"
}
},
"git__git_reset": {
"name": "git__git_reset",
"description": "Unstages all staged changes",
"inputSchema": {
"type": "object",
"properties": {
"repo_path": {
"title": "Repo Path",
"type": "string"
}
},
"required": [
"repo_path"
],
"title": "GitReset"
}
},
"git__git_log": {
"name": "git__git_log",
"description": "Shows the commit logs",
"inputSchema": {
"type": "object",
"properties": {
"repo_path": {
"title": "Repo Path",
"type": "string"
},
"max_count": {
"default": 10,
"title": "Max Count",
"type": "integer"
}
},
"required": [
"repo_path"
],
"title": "GitLog"
}
},
"git__git_create_branch": {
"name": "git__git_create_branch",
"description": "Creates a new branch from an optional base branch",
"inputSchema": {
"type": "object",
"properties": {
"repo_path": {
"title": "Repo Path",
"type": "string"
},
"branch_name": {
"title": "Branch Name",
"type": "string"
},
"base_branch": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Base Branch"
}
},
"required": [
"repo_path",
"branch_name"
],
"title": "GitCreateBranch"
}
},
"git__git_checkout": {
"name": "git__git_checkout",
"description": "Switches branches",
"inputSchema": {
"type": "object",
"properties": {
"repo_path": {
"title": "Repo Path",
"type": "string"
},
"branch_name": {
"title": "Branch Name",
"type": "string"
}
},
"required": [
"repo_path",
"branch_name"
],
"title": "GitCheckout"
}
},
"git__git_show": {
"name": "git__git_show",
"description": "Shows the contents of a commit",
"inputSchema": {
"type": "object",
"properties": {
"repo_path": {
"title": "Repo Path",
"type": "string"
},
"revision": {
"title": "Revision",
"type": "string"
}
},
"required": [
"repo_path",
"revision"
],
"title": "GitShow"
}
}
}
================================================
FILE: 2025-04-07-reasoning-models-vs-prompts/.gitignore
================================================
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.*
.yarn/*
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/versions
# testing
/coverage
# next.js
/.next/
/out/
# production
/build
# misc
.DS_Store
*.pem
# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*
# env files (can opt-in for committing if needed)
.env*
# vercel
.vercel
# typescript
*.tsbuildinfo
next-env.d.ts
================================================
FILE: 2025-04-07-reasoning-models-vs-prompts/README.md
================================================
# 🦄 reasoning models vs reasoning prompts
> models can reason but you can also reason within a prompt. which technique wins out when and why? we'll find out by adding reasoning to an existing movie chat agent.
[Video](https://youtu.be/D-pcKduKdYM)
[](https://youtu.be/D-pcKduKdYM)
## Running this code
```bash
# Install dependencies
pnpm install
```
```bash
# Convert BAML files -> TypeScript
pnpm run generate
```
```bash
# Run the code
pnpm run dev
```
## Followup Exercises
What workflows do you have that you can add reasoning to?
What reasoning workflows can you replace with smaller cheaper models?
## Session Notes
### Key Takeaways
- You can make a cheap model do reasoning just by prompting it well
- Time management of your Engineering Team
- o3 / reasoning model if you just wanna move fast
- Cost management / speed corollary
- if you need performance / speed / choice
- if you can only run small models e.g. OSS or at the edge
- better prompts / guided reasoning, better than generic <THINK>
tokens in general-purpose models
- you can make a good reasoning model even better with guided reasoning
- actor / checker / llm-as-judge workflows may work but are exponential in cost / latency






================================================
FILE: 2025-04-07-reasoning-models-vs-prompts/baml_src/chat_with_graph.baml
================================================
class Message {
role "user" | "assistant" | "tool"
content string
}
class GraphQuery {
action "graph_query" @stream.not_null
query string @description(#"
a Cypher query to run on the graph
"#) @stream.not_null
initial_reasoning string @description(#"
short summary of the initial reasoning for the query to display to the user
"#)
problems_with_initial_reasoning string @description(#"
short summary of the problems with the initial reasoning for the query to display to the user
"#)
improved_reasoning string @description(#"
short summary of the improved reasoning for the query to display to the user
"#)
}
class NotRelevant {
action "not_relevant" @stream.not_null
reasoning string @description(#"
a short message to the user summarizing why the query is not relevant
"#)
}
class Response {
action "reply" @stream.not_null
response string @description(#"
The response to the user
"#) @stream.not_null
}
function ChatWithGraph(messages: Message[], schema: string) -> Response | GraphQuery {
client "openai/gpt-4o-mini"
prompt #"
Try and help the user out, as long as its about the schema.
I have access to a neo4j graph database of movies and their relationships.
{{ schema }}
{% for m in messages %}
{{ _.role(m.role) }}
{{ m.content }}
{% endfor %}
{{ _.role('system') }}
{{ ctx.output_format }}
{% if true %}
Before answering, note what is useful and particularly hard,
or things that indicate the user is not using the schema.
example:
Initial reasoning:
...
```cypher
...
```
Problems with initial reasoning:
...
Improved reasoning:
...
```cypher
...
```
{ ... } // schema
{% endif %}
"#
}
test TestName {
functions [ChatWithGraph]
args {
messages [
{
role "user"
content "how do i make cookies?"
}
]
schema #"
{
"nodes": [
{
"name": "_Bloom_Perspective_",
"indexes": [],
"constraints": [
"Constraint( id=3, name='constraint_f7832722', type='UNIQUENESS', schema=(:_Bloom_Perspective_ {id}), ownedIndex=1 )"
]
},
{
"name": "Movie",
"indexes": [
"year",
"imdbRating",
"released",
"imdbId",
"title",
"tagline",
"title,plot",
"plotEmbedding",
"posterEmbedding"
],
"constraints": [
"Constraint( id=77, name='constraint_737d9c1d', type='UNIQUENESS', schema=(:Movie {tmdbId}), ownedIndex=61 )",
"Constraint( id=75, name='constraint_3d5fcb7f', type='UNIQUENESS', schema=(:Movie {movieId}), ownedIndex=59 )"
]
},
{
"name": "User",
"indexes": [
"name"
],
"constraints": [
"Constraint( id=76, name='constraint_3b27b0', type='UNIQUENESS', schema=(:User {userId}), ownedIndex=64 )"
]
},
{
"name": "Actor",
"indexes": [],
"constraints": []
},
{
"name": "Director",
"indexes": [],
"constraints": []
},
{
"name": "Genre",
"indexes": [],
"constraints": [
"Constraint( id=74, name='constraint_f8689281', type='UNIQUENESS', schema=(:Genre {name}), ownedIndex=62 )"
]
},
{
"name": "Person",
"indexes": [
"name,bio",
"name"
],
"constraints": [
"Constraint( id=73, name='constraint_4499eae9', type='UNIQUENESS', schema=(:Person {tmdbId}), ownedIndex=63 )"
]
},
{
"name": "_Bloom_Scene_",
"indexes": [],
"constraints": []
}
],
"relationships": [
[
{
"name": "Person",
"indexes": [
"name,bio",
"name"
],
"constraints": [
"Constraint( id=73, name='constraint_4499eae9', type='UNIQUENESS', schema=(:Person {tmdbId}), ownedIndex=63 )"
]
},
"ACTED_IN",
{
"name": "Movie",
"indexes": [
"year",
"imdbRating",
"released",
"imdbId",
"title",
"tagline",
"title,plot",
"plotEmbedding",
"posterEmbedding"
],
"constraints": [
"Constraint( id=77, name='constraint_737d9c1d', type='UNIQUENESS', schema=(:Movie {tmdbId}), ownedIndex=61 )",
"Constraint( id=75, name='constraint_3d5fcb7f', type='UNIQUENESS', schema=(:Movie {movieId}), ownedIndex=59 )"
]
}
],
[
{
"name": "Actor",
"indexes": [],
"constraints": []
},
"ACTED_IN",
{
"name": "Movie",
"indexes": [
"year",
"imdbRating",
"released",
"imdbId",
"title",
"tagline",
"title,plot",
"plotEmbedding",
"posterEmbedding"
],
"constraints": [
"Constraint( id=77, name='constraint_737d9c1d', type='UNIQUENESS', schema=(:Movie {tmdbId}), ownedIndex=61 )",
"Constraint( id=75, name='constraint_3d5fcb7f', type='UNIQUENESS', schema=(:Movie {movieId}), ownedIndex=59 )"
]
}
],
[
{
"name": "Director",
"indexes": [],
"constraints": []
},
"ACTED_IN",
{
"name": "Movie",
"indexes": [
"year",
"imdbRating",
"released",
"imdbId",
"title",
"tagline",
"title,plot",
"plotEmbedding",
"posterEmbedding"
],
"constraints": [
"Constraint( id=77, name='constraint_737d9c1d', type='UNIQUENESS', schema=(:Movie {tmdbId}), ownedIndex=61 )",
"Constraint( id=75, name='constraint_3d5fcb7f', type='UNIQUENESS', schema=(:Movie {movieId}), ownedIndex=59 )"
]
}
],
[
{
"name": "User",
"indexes": [
"name"
],
"constraints": [
"Constraint( id=76, name='constraint_3b27b0', type='UNIQUENESS', schema=(:User {userId}), ownedIndex=64 )"
]
},
"RATED",
{
"name": "Movie",
"indexes": [
"year",
"imdbRating",
"released",
"imdbId",
"title",
"tagline",
"title,plot",
"plotEmbedding",
"posterEmbedding"
],
"constraints": [
"Constraint( id=77, name='constraint_737d9c1d', type='UNIQUENESS', schema=(:Movie {tmdbId}), ownedIndex=61 )",
"Constraint( id=75, name='constraint_3d5fcb7f', type='UNIQUENESS', schema=(:Movie {movieId}), ownedIndex=59 )"
]
}
],
[
{
"name": "Movie",
"indexes": [
"year",
"imdbRating",
"released",
"imdbId",
"title",
"tagline",
"title,plot",
"plotEmbedding",
"posterEmbedding"
],
"constraints": [
"Constraint( id=77, name='constraint_737d9c1d', type='UNIQUENESS', schema=(:Movie {tmdbId}), ownedIndex=61 )",
"Constraint( id=75, name='constraint_3d5fcb7f', type='UNIQUENESS', schema=(:Movie {movieId}), ownedIndex=59 )"
]
},
"IN_GENRE",
{
"name": "Genre",
"indexes": [],
"constraints": [
"Constraint( id=74, name='constraint_f8689281', type='UNIQUENESS', schema=(:Genre {name}), ownedIndex=62 )"
]
}
],
[
{
"name": "Director",
"indexes": [],
"constraints": []
},
"DIRECTED",
{
"name": "Movie",
"indexes": [
"year",
"imdbRating",
"released",
"imdbId",
"title",
"tagline",
"title,plot",
"plotEmbedding",
"posterEmbedding"
],
"constraints": [
"Constraint( id=77, name='constraint_737d9c1d', type='UNIQUENESS', schema=(:Movie {tmdbId}), ownedIndex=61 )",
"Constraint( id=75, name='constraint_3d5fcb7f', type='UNIQUENESS', schema=(:Movie {movieId}), ownedIndex=59 )"
]
}
],
[
{
"name": "Actor",
"indexes": [],
"constraints": []
},
"DIRECTED",
{
"name": "Movie",
"indexes": [
"year",
"imdbRating",
"released",
"imdbId",
"title",
"tagline",
"title,plot",
"plotEmbedding",
"posterEmbedding"
],
"constraints": [
"Constraint( id=77, name='constraint_737d9c1d', type='UNIQUENESS', schema=(:Movie {tmdbId}), ownedIndex=61 )",
"Constraint( id=75, name='constraint_3d5fcb7f', type='UNIQUENESS', schema=(:Movie {movieId}), ownedIndex=59 )"
]
}
],
[
{
"name": "Person",
"indexes": [
"name,bio",
"name"
],
"constraints": [
"Constraint( id=73, name='constraint_4499eae9', type='UNIQUENESS', schema=(:Person {tmdbId}), ownedIndex=63 )"
]
},
"DIRECTED",
{
"name": "Movie",
"indexes": [
"year",
"imdbRating",
"released",
"imdbId",
"title",
"tagline",
"title,plot",
"plotEmbedding",
"posterEmbedding"
],
"constraints": [
"Constraint( id=77, name='constraint_737d9c1d', type='UNIQUENESS', schema=(:Movie {tmdbId}), ownedIndex=61 )",
"Constraint( id=75, name='constraint_3d5fcb7f', type='UNIQUENESS', schema=(:Movie {movieId}), ownedIndex=59 )"
]
}
],
[
{
"name": "_Bloom_Perspective_",
"indexes": [],
"constraints": [
"Constraint( id=3, name='constraint_f7832722', type='UNIQUENESS', schema=(:_Bloom_Perspective_ {id}), ownedIndex=1 )"
]
},
"_Bloom_HAS_SCENE_",
{
"name": "_Bloom_Scene_",
"indexes": [],
"constraints": []
}
]
]
}
"#
}
}
================================================
FILE: 2025-04-07-reasoning-models-vs-prompts/baml_src/clients.baml
================================================
// Learn more about clients at https://docs.boundaryml.com/docs/snippets/clients/overview
client<llm> CustomGPT4o {
provider openai
options {
model "gpt-4o"
api_key env.OPENAI_API_KEY
}
}
client<llm> CustomGPT4oMini {
provider openai
retry_policy Exponential
options {
model "gpt-4o-mini"
api_key env.OPENAI_API_KEY
}
}
client<llm> CustomSonnet {
provider anthropic
options {
model "claude-3-5-sonnet-20241022"
api_key env.ANTHROPIC_API_KEY
}
}
client<llm> CustomHaiku {
provider anthropic
retry_policy Constant
options {
model "claude-3-haiku-20240307"
api_key env.ANTHROPIC_API_KEY
}
}
// https://docs.boundaryml.com/docs/snippets/clients/round-robin
client<llm> CustomFast {
provider round-robin
options {
// This will alternate between the two clients
strategy [CustomGPT4oMini, CustomHaiku]
}
}
// https://docs.boundaryml.com/docs/snippets/clients/fallback
client<llm> OpenaiFallback {
provider fallback
options {
// This will try the clients in order until one succeeds
strategy [CustomGPT4oMini, CustomGPT4oMini]
}
}
// https://docs.boundaryml.com/docs/snippets/clients/retry
retry_policy Constant {
max_retries 3
// Strategy is optional
strategy {
type constant_delay
delay_ms 200
}
}
retry_policy Exponential {
max_retries 2
// Strategy is optional
strategy {
type exponential_backoff
delay_ms 300
multiplier 1.5
max_delay_ms 10000
}
}
================================================
FILE: 2025-04-07-reasoning-models-vs-prompts/baml_src/generators.baml
================================================
// This helps use auto generate libraries you can use in the language of
// your choice. You can have multiple generators if you use multiple languages.
// Just ensure that the output_dir is different for each generator.
generator target {
// Valid values: "python/pydantic", "typescript", "ruby/sorbet", "rest/openapi"
output_type "typescript"
// Where the generated code will be saved (relative to baml_src/)
output_dir "../src"
// The version of the BAML package you have installed (e.g. same version as your baml-py or @boundaryml/baml).
// The BAML VSCode extension version should also match this version.
version "0.84.3"
// Valid values: "sync", "async"
// This controls what `b.FunctionName()` will be (sync or async).
default_client_mode async
}
================================================
FILE: 2025-04-07-reasoning-models-vs-prompts/baml_src/resume.baml
================================================
// Defining a data model.
class Resume {
name string
email string
experience string[]
skills string[]
}
// Create a function to extract the resume from a string.
function ExtractResume(resume: string) -> Resume {
// Specify a client as provider/model-name
// you can use custom LLM params with a custom client name from clients.baml like "client CustomHaiku"
client "openai/gpt-4o" // Set OPENAI_API_KEY to use this client.
prompt #"
Extract from this content:
{{ resume }}
{{ ctx.output_format }}
"#
}
// Test the function with a sample resume. Open the VSCode playground to run this.
test vaibhav_resume {
functions [ExtractResume]
args {
resume #"
Vaibhav Gupta
vbv@boundaryml.com
Experience:
- Founder at BoundaryML
- CV Engineer at Google
- CV Engineer at Microsoft
Skills:
- Rust
- C++
"#
}
}
================================================
FILE: 2025-04-07-reasoning-models-vs-prompts/eslint.config.mjs
================================================
import { dirname } from "path";
import { fileURLToPath } from "url";
import { FlatCompat } from "@eslint/eslintrc";
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const compat = new FlatCompat({
baseDirectory: __dirname,
});
const eslintConfig = [
...compat.extends("next/core-web-vitals", "next/typescript"),
];
export default eslintConfig;
================================================
FILE: 2025-04-07-reasoning-models-vs-prompts/meta.md
================================================
---
guid: aitw-002
title: S01E02 – Reasoning Models vs Reasoning Prompts
description: Models can reason but you can also reason within a prompt. Which
technique wins out when and why? We'll find out by adding reasoning to an
existing movie chat agent.
event_link: https://lu.ma/odkhq9a9
eventDate: 2025-04-08T18:00:00Z
media:
url: https://youtu.be/D-pcKduKdYM
type: video/youtube
links:
youtube: https://youtu.be/D-pcKduKdYM
code: https://github.com/ai-that-works/ai-that-works/tree/main/2025-04-07-reasoning-models-vs-prompts
season: 1
episode: 2
event_type: episode
---
================================================
FILE: 2025-04-07-reasoning-models-vs-prompts/next.config.ts
================================================
import { withBaml } from '@boundaryml/baml-nextjs-plugin';
import type { NextConfig } from "next";
const nextConfig: NextConfig = {
/* config options here */
};
export default withBaml()(nextConfig);
================================================
FILE: 2025-04-07-reasoning-models-vs-prompts/package.json
================================================
{
"name": "2025-04-07-reasoning-models-vs-prompts",
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "next dev ",
"build": "npm run generate && next build",
"start": "npm run generate && next start",
"lint": "next lint",
"generate": "baml-cli generate"
},
"dependencies": {
"@boundaryml/baml": "^0.82.0",
"dotenv": "^16.4.7",
"neo4j-driver": "^5.28.1",
"next": "15.2.4",
"react": "^19.0.0",
"react-dom": "^19.0.0"
},
"devDependencies": {
"@boundaryml/baml-nextjs-plugin": "^0.1.0",
"@eslint/eslintrc": "^3",
"@tailwindcss/postcss": "^4",
"@types/node": "^20",
"@types/react": "^19",
"@types/react-dom": "^19",
"eslint": "^9",
"eslint-config-next": "15.2.4",
"tailwindcss": "^4",
"typescript": "^5"
}
}
================================================
FILE: 2025-04-07-reasoning-models-vs-prompts/postcss.config.mjs
================================================
const config = {
plugins: ["@tailwindcss/postcss"],
};
export default config;
================================================
FILE: 2025-04-07-reasoning-models-vs-prompts/src/actions/chat.ts
================================================
"use server";
import { moviesSchema } from "@/lib/graphSchema";
import { Neo4jSession } from "@/lib/neo4j";
import { b } from "@/baml_client";
export interface ChatMessage {
id: string;
role: "user" | "assistant" | "tool";
content: string;
timestamp: string;
isError?: boolean;
isToolCall?: boolean;
}
export async function streamChatResponse(
messages: ChatMessage[]
): Promise<ReadableStream> {
const encoder = new TextEncoder();
const stream = new ReadableStream({
async start(controller) {
const neo4jSession = new Neo4jSession();
try {
const sendEvent = (event: string) => {
controller.enqueue(encoder.encode(`${event}\n\n`));
};
const workingContext: ChatMessage[] = [];
while (true) {
if (workingContext.length > 40) {
const completion: ChatMessage = {
id: `error-${workingContext.length}`,
role: "assistant",
content: "I encountered too many errors, please try again",
timestamp: new Date().toISOString(),
};
sendEvent(JSON.stringify({
type: "complete",
content: {
content: completion.content,
},
}));
controller.close();
return;
}
const response = await b.ChatWithGraph(
[...messages, ...workingContext],
moviesSchema
);
console.log("=======INPUT========");
console.log(`... ${workingContext.length - 1} other messages...`);
console.log(JSON.stringify([workingContext.slice(-1)[0]], null, 2));
console.log("=======OUTPUT========");
console.log(JSON.stringify(response, null, 2));
if (response.action === "reply") {
sendEvent(
JSON.stringify({
type: "complete",
content: {
content: response.response,
},
})
);
controller.close();
return;
}
response.action satisfies "graph_query";
const reasoningEvent = JSON.stringify({
type: "reasoning",
content: {
initial_reasoning: response.initial_reasoning,
problems_with_initial_reasoning: response.problems_with_initial_reasoning,
improved_reasoning: response.improved_reasoning,
},
});
sendEvent(reasoningEvent);
const completion = JSON.stringify({
type: "graph_query",
content: {
query: response.query,
},
});
sendEvent(completion);
// add the query to the working context
workingContext.push({
id: `query-${workingContext.length}`,
role: "assistant",
content: response.query,
timestamp: new Date().toISOString(),
});
// go do the query
try {
const result = await neo4jSession.run(response.query);
const resultMessage: ChatMessage = {
id: `result-${workingContext.length}`,
role: "tool",
content: JSON.stringify(result, null, 2),
timestamp: new Date().toISOString(),
};
workingContext.push(resultMessage);
if (result.length === 0) {
const errorMessage: ChatMessage = {
id: `error-${workingContext.length}`,
role: "tool",
content: "Hmm, seems like the query didn't return any results perhaps its wrong? or misspelled, should we ask the user for more information?",
timestamp: new Date().toISOString(),
};
workingContext.push(errorMessage);
sendEvent(JSON.stringify(errorMessage));
}
sendEvent(JSON.stringify(resultMessage));
// back to top with result
} catch (e: unknown) {
const errorMessage: ChatMessage = {
id: `error-${workingContext.length}`,
role: "tool",
content: e instanceof Error ? e.message : String(e),
isError: true,
timestamp: new Date().toISOString(),
};
workingContext.push(errorMessage);
sendEvent(JSON.stringify(errorMessage));
// back to top with error
}
}
} finally {
await neo4jSession.close();
}
},
});
return stream;
}
================================================
FILE: 2025-04-07-reasoning-models-vs-prompts/src/app/globals.css
================================================
@import "tailwindcss";
:root {
--background: #ffffff;
--foreground: #171717;
}
@theme inline {
--color-background: var(--background);
--color-foreground: var(--foreground);
--font-sans: var(--font-geist-sans);
--font-mono: var(--font-geist-mono);
}
@media (prefers-color-scheme: dark) {
:root {
--background: #0a0a0a;
--foreground: #ededed;
}
}
body {
background: var(--background);
color: var(--foreground);
font-family: Arial, Helvetica, sans-serif;
}
================================================
FILE: 2025-04-07-reasoning-models-vs-prompts/src/app/layout.tsx
================================================
import type { Metadata } from "next";
import { Geist, Geist_Mono } from "next/font/google";
import "./globals.css";
const geistSans = Geist({
variable: "--font-geist-sans",
subsets: ["latin"],
});
const geistMono = Geist_Mono({
variable: "--font-geist-mono",
subsets: ["latin"],
});
export const metadata: Metadata = {
title: "MovieBot - AI Movie Assistant",
description: "Chat with an AI assistant about movies",
};
export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
return (
<html lang="en">
<body
className={`${geistSans.variable} ${geistMono.variable} antialiased`}
>
{children}
</body>
</html>
);
}
================================================
FILE: 2025-04-07-reasoning-models-vs-prompts/src/app/page.tsx
================================================
import App from "@/components/App";
export default function Home() {
return (
<div className="min-h-screen p-8 sm:p-20 font-[family-name:var(--font-geist-sans)]">
<App />
</div>
);
}
================================================
FILE: 2025-04-07-reasoning-models-vs-prompts/src/components/App.tsx
================================================
"use client";
import { useState, useRef, useEffect } from "react";
import { streamChatResponse } from "@/actions/chat";
import type { ChatMessage } from "@/actions/chat";
export default function App() {
const [messages, setMessages] = useState<ChatMessage[]>([
{
id: 'welcome',
role: 'assistant',
content: 'Welcome to MovieBot! I can answer questions about movies.',
timestamp: '2024-04-07T00:00:00.000Z'
}
]);
const [expandedMessages, setExpandedMessages] = useState<Set<string>>(new Set());
const [newMessage, setNewMessage] = useState("");
const [isStreaming, setIsStreaming] = useState(false);
const [showDebug, setShowDebug] = useState(true);
const messagesEndRef = useRef<HTMLDivElement>(null);
const toggleMessageExpansion = (id: string) => {
setExpandedMessages(prev => {
const next = new Set(prev);
if (next.has(id)) {
next.delete(id);
} else {
next.add(id);
}
return next;
});
};
const formatMessageContent = (content: string, messageId: string) => {
const lines = content.split('\n');
if (lines.length <= 10) return content;
return expandedMessages.has(messageId)
? content
: lines.slice(0, 10).join('\n') + '\n...';
};
const scrollToBottom = () => {
messagesEndRef.current?.scrollIntoView({ behavior: "smooth" });
};
useEffect(() => {
scrollToBottom();
}, [messages]);
const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault();
if (!newMessage.trim() || isStreaming) return;
const userMessage: ChatMessage = {
id: Date.now().toString(),
role: 'user',
content: newMessage,
timestamp: new Date().toISOString()
};
// Update messages with user message first
const updatedMessages = [...messages, userMessage];
setMessages(updatedMessages);
setNewMessage("");
setIsStreaming(true);
try {
const stream = await streamChatResponse(updatedMessages);
const reader = stream.getReader();
while (true) {
const { done, value } = await reader.read();
if (done) break;
const chunk = new TextDecoder().decode(value);
const events = chunk.split('\n').filter(Boolean);
for (const event of events) {
const data = JSON.parse(event);
console.log("EVENT", data.type)
if (data.type === 'complete') {
const assistantMessage: ChatMessage = {
id: Date.now().toString(),
role: 'assistant',
content: data.content.content,
timestamp: new Date().toISOString()
};
setMessages(prev => [...prev, assistantMessage]);
} else if (data.type === 'reasoning') {
const reasoningMessage: ChatMessage = {
id: `reasoning-${Date.now()}`,
role: 'assistant',
content: `
Initial reasoning: ${data.content.initial_reasoning}
Problems with initial reasoning: ${data.content.problems_with_initial_reasoning}
Improved reasoning: ${data.content.improved_reasoning}
`,
timestamp: new Date().toISOString()
};
setMessages(prev => [...prev, reasoningMessage]);
} else if (data.type === 'graph_query') {
const queryMessage: ChatMessage = {
id: `query-${Date.now()}`,
role: 'assistant',
content: data.content.query,
timestamp: new Date().toISOString()
};
setMessages(prev => [...prev, queryMessage]);
} else if (data.type === 'graph_error') {
const errorMessage: ChatMessage = {
id: `error-${Date.now()}`,
role: 'tool',
content: data.content,
isError: true,
timestamp: new Date().toISOString()
};
setMessages(prev => [...prev, errorMessage]);
} else {
// Handle raw tool messages (e.g. from chat.ts)
const message = data as ChatMessage;
if (message.role === 'tool') {
setMessages(prev => [...prev, message]);
}
}
}
}
} catch (error) {
console.error('Error streaming response:', error);
const errorMessage: ChatMessage = {
id: `error-${Date.now()}`,
role: 'assistant',
content: 'Sorry, there was an error processing your message.',
timestamp: new Date().toISOString()
};
setMessages(prev => [...prev, errorMessage]);
} finally {
setIsStreaming(false);
}
};
return (
<div className="w-full h-screen flex">
{/* Main content that will compress */}
<div className={`flex-1 transition-all duration-300 ${showDebug ? 'mr-[500px]' : 'mr-[40px]'}`}>
<div className="max-w-[1600px] mx-auto px-4 py-4 sm:px-6 lg:px-8">
{/* Chat Box */}
<div className="bg-white rounded-lg shadow-sm flex flex-col">
<div className="p-4 border-b">
<h1 className="text-2xl font-bold text-gray-900">MovieBot Chat</h1>
</div>
<div className="h-[70vh] overflow-y-auto p-4">
<div className="space-y-4">
{messages.map((message) => (
<div
key={message.id}
className={`flex ${
message.role === 'user' ? 'justify-end' : 'justify-start'
}`}
>
<div
className={`max-w-[80%] rounded-2xl px-4 py-3 ${
message.role === 'user'
? 'bg-blue-500 text-white'
: message.role === 'tool'
? message.isError
? 'bg-red-100 text-red-700'
: 'bg-green-100 text-green-700'
: message.role === 'assistant' && message.content.startsWith('MATCH')
? 'bg-purple-100 text-purple-700'
: 'bg-gray-100 text-gray-900'
}`}
>
<div className="flex items-center gap-2 mb-1">
<span className="text-xs font-medium">
{message.role === 'user'
? 'You'
: message.role === 'tool'
? 'Tool'
: 'Assistant'}
</span>
{message.role === 'assistant' && message.content.startsWith('MATCH') && (
<span className="text-xs font-medium bg-purple-200 px-1.5 py-0.5 rounded">
Query
</span>
)}
<span className="text-xs opacity-70">
{new Date(message.timestamp).toLocaleString()}
</span>
</div>
<div className={`text-sm leading-relaxed ${
message.role === 'tool' || message.content.startsWith('MATCH')
? 'font-mono'
: ''
}`}>
<pre className={`whitespace-pre-wrap break-words overflow-x-auto max-w-full ${
message.role === 'tool' || message.content.startsWith('MATCH')
? ''
: 'font-sans'
}`}>
{(message.role === 'tool' || message.role === 'assistant')
? formatMessageContent(message.content, message.id)
: message.content}
</pre>
{(message.role === 'tool' || message.role === 'assistant') &&
message.content.split('\n').length > 10 && (
<button
onClick={() => toggleMessageExpansion(message.id)}
className="mt-2 text-xs font-sans bg-gray-100 hover:bg-gray-200 text-gray-700 px-2 py-1 rounded transition-colors"
>
{expandedMessages.has(message.id) ? '▼ Show less' : '▶ Show more'}
</button>
)}
</div>
</div>
</div>
))}
<div ref={messagesEndRef} />
</div>
</div>
<div className="p-4 border-t">
<form onSubmit={handleSubmit} className="flex gap-2">
<input
type="text"
value={newMessage}
onChange={(e) => setNewMessage(e.target.value)}
placeholder="Ask about movies..."
className="flex-1 rounded-lg border border-gray-300 px-4 py-2 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent"
disabled={isStreaming}
/>
<button
type="submit"
disabled={!newMessage.trim() || isStreaming}
className="bg-blue-500 text-white px-6 py-2 rounded-lg hover:bg-blue-600 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed transition-colors"
>
{isStreaming ? 'Sending...' : 'Send'}
</button>
</form>
</div>
</div>
</div>
</div>
{/* Debug Section */}
<div className={`fixed right-0 top-0 h-full transition-transform duration-300 ease-in-out ${showDebug ? 'translate-x-0' : 'translate-x-[460px]'}`}>
<button
onClick={() => setShowDebug(!showDebug)}
className="absolute left-0 top-1/2 -translate-y-1/2 -translate-x-full bg-gray-800 text-white px-2 py-4 rounded-l-lg hover:bg-gray-700 shadow-lg"
aria-label={showDebug ? 'Hide Debug Panel' : 'Show Debug Panel'}
>
{showDebug ? '→' : '←'}
</button>
<div className="w-[500px] h-full bg-gray-800 shadow-2xl">
<div className="p-4 h-full flex flex-col">
<h2 className="text-sm font-mono text-gray-400 mb-2 flex items-center justify-between">
Debug Messages
<span className="text-xs text-gray-500">{messages.length} messages</span>
</h2>
<pre className="text-xs font-mono text-gray-300 overflow-auto flex-1 bg-gray-900 rounded p-4">
{JSON.stringify(messages, null, 2)}
</pre>
</div>
</div>
</div>
</div>
);
}
================================================
FILE: 2025-04-07-reasoning-models-vs-prompts/src/lib/fakeResponse.ts
================================================
import { ChatMessage } from "@/actions/chat"
export type ReplyResponse = {
action: "reply";
content: string;
}
export type QueryGraphResponse = {
action: "graph_query";
query: string;
}
export const fakeResponse = (messages: ChatMessage[]): ReplyResponse | QueryGraphResponse => {
const isUserMessage = messages.slice(-1)[0].role === "user"
if (isUserMessage && messages.slice(-1)[0].content.includes("matrix")) {
return {
action: "graph_query",
query: "MATCH (m:Movie)<-[:RATED]-(u:User) WHERE m.title CONTAINS 'Matrix' WITH m, count(*) AS reviews RETURN m.title AS movie, reviews ORDER BY reviews DESC LIMIT 5"
}
} else if (isUserMessage && messages.slice(-1)[0].content.includes("keanu")) {
return {
action: "graph_query",
query: "MATCH (p:Person {name: 'Keanu Reeves'})-[r:ACTED_IN]->(m:Movie) RETURN p.name as actor, m.title as movie, m.year as year ORDER BY m.year DESC"
}
} else if (messages.slice(-1)[0].isError) {
return {
action: "graph_query",
query: messages.slice(-2)[0].content
}
} else if (messages.slice(-1)[0].role === "tool") {
return {
action: "reply",
content: `Here's what I found: ${messages.slice(-1)[0].content}`
}
}
return {
action: "reply",
content: "I can help you find information about movies, actors and their relationships. Try asking about specific movies or actors!"
}
}
================================================
FILE: 2025-04-07-reasoning-models-vs-prompts/src/lib/graphSchema.ts
================================================
export const moviesSchema = `
{
"nodes": [
{
"name": "_Bloom_Perspective_",
"indexes": [],
"constraints": [
"Constraint( id=3, name='constraint_f7832722', type='UNIQUENESS', schema=(:_Bloom_Perspective_ {id}), ownedIndex=1 )"
]
},
{
"name": "Movie",
"indexes": [
"year",
"imdbRating",
"released",
"imdbId",
"title",
"tagline",
"title,plot",
"plotEmbedding",
"posterEmbedding"
],
"constraints": [
"Constraint( id=77, name='constraint_737d9c1d', type='UNIQUENESS', schema=(:Movie {tmdbId}), ownedIndex=61 )",
"Constraint( id=75, name='constraint_3d5fcb7f', type='UNIQUENESS', schema=(:Movie {movieId}), ownedIndex=59 )"
]
},
{
"name": "User",
"indexes": [
"name"
],
"constraints": [
"Constraint( id=76, name='constraint_3b27b0', type='UNIQUENESS', schema=(:User {userId}), ownedIndex=64 )"
]
},
{
"name": "Actor",
"indexes": [],
"constraints": []
},
{
"name": "Director",
"indexes": [],
"constraints": []
},
{
"name": "Genre",
"indexes": [],
"constraints": [
"Constraint( id=74, name='constraint_f8689281', type='UNIQUENESS', schema=(:Genre {name}), ownedIndex=62 )"
]
},
{
"name": "Person",
"indexes": [
"name,bio",
"name"
],
"constraints": [
"Constraint( id=73, name='constraint_4499eae9', type='UNIQUENESS', schema=(:Person {tmdbId}), ownedIndex=63 )"
]
},
{
"name": "_Bloom_Scene_",
"indexes": [],
"constraints": []
}
],
"relationships": [
[
{
"name": "Person",
"indexes": [
"name,bio",
"name"
],
"constraints": [
"Constraint( id=73, name='constraint_4499eae9', type='UNIQUENESS', schema=(:Person {tmdbId}), ownedIndex=63 )"
]
},
"ACTED_IN",
{
"name": "Movie",
"indexes": [
"year",
"imdbRating",
"released",
"imdbId",
"title",
"tagline",
"title,plot",
"plotEmbedding",
"posterEmbedding"
],
"constraints": [
"Constraint( id=77, name='constraint_737d9c1d', type='UNIQUENESS', schema=(:Movie {tmdbId}), ownedIndex=61 )",
"Constraint( id=75, name='constraint_3d5fcb7f', type='UNIQUENESS', schema=(:Movie {movieId}), ownedIndex=59 )"
]
}
],
[
{
"name": "Actor",
"indexes": [],
"constraints": []
},
"ACTED_IN",
{
"name": "Movie",
"indexes": [
"year",
"imdbRating",
"released",
"imdbId",
"title",
"tagline",
"title,plot",
"plotEmbedding",
"posterEmbedding"
],
"constraints": [
"Constraint( id=77, name='constraint_737d9c1d', type='UNIQUENESS', schema=(:Movie {tmdbId}), ownedIndex=61 )",
"Constraint( id=75, name='constraint_3d5fcb7f', type='UNIQUENESS', schema=(:Movie {movieId}), ownedIndex=59 )"
]
}
],
[
{
"name": "Director",
"indexes": [],
"constraints": []
},
"ACTED_IN",
{
"name": "Movie",
"indexes": [
"year",
"imdbRating",
"released",
"imdbId",
"title",
"tagline",
"title,plot",
"plotEmbedding",
"posterEmbedding"
],
"constraints": [
"Constraint( id=77, name='constraint_737d9c1d', type='UNIQUENESS', schema=(:Movie {tmdbId}), ownedIndex=61 )",
"Constraint( id=75, name='constraint_3d5fcb7f', type='UNIQUENESS', schema=(:Movie {movieId}), ownedIndex=59 )"
]
}
],
[
{
"name": "User",
"indexes": [
"name"
],
"constraints": [
"Constraint( id=76, name='constraint_3b27b0', type='UNIQUENESS', schema=(:User {userId}), ownedIndex=64 )"
]
},
"RATED",
{
"name": "Movie",
"indexes": [
"year",
"imdbRating",
"released",
"imdbId",
"title",
"tagline",
"title,plot",
"plotEmbedding",
"posterEmbedding"
],
"constraints": [
"Constraint( id=77, name='constraint_737d9c1d', type='UNIQUENESS', schema=(:Movie {tmdbId}), ownedIndex=61 )",
"Constraint( id=75, name='constraint_3d5fcb7f', type='UNIQUENESS', schema=(:Movie {movieId}), ownedIndex=59 )"
]
}
],
[
{
"name": "Movie",
"indexes": [
"year",
"imdbRating",
"released",
"imdbId",
"title",
"tagline",
"title,plot",
"plotEmbedding",
"posterEmbedding"
],
"constraints": [
"Constraint( id=77, name='constraint_737d9c1d', type='UNIQUENESS', schema=(:Movie {tmdbId}), ownedIndex=61 )",
"Constraint( id=75, name='constraint_3d5fcb7f', type='UNIQUENESS', schema=(:Movie {movieId}), ownedIndex=59 )"
]
},
"IN_GENRE",
{
"name": "Genre",
"indexes": [],
"constraints": [
"Constraint( id=74, name='constraint_f8689281', type='UNIQUENESS', schema=(:Genre {name}), ownedIndex=62 )"
]
}
],
[
{
"name": "Director",
"indexes": [],
"constraints": []
},
"DIRECTED",
{
"name": "Movie",
"indexes": [
"year",
"imdbRating",
"released",
"imdbId",
"title",
"tagline",
"title,plot",
"plotEmbedding",
"posterEmbedding"
],
"constraints": [
"Constraint( id=77, name='constraint_737d9c1d', type='UNIQUENESS', schema=(:Movie {tmdbId}), ownedIndex=61 )",
"Constraint( id=75, name='constraint_3d5fcb7f', type='UNIQUENESS', schema=(:Movie {movieId}), ownedIndex=59 )"
]
}
],
[
{
"name": "Actor",
"indexes": [],
"constraints": []
},
"DIRECTED",
{
"name": "Movie",
"indexes": [
"year",
"imdbRating",
"released",
"imdbId",
"title",
"tagline",
"title,plot",
"plotEmbedding",
"posterEmbedding"
],
"constraints": [
"Constraint( id=77, name='constraint_737d9c1d', type='UNIQUENESS', schema=(:Movie {tmdbId}), ownedIndex=61 )",
"Constraint( id=75, name='constraint_3d5fcb7f', type='UNIQUENESS', schema=(:Movie {movieId}), ownedIndex=59 )"
]
}
],
[
{
"name": "Person",
"indexes": [
"name,bio",
"name"
],
"constraints": [
"Constraint( id=73, name='constraint_4499eae9', type='UNIQUENESS', schema=(:Person {tmdbId}), ownedIndex=63 )"
]
},
"DIRECTED",
{
"name": "Movie",
"indexes": [
"year",
"imdbRating",
"released",
"imdbId",
"title",
"tagline",
"title,plot",
"plotEmbedding",
"posterEmbedding"
],
"constraints": [
"Constraint( id=77, name='constraint_737d9c1d', type='UNIQUENESS', schema=(:Movie {tmdbId}), ownedIndex=61 )",
"Constraint( id=75, name='constraint_3d5fcb7f', type='UNIQUENESS', schema=(:Movie {movieId}), ownedIndex=59 )"
]
}
],
[
{
"name": "_Bloom_Perspective_",
"indexes": [],
"constraints": [
"Constraint( id=3, name='constraint_f7832722', type='UNIQUENESS', schema=(:_Bloom_Perspective_ {id}), ownedIndex=1 )"
]
},
"_Bloom_HAS_SCENE_",
{
"name": "_Bloom_Scene_",
"indexes": [],
"constraints": []
}
]
]
}`
================================================
FILE: 2025-04-07-reasoning-models-vs-prompts/src/lib/neo4j.ts
================================================
import neo4j, { type Driver, type Session } from 'neo4j-driver';
let driver: Driver | null = null;
function getNeo4jDriver() {
if (!driver) {
driver = neo4j.driver(
'neo4j+s://demo.neo4jlabs.com:7687',
neo4j.auth.basic('recommendations', 'recommendations')
);
}
return driver;
}
export class Neo4jSession {
private session: Session;
constructor() {
this.session = getNeo4jDriver().session({ database: 'recommendations' });
}
async run(query: string) {
const result = await this.session.run(query);
return result.records;
}
async close() {
await this.session.close();
}
finalize() {
this.close().catch(err => console.error('Error closing session:', err));
}
}
================================================
FILE: 2025-04-07-reasoning-models-vs-prompts/tsconfig.json
================================================
{
"compilerOptions": {
"target": "ES2017",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
"incremental": true,
"plugins": [
{
"name": "next"
}
],
"paths": {
"@/*": ["./src/*"]
}
},
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
"exclude": ["node_modules"]
}
================================================
FILE: 2025-04-15-code-generation-small-models/README.md
================================================
# 🦄 code generation with small models
> large models can do a lot, but so can small models. we'll discuss techniques for how to leverage extremely small models for generating diffs and making changes in complete codebases.
## Diagrams
### Overall Ownership - User vs. Agent

### Architecture

### Context Window Management

### Pipelining Updates

### Optimize - Serve most users with small, fast models

### Start with big expensive models, improve coverage with smaller models over time

## Project Structure
This session contains two main components:
### 1. Calculator Project (`/project`)
A simple calculator application that demonstrates a complete, well-structured Python codebase. Features include:
- Basic arithmetic operations (+, -, *, /)
- Memory functionality (store, recall, clear)
- Interactive command-line interface
- Clean separation of concerns (operations, calculator logic, user interface)
### 2. Agent Project (`/agent`)
A BAML-based project that shows how to use small models to generate and modify code. The agent demonstrates:
- Code analysis and understanding
- Targeted code modifications
- Working with existing codebases
## Running the Code
### Calculator Project
```bash
cd project
# Install dependencies
uv sync
# Run the calculator
python main.py
```
### Agent Project
```bash
cd agent
# Install dependencies
uv sync
# Generate BAML code
uv run baml-cli generate
# Run the agent
python hello.py
```
================================================
FILE: 2025-04-15-code-generation-small-models/agent/README.md
================================================
================================================
FILE: 2025-04-15-code-generation-small-models/agent/baml_src/clients.baml
================================================
// Learn more about clients at https://docs.boundaryml.com/docs/snippets/clients/overview
client<llm> CustomGPT4o {
provider openai
options {
model "gpt-4o"
api_key env.OPENAI_API_KEY
temperature 0.0
}
}
client<llm> Llama8b {
provider "openai-generic"
options {
model "llama-3.1:latest"
base_url "http://localhost:11434/v1"
}
}
client<llm> CustomGPT4oMini {
provider openai
retry_policy Exponential
options {
model "gpt-4o-mini"
api_key env.OPENAI_API_KEY
temperature 0.0
}
}
client<llm> CustomSonnet {
provider anthropic
options {
model "claude-3-5-sonnet-20241022"
api_key env.ANTHROPIC_API_KEY
}
}
client<llm> CustomHaiku {
provider anthropic
retry_policy Constant
options {
model "claude-3-haiku-20240307"
api_key env.ANTHROPIC_API_KEY
}
}
// https://docs.boundaryml.com/docs/snippets/clients/round-robin
client<llm> CustomFast {
provider round-robin
options {
// This will alternate between the two clients
strategy [CustomGPT4oMini, CustomHaiku]
}
}
// https://docs.boundaryml.com/docs/snippets/clients/fallback
client<llm> OpenaiFallback {
provider fallback
options {
// This will try the clients in order until one succeeds
strategy [CustomGPT4oMini, CustomGPT4oMini]
}
}
// https://docs.boundaryml.com/docs/snippets/clients/retry
retry_policy Constant {
max_retries 3
// Strategy is optional
strategy {
type constant_delay
delay_ms 200
}
}
retry_policy Exponential {
max_retries 2
// Strategy is optional
strategy {
type exponential_backoff
delay_ms 300
multiplier 1.5
max_delay_ms 10000
}
}
================================================
FILE: 2025-04-15-code-generation-small-models/agent/baml_src/generate_diff.baml
================================================
class Diff {
update_notes string[]
updated_code string[] @description(#"
use triple backticks to allow for multi-line strings.
[
```diff
--- my_file.py
+++ my_file.py
surrounding_code ...
- deleted_code ...
+ added_code ...
surrounding_code ...
```
```diff
...
```
]
"#)
}
function FindImports(code: string) -> string[] {
client Llama8b
prompt #"
Find all imports in the code.
{{ ctx.output_format }}
{{ _.role('user') }}
{{ code }}
"#
}
function GenerateDiff(instructions: string, file_name: string, current_code: string) -> Diff[] {
client CustomGPT4o
prompt #"
{{ instructions }}
{{ ctx.output_format(prefix="Answer using this schema:\n") }}
Keep diffs small. can use mutliple diffs for the same file
{{ _.role('user') }}
File: {{ file_name }}
----
{{ current_code }}
"#
}
test TestName {
functions [FindImports]
args {
code #"
"""Core calculator logic handling operations and memory."""
from operations import add, subtract, multiply, divide
from dotenv import load_dotenv
class Calculator:
def __init__(self):
self.memory = 0
self.operations = {
'+': add,
'-': subtract,
'*': multiply,
'/': divide
}
def calculate(self, a: float, operator: str, b: float) -> float:
"""Perform calculation based on operator."""
if operator not in self.operations:
raise ValueError(f"Unknown operator: {operator}")
return self.operations[operator](a, b)
def store_in_memory(self, value: float) -> None:
"""Store a value in memory."""
self.memory = value
def recall_memory(self) -> float:
"""Recall value from memory."""
return self.memory
def clear_memory(self) -> None:
"""Clear the memory."""
self.memory = 0
"#
}
}
test TestName {
functions [GenerateDiff]
args {
instructions #"
add an exponent operation to the calculator
"#
file_name #"calculator.py"#
current_code #"
"""Core calculator logic handling operations and memory."""
from operations import add, subtract, multiply, divide
class Calculator:
def __init__(self):
self.memory = 0
self.operations = {
'+': add,
'-': subtract,
'*': multiply,
'/': divide
}
def calculate(self, a: float, operator: str, b: float) -> float:
"""Perform calculation based on operator."""
if operator not in self.operations:
raise ValueError(f"Unknown operator: {operator}")
return self.operations[operator](a, b)
def store_in_memory(self, value: float) -> None:
"""Store a value in memory."""
self.memory = value
def recall_memory(self) -> float:
"""Recall value from memory."""
return self.memory
def clear_memory(self) -> None:
"""Clear the memory."""
self.memory = 0
"#
}
}
================================================
FILE: 2025-04-15-code-generation-small-models/agent/baml_src/generators.baml
================================================
// This helps use auto generate libraries you can use in the language of
// your choice. You can have multiple generators if you use multiple languages.
// Just ensure that the output_dir is different for each generator.
generator target {
// Valid values: "python/pydantic", "typescript", "ruby/sorbet", "rest/openapi"
output_type "python/pydantic"
// Where the generated code will be saved (relative to baml_src/)
output_dir "../"
// The version of the BAML package you have installed (e.g. same version as your baml-py or @boundaryml/baml).
// The BAML VSCode extension version should also match this version.
version "0.84.3"
// Valid values: "sync", "async"
// This controls what `b.FunctionName()` will be (sync or async).
default_client_mode sync
}
================================================
FILE: 2025-04-15-code-generation-small-models/agent/baml_src/resume.baml
================================================
// Defining a data model.
class Resume {
name string
email string
experience string[]
skills string[]
}
// Create a function to extract the resume from a string.
function ExtractResume(resume: string) -> Resume {
// Specify a client as provider/model-name
// you can use custom LLM params with a custom client name from clients.baml like "client CustomHaiku"
client "openai/gpt-4o" // Set OPENAI_API_KEY to use this client.
prompt #"
Extract from this content:
{{ resume }}
{{ ctx.output_format }}
"#
}
// Test the function with a sample resume. Open the VSCode playground to run this.
test vaibhav_resume {
functions [ExtractResume]
args {
resume #"
Vaibhav Gupta
vbv@boundaryml.com
Experience:
- Founder at BoundaryML
- CV Engineer at Google
- CV Engineer at Microsoft
Skills:
- Rust
- C++
"#
}
}
================================================
FILE: 2025-04-15-code-generation-small-models/agent/hello.py
================================================
import ast
def find_imports(code: str) -> list[str]:
tree = ast.parse(code)
for node in ast.walk(tree):
if isinstance(node, ast.Import):
for alias in node.names:
yield alias.name
elif isinstance(node, ast.ImportFrom):
yield node.module
def main():
print("Hello from 2025-04-15-code-generation-small-models!")
if __name__ == "__main__":
main()
================================================
FILE: 2025-04-15-code-generation-small-models/agent/pyproject.toml
================================================
[project]
name = "2025-04-15-code-generation-small-models"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.13"
dependencies = [
"baml-py>=0.83.0",
"pytest>=8.3.5",
]
================================================
FILE: 2025-04-15-code-generation-small-models/agent/test_utils.py
================================================
from utils import load_files, walk_directory
def test_load_files():
# Test loading specific files
files = load_files(['hello.py', 'utils.py'])
assert len(files) >= 2
assert 'hello.py' in files
assert 'utils.py' in files
def test_walk_directory():
# Test walking the current directory
files = walk_directory('.')
assert len(files) >= 2
assert any('hello.py' in path for path in files.keys())
assert any('utils.py' in path for path in files.keys())
if __name__ == '__main__':
test_load_files()
test_walk_directory()
print("All tests passed!")
================================================
FILE: 2025-04-15-code-generation-small-models/agent/utils.py
=========
gitextract_w16aztnp/
├── .claude/
│ └── commands/
│ ├── complete_episode.md
│ ├── email_prep.md
│ ├── episode_prep.md
│ ├── find_clips.md
│ ├── socials.md
│ └── suggest_titles.md
├── .envrc
├── .gitignore
├── .vscode/
│ └── settings.json
├── 2025-03-31-large-scale-classification/
│ ├── .vscode/
│ │ └── settings.json
│ ├── README.md
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── generators.baml
│ │ ├── pick_best_category.baml
│ │ └── resume.baml
│ ├── hello.py
│ ├── meta.md
│ ├── pyproject.toml
│ └── tools.json
├── 2025-04-07-reasoning-models-vs-prompts/
│ ├── .gitignore
│ ├── README.md
│ ├── baml_src/
│ │ ├── chat_with_graph.baml
│ │ ├── clients.baml
│ │ ├── generators.baml
│ │ └── resume.baml
│ ├── eslint.config.mjs
│ ├── meta.md
│ ├── next.config.ts
│ ├── package.json
│ ├── postcss.config.mjs
│ ├── src/
│ │ ├── actions/
│ │ │ └── chat.ts
│ │ ├── app/
│ │ │ ├── globals.css
│ │ │ ├── layout.tsx
│ │ │ └── page.tsx
│ │ ├── components/
│ │ │ └── App.tsx
│ │ └── lib/
│ │ ├── fakeResponse.ts
│ │ ├── graphSchema.ts
│ │ └── neo4j.ts
│ └── tsconfig.json
├── 2025-04-15-code-generation-small-models/
│ ├── README.md
│ ├── agent/
│ │ ├── README.md
│ │ ├── baml_src/
│ │ │ ├── clients.baml
│ │ │ ├── generate_diff.baml
│ │ │ ├── generators.baml
│ │ │ └── resume.baml
│ │ ├── hello.py
│ │ ├── pyproject.toml
│ │ ├── test_utils.py
│ │ └── utils.py
│ ├── meta.md
│ └── project/
│ ├── README.md
│ ├── calculator.py
│ ├── hello.py
│ ├── interface.py
│ ├── main.py
│ ├── operations.py
│ └── pyproject.toml
├── 2025-04-22-twelve-factor-agents/
│ ├── README.md
│ ├── final/
│ │ ├── baml_src/
│ │ │ ├── agent.baml
│ │ │ ├── clients.baml
│ │ │ ├── generators.baml
│ │ │ └── tool_calculator.baml
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── agent.ts
│ │ │ ├── cli.ts
│ │ │ ├── index.ts
│ │ │ ├── server.ts
│ │ │ └── state.ts
│ │ └── tsconfig.json
│ ├── meta.md
│ └── step-by-step/
│ ├── hack/
│ │ ├── restore-walkthrough.ts
│ │ └── run-walkthrough.ts
│ ├── package.json
│ ├── tsconfig.json
│ ├── walkthrough/
│ │ ├── 00-index.ts
│ │ ├── 01-agent.baml
│ │ ├── 01-agent.ts
│ │ ├── 01-cli.ts
│ │ ├── 01-index.ts
│ │ ├── 02-agent.baml
│ │ ├── 02-tool_calculator.baml
│ │ ├── 03-agent.ts
│ │ ├── 03b-agent.ts
│ │ ├── 04-agent.baml
│ │ ├── 04b-agent.baml
│ │ ├── 04c-agent.baml
│ │ ├── 05-agent.baml
│ │ ├── 05-agent.ts
│ │ ├── 05-cli.ts
│ │ ├── 05b-agent.baml
│ │ ├── 05c-agent.baml
│ │ ├── 06-agent.baml
│ │ ├── 07-agent.ts
│ │ ├── 07b-agent.ts
│ │ ├── 07c-agent.baml
│ │ ├── 08-server.ts
│ │ ├── 09-server.ts
│ │ ├── 09-state.ts
│ │ ├── 10-agent.ts
│ │ └── 10-server.ts
│ └── walkthrough.md
├── 2025-05-10-workshop-nyc-twelve-factor-agents/
│ ├── README.md
│ ├── meta.md
│ ├── pre-requisites/
│ │ ├── 00-hello-world/
│ │ │ ├── README.md
│ │ │ └── walkthrough/
│ │ │ ├── 00-.gitignore
│ │ │ ├── 00-index.ts
│ │ │ ├── 00-package.json
│ │ │ └── 00-tsconfig.json
│ │ ├── 01-cli-and-agent/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ └── index.ts
│ │ │ ├── tsconfig.json
│ │ │ └── walkthrough/
│ │ │ ├── 01-agent.baml
│ │ │ ├── 01-agent.ts
│ │ │ ├── 01-cli.ts
│ │ │ └── 01-index.ts
│ │ ├── README.md
│ │ └── final/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── baml_src/
│ │ │ ├── agent.baml
│ │ │ ├── clients.baml
│ │ │ └── generators.baml
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── agent.ts
│ │ │ ├── cli.ts
│ │ │ └── index.ts
│ │ └── tsconfig.json
│ ├── workshop-agents/
│ │ ├── 02-calculator-tools/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── baml_src/
│ │ │ │ ├── agent.baml
│ │ │ │ ├── clients.baml
│ │ │ │ └── generators.baml
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── agent.ts
│ │ │ │ ├── cli.ts
│ │ │ │ └── index.ts
│ │ │ ├── tsconfig.json
│ │ │ └── walkthrough/
│ │ │ ├── 02-agent.baml
│ │ │ └── 02-tool_calculator.baml
│ │ ├── 03-tool-loop/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── baml_src/
│ │ │ │ ├── agent.baml
│ │ │ │ ├── clients.baml
│ │ │ │ ├── generators.baml
│ │ │ │ └── tool_calculator.baml
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── agent.ts
│ │ │ │ ├── cli.ts
│ │ │ │ └── index.ts
│ │ │ ├── tsconfig.json
│ │ │ └── walkthrough/
│ │ │ ├── 03-agent.ts
│ │ │ └── 03b-agent.ts
│ │ ├── 04-baml-tests/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── baml_src/
│ │ │ │ ├── agent.baml
│ │ │ │ ├── clients.baml
│ │ │ │ ├── generators.baml
│ │ │ │ └── tool_calculator.baml
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── agent.ts
│ │ │ │ ├── cli.ts
│ │ │ │ └── index.ts
│ │ │ ├── tsconfig.json
│ │ │ └── walkthrough/
│ │ │ ├── 04-agent.baml
│ │ │ ├── 04b-agent.baml
│ │ │ └── 04c-agent.baml
│ │ ├── 05-human-tools/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── baml_src/
│ │ │ │ ├── agent.baml
│ │ │ │ ├── clients.baml
│ │ │ │ ├── generators.baml
│ │ │ │ └── tool_calculator.baml
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── agent.ts
│ │ │ │ ├── cli.ts
│ │ │ │ └── index.ts
│ │ │ ├── tsconfig.json
│ │ │ └── walkthrough/
│ │ │ ├── 05-agent.baml
│ │ │ ├── 05-agent.ts
│ │ │ ├── 05-cli.ts
│ │ │ ├── 05b-agent.baml
│ │ │ └── 05c-agent.baml
│ │ ├── 06-customize-prompt/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── baml_src/
│ │ │ │ ├── agent.baml
│ │ │ │ ├── clients.baml
│ │ │ │ ├── generators.baml
│ │ │ │ └── tool_calculator.baml
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── agent.ts
│ │ │ │ ├── cli.ts
│ │ │ │ └── index.ts
│ │ │ ├── tsconfig.json
│ │ │ └── walkthrough/
│ │ │ └── 06-agent.baml
│ │ ├── 07-context-window/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── baml_src/
│ │ │ │ ├── agent.baml
│ │ │ │ ├── clients.baml
│ │ │ │ ├── generators.baml
│ │ │ │ └── tool_calculator.baml
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── agent.ts
│ │ │ │ ├── cli.ts
│ │ │ │ └── index.ts
│ │ │ ├── tsconfig.json
│ │ │ └── walkthrough/
│ │ │ ├── 07-agent.ts
│ │ │ ├── 07b-agent.ts
│ │ │ └── 07c-agent.baml
│ │ ├── 08-api-endpoints/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── baml_src/
│ │ │ │ ├── agent.baml
│ │ │ │ ├── clients.baml
│ │ │ │ ├── generators.baml
│ │ │ │ └── tool_calculator.baml
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── agent.ts
│ │ │ │ ├── cli.ts
│ │ │ │ └── index.ts
│ │ │ ├── tsconfig.json
│ │ │ └── walkthrough/
│ │ │ └── 08-server.ts
│ │ ├── 09-state-management/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── baml_src/
│ │ │ │ ├── agent.baml
│ │ │ │ ├── clients.baml
│ │ │ │ ├── generators.baml
│ │ │ │ └── tool_calculator.baml
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── agent.ts
│ │ │ │ ├── cli.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── server.ts
│ │ │ ├── tsconfig.json
│ │ │ └── walkthrough/
│ │ │ ├── 09-server.ts
│ │ │ └── 09-state.ts
│ │ ├── 10-human-approval/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── baml_src/
│ │ │ │ ├── agent.baml
│ │ │ │ ├── clients.baml
│ │ │ │ ├── generators.baml
│ │ │ │ └── tool_calculator.baml
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── agent.ts
│ │ │ │ ├── cli.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── server.ts
│ │ │ │ └── state.ts
│ │ │ ├── tsconfig.json
│ │ │ └── walkthrough/
│ │ │ ├── 10-agent.ts
│ │ │ └── 10-server.ts
│ │ └── README.md
│ └── workshop-bonus/
│ ├── README.md
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── generators.baml
│ │ └── resume.baml
│ ├── hello.py
│ ├── parse_json_schema.py
│ ├── pyproject.toml
│ └── tools.json
├── 2025-05-13-designing-evals/
│ ├── README.md
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── generators.baml
│ │ └── lessonplan.baml
│ ├── evals/
│ │ ├── run_2025-05-13-11-01-29/
│ │ │ ├── data_1.json
│ │ │ └── data_2.json
│ │ └── run_2025-05-13-11-06-05/
│ │ ├── data_1.json
│ │ └── data_2.json
│ ├── hello.py
│ ├── meta.md
│ └── pyproject.toml
├── 2025-05-17-workshop-sf-twelve-factor-agents/
│ ├── README.md
│ ├── agents-workshop/
│ │ ├── .gitkeep
│ │ ├── 00-hello-world/
│ │ │ ├── README.md
│ │ │ └── walkthrough/
│ │ │ ├── 00-.gitignore
│ │ │ ├── 00-index.ts
│ │ │ ├── 00-package.json
│ │ │ └── 00-tsconfig.json
│ │ ├── 01-cli-and-agent/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ └── index.ts
│ │ │ ├── tsconfig.json
│ │ │ └── walkthrough/
│ │ │ ├── 01-agent.baml
│ │ │ ├── 01-agent.ts
│ │ │ ├── 01-cli.ts
│ │ │ └── 01-index.ts
│ │ ├── 02-calculator-tools/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── baml_src/
│ │ │ │ ├── agent.baml
│ │ │ │ ├── clients.baml
│ │ │ │ └── generators.baml
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── agent.ts
│ │ │ │ ├── cli.ts
│ │ │ │ └── index.ts
│ │ │ ├── tsconfig.json
│ │ │ └── walkthrough/
│ │ │ ├── 02-agent.baml
│ │ │ └── 02-tool_calculator.baml
│ │ ├── 03-tool-loop/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── baml_src/
│ │ │ │ ├── agent.baml
│ │ │ │ ├── clients.baml
│ │ │ │ ├── generators.baml
│ │ │ │ └── tool_calculator.baml
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── agent.ts
│ │ │ │ ├── cli.ts
│ │ │ │ └── index.ts
│ │ │ ├── tsconfig.json
│ │ │ └── walkthrough/
│ │ │ ├── 03-agent.ts
│ │ │ └── 03b-agent.ts
│ │ ├── 04-baml-tests/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── baml_src/
│ │ │ │ ├── agent.baml
│ │ │ │ ├── clients.baml
│ │ │ │ ├── generators.baml
│ │ │ │ └── tool_calculator.baml
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── agent.ts
│ │ │ │ ├── cli.ts
│ │ │ │ └── index.ts
│ │ │ ├── tsconfig.json
│ │ │ └── walkthrough/
│ │ │ ├── 04-agent.baml
│ │ │ ├── 04b-agent.baml
│ │ │ └── 04c-agent.baml
│ │ ├── 05-human-tools/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── baml_src/
│ │ │ │ ├── agent.baml
│ │ │ │ ├── clients.baml
│ │ │ │ ├── generators.baml
│ │ │ │ └── tool_calculator.baml
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── agent.ts
│ │ │ │ ├── cli.ts
│ │ │ │ └── index.ts
│ │ │ ├── tsconfig.json
│ │ │ └── walkthrough/
│ │ │ ├── 05-agent.baml
│ │ │ ├── 05-agent.ts
│ │ │ ├── 05-cli.ts
│ │ │ ├── 05b-agent.baml
│ │ │ └── 05c-agent.baml
│ │ ├── 06-customize-prompt/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── baml_src/
│ │ │ │ ├── agent.baml
│ │ │ │ ├── clients.baml
│ │ │ │ ├── generators.baml
│ │ │ │ └── tool_calculator.baml
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── agent.ts
│ │ │ │ ├── cli.ts
│ │ │ │ └── index.ts
│ │ │ ├── tsconfig.json
│ │ │ └── walkthrough/
│ │ │ └── 06-agent.baml
│ │ ├── 07-context-window/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── baml_src/
│ │ │ │ ├── agent.baml
│ │ │ │ ├── clients.baml
│ │ │ │ ├── generators.baml
│ │ │ │ └── tool_calculator.baml
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── agent.ts
│ │ │ │ ├── cli.ts
│ │ │ │ └── index.ts
│ │ │ ├── tsconfig.json
│ │ │ └── walkthrough/
│ │ │ ├── 07-agent.ts
│ │ │ ├── 07b-agent.ts
│ │ │ └── 07c-agent.baml
│ │ ├── 08-api-endpoints/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── baml_src/
│ │ │ │ ├── agent.baml
│ │ │ │ ├── clients.baml
│ │ │ │ ├── generators.baml
│ │ │ │ └── tool_calculator.baml
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── agent.ts
│ │ │ │ ├── cli.ts
│ │ │ │ └── index.ts
│ │ │ ├── tsconfig.json
│ │ │ └── walkthrough/
│ │ │ └── 08-server.ts
│ │ ├── 09-state-management/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── baml_src/
│ │ │ │ ├── agent.baml
│ │ │ │ ├── clients.baml
│ │ │ │ ├── generators.baml
│ │ │ │ └── tool_calculator.baml
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── agent.ts
│ │ │ │ ├── cli.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── server.ts
│ │ │ ├── tsconfig.json
│ │ │ └── walkthrough/
│ │ │ ├── 09-server.ts
│ │ │ └── 09-state.ts
│ │ ├── 10-human-approval/
│ │ │ ├── .gitignore
│ │ │ ├── README.md
│ │ │ ├── baml_src/
│ │ │ │ ├── agent.baml
│ │ │ │ ├── clients.baml
│ │ │ │ ├── generators.baml
│ │ │ │ └── tool_calculator.baml
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ ├── agent.ts
│ │ │ │ ├── cli.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── server.ts
│ │ │ │ └── state.ts
│ │ │ ├── tsconfig.json
│ │ │ └── walkthrough/
│ │ │ ├── 10-agent.ts
│ │ │ └── 10-server.ts
│ │ └── 11-humanlayer-approval/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── baml_src/
│ │ │ ├── agent.baml
│ │ │ ├── clients.baml
│ │ │ ├── generators.baml
│ │ │ └── tool_calculator.baml
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── agent.ts
│ │ │ ├── cli.ts
│ │ │ ├── index.ts
│ │ │ ├── server.ts
│ │ │ └── state.ts
│ │ ├── tsconfig.json
│ │ └── walkthrough/
│ │ ├── 11-cli.ts
│ │ ├── 11b-cli.ts
│ │ └── 11c-cli.ts
│ ├── meta.md
│ ├── morning/
│ │ ├── README.md
│ │ ├── baml_src/
│ │ │ ├── clients.baml
│ │ │ ├── generators.baml
│ │ │ └── resume.baml
│ │ ├── hello.py
│ │ └── pyproject.toml
│ └── pre-requisites/
│ ├── .gitignore
│ ├── 00-hello-world/
│ │ ├── README.md
│ │ └── walkthrough/
│ │ ├── 00-.gitignore
│ │ ├── 00-index.ts
│ │ ├── 00-package.json
│ │ └── 00-tsconfig.json
│ ├── 00a-python-setup/
│ │ ├── README.md
│ │ └── final/
│ │ ├── baml_src/
│ │ │ ├── clients.baml
│ │ │ ├── generators.baml
│ │ │ └── resume.baml
│ │ ├── hello.py
│ │ └── pyproject.toml
│ ├── 01-cli-and-agent/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── baml_src/
│ │ │ ├── agent.baml
│ │ │ ├── clients.baml
│ │ │ ├── generators.baml
│ │ │ └── resume.baml
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── agent.ts
│ │ │ ├── cli.ts
│ │ │ └── index.ts
│ │ ├── tsconfig.json
│ │ └── walkthrough/
│ │ ├── 01-agent.baml
│ │ ├── 01-agent.ts
│ │ ├── 01-cli.ts
│ │ └── 01-index.ts
│ ├── 01a-cli-and-agent-localmodels/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── baml_src/
│ │ │ ├── agent.baml
│ │ │ ├── clients.baml
│ │ │ └── generators.baml
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── agent.ts
│ │ │ ├── cli.ts
│ │ │ └── index.ts
│ │ ├── tsconfig.json
│ │ └── walkthrough/
│ │ └── 01a-agent.baml
│ ├── 02-calculator-tools/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── baml_src/
│ │ │ ├── agent.baml
│ │ │ ├── clients.baml
│ │ │ └── generators.baml
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── agent.ts
│ │ │ ├── cli.ts
│ │ │ └── index.ts
│ │ ├── tsconfig.json
│ │ └── walkthrough/
│ │ ├── 02-agent.baml
│ │ └── 02-tool_calculator.baml
│ ├── 03-tool-loop/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── baml_src/
│ │ │ ├── agent.baml
│ │ │ ├── clients.baml
│ │ │ ├── generators.baml
│ │ │ └── tool_calculator.baml
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── agent.ts
│ │ │ ├── cli.ts
│ │ │ └── index.ts
│ │ ├── tsconfig.json
│ │ └── walkthrough/
│ │ ├── 03-agent.ts
│ │ └── 03b-agent.ts
│ └── README.md
├── 2025-05-20-policies-to-prompts/
│ ├── .gitignore
│ ├── README.md
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── evaluate_gift_policy.baml
│ │ ├── evaluate_policy.baml
│ │ ├── generators.baml
│ │ └── questions.baml
│ ├── datasets.py
│ ├── meta.md
│ ├── pipeline.py
│ ├── pyproject.toml
│ ├── questions.py
│ └── test_pipeline.py
├── 2025-05-27-mcp-with-10000-tools/
│ ├── README.md
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── generators.baml
│ │ └── resume.baml
│ ├── meta.md
│ ├── parse_json_schema.py
│ ├── pyproject.toml
│ ├── tools.json
│ └── tools.py
├── 2025-06-03-humans-as-tools-async/
│ ├── .gitignore
│ ├── README.md
│ ├── baml_src/
│ │ ├── agent.baml
│ │ ├── clients.baml
│ │ ├── generators.baml
│ │ └── tool_calculator.baml
│ ├── meta.md
│ ├── package.json
│ ├── src/
│ │ ├── agent.ts
│ │ ├── cli.ts
│ │ ├── index.ts
│ │ ├── server.ts
│ │ └── state.ts
│ └── tsconfig.json
├── 2025-06-10-cracking-the-prompting-interview/
│ ├── README.md
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── codegen.baml
│ │ ├── diarization.baml
│ │ ├── generators.baml
│ │ ├── labels.baml
│ │ ├── plan.baml
│ │ ├── resume.baml
│ │ ├── symbol_tuning.baml
│ │ └── video_gen.baml
│ ├── hello.py
│ ├── meta.md
│ └── pyproject.toml
├── 2025-06-17-entity-extraction/
│ ├── .vscode/
│ │ └── settings.json
│ ├── README.md
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── generators.baml
│ │ └── resume.baml
│ ├── hello.py
│ ├── meta.md
│ └── pyproject.toml
├── 2025-06-24-ai-content-pipeline/
│ ├── .cursorrules
│ ├── .gitignore
│ ├── .multiclaude/
│ │ └── personas/
│ │ ├── agent-code-reviewer.md
│ │ ├── agent-developer.md
│ │ ├── agent-merger.md
│ │ ├── agent-multiplan-manager.md
│ │ └── agent-rebaser.md
│ ├── .vscode/
│ │ └── settings.json
│ ├── CLAUDE.md
│ ├── README.md
│ ├── backend/
│ │ ├── README.md
│ │ ├── ai_generator.py
│ │ ├── auth.py
│ │ ├── baml_src/
│ │ │ ├── clients.baml
│ │ │ ├── content_generation.baml
│ │ │ ├── email_test.baml
│ │ │ ├── generators.baml
│ │ │ ├── models.baml
│ │ │ ├── summarize.baml
│ │ │ └── summarize_test.baml
│ │ ├── baml_wrapper.py
│ │ ├── claude_output.jsonl
│ │ ├── database.py
│ │ ├── env.template
│ │ ├── hello.py
│ │ ├── job_processor.py
│ │ ├── main.py
│ │ ├── migrations/
│ │ │ ├── add_processing_stage.sql
│ │ │ ├── add_structured_content.sql
│ │ │ └── add_summary_json.sql
│ │ ├── models.py
│ │ ├── oauth_setup.py
│ │ ├── oauth_setup_claude.py
│ │ ├── pyproject.toml
│ │ ├── run_migration.py
│ │ ├── schema.sql
│ │ ├── setup_supabase.py
│ │ ├── test_baml_integration.py
│ │ ├── test_zoom_recordings.py
│ │ ├── video_processor.py
│ │ └── zoom_client.py
│ ├── docs/
│ │ └── oauth-setup.md
│ ├── frontend/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── components.json
│ │ ├── env.template
│ │ ├── eslint.config.mjs
│ │ ├── next.config.ts
│ │ ├── package.json
│ │ ├── postcss.config.mjs
│ │ ├── src/
│ │ │ ├── app/
│ │ │ │ ├── globals.css
│ │ │ │ ├── layout.tsx
│ │ │ │ ├── page.tsx
│ │ │ │ └── videos/
│ │ │ │ └── [id]/
│ │ │ │ └── page.tsx
│ │ │ ├── components/
│ │ │ │ ├── TranscriptViewer.tsx
│ │ │ │ ├── VideoImportForm.tsx
│ │ │ │ ├── VideoList.tsx
│ │ │ │ ├── ZoomRecordingsList.tsx
│ │ │ │ ├── home/
│ │ │ │ │ ├── video-list.tsx
│ │ │ │ │ └── zoom-recordings-list.tsx
│ │ │ │ ├── shared/
│ │ │ │ │ ├── empty-state.tsx
│ │ │ │ │ ├── error-message.tsx
│ │ │ │ │ ├── loading-indicator.tsx
│ │ │ │ │ ├── utils.tsx
│ │ │ │ │ └── youtube-embed.tsx
│ │ │ │ ├── theme-provider.tsx
│ │ │ │ ├── ui/
│ │ │ │ │ ├── alert.tsx
│ │ │ │ │ ├── badge.tsx
│ │ │ │ │ ├── button.tsx
│ │ │ │ │ ├── card.tsx
│ │ │ │ │ ├── dialog.tsx
│ │ │ │ │ ├── input.tsx
│ │ │ │ │ ├── scroll-area.tsx
│ │ │ │ │ ├── separator.tsx
│ │ │ │ │ ├── sonner.tsx
│ │ │ │ │ ├── tabs.tsx
│ │ │ │ │ └── textarea.tsx
│ │ │ │ ├── video/
│ │ │ │ │ ├── draft-editor.tsx
│ │ │ │ │ ├── email-preview.tsx
│ │ │ │ │ ├── linkedin-preview.tsx
│ │ │ │ │ ├── transcript-viewer.tsx
│ │ │ │ │ └── x-preview.tsx
│ │ │ │ └── zoom/
│ │ │ │ └── zoom-recordings-list.tsx
│ │ │ └── lib/
│ │ │ ├── api.ts
│ │ │ ├── apiClient.ts
│ │ │ ├── supabase.ts
│ │ │ └── utils.ts
│ │ └── tsconfig.json
│ ├── meta.md
│ └── specs/
│ ├── README.md
│ ├── merge-plan.md
│ ├── next-steps-notes.md
│ ├── prompt-impl.md
│ └── tasks.md
├── 2025-07-01-ai-content-pipeline-2/
│ ├── .cursorrules
│ ├── .gitignore
│ ├── .multiclaude/
│ │ └── personas/
│ │ ├── agent-code-reviewer.md
│ │ ├── agent-developer.md
│ │ ├── agent-merger.md
│ │ ├── agent-multiplan-manager.md
│ │ └── agent-rebaser.md
│ ├── .vscode/
│ │ └── settings.json
│ ├── CLAUDE.md
│ ├── README.md
│ ├── architecture.md
│ ├── backend/
│ │ ├── CLAUDE.md
│ │ ├── Makefile
│ │ ├── README.md
│ │ ├── auth.py
│ │ ├── baml_src/
│ │ │ ├── clients.baml
│ │ │ ├── content_generation.baml
│ │ │ ├── email_test.baml
│ │ │ ├── generators.baml
│ │ │ ├── models.baml
│ │ │ ├── summarize.baml
│ │ │ └── summarize_test.baml
│ │ ├── baml_wrapper.py
│ │ ├── claude_output.jsonl
│ │ ├── database.py
│ │ ├── env.template
│ │ ├── github_pr_service.py
│ │ ├── hello.py
│ │ ├── luma_client.py
│ │ ├── main.py
│ │ ├── migrations/
│ │ │ ├── add_github_pr_fields.sql
│ │ │ ├── add_processing_stage.sql
│ │ │ ├── add_structured_content.sql
│ │ │ └── add_summary_json.sql
│ │ ├── models.py
│ │ ├── oauth_setup.py
│ │ ├── oauth_setup_claude.py
│ │ ├── pyproject.toml
│ │ ├── run_migration.py
│ │ ├── schema.sql
│ │ ├── setup_supabase.py
│ │ ├── test_zoom_recordings.py
│ │ ├── video_processor.py
│ │ └── zoom_client.py
│ ├── cursed.md
│ ├── docs/
│ │ └── oauth-setup.md
│ ├── frontend/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── biome.json
│ │ ├── components.json
│ │ ├── env.template
│ │ ├── next.config.ts
│ │ ├── package.json
│ │ ├── postcss.config.mjs
│ │ ├── src/
│ │ │ ├── app/
│ │ │ │ ├── globals.css
│ │ │ │ ├── layout.tsx
│ │ │ │ ├── page.tsx
│ │ │ │ └── videos/
│ │ │ │ └── [id]/
│ │ │ │ └── page.tsx
│ │ │ ├── components/
│ │ │ │ ├── TranscriptViewer.tsx
│ │ │ │ ├── VideoImportForm.tsx
│ │ │ │ ├── VideoList.tsx
│ │ │ │ ├── ZoomRecordingsList.tsx
│ │ │ │ ├── github/
│ │ │ │ │ └── CreateGitHubPRButton.tsx
│ │ │ │ ├── home/
│ │ │ │ │ ├── video-list.tsx
│ │ │ │ │ └── zoom-recordings-list.tsx
│ │ │ │ ├── shared/
│ │ │ │ │ ├── empty-state.tsx
│ │ │ │ │ ├── error-message.tsx
│ │ │ │ │ ├── loading-indicator.tsx
│ │ │ │ │ ├── utils.tsx
│ │ │ │ │ └── youtube-embed.tsx
│ │ │ │ ├── theme-provider.tsx
│ │ │ │ ├── ui/
│ │ │ │ │ ├── alert.tsx
│ │ │ │ │ ├── badge.tsx
│ │ │ │ │ ├── button.tsx
│ │ │ │ │ ├── card.tsx
│ │ │ │ │ ├── dialog.tsx
│ │ │ │ │ ├── input.tsx
│ │ │ │ │ ├── label.tsx
│ │ │ │ │ ├── scroll-area.tsx
│ │ │ │ │ ├── separator.tsx
│ │ │ │ │ ├── sonner.tsx
│ │ │ │ │ ├── tabs.tsx
│ │ │ │ │ ├── textarea.tsx
│ │ │ │ │ └── tooltip.tsx
│ │ │ │ ├── video/
│ │ │ │ │ ├── draft-editor.tsx
│ │ │ │ │ ├── email-preview.tsx
│ │ │ │ │ ├── linkedin-preview.tsx
│ │ │ │ │ ├── transcript-viewer.tsx
│ │ │ │ │ └── x-preview.tsx
│ │ │ │ └── zoom/
│ │ │ │ └── zoom-recordings-list.tsx
│ │ │ └── lib/
│ │ │ ├── api.ts
│ │ │ ├── apiClient.ts
│ │ │ ├── supabase.ts
│ │ │ └── utils.ts
│ │ └── tsconfig.json
│ ├── meta.md
│ ├── recap-and-next.md
│ └── specs/
│ ├── github-pr-integration-plan.md
│ └── luma-docs.md
├── 2025-07-08-context-engineering/
│ ├── README.md
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── generators.baml
│ │ └── resume.baml
│ ├── main.py
│ ├── meta.md
│ └── pyproject.toml
├── 2025-07-15-decaying-resolution-memory/
│ ├── .gitignore
│ ├── README.md
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── extract_date.baml
│ │ ├── generators.baml
│ │ └── redact_pii.baml
│ ├── examine_threads.py
│ ├── explore_redis.py
│ ├── main.py
│ ├── meta.md
│ ├── processed/
│ │ ├── thread_1749693363562_nxf6gp.txt
│ │ └── thread_1749694758480_hb0tir.txt
│ ├── pyproject.toml
│ └── redact_pii.py
├── 2025-07-22-multimodality/
│ ├── README.md
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── generators.baml
│ │ └── resume.baml
│ ├── data/
│ │ └── psuedocode.py
│ ├── main.py
│ ├── meta.md
│ ├── pyproject.toml
│ └── socials.md
├── 2025-07-29-eval-many-models-same-prompt/
│ ├── README.md
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── content_generation.baml
│ │ ├── email_test.baml
│ │ ├── generators.baml
│ │ ├── models.baml
│ │ ├── summarize.baml
│ │ └── summarize_test.baml
│ ├── index.ts
│ ├── main.py
│ ├── meta.md
│ ├── package.json
│ ├── pyproject.toml
│ ├── results/
│ │ ├── Burningguineafowl/
│ │ │ ├── MyGemini.json
│ │ │ ├── MyGeminiSmart.json
│ │ │ ├── anthropic_claude-3-5-sonnet-20240620.json
│ │ │ ├── chatgpt.json
│ │ │ └── openai_gpt-4o-mini.json
│ │ └── EmailStructure/
│ │ ├── MyGemini.json
│ │ ├── MyGeminiSmart.json
│ │ ├── anthropic_claude-3-5-sonnet-20240620.json
│ │ ├── chatgpt.json
│ │ └── openai_gpt-4o-mini.json
│ ├── streamlit_app.py
│ ├── test_loader.py
│ └── tests/
│ ├── Burningguineafowl.json
│ └── EmailStructure.json
├── 2025-08-05-advanced-context-engineering-for-coding-agents/
│ ├── .claude/
│ │ └── settings.json
│ ├── CLAUDE.md
│ ├── README.md
│ ├── email.md
│ ├── hack/
│ │ └── spec_metadata.sh
│ ├── journal.md
│ ├── meta.md
│ ├── socials.md
│ └── thoughts/
│ └── shared/
│ ├── issues/
│ │ └── issue-1252.md
│ ├── plans/
│ │ ├── baml-test-assertion-validation-with-research.md
│ │ └── fix-assert-syntax-validation-no-research.md
│ ├── research/
│ │ └── 2025-08-05_05-15-59_baml_test_assertions.md
│ └── traces/
│ └── 2025-07-30T20-23-46.754243_claude-opus-4-20250514_4ca6cb02.json
├── 2025-08-12-manus-context-engineering/
│ ├── README.md
│ ├── email.md
│ └── meta.md
├── 2025-08-19-interruptible-agents/
│ ├── .vscode/
│ │ └── settings.json
│ ├── README.md
│ ├── agents/
│ │ ├── __init__.py
│ │ ├── planner_agent.py
│ │ ├── search_agent.py
│ │ └── writer_agent.py
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── generate_diff.baml
│ │ ├── generators.baml
│ │ ├── research.baml
│ │ └── resume.baml
│ ├── email.md
│ ├── hello.py
│ ├── manager.py
│ ├── meta.md
│ ├── pyproject.toml
│ └── runtime.py
├── 2025-08-26-claude-for-non-code-workflows/
│ ├── .claude/
│ │ └── commands/
│ │ ├── ctx.md
│ │ ├── daily_review.md
│ │ └── monthly_update.md
│ ├── .gitignore
│ ├── COMPANY.md
│ ├── Makefile
│ ├── README.md
│ ├── company/
│ │ ├── dailies/
│ │ │ └── 2025-08-26-daily-review.md
│ │ └── journal.md
│ ├── dailies/
│ │ ├── 2025-08-25.md
│ │ └── 2025-08-26-daily-review.md
│ ├── email.md
│ ├── meta.md
│ ├── package.json
│ ├── running_investor_updates.md
│ ├── sops/
│ │ ├── daily-review-sop.md
│ │ └── investor-updates.md
│ ├── thoughts/
│ │ └── shared/
│ │ └── research/
│ │ └── 2025-08-26_09-29-35_humanlayer-self-structure.md
│ ├── tools/
│ │ ├── pull-metrics.ts
│ │ └── slice-files.ts
│ └── tsconfig.json
├── 2025-09-02-voice-agent-supervisor-threading/
│ ├── CLAUDE.md
│ ├── README.md
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── functions.baml
│ │ └── generators.baml
│ ├── deep-research.md
│ ├── email.md
│ ├── meta.md
│ ├── pyproject.toml
│ ├── specification_updates.md
│ └── voice_agent.py
├── 2025-09-09-generative-uis/
│ ├── README.md
│ ├── email.md
│ ├── meta.md
│ └── my-app/
│ ├── .cursor/
│ │ └── rules/
│ │ └── baml.mdc
│ ├── .gitignore
│ ├── README.md
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── generators.baml
│ │ ├── recipe.baml
│ │ └── resume.baml
│ ├── next.config.ts
│ ├── package.json
│ ├── postcss.config.mjs
│ ├── src/
│ │ └── app/
│ │ ├── action.ts
│ │ ├── globals.css
│ │ ├── layout.tsx
│ │ └── page.tsx
│ └── tsconfig.json
├── 2025-09-16-coding-agent-tools-bash-vs-mcp/
│ ├── .gitignore
│ ├── CLAUDE.md
│ ├── CLAUDE_linear_cli.md
│ ├── CLAUDE_linear_mcp.md
│ ├── Dockerfile
│ ├── README.md
│ ├── docker-compose.yml
│ ├── linear-cli/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── linear-cli.ts
│ │ ├── package.json
│ │ └── tsconfig.json
│ ├── mcp-linear.json
│ ├── meta.md
│ ├── package.json
│ ├── src/
│ │ ├── index.ts
│ │ └── inspect-logs.ts
│ └── tsconfig.json
├── 2025-09-23-evals-for-classification/
│ ├── .gitignore
│ ├── README.md
│ ├── data/
│ │ ├── categories.txt
│ │ ├── categories_full.txt
│ │ └── vector_store/
│ │ └── 7991f4cf-9469-49f2-bc91-a2a34d20a70f/
│ │ └── index_metadata.pickle
│ ├── meta.md
│ ├── pyproject.toml
│ ├── pyrightconfig.json
│ ├── scripts/
│ │ ├── README.md
│ │ ├── __init__.py
│ │ └── build_vector_store.py
│ ├── src/
│ │ ├── .cursor/
│ │ │ └── rules/
│ │ │ └── baml.mdc
│ │ ├── README.md
│ │ ├── __init__.py
│ │ ├── baml_src/
│ │ │ ├── clients.baml
│ │ │ ├── expand_user_query.baml
│ │ │ ├── generators.baml
│ │ │ └── pick_best_category.baml
│ │ ├── classification/
│ │ │ ├── __init__.py
│ │ │ ├── embeddings.py
│ │ │ ├── expander.py
│ │ │ ├── narrowing.py
│ │ │ ├── pipeline.py
│ │ │ ├── selection.py
│ │ │ └── vector_store.py
│ │ ├── config/
│ │ │ ├── __init__.py
│ │ │ └── settings.py
│ │ ├── data/
│ │ │ ├── __init__.py
│ │ │ ├── category_loader.py
│ │ │ └── models.py
│ │ ├── main.py
│ │ └── shared/
│ │ ├── __init__.py
│ │ ├── constants.py
│ │ ├── correctness.py
│ │ ├── enums.py
│ │ └── logger.py
│ ├── tests/
│ │ ├── README.md
│ │ ├── __init__.py
│ │ ├── data/
│ │ │ ├── __init__.py
│ │ │ └── test_cases.py
│ │ ├── integration/
│ │ │ ├── __init__.py
│ │ │ ├── test_narrowing_accuracy.py
│ │ │ ├── test_pipeline_accuracy.py
│ │ │ └── test_selection_accuracy.py
│ │ ├── run_tests.py
│ │ └── unit/
│ │ └── classification/
│ │ ├── embeddings_test.py
│ │ ├── narrowing_test.py
│ │ ├── pipeline_test.py
│ │ ├── selection_test.py
│ │ └── vector_store_test.py
│ └── ui/
│ ├── __init__.py
│ ├── analysis.py
│ ├── app.py
│ ├── components.py
│ └── data_operations.py
├── 2025-09-30-dyanmic-schemas/
│ ├── README.md
│ ├── backend/
│ │ ├── README.md
│ │ ├── pyproject.toml
│ │ └── server.py
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── execute_baml.baml
│ │ ├── generate_baml.baml
│ │ └── generators.baml
│ ├── email.md
│ ├── frontend/
│ │ ├── .gitignore
│ │ ├── README.md
│ │ ├── app/
│ │ │ ├── globals.css
│ │ │ ├── layout.tsx
│ │ │ └── page.tsx
│ │ ├── components/
│ │ │ ├── ansii-string.tsx
│ │ │ ├── error-message.tsx
│ │ │ ├── execution-result-section.tsx
│ │ │ ├── generated-baml-section.tsx
│ │ │ ├── input-section.tsx
│ │ │ ├── markdown/
│ │ │ │ ├── MarkdownRenderer.tsx
│ │ │ │ ├── bamlJinjaTextmate.json
│ │ │ │ ├── bamlTextmate.json
│ │ │ │ └── shiki-grammars.ts
│ │ │ └── ui/
│ │ │ ├── badge.tsx
│ │ │ ├── button.tsx
│ │ │ ├── card.tsx
│ │ │ ├── input.tsx
│ │ │ ├── separator.tsx
│ │ │ ├── table.tsx
│ │ │ ├── tabs.tsx
│ │ │ └── textarea.tsx
│ │ ├── components.json
│ │ ├── eslint.config.mjs
│ │ ├── lib/
│ │ │ └── utils.ts
│ │ ├── next.config.ts
│ │ ├── package.json
│ │ ├── postcss.config.mjs
│ │ └── tsconfig.json
│ └── meta.md
├── 2025-10-07-anthropic-post-mortem/
│ ├── README.md
│ └── meta.md
├── 2025-10-12-unconference-sf/
│ ├── dex-ralph-demo/
│ │ ├── .gitignore
│ │ ├── IMPLEMENTATION_PLAN.md
│ │ ├── PROMPT.md
│ │ ├── README.md
│ │ ├── biome.json
│ │ ├── loop.sh
│ │ ├── next-env.d.ts
│ │ ├── next.config.ts
│ │ ├── package.json
│ │ ├── postcss.config.mjs
│ │ ├── prisma/
│ │ │ ├── migrations/
│ │ │ │ ├── 20251012214243_init/
│ │ │ │ │ └── migration.sql
│ │ │ │ └── migration_lock.toml
│ │ │ └── schema.prisma
│ │ ├── specs/
│ │ │ └── overview.md
│ │ ├── src/
│ │ │ ├── app/
│ │ │ │ ├── api/
│ │ │ │ │ └── auth/
│ │ │ │ │ └── [...all]/
│ │ │ │ │ └── route.ts
│ │ │ │ ├── dashboard/
│ │ │ │ │ ├── page.tsx
│ │ │ │ │ └── sign-out-button.tsx
│ │ │ │ ├── globals.css
│ │ │ │ ├── layout.tsx
│ │ │ │ ├── login/
│ │ │ │ │ └── page.tsx
│ │ │ │ └── page.tsx
│ │ │ └── lib/
│ │ │ ├── auth-client.ts
│ │ │ ├── auth.ts
│ │ │ └── prisma.ts
│ │ ├── tsconfig.json
│ │ └── tsconfig.tsbuildinfo
│ └── meta.md
├── 2025-10-14-no-vibes-allowed/
│ ├── README.md
│ ├── email.md
│ └── meta.md
├── 2025-10-21-agentic-rag-context-engineering/
│ ├── .cursor/
│ │ └── rules/
│ │ └── baml.mdc
│ ├── .gitignore
│ ├── ARCHITECTURE.md
│ ├── README.md
│ ├── TUI_LAYOUT.md
│ ├── agent_runtime.py
│ ├── baml_src/
│ │ ├── agent-tools.baml
│ │ ├── agent.baml
│ │ ├── clients.baml
│ │ ├── generators.baml
│ │ ├── resume.baml
│ │ └── tools.md
│ ├── email.md
│ ├── main.py
│ ├── meta.md
│ ├── pyproject.toml
│ └── tui.py
├── 2025-10-28-ralph-wiggum-coding-agent-power-tools/
│ ├── .gitignore
│ ├── README.md
│ ├── email.md
│ ├── meta.md
│ ├── minibaml/
│ │ ├── IMPLEMENTATION_PLAN.md
│ │ ├── PROMPT.md
│ │ ├── README.md
│ │ ├── build.zig
│ │ ├── build.zig.zon
│ │ ├── docs/
│ │ │ ├── BUILDING.md
│ │ │ ├── getting-started.md
│ │ │ └── reference.md
│ │ ├── genspecs.md
│ │ ├── genspecs.sh
│ │ ├── hack/
│ │ │ ├── download_docs.sh
│ │ │ └── urls.txt
│ │ ├── loop.sh
│ │ ├── meta.md
│ │ ├── specs/
│ │ │ ├── examples_interactive-examples.mdx
│ │ │ ├── examples_prompt-engineering_action-item-extraction.mdx
│ │ │ ├── examples_prompt-engineering_chain-of-thought.mdx
│ │ │ ├── examples_prompt-engineering_chat.mdx
│ │ │ ├── examples_prompt-engineering_classification.mdx
│ │ │ ├── examples_prompt-engineering_pii-data-extraction-scrubbing.mdx
│ │ │ ├── examples_prompt-engineering_reducing-hallucinations.mdx
│ │ │ ├── examples_prompt-engineering_retrieval-augmented-generation.mdx
│ │ │ ├── examples_prompt-engineering_symbol-tuning.mdx
│ │ │ ├── examples_prompt-engineering_tools-function-calling.mdx
│ │ │ ├── guide_baml-advanced_checks-and-asserts.mdx
│ │ │ ├── guide_baml-advanced_collector-track-tokens.mdx
│ │ │ ├── guide_baml-advanced_dynamic-types.mdx
│ │ │ ├── guide_baml-advanced_llm-client-registry.mdx
│ │ │ ├── guide_baml-advanced_modular-api.mdx
│ │ │ ├── guide_baml-advanced_prompt-caching-message-role-metadata.mdx
│ │ │ ├── guide_baml-advanced_reusing-prompt-snippets.mdx
│ │ │ ├── guide_baml-basics_abort-signal.mdx
│ │ │ ├── guide_baml-basics_concurrent-calls.mdx
│ │ │ ├── guide_baml-basics_error-handling.mdx
│ │ │ ├── guide_baml-basics_multi-modal.mdx
│ │ │ ├── guide_baml-basics_prompting-with-baml.mdx
│ │ │ ├── guide_baml-basics_streaming.mdx
│ │ │ ├── guide_baml-basics_switching-llms.mdx
│ │ │ ├── guide_baml-basics_testing-functions.mdx
│ │ │ ├── guide_baml-basics_timeouts.mdx
│ │ │ ├── guide_boundary-cloud_observability_tracking-usage.mdx
│ │ │ ├── guide_comparisons_baml-vs-ai-sdk.mdx
│ │ │ ├── guide_comparisons_baml-vs-langchain.mdx
│ │ │ ├── guide_comparisons_baml-vs-marvin.mdx
│ │ │ ├── guide_comparisons_baml-vs-open-ai-sdk.mdx
│ │ │ ├── guide_comparisons_baml-vs-pydantic.mdx
│ │ │ ├── guide_contact.mdx
│ │ │ ├── guide_development_deploying_aws.mdx
│ │ │ ├── guide_development_deploying_docker-rest-api.mdx
│ │ │ ├── guide_development_deploying_docker.mdx
│ │ │ ├── guide_development_environment-variables.mdx
│ │ │ ├── guide_development_terminal-logs.mdx
│ │ │ ├── guide_development_upgrade-baml-versions.mdx
│ │ │ ├── guide_framework-integration_react-next-js_building-a-chatbot.mdx
│ │ │ ├── guide_framework-integration_react-next-js_quick-start.mdx
│ │ │ ├── guide_installation-editors_cursor-extension.mdx
│ │ │ ├── guide_installation-editors_others.mdx
│ │ │ ├── guide_installation-editors_vs-code-extension.mdx
│ │ │ ├── guide_installation-language_elixir.mdx
│ │ │ ├── guide_installation-language_go.mdx
│ │ │ ├── guide_installation-language_python.mdx
│ │ │ ├── guide_installation-language_rest-api-other-languages.mdx
│ │ │ ├── guide_installation-language_ruby.mdx
│ │ │ ├── guide_installation-language_typescript.mdx
│ │ │ ├── guide_introduction_baml_client.mdx
│ │ │ ├── guide_introduction_baml_src.mdx
│ │ │ ├── guide_introduction_what-is-baml.mdx
│ │ │ ├── guide_introduction_why-baml.mdx
│ │ │ ├── home.mdx
│ │ │ ├── llms.txt
│ │ │ ├── minibaml.md
│ │ │ ├── ref_attributes_alias.mdx
│ │ │ ├── ref_attributes_assert.mdx
│ │ │ ├── ref_attributes_check.mdx
│ │ │ ├── ref_attributes_description.mdx
│ │ │ ├── ref_attributes_dynamic.mdx
│ │ │ ├── ref_attributes_jinja-in-attributes.mdx
│ │ │ ├── ref_attributes_skip.mdx
│ │ │ ├── ref_attributes_what-are-attributes.mdx
│ │ │ ├── ref_baml-cli_dev.mdx
│ │ │ ├── ref_baml-cli_fmt.mdx
│ │ │ ├── ref_baml-cli_generate.mdx
│ │ │ ├── ref_baml-cli_init.mdx
│ │ │ ├── ref_baml-cli_serve.mdx
│ │ │ ├── ref_baml-cli_test.mdx
│ │ │ ├── ref_baml_class.mdx
│ │ │ ├── ref_baml_client-llm.mdx
│ │ │ ├── ref_baml_client_abort-signal.mdx
│ │ │ ├── ref_baml_client_audio.mdx
│ │ │ ├── ref_baml_client_client.mdx
│ │ │ ├── ref_baml_client_collector.mdx
│ │ │ ├── ref_baml_client_config.mdx
│ │ │ ├── ref_baml_client_errors_baml-abort-error.mdx
│ │ │ ├── ref_baml_client_errors_baml-client-finish-reason-error.mdx
│ │ │ ├── ref_baml_client_errors_baml-validation-error.mdx
│ │ │ ├── ref_baml_client_errors_overview.mdx
│ │ │ ├── ref_baml_client_image.mdx
│ │ │ ├── ref_baml_client_media.mdx
│ │ │ ├── ref_baml_client_on-tick.mdx
│ │ │ ├── ref_baml_client_pdf.mdx
│ │ │ ├── ref_baml_client_react-next-js_hook-data.mdx
│ │ │ ├── ref_baml_client_react-next-js_hook-input.mdx
│ │ │ ├── ref_baml_client_react-next-js_hook-output.mdx
│ │ │ ├── ref_baml_client_react-next-js_use-function-name-hook.mdx
│ │ │ ├── ref_baml_client_type-builder.mdx
│ │ │ ├── ref_baml_client_video.mdx
│ │ │ ├── ref_baml_client_with-options.mdx
│ │ │ ├── ref_baml_enum.mdx
│ │ │ ├── ref_baml_function.mdx
│ │ │ ├── ref_baml_general-baml-syntax_array-list.mdx
│ │ │ ├── ref_baml_general-baml-syntax_bool.mdx
│ │ │ ├── ref_baml_general-baml-syntax_comments.mdx
│ │ │ ├── ref_baml_general-baml-syntax_environment-variables.mdx
│ │ │ ├── ref_baml_general-baml-syntax_int-float.mdx
│ │ │ ├── ref_baml_general-baml-syntax_map-dictionary.mdx
│ │ │ ├── ref_baml_general-baml-syntax_media.mdx
│ │ │ ├── ref_baml_general-baml-syntax_string.mdx
│ │ │ ├── ref_baml_generator.mdx
│ │ │ ├── ref_baml_template-string.mdx
│ │ │ ├── ref_baml_test.mdx
│ │ │ ├── ref_baml_types.mdx
│ │ │ ├── ref_editor-extension-settings_baml-cli-path.mdx
│ │ │ ├── ref_editor-extension-settings_baml-enable-playground-proxy.mdx
│ │ │ ├── ref_editor-extension-settings_baml-generate-code-on-save.mdx
│ │ │ ├── ref_editor-extension-settings_baml-sync-extension-to-generator-version.mdx
│ │ │ ├── ref_llm-client-providers_anthropic.mdx
│ │ │ ├── ref_llm-client-providers_aws-bedrock.mdx
│ │ │ ├── ref_llm-client-providers_azure-ai-foundary.mdx
│ │ │ ├── ref_llm-client-providers_cerebras.mdx
│ │ │ ├── ref_llm-client-providers_google-ai-gemini.mdx
│ │ │ ├── ref_llm-client-providers_google-vertex.mdx
│ │ │ ├── ref_llm-client-providers_groq.mdx
│ │ │ ├── ref_llm-client-providers_huggingface.mdx
│ │ │ ├── ref_llm-client-providers_keywordsai.mdx
│ │ │ ├── ref_llm-client-providers_litellm.mdx
│ │ │ ├── ref_llm-client-providers_llama-api.mdx
│ │ │ ├── ref_llm-client-providers_lmstudio.mdx
│ │ │ ├── ref_llm-client-providers_ollama.mdx
│ │ │ ├── ref_llm-client-providers_open-ai-from-azure.mdx
│ │ │ ├── ref_llm-client-providers_open-ai-responses-api.mdx
│ │ │ ├── ref_llm-client-providers_open-ai.mdx
│ │ │ ├── ref_llm-client-providers_openai-generic.mdx
│ │ │ ├── ref_llm-client-providers_openrouter.mdx
│ │ │ ├── ref_llm-client-providers_tinfoil.mdx
│ │ │ ├── ref_llm-client-providers_together.mdx
│ │ │ ├── ref_llm-client-providers_unify.mdx
│ │ │ ├── ref_llm-client-providers_vercel-ai-gateway.mdx
│ │ │ ├── ref_llm-client-providers_vllm.mdx
│ │ │ ├── ref_llm-client-strategies_fallback.mdx
│ │ │ ├── ref_llm-client-strategies_retry-policy.mdx
│ │ │ ├── ref_llm-client-strategies_round-robin.mdx
│ │ │ ├── ref_llm-client-strategies_timeouts.mdx
│ │ │ ├── ref_overview.mdx
│ │ │ ├── ref_prompt-syntax_conditionals.mdx
│ │ │ ├── ref_prompt-syntax_ctx-client.mdx
│ │ │ ├── ref_prompt-syntax_ctx-output-format.mdx
│ │ │ ├── ref_prompt-syntax_loops.mdx
│ │ │ ├── ref_prompt-syntax_role.mdx
│ │ │ ├── ref_prompt-syntax_variables.mdx
│ │ │ └── ref_prompt-syntax_what-is-jinja.mdx
│ │ ├── src/
│ │ │ ├── ast.zig
│ │ │ ├── codegen.zig
│ │ │ ├── formatter.zig
│ │ │ ├── jinja.zig
│ │ │ ├── lexer.zig
│ │ │ ├── main.zig
│ │ │ ├── multifile.zig
│ │ │ ├── parser.zig
│ │ │ ├── root.zig
│ │ │ └── validator.zig
│ │ ├── test.baml
│ │ ├── test_baml_src/
│ │ │ ├── clients.baml
│ │ │ ├── functions.baml
│ │ │ └── models/
│ │ │ ├── person.baml
│ │ │ └── status.baml
│ │ ├── test_dynamic.baml
│ │ └── test_strategies.baml
│ ├── other-prompts/
│ │ ├── REFACTORING_PROMPT.md
│ │ └── REVERSE_ENGINEER_SPECIFICATIONS.md
│ └── webapp/
│ ├── .gitignore
│ ├── IMPLEMENTATION_PLAN.md
│ ├── PROMPT.md
│ ├── README.md
│ ├── biome.json
│ ├── loop.sh
│ ├── next.config.ts
│ ├── package.json
│ ├── postcss.config.mjs
│ ├── prisma/
│ │ ├── migrations/
│ │ │ ├── 20251028172009_init/
│ │ │ │ └── migration.sql
│ │ │ ├── 20251028183248_add_due_date_to_todos/
│ │ │ │ └── migration.sql
│ │ │ ├── 20251028183716_add_priority_to_todos/
│ │ │ │ └── migration.sql
│ │ │ ├── 20251028190218_add_notifications/
│ │ │ │ └── migration.sql
│ │ │ ├── 20251028191557_add_recurring_todos/
│ │ │ │ └── migration.sql
│ │ │ ├── 20251028192204_add_attachments/
│ │ │ │ └── migration.sql
│ │ │ ├── 20251028193702_add_templates/
│ │ │ │ └── migration.sql
│ │ │ ├── 20251028194458_add_email_notification_preferences/
│ │ │ │ └── migration.sql
│ │ │ ├── 20251028195051_add_email_digests/
│ │ │ │ └── migration.sql
│ │ │ ├── 20251028200059_add_digest_customization/
│ │ │ │ └── migration.sql
│ │ │ ├── 20251028201814_add_activity_log/
│ │ │ │ └── migration.sql
│ │ │ ├── 20251028203200_add_custom_recurrence_patterns/
│ │ │ │ └── migration.sql
│ │ │ ├── 20251029150838_add_todo_dependencies/
│ │ │ │ └── migration.sql
│ │ │ └── migration_lock.toml
│ │ └── schema.prisma
│ ├── prisma.config.ts
│ ├── specs/
│ │ └── overview.md
│ ├── src/
│ │ ├── app/
│ │ │ ├── actions/
│ │ │ │ ├── comments.ts
│ │ │ │ ├── lists.ts
│ │ │ │ ├── templates.ts
│ │ │ │ └── todos.ts
│ │ │ ├── api/
│ │ │ │ ├── activity-logs/
│ │ │ │ │ └── route.ts
│ │ │ │ ├── attachments/
│ │ │ │ │ ├── [id]/
│ │ │ │ │ │ └── route.ts
│ │ │ │ │ └── route.ts
│ │ │ │ ├── auth/
│ │ │ │ │ ├── login/
│ │ │ │ │ │ └── route.ts
│ │ │ │ │ ├── logout/
│ │ │ │ │ │ └── route.ts
│ │ │ │ │ ├── session/
│ │ │ │ │ │ └── route.ts
│ │ │ │ │ └── verify/
│ │ │ │ │ └── route.ts
│ │ │ │ ├── cron/
│ │ │ │ │ └── send-digests/
│ │ │ │ │ └── route.ts
│ │ │ │ ├── lists/
│ │ │ │ │ ├── [id]/
│ │ │ │ │ │ └── route.ts
│ │ │ │ │ └── route.ts
│ │ │ │ ├── notifications/
│ │ │ │ │ ├── [id]/
│ │ │ │ │ │ └── route.ts
│ │ │ │ │ ├── route.ts
│ │ │ │ │ └── unread-count/
│ │ │ │ │ └── route.ts
│ │ │ │ ├── settings/
│ │ │ │ │ └── notification-preferences/
│ │ │ │ │ └── route.ts
│ │ │ │ └── todos/
│ │ │ │ ├── [id]/
│ │ │ │ │ └── route.ts
│ │ │ │ └── route.ts
│ │ │ ├── globals.css
│ │ │ ├── layout.tsx
│ │ │ ├── login/
│ │ │ │ └── page.tsx
│ │ │ ├── page.tsx
│ │ │ └── verify/
│ │ │ └── page.tsx
│ │ ├── components/
│ │ │ ├── activity-logs/
│ │ │ │ └── ActivityLogList.tsx
│ │ │ ├── attachments/
│ │ │ │ ├── AttachmentList.tsx
│ │ │ │ └── FileUpload.tsx
│ │ │ ├── auth/
│ │ │ │ ├── LoginForm.tsx
│ │ │ │ └── LogoutButton.tsx
│ │ │ ├── common/
│ │ │ │ └── KeyboardShortcutsHelp.tsx
│ │ │ ├── dependencies/
│ │ │ │ ├── DependencyList.tsx
│ │ │ │ └── DependencySelector.tsx
│ │ │ ├── graph/
│ │ │ │ ├── GraphView.tsx
│ │ │ │ ├── GraphViewWrapper.tsx
│ │ │ │ └── TodoNode.tsx
│ │ │ ├── lists/
│ │ │ │ ├── ListForm.tsx
│ │ │ │ ├── ListItem.tsx
│ │ │ │ ├── ListManagement.tsx
│ │ │ │ ├── ListSelector.tsx
│ │ │ │ ├── ShareListForm.tsx
│ │ │ │ └── SharedUsersList.tsx
│ │ │ ├── notifications/
│ │ │ │ ├── NotificationBell.tsx
│ │ │ │ └── NotificationList.tsx
│ │ │ ├── settings/
│ │ │ │ └── NotificationPreferences.tsx
│ │ │ ├── templates/
│ │ │ │ ├── TemplateForm.tsx
│ │ │ │ ├── TemplateItem.tsx
│ │ │ │ ├── TemplateManagement.tsx
│ │ │ │ └── TemplateSelector.tsx
│ │ │ └── todos/
│ │ │ ├── BatchActionBar.tsx
│ │ │ ├── CommentThread.tsx
│ │ │ ├── KanbanBoard.tsx
│ │ │ ├── KanbanCard.tsx
│ │ │ ├── ReactionBar.tsx
│ │ │ ├── RecurrenceSelector.tsx
│ │ │ ├── TodoForm.tsx
│ │ │ ├── TodoItem.tsx
│ │ │ └── TodoList.tsx
│ │ ├── lib/
│ │ │ ├── activity-log-server.ts
│ │ │ ├── attachments-server.ts
│ │ │ ├── auth-server.ts
│ │ │ ├── auth.ts
│ │ │ ├── comments-server.ts
│ │ │ ├── config.ts
│ │ │ ├── digest-notifications-server.ts
│ │ │ ├── email-digests.ts
│ │ │ ├── email-notifications.ts
│ │ │ ├── email.ts
│ │ │ ├── hooks/
│ │ │ │ └── useKeyboardShortcuts.ts
│ │ │ ├── lists-server.ts
│ │ │ ├── notification-preferences-server.ts
│ │ │ ├── notifications-server.ts
│ │ │ ├── prisma.ts
│ │ │ ├── recurrence-custom.ts
│ │ │ ├── recurrence.ts
│ │ │ ├── todos-server.ts
│ │ │ ├── todos.ts
│ │ │ └── types/
│ │ │ ├── attachments.ts
│ │ │ ├── auth.ts
│ │ │ ├── comments.ts
│ │ │ ├── lists.ts
│ │ │ ├── notifications.ts
│ │ │ └── todos.ts
│ │ └── middleware.ts
│ └── tsconfig.json
├── 2025-11-05-event-driven-agents/
│ ├── README.md
│ ├── demo/
│ │ ├── .gitignore
│ │ ├── baml_src/
│ │ │ └── main.baml
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── __tests__/
│ │ │ │ ├── command-flow.test.ts
│ │ │ │ ├── event-bus.test.ts
│ │ │ │ ├── interrupt-and-queue.test.ts
│ │ │ │ ├── layer-test.test.ts
│ │ │ │ ├── minimal-flow.test.ts
│ │ │ │ ├── mocks/
│ │ │ │ │ ├── llm.ts
│ │ │ │ │ └── responses.ts
│ │ │ │ ├── simple.test.ts
│ │ │ │ ├── test-helpers.ts
│ │ │ │ └── test-utils.ts
│ │ │ ├── antml/
│ │ │ │ ├── AntmlParser.ts
│ │ │ │ ├── errors.ts
│ │ │ │ ├── format.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── registry.ts
│ │ │ │ └── types.ts
│ │ │ ├── events.ts
│ │ │ ├── reducers/
│ │ │ │ ├── command-reducer.ts
│ │ │ │ ├── interrupt-reducer.ts
│ │ │ │ ├── messages-reducer.ts
│ │ │ │ └── types.ts
│ │ │ ├── server.ts
│ │ │ ├── services/
│ │ │ │ ├── command-executor.ts
│ │ │ │ ├── command-parser.ts
│ │ │ │ ├── command-state.ts
│ │ │ │ ├── event-bus.ts
│ │ │ │ ├── interrupt-state.ts
│ │ │ │ ├── llm-memory-state.ts
│ │ │ │ ├── llm-service.ts
│ │ │ │ ├── messages-state.ts
│ │ │ │ ├── ui-display-state.ts
│ │ │ │ ├── visualizer-sink.ts
│ │ │ │ └── websocket-sink.ts
│ │ │ ├── shared-types.ts
│ │ │ ├── tools.ts
│ │ │ ├── utils/
│ │ │ │ └── interruptible.ts
│ │ │ └── visualizer/
│ │ │ ├── effect-wrapper.ts
│ │ │ ├── instrumentation.ts
│ │ │ ├── registry.ts
│ │ │ └── service-config.ts
│ │ ├── tsconfig.json
│ │ └── web/
│ │ ├── index.html
│ │ ├── src/
│ │ │ ├── App.svelte
│ │ │ ├── EventGraphVisualizer.svelte
│ │ │ └── main.ts
│ │ └── vite.config.js
│ └── meta.md
├── 2025-11-11-dates-and-times/
│ ├── .cursor/
│ │ └── rules/
│ │ └── baml.mdc
│ ├── README.md
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── date-time.baml
│ │ ├── generators.baml
│ │ └── resume.baml
│ ├── main.py
│ ├── meta.md
│ └── pyproject.toml
├── 2025-11-18-building-an-animation-pipeline/
│ ├── README.md
│ ├── meta.md
│ └── transcript.md
├── 2025-11-25-no-vibes-allowed-using-codelayer-to-build-codelayer/
│ ├── README.md
│ └── meta.md
├── 2025-12-02-multimodal-evals/
│ ├── .cursor/
│ │ └── rules/
│ │ └── baml.mdc
│ ├── .gitignore
│ ├── README.md
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── generators.baml
│ │ ├── receipts.baml
│ │ └── resume.baml
│ ├── load_cord_dataset.py
│ ├── main.py
│ ├── meta.md
│ ├── pyproject.toml
│ ├── results/
│ │ ├── 20251106_132526/
│ │ │ ├── detailed_results.json
│ │ │ ├── metadata.json
│ │ │ └── summary.json
│ │ ├── 20251106_132827/
│ │ │ ├── detailed_results.json
│ │ │ ├── metadata.json
│ │ │ └── summary.json
│ │ ├── 20251106_133339/
│ │ │ ├── detailed_results.json
│ │ │ ├── metadata.json
│ │ │ └── summary.json
│ │ ├── 20251106_160320/
│ │ │ ├── detailed_results.json
│ │ │ ├── metadata.json
│ │ │ └── summary.json
│ │ ├── 20251106_165359/
│ │ │ ├── detailed_results.json
│ │ │ ├── metadata.json
│ │ │ └── summary.json
│ │ ├── 20251107_072836/
│ │ │ ├── detailed_results.json
│ │ │ ├── metadata.json
│ │ │ └── summary.json
│ │ ├── 20251107_103452/
│ │ │ ├── detailed_results.json
│ │ │ ├── metadata.json
│ │ │ └── summary.json
│ │ ├── 20251107_124617/
│ │ │ ├── detailed_results.json
│ │ │ ├── metadata.json
│ │ │ └── summary.json
│ │ └── 20251201_223504/
│ │ ├── detailed_results.json
│ │ ├── metadata.json
│ │ └── summary.json
│ ├── src/
│ │ ├── README.md
│ │ ├── __init__.py
│ │ ├── receipt_evaluator.py
│ │ ├── run_streamlit.py
│ │ ├── streamlit_app.py
│ │ └── test_evaluator.py
│ └── transcript.md
├── 2025-12-09-git-worktrees/
│ ├── README.md
│ ├── meta.md
│ └── transcript.md
├── 2025-12-16-prompt-optimizer/
│ ├── README.md
│ ├── meta.md
│ └── transcript.md
├── 2025-12-23-founding-humanlayer/
│ ├── README.md
│ ├── meta.md
│ └── transcript.md
├── 2025-12-30-founding-boundary/
│ ├── README.md
│ ├── meta.md
│ └── transcript.md
├── 2026-01-06-latency/
│ ├── README.md
│ ├── baml_src/
│ │ ├── agent.baml
│ │ ├── clients.baml
│ │ ├── generators.baml
│ │ └── resume.baml
│ ├── email.md
│ ├── main.py
│ ├── meta.md
│ ├── pyproject.toml
│ └── transcript.md
├── 2026-01-13-applying-12-factor-principles-to-coding-agent-sdks/
│ ├── .gitignore
│ ├── IMPLEMENTATION_PLAN.md
│ ├── RALPH.md
│ ├── README.md
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── generators.baml
│ │ └── planning.baml
│ ├── email.md
│ ├── logs/
│ │ ├── dashboard-events-2026-01-13T19-12-35.jsonl
│ │ ├── dashboard-events-2026-01-13T19-13-37.jsonl
│ │ ├── dashboard-snapshot-2026-01-13T19-12-35.json
│ │ ├── dashboard-snapshot-2026-01-13T19-13-37.json
│ │ ├── dashboard-test-2026-01-13T19-15-03.json
│ │ ├── dashboard-test-events-2026-01-13T19-15-03.jsonl
│ │ ├── events-2026-01-13T06-56-41.jsonl
│ │ ├── order-agent-2026-01-13T18-59-04.jsonl
│ │ ├── order-agent-2026-01-13T18-59-44.jsonl
│ │ ├── order-agent-2026-01-13T19-00-24.jsonl
│ │ ├── order-agent-2026-01-13T19-01-27.jsonl
│ │ ├── order-agent-2026-01-13T19-02-15.jsonl
│ │ └── workflow-2026-01-13T06-56-41.json
│ ├── meta.md
│ ├── package.json
│ ├── src/
│ │ ├── assignment-workflow.ts
│ │ ├── baml-parsing.ts
│ │ ├── chat.ts
│ │ ├── dashboard-agent.ts
│ │ ├── delivery-tracking-agent.ts
│ │ ├── demo.ts
│ │ ├── index.ts
│ │ ├── models/
│ │ │ └── types.ts
│ │ ├── order-agent.ts
│ │ ├── prompts/
│ │ │ └── create_plan.md
│ │ ├── ralph.ts
│ │ ├── store/
│ │ │ ├── driver-store.test.ts
│ │ │ ├── driver-store.ts
│ │ │ ├── order-store.test.ts
│ │ │ └── order-store.ts
│ │ ├── structured-planning-with-json.ts
│ │ ├── structured-planning.ts
│ │ └── utils.ts
│ ├── transcript.md
│ ├── tsconfig.json
│ └── whiteboards.md
├── 2026-01-20-email-is-all-you-need/
│ ├── README.md
│ ├── email.md
│ ├── meta.md
│ ├── raw_email.json
│ └── transcript.txt
├── 2026-01-27-no-vibes-allowed/
│ ├── README.md
│ ├── clips.json
│ ├── email.json
│ ├── email.md
│ ├── meta.md
│ ├── transcript.txt
│ └── whiteboards.md
├── 2026-02-03-prompting-is-becoming-a-product-surface/
│ ├── .cursor/
│ │ └── rules/
│ │ └── baml.mdc
│ ├── README.md
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── generate_schema.baml
│ │ ├── generators.baml
│ │ ├── resume.baml
│ │ └── transcript.baml
│ ├── clips.json
│ ├── email.json
│ ├── email.md
│ ├── main.py
│ ├── meta.md
│ ├── pyproject.toml
│ ├── transcript.txt
│ └── whiteboards.md
├── 2026-02-10-agentic-backpressure-deep-dive/
│ ├── .gitignore
│ ├── 00-sdk-basics.ts
│ ├── 00b-filter-events.ts
│ ├── 00c-collect-and-check.ts
│ ├── 01-hello-world.test.ts
│ ├── 02-hmac-verification.test.ts
│ ├── 02-wrong-assumptions.test.ts
│ ├── 02b-the-fix.test.ts
│ ├── 02c-plan-mode.test.ts
│ ├── 03-child-process-exec.test.ts
│ ├── 03-state-and-continuity.test.ts
│ ├── 04-structured-output.test.ts
│ ├── 05-hooks-and-side-effects.test.ts
│ ├── EPISODE.md
│ ├── README.md
│ ├── clips.json
│ ├── email.json
│ ├── email.md
│ ├── meta.md
│ ├── package.json
│ ├── transcript.txt
│ ├── tsconfig.json
│ ├── typescript-sdk-docs.md
│ ├── typescript-sdk-v2-docs.md
│ └── whiteboards.md
├── 2026-02-17-automating-aitw/
│ ├── .cursor/
│ │ └── rules/
│ │ └── baml.mdc
│ ├── README.md
│ ├── action_clips.json
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── clip.baml
│ │ ├── deslop.baml
│ │ ├── email.baml
│ │ ├── feedback.baml
│ │ ├── generators.baml
│ │ ├── resume.baml
│ │ ├── subtitle.baml
│ │ ├── thumbnail.baml
│ │ └── title_suggester.baml
│ ├── clips.json
│ ├── email.json
│ ├── email.md
│ ├── meta.md
│ ├── pyproject.toml
│ ├── src/
│ │ ├── __init__.py
│ │ ├── clip_extractor/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ └── cli.py
│ │ ├── deslop/
│ │ │ ├── __init__.py
│ │ │ └── core.py
│ │ ├── email_generator/
│ │ │ ├── __init__.py
│ │ │ ├── core.py
│ │ │ └── generate_email.py
│ │ ├── luma/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── cli.py
│ │ │ ├── constants.py
│ │ │ ├── luma_client.py
│ │ │ └── luma_event.py
│ │ ├── riverside/
│ │ │ ├── README.md
│ │ │ ├── __init__.py
│ │ │ ├── cli.py
│ │ │ ├── riverside_agent.py
│ │ │ └── schedule_session.py
│ │ ├── thumbnail_creation/
│ │ │ ├── __init__.py
│ │ │ ├── cli.py
│ │ │ ├── config.py
│ │ │ ├── create_thumbnail.py
│ │ │ ├── file_manager.py
│ │ │ ├── gemini_client.py
│ │ │ ├── image_loader.py
│ │ │ ├── image_processor.py
│ │ │ ├── prompt.txt
│ │ │ ├── prompt_formatter.py
│ │ │ └── thumbnail_service.py
│ │ ├── title_suggester/
│ │ │ ├── __init__.py
│ │ │ ├── core.py
│ │ │ └── suggest_titles.py
│ │ └── youtube/
│ │ ├── README.md
│ │ ├── __init__.py
│ │ ├── get_videos.py
│ │ └── youtube_client.py
│ ├── titles.json
│ ├── tools/
│ │ └── deslop/
│ │ └── main.py
│ └── transcript.txt
├── 2026-02-24-no-vibes-february/
│ ├── README.md
│ ├── clips.json
│ ├── email.json
│ ├── email.md
│ ├── meta.md
│ ├── original_titles.json
│ ├── titles.json
│ ├── titles_2.json
│ └── transcript.txt
├── 2026-03-03-pii-redaction-and-sensitive-data-scrubbing/
│ ├── .cursor/
│ │ └── rules/
│ │ └── baml.mdc
│ ├── README.md
│ ├── action_clips.json
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── generators.baml
│ │ ├── redact.baml
│ │ ├── redact_tests.baml
│ │ └── resume.baml
│ ├── clips.json
│ ├── email.json
│ ├── email.md
│ ├── main.py
│ ├── meta.md
│ ├── pyproject.toml
│ ├── titles.json
│ └── transcript.txt
├── 2026-03-10-claude-agent-skills-deep-dive/
│ ├── .claude/
│ │ ├── commands/
│ │ │ └── backend-engineer.md
│ │ └── skills/
│ │ └── secret/
│ │ ├── SKILL.md
│ │ └── references/
│ │ └── the_secret.md
│ ├── README.md
│ ├── Untitled
│ ├── action_clips.json
│ ├── action_clips_1.json
│ ├── clips.json
│ ├── clips_1.json
│ ├── email.json
│ ├── email.md
│ ├── meta.md
│ ├── titles.json
│ ├── transcript.txt
│ └── whiteboards.md
├── 2026-03-17-prompt-injections-guardrails/
│ ├── README.md
│ ├── action_clips.json
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── event.baml
│ │ ├── generators.baml
│ │ └── resume.baml
│ ├── clips.json
│ ├── email.json
│ ├── email.md
│ ├── main.py
│ ├── meta.md
│ ├── pyproject.toml
│ ├── titles.json
│ ├── transcript.txt
│ └── whiteboards.md
├── 2026-03-24-mcp-is-dead/
│ ├── README.md
│ ├── action_clips.json
│ ├── action_clips_1.json
│ ├── clips.json
│ ├── clips_1.json
│ ├── email.json
│ ├── email.md
│ ├── meta.md
│ ├── titles.json
│ └── transcript.txt
├── 2026-03-31-no-vibes-march/
│ ├── README.md
│ ├── action_clips.json
│ ├── clips.json
│ ├── email.json
│ ├── email.md
│ ├── meta.md
│ ├── titles.json
│ └── transcript.txt
├── 2026-04-07-sse-streaming/
│ ├── Claude.md
│ ├── README.md
│ ├── action_clips.json
│ ├── baml_src/
│ │ ├── functions.baml
│ │ └── generators.baml
│ ├── clips.json
│ ├── email.json
│ ├── email.md
│ ├── index.html
│ ├── main.py
│ ├── meta.md
│ ├── pyproject.toml
│ └── transcript.txt
├── 2026-04-11-unconf-sf/
│ ├── baml_src/
│ │ ├── clients.baml
│ │ ├── clip_finder.baml
│ │ ├── description_generator.baml
│ │ ├── generators.baml
│ │ ├── talk_segmenter.baml
│ │ └── xpost_generator.baml
│ ├── pyproject.toml
│ └── src/
│ ├── clip_finder/
│ │ ├── __init__.py
│ │ └── find.py
│ ├── description_generator/
│ │ ├── __init__.py
│ │ └── generate.py
│ ├── generate_xposts.py
│ ├── talk_segmenter/
│ │ ├── __init__.py
│ │ ├── baml_segmenter.py
│ │ ├── enrich.py
│ │ ├── protocols.py
│ │ ├── segment.py
│ │ ├── segment_writer.py
│ │ ├── speaker_extractor.py
│ │ ├── timestamp.py
│ │ ├── timestamp_mapper.py
│ │ └── transcript_splitter.py
│ ├── transcriber/
│ │ ├── __init__.py
│ │ ├── audio_chunker.py
│ │ ├── audio_extractor.py
│ │ ├── protocols.py
│ │ ├── transcribe.py
│ │ ├── transcript_writer.py
│ │ └── whisper_service.py
│ └── xpost_generator/
│ ├── __init__.py
│ └── core.py
├── 2026-04-14-agentic-coding-for-frontend-apps/
│ ├── 01-storybook/
│ │ ├── .storybook/
│ │ │ ├── main.js
│ │ │ └── preview.js
│ │ ├── package.json
│ │ └── stories/
│ │ ├── ArticlePage.jsx
│ │ ├── ArticlePage.stories.jsx
│ │ ├── Button.jsx
│ │ └── Button.stories.jsx
│ ├── 02-storybook-riptide/
│ │ ├── .storybook/
│ │ │ ├── main.js
│ │ │ └── preview.jsx
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── components/
│ │ │ │ ├── badge.tsx
│ │ │ │ ├── button.tsx
│ │ │ │ ├── card.tsx
│ │ │ │ ├── input.tsx
│ │ │ │ └── keyboard-shortcut.tsx
│ │ │ ├── globals.css
│ │ │ └── lib/
│ │ │ └── utils.ts
│ │ └── stories/
│ │ ├── Badge.stories.tsx
│ │ ├── Button.stories.tsx
│ │ ├── Card.stories.tsx
│ │ ├── Input.stories.tsx
│ │ └── KeyboardShortcut.stories.tsx
│ ├── 03-wired-vs-pure/
│ │ ├── .storybook/
│ │ │ ├── main.js
│ │ │ └── preview.jsx
│ │ ├── index.html
│ │ ├── package.json
│ │ ├── server.ts
│ │ ├── src/
│ │ │ ├── App.tsx
│ │ │ ├── components/
│ │ │ │ ├── badge.tsx
│ │ │ │ ├── button.tsx
│ │ │ │ ├── card.tsx
│ │ │ │ ├── input.tsx
│ │ │ │ ├── keyboard-shortcut.tsx
│ │ │ │ ├── pure/
│ │ │ │ │ ├── DataTable.tsx
│ │ │ │ │ ├── TodoCard.tsx
│ │ │ │ │ └── UserSearchForm.tsx
│ │ │ │ └── wired/
│ │ │ │ ├── DataTableWired.tsx
│ │ │ │ ├── TodoCardWired.tsx
│ │ │ │ └── UserSearchFormWired.tsx
│ │ │ ├── globals.css
│ │ │ ├── lib/
│ │ │ │ └── utils.ts
│ │ │ ├── main.tsx
│ │ │ └── types.ts
│ │ ├── stories/
│ │ │ ├── DataTable.stories.tsx
│ │ │ ├── DataTableInteractive.stories.tsx
│ │ │ ├── TodoCard.stories.tsx
│ │ │ └── UserSearchForm.stories.tsx
│ │ ├── tsconfig.json
│ │ └── vite.config.ts
│ ├── README.md
│ ├── action_clips.json
│ ├── clips.json
│ ├── email.json
│ ├── email.md
│ ├── meta.md
│ ├── package.json
│ ├── titles.json
│ └── transcript.txt
├── 2026-04-21-harness-engineering-without-the-hype/
│ ├── README.md
│ ├── action_clips.json
│ ├── action_clips_1.json
│ ├── clips.json
│ ├── clips_1.json
│ ├── email.json
│ ├── email.md
│ ├── meta.md
│ ├── titles.json
│ └── trasncript.txt
├── 2026-04-28-no-vibes-design-docs/
│ ├── README.md
│ ├── action_clips.json
│ ├── clips.json
│ ├── email.json
│ ├── email.md
│ ├── meta.md
│ ├── titles.json
│ └── transcript.txt
├── 2026-05-05-openai-tells-you-not-to-build-your-own-harness/
│ ├── README.md
│ ├── action_clips.json
│ ├── action_clips_1.json
│ ├── clips.json
│ ├── clips_1.json
│ ├── email.json
│ ├── email.md
│ ├── meta.md
│ ├── titles.json
│ └── transcript.txt
├── 2026-05-12-code-mode-deep-dive/
│ └── meta.md
├── 2026-05-19-feature-flag-everything/
│ └── meta.md
├── HOWTO.md
├── Makefile
├── README.md
├── data.json
├── feed.xml
├── thoughts/
│ ├── searchable/
│ │ └── shared/
│ │ └── research/
│ │ ├── 2025-08-16_11-05-39_content_pipeline_architecture.md
│ │ └── 2025-08-16_11-07-26_zoom_luma_cli_scripts.md
│ └── shared/
│ ├── plans/
│ │ ├── zoom-luma-cli-tools.md
│ │ └── zoom-youtube-cli-tools.md
│ └── research/
│ ├── 2025-08-16_11-05-39_content_pipeline_architecture.md
│ └── 2025-08-16_11-07-26_zoom_luma_cli_scripts.md
└── tools/
├── .gitignore
├── CLAUDE.md
├── README.md
├── bun.lockb
├── data/
│ ├── 2025-08-16-luma-recent-and-upcoming.md
│ └── 2025-08-16-zoom-recordings.md
├── index.ts
├── luma.ts
├── package.json
├── tsconfig.json
├── validate-metadata.ts
├── zoom.ts
└── zoom_token.json
Showing preview only (265K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (2713 symbols across 588 files)
FILE: 2025-03-31-large-scale-classification/hello.py
class Category (line 13) | class Category(BaseModel):
function load_categories (line 19) | def load_categories() -> list[Category]:
function embed (line 39) | def embed(text: str) -> list[float]:
function _narrow_down_categories (line 47) | def _narrow_down_categories(text: str, categories: list[Category]) -> li...
function _narrow_down_categories_llm (line 60) | def _narrow_down_categories_llm(text: str, categories: list[Category]) -...
function _pick_best_category (line 70) | def _pick_best_category(text: str, categories: list[Category]) -> Category:
function pick_category (line 85) | def pick_category(text: str) -> str:
FILE: 2025-04-07-reasoning-models-vs-prompts/src/actions/chat.ts
type ChatMessage (line 7) | interface ChatMessage {
function streamChatResponse (line 16) | async function streamChatResponse(
FILE: 2025-04-07-reasoning-models-vs-prompts/src/app/layout.tsx
function RootLayout (line 20) | function RootLayout({
FILE: 2025-04-07-reasoning-models-vs-prompts/src/app/page.tsx
function Home (line 3) | function Home() {
FILE: 2025-04-07-reasoning-models-vs-prompts/src/components/App.tsx
function App (line 6) | function App() {
FILE: 2025-04-07-reasoning-models-vs-prompts/src/lib/fakeResponse.ts
type ReplyResponse (line 3) | type ReplyResponse = {
type QueryGraphResponse (line 8) | type QueryGraphResponse = {
FILE: 2025-04-07-reasoning-models-vs-prompts/src/lib/neo4j.ts
function getNeo4jDriver (line 5) | function getNeo4jDriver() {
class Neo4jSession (line 15) | class Neo4jSession {
method constructor (line 18) | constructor() {
method run (line 22) | async run(query: string) {
method close (line 27) | async close() {
method finalize (line 31) | finalize() {
FILE: 2025-04-15-code-generation-small-models/agent/hello.py
function find_imports (line 3) | def find_imports(code: str) -> list[str]:
function main (line 13) | def main():
FILE: 2025-04-15-code-generation-small-models/agent/test_utils.py
function test_load_files (line 3) | def test_load_files():
function test_walk_directory (line 10) | def test_walk_directory():
FILE: 2025-04-15-code-generation-small-models/agent/utils.py
function load_files (line 19) | def load_files(file_paths: List[str]) -> Dict[str, str]:
function walk_directory (line 38) | def walk_directory(
FILE: 2025-04-15-code-generation-small-models/project/calculator.py
class Calculator (line 5) | class Calculator:
method __init__ (line 6) | def __init__(self):
method calculate (line 15) | def calculate(self, a: float, operator: str, b: float) -> float:
method store_in_memory (line 22) | def store_in_memory(self, value: float) -> None:
method recall_memory (line 26) | def recall_memory(self) -> float:
method clear_memory (line 30) | def clear_memory(self) -> None:
FILE: 2025-04-15-code-generation-small-models/project/hello.py
function main (line 1) | def main():
FILE: 2025-04-15-code-generation-small-models/project/interface.py
class CalculatorInterface (line 5) | class CalculatorInterface:
method __init__ (line 6) | def __init__(self):
method get_number (line 10) | def get_number(self, prompt: str) -> float:
method get_operator (line 18) | def get_operator(self) -> str:
method display_menu (line 27) | def display_menu(self):
method run (line 36) | def run(self):
FILE: 2025-04-15-code-generation-small-models/project/main.py
function main (line 5) | def main():
FILE: 2025-04-15-code-generation-small-models/project/operations.py
function add (line 3) | def add(a: float, b: float) -> float:
function subtract (line 7) | def subtract(a: float, b: float) -> float:
function multiply (line 11) | def multiply(a: float, b: float) -> float:
function divide (line 15) | def divide(a: float, b: float) -> float:
FILE: 2025-04-22-twelve-factor-agents/final/src/agent.ts
type Event (line 3) | interface Event {
class Thread (line 8) | class Thread {
method constructor (line 11) | constructor(events: Event[]) {
method serializeForLLM (line 15) | serializeForLLM() {
method trimLeadingWhitespace (line 19) | trimLeadingWhitespace(s: string) {
method serializeOneEvent (line 23) | serializeOneEvent(e: Event) {
type CalculatorTool (line 34) | type CalculatorTool = AddTool | SubtractTool | MultiplyTool | DivideTool;
function handleNextStep (line 36) | async function handleNextStep(nextStep: CalculatorTool, thread: Thread):...
function agentLoop (line 74) | async function agentLoop(thread: Thread): Promise<Thread> {
FILE: 2025-04-22-twelve-factor-agents/final/src/cli.ts
function cli (line 7) | async function cli() {
function askHuman (line 39) | async function askHuman(message: string) {
FILE: 2025-04-22-twelve-factor-agents/final/src/index.ts
function hello (line 3) | async function hello(): Promise<void> {
function main (line 7) | async function main() {
FILE: 2025-04-22-twelve-factor-agents/final/src/state.ts
class ThreadStore (line 7) | class ThreadStore {
method create (line 10) | create(thread: Thread): string {
method get (line 16) | get(id: string): Thread | undefined {
method update (line 20) | update(id: string, thread: Thread): void {
FILE: 2025-04-22-twelve-factor-agents/step-by-step/hack/restore-walkthrough.ts
function extractFileOperations (line 6) | function extractFileOperations(markdown: string, upToChapter: number): {...
function deleteDirRecursive (line 45) | function deleteDirRecursive(dirPath: string): void {
function copyFile (line 53) | function copyFile(source: string, dest: string): void {
function main (line 73) | async function main() {
FILE: 2025-04-22-twelve-factor-agents/step-by-step/hack/run-walkthrough.ts
constant DOUBLE_CTRL_C_TIMEOUT (line 15) | const DOUBLE_CTRL_C_TIMEOUT = 1000;
function askToContinue (line 29) | function askToContinue(message: string): Promise<void> {
function showDiff (line 37) | function showDiff(command: string) {
function runCommand (line 84) | async function runCommand(command: string, interactive: boolean, showDif...
function extractCommands (line 217) | function extractCommands(markdown: string): { chapter: string; commands:...
function main (line 280) | async function main() {
FILE: 2025-04-22-twelve-factor-agents/step-by-step/walkthrough/00-index.ts
function hello (line 1) | async function hello(): Promise<void> {
function main (line 5) | async function main() {
FILE: 2025-04-22-twelve-factor-agents/step-by-step/walkthrough/01-agent.ts
type AgentResponse (line 4) | type AgentResponse = Awaited<ReturnType<typeof b.DetermineNextStep>>;
type Event (line 6) | interface Event {
class Thread (line 11) | class Thread {
method constructor (line 14) | constructor(events: Event[]) {
method serializeForLLM (line 18) | serializeForLLM() {
function agentLoop (line 27) | async function agentLoop(thread: Thread): Promise<AgentResponse> {
FILE: 2025-04-22-twelve-factor-agents/step-by-step/walkthrough/01-cli.ts
function cli (line 5) | async function cli() {
FILE: 2025-04-22-twelve-factor-agents/step-by-step/walkthrough/01-index.ts
function hello (line 3) | async function hello(): Promise<void> {
function main (line 7) | async function main() {
FILE: 2025-04-22-twelve-factor-agents/step-by-step/walkthrough/03-agent.ts
type AgentResponse (line 4) | type AgentResponse = Awaited<ReturnType<typeof b.DetermineNextStep>>;
type Event (line 6) | interface Event {
class Thread (line 11) | class Thread {
method constructor (line 14) | constructor(events: Event[]) {
method serializeForLLM (line 18) | serializeForLLM() {
function agentLoop (line 27) | async function agentLoop(thread: Thread): Promise<string> {
FILE: 2025-04-22-twelve-factor-agents/step-by-step/walkthrough/03b-agent.ts
type Event (line 3) | interface Event {
class Thread (line 8) | class Thread {
method constructor (line 11) | constructor(events: Event[]) {
method serializeForLLM (line 15) | serializeForLLM() {
type CalculatorTool (line 22) | type CalculatorTool = AddTool | SubtractTool | MultiplyTool | DivideTool;
function handleNextStep (line 24) | async function handleNextStep(nextStep: CalculatorTool, thread: Thread):...
function agentLoop (line 62) | async function agentLoop(thread: Thread): Promise<string> {
FILE: 2025-04-22-twelve-factor-agents/step-by-step/walkthrough/05-agent.ts
type Event (line 3) | interface Event {
class Thread (line 8) | class Thread {
method constructor (line 11) | constructor(events: Event[]) {
method serializeForLLM (line 15) | serializeForLLM() {
type CalculatorTool (line 22) | type CalculatorTool = AddTool | SubtractTool | MultiplyTool | DivideTool;
function handleNextStep (line 24) | async function handleNextStep(nextStep: CalculatorTool, thread: Thread):...
function agentLoop (line 62) | async function agentLoop(thread: Thread): Promise<Thread> {
FILE: 2025-04-22-twelve-factor-agents/step-by-step/walkthrough/05-cli.ts
function cli (line 7) | async function cli() {
function askHuman (line 39) | async function askHuman(message: string) {
FILE: 2025-04-22-twelve-factor-agents/step-by-step/walkthrough/07-agent.ts
type Event (line 3) | interface Event {
class Thread (line 8) | class Thread {
method constructor (line 11) | constructor(events: Event[]) {
method serializeForLLM (line 15) | serializeForLLM() {
type CalculatorTool (line 22) | type CalculatorTool = AddTool | SubtractTool | MultiplyTool | DivideTool;
function handleNextStep (line 24) | async function handleNextStep(nextStep: CalculatorTool, thread: Thread):...
function agentLoop (line 62) | async function agentLoop(thread: Thread): Promise<Thread> {
FILE: 2025-04-22-twelve-factor-agents/step-by-step/walkthrough/07b-agent.ts
type Event (line 3) | interface Event {
class Thread (line 8) | class Thread {
method constructor (line 11) | constructor(events: Event[]) {
method serializeForLLM (line 15) | serializeForLLM() {
method trimLeadingWhitespace (line 19) | trimLeadingWhitespace(s: string) {
method serializeOneEvent (line 23) | serializeOneEvent(e: Event) {
type CalculatorTool (line 34) | type CalculatorTool = AddTool | SubtractTool | MultiplyTool | DivideTool;
function handleNextStep (line 36) | async function handleNextStep(nextStep: CalculatorTool, thread: Thread):...
function agentLoop (line 74) | async function agentLoop(thread: Thread): Promise<Thread> {
FILE: 2025-04-22-twelve-factor-agents/step-by-step/walkthrough/09-state.ts
class ThreadStore (line 7) | class ThreadStore {
method create (line 10) | create(thread: Thread): string {
method get (line 16) | get(id: string): Thread | undefined {
method update (line 20) | update(id: string, thread: Thread): void {
FILE: 2025-04-22-twelve-factor-agents/step-by-step/walkthrough/10-agent.ts
type Event (line 3) | interface Event {
class Thread (line 8) | class Thread {
method constructor (line 11) | constructor(events: Event[]) {
method serializeForLLM (line 15) | serializeForLLM() {
method trimLeadingWhitespace (line 19) | trimLeadingWhitespace(s: string) {
method serializeOneEvent (line 23) | serializeOneEvent(e: Event) {
type CalculatorTool (line 34) | type CalculatorTool = AddTool | SubtractTool | MultiplyTool | DivideTool;
function handleNextStep (line 36) | async function handleNextStep(nextStep: CalculatorTool, thread: Thread):...
function agentLoop (line 69) | async function agentLoop(thread: Thread): Promise<Thread> {
FILE: 2025-04-22-twelve-factor-agents/step-by-step/walkthrough/10-server.ts
type ApprovalPayload (line 43) | type ApprovalPayload = {
type ResponsePayload (line 49) | type ResponsePayload = {
type Payload (line 54) | type Payload = ApprovalPayload | ResponsePayload;
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/pre-requisites/00-hello-world/walkthrough/00-index.ts
function hello (line 1) | async function hello(): Promise<void> {
function main (line 5) | async function main() {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/pre-requisites/01-cli-and-agent/src/index.ts
function hello (line 1) | async function hello(): Promise<void> {
function main (line 5) | async function main() {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/pre-requisites/01-cli-and-agent/walkthrough/01-agent.ts
type AgentResponse (line 4) | type AgentResponse = Awaited<ReturnType<typeof b.DetermineNextStep>>;
type Event (line 6) | interface Event {
class Thread (line 11) | class Thread {
method constructor (line 14) | constructor(events: Event[]) {
method serializeForLLM (line 18) | serializeForLLM() {
function agentLoop (line 27) | async function agentLoop(thread: Thread): Promise<AgentResponse> {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/pre-requisites/01-cli-and-agent/walkthrough/01-cli.ts
function cli (line 5) | async function cli() {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/pre-requisites/01-cli-and-agent/walkthrough/01-index.ts
function hello (line 3) | async function hello(): Promise<void> {
function main (line 7) | async function main() {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/pre-requisites/final/src/agent.ts
type AgentResponse (line 4) | type AgentResponse = Awaited<ReturnType<typeof b.DetermineNextStep>>;
type Event (line 6) | interface Event {
class Thread (line 11) | class Thread {
method constructor (line 14) | constructor(events: Event[]) {
method serializeForLLM (line 18) | serializeForLLM() {
function agentLoop (line 27) | async function agentLoop(thread: Thread): Promise<AgentResponse> {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/pre-requisites/final/src/cli.ts
function cli (line 5) | async function cli() {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/pre-requisites/final/src/index.ts
function hello (line 3) | async function hello(): Promise<void> {
function main (line 7) | async function main() {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/02-calculator-tools/src/agent.ts
type AgentResponse (line 4) | type AgentResponse = Awaited<ReturnType<typeof b.DetermineNextStep>>;
type Event (line 6) | interface Event {
class Thread (line 11) | class Thread {
method constructor (line 14) | constructor(events: Event[]) {
method serializeForLLM (line 18) | serializeForLLM() {
function agentLoop (line 27) | async function agentLoop(thread: Thread): Promise<AgentResponse> {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/02-calculator-tools/src/cli.ts
function cli (line 5) | async function cli() {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/02-calculator-tools/src/index.ts
function hello (line 3) | async function hello(): Promise<void> {
function main (line 7) | async function main() {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/03-tool-loop/src/agent.ts
type AgentResponse (line 4) | type AgentResponse = Awaited<ReturnType<typeof b.DetermineNextStep>>;
type Event (line 6) | interface Event {
class Thread (line 11) | class Thread {
method constructor (line 14) | constructor(events: Event[]) {
method serializeForLLM (line 18) | serializeForLLM() {
function agentLoop (line 27) | async function agentLoop(thread: Thread): Promise<AgentResponse> {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/03-tool-loop/src/cli.ts
function cli (line 5) | async function cli() {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/03-tool-loop/src/index.ts
function hello (line 3) | async function hello(): Promise<void> {
function main (line 7) | async function main() {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/03-tool-loop/walkthrough/03-agent.ts
type AgentResponse (line 4) | type AgentResponse = Awaited<ReturnType<typeof b.DetermineNextStep>>;
type Event (line 6) | interface Event {
class Thread (line 11) | class Thread {
method constructor (line 14) | constructor(events: Event[]) {
method serializeForLLM (line 18) | serializeForLLM() {
function agentLoop (line 27) | async function agentLoop(thread: Thread): Promise<string> {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/03-tool-loop/walkthrough/03b-agent.ts
type Event (line 3) | interface Event {
class Thread (line 8) | class Thread {
method constructor (line 11) | constructor(events: Event[]) {
method serializeForLLM (line 15) | serializeForLLM() {
type CalculatorTool (line 22) | type CalculatorTool = AddTool | SubtractTool | MultiplyTool | DivideTool;
function handleNextStep (line 24) | async function handleNextStep(nextStep: CalculatorTool, thread: Thread):...
function agentLoop (line 62) | async function agentLoop(thread: Thread): Promise<string> {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/04-baml-tests/src/agent.ts
type Event (line 3) | interface Event {
class Thread (line 8) | class Thread {
method constructor (line 11) | constructor(events: Event[]) {
method serializeForLLM (line 15) | serializeForLLM() {
type CalculatorTool (line 22) | type CalculatorTool = AddTool | SubtractTool | MultiplyTool | DivideTool;
function handleNextStep (line 24) | async function handleNextStep(nextStep: CalculatorTool, thread: Thread):...
function agentLoop (line 62) | async function agentLoop(thread: Thread): Promise<string> {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/04-baml-tests/src/cli.ts
function cli (line 5) | async function cli() {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/04-baml-tests/src/index.ts
function hello (line 3) | async function hello(): Promise<void> {
function main (line 7) | async function main() {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/05-human-tools/src/agent.ts
type Event (line 3) | interface Event {
class Thread (line 8) | class Thread {
method constructor (line 11) | constructor(events: Event[]) {
method serializeForLLM (line 15) | serializeForLLM() {
type CalculatorTool (line 22) | type CalculatorTool = AddTool | SubtractTool | MultiplyTool | DivideTool;
function handleNextStep (line 24) | async function handleNextStep(nextStep: CalculatorTool, thread: Thread):...
function agentLoop (line 62) | async function agentLoop(thread: Thread): Promise<string> {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/05-human-tools/src/cli.ts
function cli (line 5) | async function cli() {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/05-human-tools/src/index.ts
function hello (line 3) | async function hello(): Promise<void> {
function main (line 7) | async function main() {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/05-human-tools/walkthrough/05-agent.ts
type Event (line 3) | interface Event {
class Thread (line 8) | class Thread {
method constructor (line 11) | constructor(events: Event[]) {
method serializeForLLM (line 15) | serializeForLLM() {
type CalculatorTool (line 22) | type CalculatorTool = AddTool | SubtractTool | MultiplyTool | DivideTool;
function handleNextStep (line 24) | async function handleNextStep(nextStep: CalculatorTool, thread: Thread):...
function agentLoop (line 62) | async function agentLoop(thread: Thread): Promise<Thread> {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/05-human-tools/walkthrough/05-cli.ts
function cli (line 7) | async function cli() {
function askHuman (line 39) | async function askHuman(message: string) {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/06-customize-prompt/src/agent.ts
type Event (line 3) | interface Event {
class Thread (line 8) | class Thread {
method constructor (line 11) | constructor(events: Event[]) {
method serializeForLLM (line 15) | serializeForLLM() {
type CalculatorTool (line 22) | type CalculatorTool = AddTool | SubtractTool | MultiplyTool | DivideTool;
function handleNextStep (line 24) | async function handleNextStep(nextStep: CalculatorTool, thread: Thread):...
function agentLoop (line 62) | async function agentLoop(thread: Thread): Promise<Thread> {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/06-customize-prompt/src/cli.ts
function cli (line 7) | async function cli() {
function askHuman (line 39) | async function askHuman(message: string) {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/06-customize-prompt/src/index.ts
function hello (line 3) | async function hello(): Promise<void> {
function main (line 7) | async function main() {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/07-context-window/src/agent.ts
type Event (line 3) | interface Event {
class Thread (line 8) | class Thread {
method constructor (line 11) | constructor(events: Event[]) {
method serializeForLLM (line 15) | serializeForLLM() {
type CalculatorTool (line 22) | type CalculatorTool = AddTool | SubtractTool | MultiplyTool | DivideTool;
function handleNextStep (line 24) | async function handleNextStep(nextStep: CalculatorTool, thread: Thread):...
function agentLoop (line 62) | async function agentLoop(thread: Thread): Promise<Thread> {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/07-context-window/src/cli.ts
function cli (line 7) | async function cli() {
function askHuman (line 39) | async function askHuman(message: string) {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/07-context-window/src/index.ts
function hello (line 3) | async function hello(): Promise<void> {
function main (line 7) | async function main() {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/07-context-window/walkthrough/07-agent.ts
type Event (line 3) | interface Event {
class Thread (line 8) | class Thread {
method constructor (line 11) | constructor(events: Event[]) {
method serializeForLLM (line 15) | serializeForLLM() {
type CalculatorTool (line 22) | type CalculatorTool = AddTool | SubtractTool | MultiplyTool | DivideTool;
function handleNextStep (line 24) | async function handleNextStep(nextStep: CalculatorTool, thread: Thread):...
function agentLoop (line 62) | async function agentLoop(thread: Thread): Promise<Thread> {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/07-context-window/walkthrough/07b-agent.ts
type Event (line 3) | interface Event {
class Thread (line 8) | class Thread {
method constructor (line 11) | constructor(events: Event[]) {
method serializeForLLM (line 15) | serializeForLLM() {
method trimLeadingWhitespace (line 19) | trimLeadingWhitespace(s: string) {
method serializeOneEvent (line 23) | serializeOneEvent(e: Event) {
type CalculatorTool (line 34) | type CalculatorTool = AddTool | SubtractTool | MultiplyTool | DivideTool;
function handleNextStep (line 36) | async function handleNextStep(nextStep: CalculatorTool, thread: Thread):...
function agentLoop (line 74) | async function agentLoop(thread: Thread): Promise<Thread> {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/08-api-endpoints/src/agent.ts
type Event (line 3) | interface Event {
class Thread (line 8) | class Thread {
method constructor (line 11) | constructor(events: Event[]) {
method serializeForLLM (line 15) | serializeForLLM() {
method trimLeadingWhitespace (line 19) | trimLeadingWhitespace(s: string) {
method serializeOneEvent (line 23) | serializeOneEvent(e: Event) {
type CalculatorTool (line 34) | type CalculatorTool = AddTool | SubtractTool | MultiplyTool | DivideTool;
function handleNextStep (line 36) | async function handleNextStep(nextStep: CalculatorTool, thread: Thread):...
function agentLoop (line 74) | async function agentLoop(thread: Thread): Promise<Thread> {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/08-api-endpoints/src/cli.ts
function cli (line 7) | async function cli() {
function askHuman (line 39) | async function askHuman(message: string) {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/08-api-endpoints/src/index.ts
function hello (line 3) | async function hello(): Promise<void> {
function main (line 7) | async function main() {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/09-state-management/src/agent.ts
type Event (line 3) | interface Event {
class Thread (line 8) | class Thread {
method constructor (line 11) | constructor(events: Event[]) {
method serializeForLLM (line 15) | serializeForLLM() {
method trimLeadingWhitespace (line 19) | trimLeadingWhitespace(s: string) {
method serializeOneEvent (line 23) | serializeOneEvent(e: Event) {
type CalculatorTool (line 34) | type CalculatorTool = AddTool | SubtractTool | MultiplyTool | DivideTool;
function handleNextStep (line 36) | async function handleNextStep(nextStep: CalculatorTool, thread: Thread):...
function agentLoop (line 74) | async function agentLoop(thread: Thread): Promise<Thread> {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/09-state-management/src/cli.ts
function cli (line 7) | async function cli() {
function askHuman (line 39) | async function askHuman(message: string) {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/09-state-management/src/index.ts
function hello (line 3) | async function hello(): Promise<void> {
function main (line 7) | async function main() {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/09-state-management/walkthrough/09-state.ts
class ThreadStore (line 7) | class ThreadStore {
method create (line 10) | create(thread: Thread): string {
method get (line 16) | get(id: string): Thread | undefined {
method update (line 20) | update(id: string, thread: Thread): void {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/10-human-approval/src/agent.ts
type Event (line 3) | interface Event {
class Thread (line 8) | class Thread {
method constructor (line 11) | constructor(events: Event[]) {
method serializeForLLM (line 15) | serializeForLLM() {
method trimLeadingWhitespace (line 19) | trimLeadingWhitespace(s: string) {
method serializeOneEvent (line 23) | serializeOneEvent(e: Event) {
type CalculatorTool (line 34) | type CalculatorTool = AddTool | SubtractTool | MultiplyTool | DivideTool;
function handleNextStep (line 36) | async function handleNextStep(nextStep: CalculatorTool, thread: Thread):...
function agentLoop (line 74) | async function agentLoop(thread: Thread): Promise<Thread> {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/10-human-approval/src/cli.ts
function cli (line 7) | async function cli() {
function askHuman (line 39) | async function askHuman(message: string) {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/10-human-approval/src/index.ts
function hello (line 3) | async function hello(): Promise<void> {
function main (line 7) | async function main() {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/10-human-approval/src/state.ts
class ThreadStore (line 7) | class ThreadStore {
method create (line 10) | create(thread: Thread): string {
method get (line 16) | get(id: string): Thread | undefined {
method update (line 20) | update(id: string, thread: Thread): void {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/10-human-approval/walkthrough/10-agent.ts
type Event (line 3) | interface Event {
class Thread (line 8) | class Thread {
method constructor (line 11) | constructor(events: Event[]) {
method serializeForLLM (line 15) | serializeForLLM() {
method trimLeadingWhitespace (line 19) | trimLeadingWhitespace(s: string) {
method serializeOneEvent (line 23) | serializeOneEvent(e: Event) {
method awaitingHumanResponse (line 33) | awaitingHumanResponse(): boolean {
method awaitingHumanApproval (line 38) | awaitingHumanApproval(): boolean {
type CalculatorTool (line 44) | type CalculatorTool = AddTool | SubtractTool | MultiplyTool | DivideTool;
function handleNextStep (line 46) | async function handleNextStep(nextStep: CalculatorTool, thread: Thread):...
function agentLoop (line 84) | async function agentLoop(thread: Thread): Promise<Thread> {
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/10-human-approval/walkthrough/10-server.ts
type ApprovalPayload (line 46) | type ApprovalPayload = {
type ResponsePayload (line 52) | type ResponsePayload = {
type Payload (line 57) | type Payload = ApprovalPayload | ResponsePayload;
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/workshop-bonus/hello.py
function main (line 5) | async def main(resume_str: str):
function look_up_company_in_database (line 26) | def look_up_company_in_database(company_name: str) -> str | None:
FILE: 2025-05-10-workshop-nyc-twelve-factor-agents/workshop-bonus/parse_json_schema.py
class SchemaAdder (line 6) | class SchemaAdder:
method __init__ (line 7) | def __init__(self, tb: TypeBuilder, schema: Dict[str, Any]):
method _parse_object (line 12) | def _parse_object(self, json_schema: Dict[str, Any]) -> FieldType:
method _parse_string (line 53) | def _parse_string(self, json_schema: Dict[str, Any]) -> FieldType:
method _load_ref (line 68) | def _load_ref(self, ref: str) -> FieldType:
method parse (line 80) | def parse(self, json_schema: Dict[str, Any]) -> FieldType:
function parse_json_schema (line 117) | def parse_json_schema(json_schema: Dict[str, Any], tb: TypeBuilder) -> F...
function parse_tools (line 121) | def parse_tools(scheme_file_path: str, tb: TypeBuilder) -> Dict[str, Fie...
FILE: 2025-05-13-designing-evals/hello.py
function lesson_plan_test_harness (line 12) | def lesson_plan_test_harness(test_idx: int, topic: str):
function test_1 (line 25) | def test_1():
function test_2 (line 28) | def test_2():
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/00-hello-world/walkthrough/00-index.ts
function hello (line 1) | async function hello(): Promise<void> {
function main (line 5) | async function main() {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/01-cli-and-agent/src/index.ts
function hello (line 1) | async function hello(): Promise<void> {
function main (line 5) | async function main() {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/01-cli-and-agent/walkthrough/01-agent.ts
type AgentResponse (line 4) | type AgentResponse = Awaited<ReturnType<typeof b.DetermineNextStep>>;
type Event (line 6) | interface Event {
class Thread (line 11) | class Thread {
method constructor (line 14) | constructor(events: Event[]) {
method serializeForLLM (line 18) | serializeForLLM() {
function agentLoop (line 27) | async function agentLoop(thread: Thread): Promise<AgentResponse> {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/01-cli-and-agent/walkthrough/01-cli.ts
function cli (line 5) | async function cli() {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/01-cli-and-agent/walkthrough/01-index.ts
function hello (line 3) | async function hello(): Promise<void> {
function main (line 7) | async function main() {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/02-calculator-tools/src/agent.ts
type AgentResponse (line 4) | type AgentResponse = Awaited<ReturnType<typeof b.DetermineNextStep>>;
type Event (line 6) | interface Event {
class Thread (line 11) | class Thread {
method constructor (line 14) | constructor(events: Event[]) {
method serializeForLLM (line 18) | serializeForLLM() {
function agentLoop (line 27) | async function agentLoop(thread: Thread): Promise<AgentResponse> {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/02-calculator-tools/src/cli.ts
function cli (line 5) | async function cli() {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/02-calculator-tools/src/index.ts
function hello (line 3) | async function hello(): Promise<void> {
function main (line 7) | async function main() {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/03-tool-loop/src/agent.ts
type AgentResponse (line 4) | type AgentResponse = Awaited<ReturnType<typeof b.DetermineNextStep>>;
type Event (line 6) | interface Event {
class Thread (line 11) | class Thread {
method constructor (line 14) | constructor(events: Event[]) {
method serializeForLLM (line 18) | serializeForLLM() {
function agentLoop (line 27) | async function agentLoop(thread: Thread): Promise<AgentResponse> {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/03-tool-loop/src/cli.ts
function cli (line 5) | async function cli() {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/03-tool-loop/src/index.ts
function hello (line 3) | async function hello(): Promise<void> {
function main (line 7) | async function main() {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/03-tool-loop/walkthrough/03-agent.ts
type AgentResponse (line 4) | type AgentResponse = Awaited<ReturnType<typeof b.DetermineNextStep>>;
type Event (line 6) | interface Event {
class Thread (line 11) | class Thread {
method constructor (line 14) | constructor(events: Event[]) {
method serializeForLLM (line 18) | serializeForLLM() {
function agentLoop (line 27) | async function agentLoop(thread: Thread): Promise<string> {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/03-tool-loop/walkthrough/03b-agent.ts
type Event (line 3) | interface Event {
class Thread (line 8) | class Thread {
method constructor (line 11) | constructor(events: Event[]) {
method serializeForLLM (line 15) | serializeForLLM() {
type CalculatorTool (line 22) | type CalculatorTool = AddTool | SubtractTool | MultiplyTool | DivideTool;
function handleNextStep (line 24) | async function handleNextStep(nextStep: CalculatorTool, thread: Thread):...
function agentLoop (line 62) | async function agentLoop(thread: Thread): Promise<string> {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/04-baml-tests/src/agent.ts
type Event (line 3) | interface Event {
class Thread (line 8) | class Thread {
method constructor (line 11) | constructor(events: Event[]) {
method serializeForLLM (line 15) | serializeForLLM() {
type CalculatorTool (line 22) | type CalculatorTool = AddTool | SubtractTool | MultiplyTool | DivideTool;
function handleNextStep (line 24) | async function handleNextStep(nextStep: CalculatorTool, thread: Thread):...
function agentLoop (line 62) | async function agentLoop(thread: Thread): Promise<string> {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/04-baml-tests/src/cli.ts
function cli (line 5) | async function cli() {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/04-baml-tests/src/index.ts
function hello (line 3) | async function hello(): Promise<void> {
function main (line 7) | async function main() {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/05-human-tools/src/agent.ts
type Event (line 3) | interface Event {
class Thread (line 8) | class Thread {
method constructor (line 11) | constructor(events: Event[]) {
method serializeForLLM (line 15) | serializeForLLM() {
type CalculatorTool (line 22) | type CalculatorTool = AddTool | SubtractTool | MultiplyTool | DivideTool;
function handleNextStep (line 24) | async function handleNextStep(nextStep: CalculatorTool, thread: Thread):...
function agentLoop (line 62) | async function agentLoop(thread: Thread): Promise<string> {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/05-human-tools/src/cli.ts
function cli (line 5) | async function cli() {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/05-human-tools/src/index.ts
function hello (line 3) | async function hello(): Promise<void> {
function main (line 7) | async function main() {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/05-human-tools/walkthrough/05-agent.ts
type Event (line 3) | interface Event {
class Thread (line 8) | class Thread {
method constructor (line 11) | constructor(events: Event[]) {
method serializeForLLM (line 15) | serializeForLLM() {
type CalculatorTool (line 22) | type CalculatorTool = AddTool | SubtractTool | MultiplyTool | DivideTool;
function handleNextStep (line 24) | async function handleNextStep(nextStep: CalculatorTool, thread: Thread):...
function agentLoop (line 62) | async function agentLoop(thread: Thread): Promise<Thread> {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/05-human-tools/walkthrough/05-cli.ts
function cli (line 7) | async function cli() {
function askHuman (line 39) | async function askHuman(message: string) {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/06-customize-prompt/src/agent.ts
type Event (line 3) | interface Event {
class Thread (line 8) | class Thread {
method constructor (line 11) | constructor(events: Event[]) {
method serializeForLLM (line 15) | serializeForLLM() {
type CalculatorTool (line 22) | type CalculatorTool = AddTool | SubtractTool | MultiplyTool | DivideTool;
function handleNextStep (line 24) | async function handleNextStep(nextStep: CalculatorTool, thread: Thread):...
function agentLoop (line 62) | async function agentLoop(thread: Thread): Promise<Thread> {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/06-customize-prompt/src/cli.ts
function cli (line 7) | async function cli() {
function askHuman (line 39) | async function askHuman(message: string) {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/06-customize-prompt/src/index.ts
function hello (line 3) | async function hello(): Promise<void> {
function main (line 7) | async function main() {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/07-context-window/src/agent.ts
type Event (line 3) | interface Event {
class Thread (line 8) | class Thread {
method constructor (line 11) | constructor(events: Event[]) {
method serializeForLLM (line 15) | serializeForLLM() {
type CalculatorTool (line 22) | type CalculatorTool = AddTool | SubtractTool | MultiplyTool | DivideTool;
function handleNextStep (line 24) | async function handleNextStep(nextStep: CalculatorTool, thread: Thread):...
function agentLoop (line 62) | async function agentLoop(thread: Thread): Promise<Thread> {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/07-context-window/src/cli.ts
function cli (line 7) | async function cli() {
function askHuman (line 39) | async function askHuman(message: string) {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/07-context-window/src/index.ts
function hello (line 3) | async function hello(): Promise<void> {
function main (line 7) | async function main() {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/07-context-window/walkthrough/07-agent.ts
type Event (line 3) | interface Event {
class Thread (line 8) | class Thread {
method constructor (line 11) | constructor(events: Event[]) {
method serializeForLLM (line 15) | serializeForLLM() {
type CalculatorTool (line 22) | type CalculatorTool = AddTool | SubtractTool | MultiplyTool | DivideTool;
function handleNextStep (line 24) | async function handleNextStep(nextStep: CalculatorTool, thread: Thread):...
function agentLoop (line 62) | async function agentLoop(thread: Thread): Promise<Thread> {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/07-context-window/walkthrough/07b-agent.ts
type Event (line 3) | interface Event {
class Thread (line 8) | class Thread {
method constructor (line 11) | constructor(events: Event[]) {
method serializeForLLM (line 15) | serializeForLLM() {
method trimLeadingWhitespace (line 19) | trimLeadingWhitespace(s: string) {
method serializeOneEvent (line 23) | serializeOneEvent(e: Event) {
type CalculatorTool (line 34) | type CalculatorTool = AddTool | SubtractTool | MultiplyTool | DivideTool;
function handleNextStep (line 36) | async function handleNextStep(nextStep: CalculatorTool, thread: Thread):...
function agentLoop (line 74) | async function agentLoop(thread: Thread): Promise<Thread> {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/08-api-endpoints/src/agent.ts
type Event (line 3) | interface Event {
class Thread (line 8) | class Thread {
method constructor (line 11) | constructor(events: Event[]) {
method serializeForLLM (line 15) | serializeForLLM() {
method trimLeadingWhitespace (line 19) | trimLeadingWhitespace(s: string) {
method serializeOneEvent (line 23) | serializeOneEvent(e: Event) {
type CalculatorTool (line 34) | type CalculatorTool = AddTool | SubtractTool | MultiplyTool | DivideTool;
function handleNextStep (line 36) | async function handleNextStep(nextStep: CalculatorTool, thread: Thread):...
function agentLoop (line 74) | async function agentLoop(thread: Thread): Promise<Thread> {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/08-api-endpoints/src/cli.ts
function cli (line 7) | async function cli() {
function askHuman (line 39) | async function askHuman(message: string) {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/08-api-endpoints/src/index.ts
function hello (line 3) | async function hello(): Promise<void> {
function main (line 7) | async function main() {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/09-state-management/src/agent.ts
type Event (line 3) | interface Event {
class Thread (line 8) | class Thread {
method constructor (line 11) | constructor(events: Event[]) {
method serializeForLLM (line 15) | serializeForLLM() {
method trimLeadingWhitespace (line 19) | trimLeadingWhitespace(s: string) {
method serializeOneEvent (line 23) | serializeOneEvent(e: Event) {
type CalculatorTool (line 34) | type CalculatorTool = AddTool | SubtractTool | MultiplyTool | DivideTool;
function handleNextStep (line 36) | async function handleNextStep(nextStep: CalculatorTool, thread: Thread):...
function agentLoop (line 74) | async function agentLoop(thread: Thread): Promise<Thread> {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/09-state-management/src/cli.ts
function cli (line 7) | async function cli() {
function askHuman (line 39) | async function askHuman(message: string) {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/09-state-management/src/index.ts
function hello (line 3) | async function hello(): Promise<void> {
function main (line 7) | async function main() {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/09-state-management/walkthrough/09-state.ts
class ThreadStore (line 7) | class ThreadStore {
method create (line 10) | create(thread: Thread): string {
method get (line 16) | get(id: string): Thread | undefined {
method update (line 20) | update(id: string, thread: Thread): void {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/10-human-approval/src/agent.ts
type Event (line 3) | interface Event {
class Thread (line 8) | class Thread {
method constructor (line 11) | constructor(events: Event[]) {
method serializeForLLM (line 15) | serializeForLLM() {
method trimLeadingWhitespace (line 19) | trimLeadingWhitespace(s: string) {
method serializeOneEvent (line 23) | serializeOneEvent(e: Event) {
type CalculatorTool (line 34) | type CalculatorTool = AddTool | SubtractTool | MultiplyTool | DivideTool;
function handleNextStep (line 36) | async function handleNextStep(nextStep: CalculatorTool, thread: Thread):...
function agentLoop (line 74) | async function agentLoop(thread: Thread): Promise<Thread> {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/10-human-approval/src/cli.ts
function cli (line 7) | async function cli() {
function askHuman (line 39) | async function askHuman(message: string) {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/10-human-approval/src/index.ts
function hello (line 3) | async function hello(): Promise<void> {
function main (line 7) | async function main() {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/10-human-approval/src/state.ts
class ThreadStore (line 7) | class ThreadStore {
method create (line 10) | create(thread: Thread): string {
method get (line 16) | get(id: string): Thread | undefined {
method update (line 20) | update(id: string, thread: Thread): void {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/10-human-approval/walkthrough/10-agent.ts
type Event (line 3) | interface Event {
class Thread (line 8) | class Thread {
method constructor (line 11) | constructor(events: Event[]) {
method serializeForLLM (line 15) | serializeForLLM() {
method trimLeadingWhitespace (line 19) | trimLeadingWhitespace(s: string) {
method serializeOneEvent (line 23) | serializeOneEvent(e: Event) {
method awaitingHumanResponse (line 33) | awaitingHumanResponse(): boolean {
method awaitingHumanApproval (line 38) | awaitingHumanApproval(): boolean {
type CalculatorTool (line 44) | type CalculatorTool = AddTool | SubtractTool | MultiplyTool | DivideTool;
function handleNextStep (line 46) | async function handleNextStep(nextStep: CalculatorTool, thread: Thread):...
function agentLoop (line 84) | async function agentLoop(thread: Thread): Promise<Thread> {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/10-human-approval/walkthrough/10-server.ts
type ApprovalPayload (line 46) | type ApprovalPayload = {
type ResponsePayload (line 52) | type ResponsePayload = {
type Payload (line 57) | type Payload = ApprovalPayload | ResponsePayload;
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/11-humanlayer-approval/src/agent.ts
type Event (line 3) | interface Event {
class Thread (line 8) | class Thread {
method constructor (line 11) | constructor(events: Event[]) {
method serializeForLLM (line 15) | serializeForLLM() {
method trimLeadingWhitespace (line 19) | trimLeadingWhitespace(s: string) {
method serializeOneEvent (line 23) | serializeOneEvent(e: Event) {
method awaitingHumanResponse (line 33) | awaitingHumanResponse(): boolean {
method awaitingHumanApproval (line 38) | awaitingHumanApproval(): boolean {
type CalculatorTool (line 44) | type CalculatorTool = AddTool | SubtractTool | MultiplyTool | DivideTool;
function handleNextStep (line 46) | async function handleNextStep(nextStep: CalculatorTool, thread: Thread):...
function agentLoop (line 84) | async function agentLoop(thread: Thread): Promise<Thread> {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/11-humanlayer-approval/src/cli.ts
function cli (line 7) | async function cli() {
function askHuman (line 39) | async function askHuman(message: string) {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/11-humanlayer-approval/src/index.ts
function hello (line 3) | async function hello(): Promise<void> {
function main (line 7) | async function main() {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/11-humanlayer-approval/src/server.ts
type ApprovalPayload (line 46) | type ApprovalPayload = {
type ResponsePayload (line 52) | type ResponsePayload = {
type Payload (line 57) | type Payload = ApprovalPayload | ResponsePayload;
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/11-humanlayer-approval/src/state.ts
class ThreadStore (line 7) | class ThreadStore {
method create (line 10) | create(thread: Thread): string {
method get (line 16) | get(id: string): Thread | undefined {
method update (line 20) | update(id: string, thread: Thread): void {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/11-humanlayer-approval/walkthrough/11-cli.ts
function cli (line 6) | async function cli() {
function askHuman (line 38) | async function askHuman(lastEvent: Event): Promise<Event> {
function askHumanCLI (line 46) | async function askHumanCLI(message: string): Promise<Event> {
function askHumanEmail (line 59) | async function askHumanEmail(lastEvent: Event): Promise<Event> {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/11-humanlayer-approval/walkthrough/11b-cli.ts
function cli (line 6) | async function cli() {
function askHuman (line 38) | async function askHuman(lastEvent: Event): Promise<Event> {
function askHumanCLI (line 46) | async function askHumanCLI(message: string): Promise<Event> {
function askHumanEmail (line 59) | async function askHumanEmail(lastEvent: Event): Promise<Event> {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/agents-workshop/11-humanlayer-approval/walkthrough/11c-cli.ts
function cli (line 6) | async function cli() {
function askHuman (line 38) | async function askHuman(lastEvent: Event): Promise<Event> {
function askHumanCLI (line 46) | async function askHumanCLI(message: string): Promise<Event> {
function askHumanEmail (line 59) | async function askHumanEmail(lastEvent: Event): Promise<Event> {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/morning/hello.py
function main (line 1) | def main():
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/pre-requisites/00-hello-world/walkthrough/00-index.ts
function hello (line 1) | async function hello(): Promise<void> {
function main (line 5) | async function main() {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/pre-requisites/00a-python-setup/final/hello.py
function main (line 1) | def main():
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/pre-requisites/01-cli-and-agent/src/agent.ts
type AgentResponse (line 4) | type AgentResponse = Awaited<ReturnType<typeof b.DetermineNextStep>>;
type Event (line 6) | interface Event {
class Thread (line 11) | class Thread {
method constructor (line 14) | constructor(events: Event[]) {
method serializeForLLM (line 18) | serializeForLLM() {
function agentLoop (line 27) | async function agentLoop(thread: Thread): Promise<AgentResponse> {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/pre-requisites/01-cli-and-agent/src/cli.ts
function cli (line 5) | async function cli() {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/pre-requisites/01-cli-and-agent/src/index.ts
function hello (line 1) | async function hello(): Promise<void> {
function main (line 5) | async function main() {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/pre-requisites/01-cli-and-agent/walkthrough/01-agent.ts
type AgentResponse (line 4) | type AgentResponse = Awaited<ReturnType<typeof b.DetermineNextStep>>;
type Event (line 6) | interface Event {
class Thread (line 11) | class Thread {
method constructor (line 14) | constructor(events: Event[]) {
method serializeForLLM (line 18) | serializeForLLM() {
function agentLoop (line 27) | async function agentLoop(thread: Thread): Promise<AgentResponse> {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/pre-requisites/01-cli-and-agent/walkthrough/01-cli.ts
function cli (line 5) | async function cli() {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/pre-requisites/01-cli-and-agent/walkthrough/01-index.ts
function hello (line 3) | async function hello(): Promise<void> {
function main (line 7) | async function main() {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/pre-requisites/01a-cli-and-agent-localmodels/src/agent.ts
type AgentResponse (line 4) | type AgentResponse = Awaited<ReturnType<typeof b.DetermineNextStep>>;
type Event (line 6) | interface Event {
class Thread (line 11) | class Thread {
method constructor (line 14) | constructor(events: Event[]) {
method serializeForLLM (line 18) | serializeForLLM() {
function agentLoop (line 27) | async function agentLoop(thread: Thread): Promise<AgentResponse> {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/pre-requisites/01a-cli-and-agent-localmodels/src/cli.ts
function cli (line 5) | async function cli() {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/pre-requisites/01a-cli-and-agent-localmodels/src/index.ts
function hello (line 3) | async function hello(): Promise<void> {
function main (line 7) | async function main() {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/pre-requisites/02-calculator-tools/src/agent.ts
type AgentResponse (line 4) | type AgentResponse = Awaited<ReturnType<typeof b.DetermineNextStep>>;
type Event (line 6) | interface Event {
class Thread (line 11) | class Thread {
method constructor (line 14) | constructor(events: Event[]) {
method serializeForLLM (line 18) | serializeForLLM() {
function agentLoop (line 27) | async function agentLoop(thread: Thread): Promise<AgentResponse> {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/pre-requisites/02-calculator-tools/src/cli.ts
function cli (line 5) | async function cli() {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/pre-requisites/02-calculator-tools/src/index.ts
function hello (line 3) | async function hello(): Promise<void> {
function main (line 7) | async function main() {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/pre-requisites/03-tool-loop/src/agent.ts
type AgentResponse (line 4) | type AgentResponse = Awaited<ReturnType<typeof b.DetermineNextStep>>;
type Event (line 6) | interface Event {
class Thread (line 11) | class Thread {
method constructor (line 14) | constructor(events: Event[]) {
method serializeForLLM (line 18) | serializeForLLM() {
function agentLoop (line 27) | async function agentLoop(thread: Thread): Promise<AgentResponse> {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/pre-requisites/03-tool-loop/src/cli.ts
function cli (line 5) | async function cli() {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/pre-requisites/03-tool-loop/src/index.ts
function hello (line 3) | async function hello(): Promise<void> {
function main (line 7) | async function main() {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/pre-requisites/03-tool-loop/walkthrough/03-agent.ts
type AgentResponse (line 4) | type AgentResponse = Awaited<ReturnType<typeof b.DetermineNextStep>>;
type Event (line 6) | interface Event {
class Thread (line 11) | class Thread {
method constructor (line 14) | constructor(events: Event[]) {
method serializeForLLM (line 18) | serializeForLLM() {
function agentLoop (line 27) | async function agentLoop(thread: Thread): Promise<string> {
FILE: 2025-05-17-workshop-sf-twelve-factor-agents/pre-requisites/03-tool-loop/walkthrough/03b-agent.ts
type Event (line 3) | interface Event {
class Thread (line 8) | class Thread {
method constructor (line 11) | constructor(events: Event[]) {
method serializeForLLM (line 15) | serializeForLLM() {
type CalculatorTool (line 22) | type CalculatorTool = AddTool | SubtractTool | MultiplyTool | DivideTool;
function handleNextStep (line 24) | async function handleNextStep(nextStep: CalculatorTool, thread: Thread):...
function agentLoop (line 62) | async function agentLoop(thread: Thread): Promise<string> {
FILE: 2025-05-20-policies-to-prompts/datasets.py
function download_file (line 11) | def download_file(url: str, output_path: Path) -> bool:
function extract_tar (line 30) | def extract_tar(tar_path: Path, extract_path: Path) -> bool:
function convert_pdf_to_text (line 45) | def convert_pdf_to_text(pdf_path: Path, text_path: Path) -> bool:
function main (line 74) | def main():
FILE: 2025-05-20-policies-to-prompts/pipeline.py
function mentions_gift (line 15) | def mentions_gift(email: str) -> bool:
function read_one_email (line 18) | def read_one_email(path: Path) -> str:
function check_gift_email (line 23) | async def check_gift_email(email: str) -> GiftEmailAnalysis | Literal[Fa...
function load_emails_from_dir (line 38) | def load_emails_from_dir(path: Path) -> list[str]:
function check_emails (line 48) | async def check_emails(emails: list[str]):
FILE: 2025-05-20-policies-to-prompts/questions.py
function chunk_document (line 10) | def chunk_document(text: str, num_chunks: int = 5) -> list[str]:
function process_chunk (line 20) | async def process_chunk(chunk: str, chunk_index: int) -> list[Question]:
function extract_questions (line 40) | async def extract_questions(document: Path) -> None:
FILE: 2025-05-20-policies-to-prompts/test_pipeline.py
function test_pipeline (line 14) | async def test_pipeline(test_case):
FILE: 2025-05-27-mcp-with-10000-tools/parse_json_schema.py
class SchemaAdder (line 9) | class SchemaAdder:
method __init__ (line 10) | def __init__(self, tb: TypeBuilder, schema: Dict[str, Any]):
method _parse_object (line 15) | def _parse_object(self, json_schema: Dict[str, Any]) -> FieldType:
method _parse_string (line 61) | def _parse_string(self, json_schema: Dict[str, Any]) -> FieldType:
method _load_ref (line 76) | def _load_ref(self, ref: str) -> FieldType:
method parse (line 88) | def parse(self, json_schema: Dict[str, Any]) -> FieldType:
function parse_json_schema (line 125) | def parse_json_schema(json_schema: Dict[str, Any], tb: TypeBuilder) -> F...
function parse_tools (line 129) | def parse_tools(scheme_file_path: str, tb: TypeBuilder) -> Dict[str, tup...
FILE: 2025-05-27-mcp-with-10000-tools/tools.py
function load_tools (line 14) | async def load_tools(query: str, tool_file_path: str) -> TypeBuilder:
function embed (line 24) | async def embed(text: str) -> list[float]:
function _narrow_down_categories (line 31) | async def _narrow_down_categories(text: str, tools: list[tuple[FieldType...
function narrow_tools (line 46) | def narrow_tools(query: str, tools: list[FieldType]) -> list[FieldType]:
function sort_actions (line 49) | def sort_actions(actions: list[Actions | HumanMessage]) -> list[Actions ...
function dosomething (line 52) | async def dosomething():
FILE: 2025-06-03-humans-as-tools-async/src/agent.ts
type Event (line 3) | interface Event {
class Thread (line 8) | class Thread {
method constructor (line 16) | constructor(events: Event[]) {
method serializeForLLM (line 20) | serializeForLLM() {
method trimLeadingWhitespace (line 24) | trimLeadingWhitespace(s: string) {
method serializeOneEvent (line 28) | serializeOneEvent(e: Event) {
method awaitingHumanResponse (line 38) | awaitingHumanResponse(): boolean {
method awaitingHumanApproval (line 43) | awaitingHumanApproval(): boolean {
method lastEvent (line 48) | lastEvent(): Event {
type CalculatorTool (line 53) | type CalculatorTool = AddTool | SubtractTool | MultiplyTool | DivideTool;
function handleNextStep (line 55) | async function handleNextStep(nextStep: CalculatorTool | ProcessRefund, ...
function agentLoop (line 99) | async function agentLoop(thread: Thread): Promise<Thread> {
FILE: 2025-06-03-humans-as-tools-async/src/cli.ts
function cliOuterLoop (line 10) | async function cliOuterLoop(message: string) {
function cli (line 42) | async function cli() {
function askManager (line 51) | async function askManager(lastEvent: Event): Promise<Approval> {
function askHumanCLI (line 92) | async function askHumanCLI(lastEvent: Event): Promise<Event> {
type Approval (line 131) | type Approval = {
function messageCLI (line 137) | async function messageCLI(message: string): Promise<string> {
function approveCLI (line 151) | async function approveCLI(message: string): Promise<Approval> {
FILE: 2025-06-03-humans-as-tools-async/src/index.ts
function main (line 3) | async function main() {
FILE: 2025-06-03-humans-as-tools-async/src/server.ts
type V1Beta3ConversationCreated (line 13) | type V1Beta3ConversationCreated = {
type CompletedHumanContact (line 23) | type CompletedHumanContact = HumanContact & {
type V1Veta3HumanContactCompleted (line 29) | type V1Veta3HumanContactCompleted = {
type Approved (line 37) | type Approved = {status: {approved: true}}
type Rejected (line 38) | type Rejected = {status: {approved: false; comment: string}}
type CompletedFunctionCall (line 40) | type CompletedFunctionCall = FunctionCall & (Approved | Rejected)
type V1Beta3FunctionCallCompleted (line 42) | type V1Beta3FunctionCallCompleted = {
type V1Beta3Event (line 50) | type V1Beta3Event = V1Beta3ConversationCreated | V1Veta3HumanContactComp...
FILE: 2025-06-03-humans-as-tools-async/src/state.ts
type ThreadStore (line 7) | interface ThreadStore {
class FileSystemThreadStore (line 15) | class FileSystemThreadStore implements ThreadStore {
method constructor (line 18) | constructor() {
method create (line 22) | async create(thread: Thread): Promise<string> {
method get (line 34) | async get(id: string): Promise<Thread | undefined> {
method update (line 41) | async update(id: string, thread: Thread): Promise<void> {
FILE: 2025-06-10-cracking-the-prompting-interview/hello.py
function main (line 4) | def main():
FILE: 2025-06-17-entity-extraction/hello.py
function load_companies (line 6) | def load_companies():
function pick_potential_company (line 16) | def pick_potential_company(content: str) -> str | None:
function valid_company (line 23) | def valid_company(company: Company) -> Company | None:
function main (line 45) | def main(content: str):
FILE: 2025-06-24-ai-content-pipeline/backend/ai_generator.py
class AIGenerationError (line 9) | class AIGenerationError(Exception):
class AIGenerator (line 13) | class AIGenerator:
method __init__ (line 14) | def __init__(self):
method summarize_video (line 17) | async def summarize_video(self, transcript: str, title: Optional[str] ...
method generate_email_draft (line 38) | async def generate_email_draft(self, summary: VideoSummary, transcript...
method generate_twitter_thread (line 60) | async def generate_twitter_thread(self, summary: VideoSummary, video_t...
method generate_linkedin_post (line 81) | async def generate_linkedin_post(self, summary: VideoSummary, video_ti...
method generate_all_content (line 102) | async def generate_all_content(self, transcript: str, video_title: Opt...
function summarize_video (line 157) | async def summarize_video(transcript: str, title: Optional[str] = None) ...
function generate_email_draft (line 161) | async def generate_email_draft(summary: VideoSummary, transcript: Option...
function generate_twitter_thread (line 165) | async def generate_twitter_thread(summary: VideoSummary, video_title: Op...
function generate_linkedin_post (line 169) | async def generate_linkedin_post(summary: VideoSummary, video_title: Opt...
function generate_all_content (line 173) | async def generate_all_content(transcript: str, video_title: Optional[st...
FILE: 2025-06-24-ai-content-pipeline/backend/auth.py
class OAuthManager (line 13) | class OAuthManager:
method __init__ (line 16) | def __init__(self):
method validate_env_variables (line 28) | def validate_env_variables(self) -> Dict[str, bool]:
method get_google_auth_url (line 38) | def get_google_auth_url(self, redirect_uri: str) -> str:
method exchange_google_code (line 52) | def exchange_google_code(self, code: str, redirect_uri: str) -> Creden...
method save_google_credentials (line 66) | def save_google_credentials(self, credentials: Credentials) -> bool:
method load_google_credentials (line 79) | def load_google_credentials(self) -> Optional[Credentials]:
method get_youtube_service (line 100) | def get_youtube_service(self):
method validate_zoom_credentials (line 109) | def validate_zoom_credentials(self) -> bool:
method get_zoom_auth_headers (line 113) | def get_zoom_auth_headers(self) -> Dict[str, str]:
method get_oauth_status (line 125) | def get_oauth_status(self) -> Dict[str, Any]:
FILE: 2025-06-24-ai-content-pipeline/backend/baml_wrapper.py
function get_baml_client (line 3) | def get_baml_client():
FILE: 2025-06-24-ai-content-pipeline/backend/database.py
class SupabaseDatabase (line 9) | class SupabaseDatabase:
method __init__ (line 10) | def __init__(self):
method create_video (line 32) | async def create_video(self, video: Video) -> None:
method get_video (line 56) | async def get_video(self, video_id: str) -> Optional[Video]:
method update_video (line 81) | async def update_video(self, video_id: str, updates: Dict[str, Any]) -...
method get_drafts_by_video (line 103) | async def get_drafts_by_video(self, video_id: str) -> List[Draft]:
method create_draft (line 138) | async def create_draft(self, draft: Draft) -> None:
method get_draft (line 158) | async def get_draft(self, draft_id: str) -> Optional[Draft]:
method delete_draft (line 193) | async def delete_draft(self, draft_id: str) -> None:
method delete_drafts_by_video (line 204) | async def delete_drafts_by_video(self, video_id: str) -> None:
method update_draft_field (line 218) | async def update_draft_field(self, draft_id: str, field_name: str, con...
method create_feedback (line 235) | async def create_feedback(self, feedback: Feedback) -> None:
FILE: 2025-06-24-ai-content-pipeline/backend/hello.py
function main (line 1) | def main():
FILE: 2025-06-24-ai-content-pipeline/backend/job_processor.py
class JobStatus (line 12) | class JobStatus(Enum):
class Job (line 19) | class Job:
class JobProcessor (line 31) | class JobProcessor:
method __init__ (line 32) | def __init__(self):
method register_task (line 39) | def register_task(self, task_name: str, task_func: Callable):
method create_job (line 44) | def create_job(self, task_name: str, params: Dict[str, Any]) -> str:
method get_job (line 71) | def get_job(self, job_id: str) -> Optional[Job]:
method get_all_jobs (line 75) | def get_all_jobs(self) -> List[Job]:
method get_jobs_by_status (line 79) | def get_jobs_by_status(self, status: JobStatus) -> List[Job]:
method _process_queue (line 83) | async def _process_queue(self):
method _process_job (line 111) | async def _process_job(self, job: Job):
method get_job_status (line 147) | def get_job_status(self, job_id: str) -> Dict[str, Any]:
method get_queue_status (line 165) | def get_queue_status(self) -> Dict[str, Any]:
method process_pending_jobs (line 177) | async def process_pending_jobs(self):
function process_video_task (line 186) | async def process_video_task(meeting_id: str) -> Dict[str, Any]:
function create_video_processing_job (line 219) | def create_video_processing_job(meeting_id: str) -> str:
function get_job_status (line 223) | def get_job_status(job_id: str) -> Dict[str, Any]:
function get_queue_status (line 227) | def get_queue_status() -> Dict[str, Any]:
FILE: 2025-06-24-ai-content-pipeline/backend/main.py
function root (line 44) | async def root():
function import_video (line 48) | async def import_video(request: VideoImportRequest, background_tasks: Ba...
function complete_video_processing_pipeline (line 74) | async def complete_video_processing_pipeline(video_id: str, zoom_meeting...
function get_video (line 108) | async def get_video(video_id: str):
function trigger_summarize (line 124) | async def trigger_summarize(video_id: str, background_tasks: BackgroundT...
function process_video_summary (line 150) | async def process_video_summary(video_id: str, transcript: str, title: O...
function get_summary (line 320) | async def get_summary(video_id: str):
function get_transcript (line 335) | async def get_transcript(video_id: str):
function list_drafts (line 353) | async def list_drafts(video_id: str):
function save_drafts (line 369) | async def save_drafts(video_id: str, request: DraftUpdateRequest):
function add_feedback (line 406) | async def add_feedback(draft_id: str, request: FeedbackRequest):
function refine_content (line 431) | async def refine_content(video_id: str, request: ContentRefinementReques...
function refine_content_background_task (line 509) | async def refine_content_background_task(
function generate_video_title (line 618) | async def generate_video_title(video_id: str, background_tasks: Backgrou...
function update_video_title (line 641) | async def update_video_title(video_id: str, request: TitleUpdateRequest):
function generate_title_background_task (line 663) | async def generate_title_background_task(video_id: str):
function test_supabase (line 715) | async def test_supabase():
function test_zoom (line 735) | async def test_zoom():
function get_zoom_recordings (line 758) | async def get_zoom_recordings(
FILE: 2025-06-24-ai-content-pipeline/backend/migrations/add_processing_stage.sql
type idx_videos_processing_stage (line 16) | CREATE INDEX IF NOT EXISTS idx_videos_processing_stage ON videos(process...
FILE: 2025-06-24-ai-content-pipeline/backend/migrations/add_structured_content.sql
type idx_drafts_email_draft (line 12) | CREATE INDEX IF NOT EXISTS idx_drafts_email_draft ON drafts USING GIN (e...
type idx_drafts_x_draft (line 13) | CREATE INDEX IF NOT EXISTS idx_drafts_x_draft ON drafts USING GIN (x_draft)
type idx_drafts_linkedin_draft (line 14) | CREATE INDEX IF NOT EXISTS idx_drafts_linkedin_draft ON drafts USING GIN...
FILE: 2025-06-24-ai-content-pipeline/backend/migrations/add_summary_json.sql
type idx_videos_summary (line 5) | CREATE INDEX IF NOT EXISTS idx_videos_summary ON videos USING GIN (summary)
FILE: 2025-06-24-ai-content-pipeline/backend/models.py
class VideoImportRequest (line 7) | class VideoImportRequest(BaseModel):
class EmailDraftContent (line 12) | class EmailDraftContent(BaseModel):
class XDraftContent (line 17) | class XDraftContent(BaseModel):
class LinkedInDraftContent (line 21) | class LinkedInDraftContent(BaseModel):
class DraftUpdateRequest (line 25) | class DraftUpdateRequest(BaseModel):
class FeedbackRequest (line 31) | class FeedbackRequest(BaseModel):
class ContentRefinementRequest (line 34) | class ContentRefinementRequest(BaseModel):
class TitleUpdateRequest (line 39) | class TitleUpdateRequest(BaseModel):
class Video (line 44) | class Video(BaseModel):
class Draft (line 58) | class Draft(BaseModel):
class Feedback (line 68) | class Feedback(BaseModel):
class ZoomRecording (line 76) | class ZoomRecording(BaseModel):
class VideoImportResponse (line 91) | class VideoImportResponse(BaseModel):
class VideoResponse (line 96) | class VideoResponse(BaseModel):
class SummaryResponse (line 101) | class SummaryResponse(BaseModel):
class DraftsListResponse (line 105) | class DraftsListResponse(BaseModel):
class DraftSaveResponse (line 109) | class DraftSaveResponse(BaseModel):
class FeedbackResponse (line 114) | class FeedbackResponse(BaseModel):
class StatusResponse (line 119) | class StatusResponse(BaseModel):
class TranscriptResponse (line 123) | class TranscriptResponse(BaseModel):
class ZoomRecordingsResponse (line 127) | class ZoomRecordingsResponse(BaseModel):
class ZoomMeetingRecordings (line 133) | class ZoomMeetingRecordings(BaseModel):
class ZoomMeetingsResponse (line 141) | class ZoomMeetingsResponse(BaseModel):
FILE: 2025-06-24-ai-content-pipeline/backend/oauth_setup.py
function check_environment (line 32) | def check_environment():
function get_authenticated_youtube_service (line 53) | def get_authenticated_youtube_service():
function test_youtube_connection (line 107) | def test_youtube_connection(youtube):
function setup_zoom_oauth (line 131) | def setup_zoom_oauth():
function test_zoom_connection (line 173) | def test_zoom_connection():
function test_google_auth (line 208) | def test_google_auth():
function test_zoom_auth (line 223) | def test_zoom_auth():
function create_sample_upload_request (line 227) | def create_sample_upload_request(youtube):
function main (line 252) | def main():
FILE: 2025-06-24-ai-content-pipeline/backend/oauth_setup_claude.py
function check_environment (line 17) | def check_environment():
function check_credential_files (line 38) | def check_credential_files():
function setup_google_oauth (line 68) | def setup_google_oauth():
function setup_zoom_oauth (line 145) | def setup_zoom_oauth():
function test_google_auth (line 195) | def test_google_auth():
function test_zoom_auth (line 234) | def test_zoom_auth():
function cleanup_invalid_tokens (line 262) | def cleanup_invalid_tokens():
function main (line 297) | def main():
FILE: 2025-06-24-ai-content-pipeline/backend/run_migration.py
function run_migration (line 13) | def run_migration():
FILE: 2025-06-24-ai-content-pipeline/backend/schema.sql
type videos (line 8) | CREATE TABLE IF NOT EXISTS videos (
type drafts (line 22) | CREATE TABLE IF NOT EXISTS drafts (
type feedback (line 33) | CREATE TABLE IF NOT EXISTS feedback (
type idx_videos_zoom_meeting_id (line 41) | CREATE INDEX IF NOT EXISTS idx_videos_zoom_meeting_id ON videos(zoom_mee...
type idx_videos_status (line 42) | CREATE INDEX IF NOT EXISTS idx_videos_status ON videos(status)
type idx_videos_processing_stage (line 43) | CREATE INDEX IF NOT EXISTS idx_videos_processing_stage ON videos(process...
type idx_drafts_video_id (line 44) | CREATE INDEX IF NOT EXISTS idx_drafts_video_id ON drafts(video_id)
type idx_drafts_created_at (line 45) | CREATE INDEX IF NOT EXISTS idx_drafts_created_at ON drafts(created_at DESC)
type idx_feedback_draft_id (line 46) | CREATE INDEX IF NOT EXISTS idx_feedback_draft_id ON feedback(draft_id)
FILE: 2025-06-24-ai-content-pipeline/backend/setup_supabase.py
function main (line 12) | def main():
FILE: 2025-06-24-ai-content-pipeline/backend/test_baml_integration.py
function test_baml_summarize (line 9) | def test_baml_summarize():
FILE: 2025-06-24-ai-content-pipeline/backend/test_zoom_recordings.py
function get_zoom_access_token (line 7) | def get_zoom_access_token():
function get_recordings (line 16) | def get_recordings(meeting_id, access_token):
function main (line 26) | def main():
FILE: 2025-06-24-ai-content-pipeline/backend/video_processor.py
class VideoProcessor (line 19) | class VideoProcessor:
method __init__ (line 20) | def __init__(self):
method _setup_cache_directory (line 24) | def _setup_cache_directory(self) -> str:
method _get_cache_filename (line 32) | def _get_cache_filename(self, zoom_meeting_id: str, recording_id: str)...
method _load_youtube_credentials (line 39) | def _load_youtube_credentials(self) -> Optional[Credentials]:
method process_video (line 77) | async def process_video(self, video_id: str, zoom_meeting_id: str):
method _download_zoom_recording (line 124) | async def _download_zoom_recording(self, zoom_meeting_id: str) -> str:
method _get_transcript (line 228) | async def _get_transcript(self, zoom_meeting_id: str) -> Optional[str]:
method _upload_to_youtube (line 242) | async def _upload_to_youtube(self, video_file_path: str, zoom_meeting_...
FILE: 2025-06-24-ai-content-pipeline/backend/zoom_client.py
class ZoomClient (line 12) | class ZoomClient:
method __init__ (line 13) | def __init__(self):
method _get_access_token (line 17) | def _get_access_token(self) -> str:
method _get_new_token (line 32) | def _get_new_token(self) -> str:
method _make_request (line 59) | def _make_request(self, method: str, endpoint: str, params: Optional[D...
method get_recordings (line 92) | def get_recordings(self, user_id: str = "me", from_date: Optional[str]...
method get_recording_details (line 137) | def get_recording_details(self, meeting_id: str, recording_id: str) ->...
method get_transcript (line 159) | def get_transcript(self, meeting_id: str) -> Optional[str]:
method _get_chat_transcript (line 200) | def _get_chat_transcript(self, meeting_id: str, recording_id: str) -> ...
FILE: 2025-06-24-ai-content-pipeline/frontend/src/app/layout.tsx
function RootLayout (line 18) | function RootLayout({
FILE: 2025-06-24-ai-content-pipeline/frontend/src/app/page.tsx
type FilterType (line 7) | type FilterType = "all" | "processing" | "ready" | "failed"
function HomePage (line 9) | function HomePage() {
FILE: 2025-06-24-ai-content-pipeline/frontend/src/app/videos/[id]/page.tsx
function VideoDetailPage (line 21) | function VideoDetailPage() {
FILE: 2025-06-24-ai-content-pipeline/frontend/src/components/TranscriptViewer.tsx
type TranscriptViewerProps (line 8) | interface TranscriptViewerProps {
function TranscriptViewer (line 12) | function TranscriptViewer({ videoId }: TranscriptViewerProps) {
FILE: 2025-06-24-ai-content-pipeline/frontend/src/components/VideoImportForm.tsx
function VideoImportForm (line 9) | function VideoImportForm() {
FILE: 2025-06-24-ai-content-pipeline/frontend/src/components/VideoList.tsx
function VideoList (line 8) | function VideoList() {
FILE: 2025-06-24-ai-content-pipeline/frontend/src/components/ZoomRecordingsList.tsx
function getLast3MonthsRange (line 8) | function getLast3MonthsRange() {
function ZoomRecordingsList (line 18) | function ZoomRecordingsList() {
FILE: 2025-06-24-ai-content-pipeline/frontend/src/components/home/video-list.tsx
type FilterType (line 18) | type FilterType = "all" | "processing" | "ready" | "failed"
type VideoListProps (line 20) | interface VideoListProps {
function VideoList (line 24) | function VideoList({ filter = "all" }: VideoListProps) {
FILE: 2025-06-24-ai-content-pipeline/frontend/src/components/home/zoom-recordings-list.tsx
type ZoomRecording (line 17) | interface ZoomRecording {
type ZoomMeetingRecording (line 31) | interface ZoomMeetingRecording {
function getLastNMonthsRange (line 39) | function getLastNMonthsRange(months: number) {
function ZoomRecordingsList (line 49) | function ZoomRecordingsList() {
FILE: 2025-06-24-ai-content-pipeline/frontend/src/components/shared/empty-state.tsx
type EmptyStateProps (line 5) | interface EmptyStateProps {
function EmptyState (line 13) | function EmptyState({ Icon = Inbox, title, description, action, classNam...
FILE: 2025-06-24-ai-content-pipeline/frontend/src/components/shared/error-message.tsx
type ErrorMessageProps (line 8) | interface ErrorMessageProps {
function ErrorMessage (line 15) | function ErrorMessage({ title = "An Error Occurred", message, onRetry, c...
FILE: 2025-06-24-ai-content-pipeline/frontend/src/components/shared/loading-indicator.tsx
type LoadingIndicatorProps (line 4) | interface LoadingIndicatorProps {
function LoadingIndicator (line 11) | function LoadingIndicator({
FILE: 2025-06-24-ai-content-pipeline/frontend/src/components/shared/youtube-embed.tsx
type YouTubeEmbedProps (line 5) | interface YouTubeEmbedProps {
function extractVideoId (line 12) | function extractVideoId(url: string): string | null {
function YouTubeEmbed (line 28) | function YouTubeEmbed({ url, className, title = "YouTube Video", size = ...
FILE: 2025-06-24-ai-content-pipeline/frontend/src/components/theme-provider.tsx
function ThemeProvider (line 6) | function ThemeProvider({
FILE: 2025-06-24-ai-content-pipeline/frontend/src/components/ui/alert.tsx
function Alert (line 22) | function Alert({
function AlertTitle (line 37) | function AlertTitle({ className, ...props }: React.ComponentProps<"div">) {
function AlertDescription (line 50) | function AlertDescription({
FILE: 2025-06-24-ai-content-pipeline/frontend/src/components/ui/badge.tsx
function Badge (line 28) | function Badge({
FILE: 2025-06-24-ai-content-pipeline/frontend/src/components/ui/button.tsx
function Button (line 38) | function Button({
FILE: 2025-06-24-ai-content-pipeline/frontend/src/components/ui/card.tsx
function Card (line 5) | function Card({ className, ...props }: React.ComponentProps<"div">) {
function CardHeader (line 18) | function CardHeader({ className, ...props }: React.ComponentProps<"div">) {
function CardTitle (line 31) | function CardTitle({ className, ...props }: React.ComponentProps<"div">) {
function CardDescription (line 41) | function CardDescription({ className, ...props }: React.ComponentProps<"...
function CardAction (line 51) | function CardAction({ className, ...props }: React.ComponentProps<"div">) {
function CardContent (line 64) | function CardContent({ className, ...props }: React.ComponentProps<"div"...
function CardFooter (line 74) | function CardFooter({ className, ...props }: React.ComponentProps<"div">) {
FILE: 2025-06-24-ai-content-pipeline/frontend/src/components/ui/dialog.tsx
function Dialog (line 9) | function Dialog({
function DialogTrigger (line 15) | function DialogTrigger({
function DialogPortal (line 21) | function DialogPortal({
function DialogClose (line 27) | function DialogClose({
function DialogOverlay (line 33) | function DialogOverlay({
function DialogContent (line 49) | function DialogContent({
function DialogHeader (line 83) | function DialogHeader({ className, ...props }: React.ComponentProps<"div...
function DialogFooter (line 93) | function DialogFooter({ className, ...props }: React.ComponentProps<"div...
function DialogTitle (line 106) | function DialogTitle({
function DialogDescription (line 119) | function DialogDescription({
FILE: 2025-06-24-ai-content-pipeline/frontend/src/components/ui/input.tsx
type InputProps (line 5) | interface InputProps
FILE: 2025-06-24-ai-content-pipeline/frontend/src/components/ui/scroll-area.tsx
function ScrollArea (line 8) | function ScrollArea({
function ScrollBar (line 31) | function ScrollBar({
FILE: 2025-06-24-ai-content-pipeline/frontend/src/components/ui/separator.tsx
function Separator (line 8) | function Separator({
FILE: 2025-06-24-ai-content-pipeline/frontend/src/components/ui/tabs.tsx
function Tabs (line 8) | function Tabs({
function TabsList (line 21) | function TabsList({
function TabsTrigger (line 37) | function TabsTrigger({
function TabsContent (line 53) | function TabsContent({
FILE: 2025-06-24-ai-content-pipeline/frontend/src/components/ui/textarea.tsx
function Textarea (line 5) | function Textarea({ className, ...props }: React.ComponentProps<"textare...
FILE: 2025-06-24-ai-content-pipeline/frontend/src/components/video/draft-editor.tsx
type DraftEditorProps (line 29) | interface DraftEditorProps {
type CurrentDraftState (line 35) | interface CurrentDraftState {
function DraftEditor (line 41) | function DraftEditor({ videoId }: DraftEditorProps) {
FILE: 2025-06-24-ai-content-pipeline/frontend/src/components/video/email-preview.tsx
type EmailPreviewProps (line 10) | interface EmailPreviewProps {
function EmailPreview (line 18) | function EmailPreview({ draft, onChange, onRefine, className, readOnly =...
FILE: 2025-06-24-ai-content-pipeline/frontend/src/components/video/linkedin-preview.tsx
type LinkedInDraft (line 10) | type LinkedInDraft = LinkedInPost
type LinkedInPreviewProps (line 12) | interface LinkedInPreviewProps {
function LinkedInPreview (line 19) | function LinkedInPreview({ draft, onChange, className, readOnly = false ...
FILE: 2025-06-24-ai-content-pipeline/frontend/src/components/video/transcript-viewer.tsx
type TranscriptViewerProps (line 13) | interface TranscriptViewerProps {
function TranscriptViewer (line 18) | function TranscriptViewer({ videoId, initialTranscript }: TranscriptView...
FILE: 2025-06-24-ai-content-pipeline/frontend/src/components/video/x-preview.tsx
type XDraft (line 10) | type XDraft = TwitterThread
type XPreviewProps (line 12) | interface XPreviewProps {
function XPreview (line 19) | function XPreview({ draft, onChange, className, readOnly = false }: XPre...
FILE: 2025-06-24-ai-content-pipeline/frontend/src/components/zoom/zoom-recordings-list.tsx
type ZoomRecordingFile (line 17) | interface ZoomRecordingFile {
type ZoomMeetingRecording (line 24) | interface ZoomMeetingRecording {
function getLastNMonthsRange (line 35) | function getLastNMonthsRange(months: number) {
function ZoomRecordingsList (line 45) | function ZoomRecordingsList() {
FILE: 2025-06-24-ai-content-pipeline/frontend/src/lib/api.ts
constant API_BASE_URL (line 1) | const API_BASE_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhos...
type VideoImportRequest (line 3) | interface VideoImportRequest {
type DraftUpdateRequest (line 7) | interface DraftUpdateRequest {
type FeedbackRequest (line 13) | interface FeedbackRequest {
type ZoomRecording (line 17) | interface ZoomRecording {
type ZoomMeetingRecordings (line 31) | interface ZoomMeetingRecordings {
type ZoomMeetingsResponse (line 39) | interface ZoomMeetingsResponse {
method importVideo (line 46) | async importVideo(request: VideoImportRequest) {
method getZoomRecordings (line 56) | async getZoomRecordings(params?: {
method summarizeVideo (line 72) | async summarizeVideo(videoId: string): Promise<void> {
method saveDraft (line 83) | async saveDraft(videoId: string, draft: DraftUpdateRequest) {
method addFeedback (line 93) | async addFeedback(draftId: string, feedback: FeedbackRequest) {
method getTranscript (line 102) | async getTranscript(videoId: string): Promise<string> {
FILE: 2025-06-24-ai-content-pipeline/frontend/src/lib/apiClient.ts
constant API_BASE_URL (line 3) | const API_BASE_URL = process.env.NEXT_PUBLIC_API_URL || "http://localhos...
type XDraft (line 6) | type XDraft = TwitterThread
type LinkedInDraft (line 7) | type LinkedInDraft = LinkedInPost
type DraftContent (line 9) | interface DraftContent {
function handleResponse (line 15) | async function handleResponse<T>(response: Response): Promise<T> {
FILE: 2025-06-24-ai-content-pipeline/frontend/src/lib/supabase.ts
type Video (line 27) | interface Video {
type XDraft (line 41) | type XDraft = TwitterThread
type LinkedInDraft (line 42) | type LinkedInDraft = LinkedInPost
type Draft (line 44) | interface Draft {
FILE: 2025-06-24-ai-content-pipeline/frontend/src/lib/utils.ts
function cn (line 4) | function cn(...inputs: ClassValue[]) {
FILE: 2025-07-01-ai-content-pipeline-2/backend/auth.py
class OAuthManager (line 17) | class OAuthManager:
method __init__ (line 20) | def __init__(self):
method validate_env_variables (line 32) | def validate_env_variables(self) -> Dict[str, bool]:
method get_google_auth_url (line 42) | def get_google_auth_url(self, redirect_uri: str) -> str:
method exchange_google_code (line 55) | def exchange_google_code(self, code: str, redirect_uri: str) -> Creden...
method save_google_credentials (line 68) | def save_google_credentials(self, credentials: Credentials) -> bool:
method load_google_credentials (line 81) | def load_google_credentials(self) -> Optional[Credentials]:
method get_youtube_service (line 104) | def get_youtube_service(self):
method validate_zoom_credentials (line 113) | def validate_zoom_credentials(self) -> bool:
method get_zoom_auth_headers (line 117) | def get_zoom_auth_headers(self) -> Dict[str, str]:
method get_oauth_status (line 129) | def get_oauth_status(self) -> Dict[str, Any]:
FILE: 2025-07-01-ai-content-pipeline-2/backend/baml_wrapper.py
function get_baml_client (line 4) | def get_baml_client():
FILE: 2025-07-01-ai-content-pipeline-2/backend/database.py
class SupabaseDatabase (line 12) | class SupabaseDatabase:
method __init__ (line 13) | def __init__(self):
method create_video (line 39) | async def create_video(self, video: Video) -> None:
method get_video (line 63) | async def get_video(self, video_id: str) -> Optional[Video]:
method update_video (line 88) | async def update_video(self, video_id: str, updates: Dict[str, Any]) -...
method get_drafts_by_video (line 112) | async def get_drafts_by_video(self, video_id: str) -> List[Draft]:
method create_draft (line 155) | async def create_draft(self, draft: Draft) -> None:
method get_draft (line 179) | async def get_draft(self, draft_id: str) -> Optional[Draft]:
method delete_draft (line 214) | async def delete_draft(self, draft_id: str) -> None:
method delete_drafts_by_video (line 225) | async def delete_drafts_by_video(self, video_id: str) -> None:
method update_draft_field (line 242) | async def update_draft_field(
method create_feedback (line 265) | async def create_feedback(self, feedback: Feedback) -> None:
FILE: 2025-07-01-ai-content-pipeline-2/backend/github_pr_service.py
function get_episode_repo_path (line 14) | async def get_episode_repo_path(
class GitHubPRService (line 90) | class GitHubPRService:
method __init__ (line 91) | def __init__(self):
method create_content_pr (line 100) | async def create_content_pr(
method _generate_episode_readme (line 213) | async def _generate_episode_readme(
method _generate_root_readme (line 265) | async def _generate_root_readme(
FILE: 2025-07-01-ai-content-pipeline-2/backend/hello.py
function main (line 1) | def main():
FILE: 2025-07-01-ai-content-pipeline-2/backend/luma_client.py
class LumaClient (line 11) | class LumaClient:
method __init__ (line 12) | def __init__(self):
method get_event_for_zoom_meeting (line 19) | def get_event_for_zoom_meeting(self, zoom_meeting_id: str) -> Optional...
method _get_recent_past_events (line 92) | def _get_recent_past_events(self, limit: int = 10) -> List[LumaEvent]:
method _get_event_by_zoom_date_and_url (line 187) | def _get_event_by_zoom_date_and_url(
method fetch_next_upcoming_event (line 316) | async def fetch_next_upcoming_event(self) -> Optional[LumaEvent]:
FILE: 2025-07-01-ai-content-pipeline-2/backend/main.py
class NextEventCache (line 65) | class NextEventCache:
method __init__ (line 66) | def __init__(self, ttl_hours: int = 6):
method get (line 75) | async def get(self) -> Optional[Dict]:
method set (line 97) | async def set(self, data: Dict):
method clear (line 107) | async def clear(self):
function root (line 124) | async def root():
function get_recent_luma_events (line 129) | async def get_recent_luma_events():
function clear_luma_cache (line 143) | async def clear_luma_cache():
function get_next_ai_that_works_event (line 154) | async def get_next_ai_that_works_event():
function update_video_title (line 195) | async def update_video_title(video_id: str, request: dict):
function get_luma_match_for_zoom_recording (line 222) | async def get_luma_match_for_zoom_recording(meeting_id: str):
function import_video (line 254) | async def import_video(request: VideoImportRequest, background_tasks: Ba...
function complete_video_processing_pipeline (line 286) | async def complete_video_processing_pipeline(video_id: str, zoom_meeting...
function get_video (line 323) | async def get_video(video_id: str):
function trigger_summarize (line 348) | async def trigger_summarize(video_id: str, background_tasks: BackgroundT...
function process_video_summary (line 382) | async def process_video_summary(
function get_summary (line 555) | async def get_summary(video_id: str):
function get_transcript (line 575) | async def get_transcript(video_id: str):
function list_drafts (line 600) | async def list_drafts(video_id: str):
function save_drafts (line 621) | async def save_drafts(video_id: str, request: DraftUpdateRequest):
function add_feedback (line 663) | async def add_feedback(draft_id: str, request: FeedbackRequest):
function refine_content (line 693) | async def refine_content(
function refine_content_background_task (line 785) | async def refine_content_background_task(
function create_github_pr (line 897) | async def create_github_pr(
function test_supabase (line 997) | async def test_supabase():
function test_zoom (line 1019) | async def test_zoom():
function get_zoom_recordings (line 1047) | async def get_zoom_recordings(
FILE: 2025-07-01-ai-content-pipeline-2/backend/migrations/add_processing_stage.sql
type idx_videos_processing_stage (line 16) | CREATE INDEX IF NOT EXISTS idx_videos_processing_stage ON videos(process...
FILE: 2025-07-01-ai-content-pipeline-2/backend/migrations/add_structured_content.sql
type idx_drafts_email_draft (line 12) | CREATE INDEX IF NOT EXISTS idx_drafts_email_draft ON drafts USING GIN (e...
type idx_drafts_x_draft (line 13) | CREATE INDEX IF NOT EXISTS idx_drafts_x_draft ON drafts USING GIN (x_draft)
type idx_drafts_linkedin_draft (line 14) | CREATE INDEX IF NOT EXISTS idx_drafts_linkedin_draft ON drafts USING GIN...
FILE: 2025-07-01-ai-content-pipeline-2/backend/migrations/add_summary_json.sql
type idx_videos_summary (line 5) | CREATE INDEX IF NOT EXISTS idx_videos_summary ON videos USING GIN (summary)
FILE: 2025-07-01-ai-content-pipeline-2/backend/models.py
class VideoImportRequest (line 7) | class VideoImportRequest(BaseModel):
class EmailDraftContent (line 14) | class EmailDraftContent(BaseModel):
class XDraftContent (line 20) | class XDraftContent(BaseModel):
class LinkedInDraftContent (line 25) | class LinkedInDraftContent(BaseModel):
class DraftUpdateRequest (line 30) | class DraftUpdateRequest(BaseModel):
class FeedbackRequest (line 36) | class FeedbackRequest(BaseModel):
class ContentRefinementRequest (line 40) | class ContentRefinementRequest(BaseModel):
class CreateGitHubPRRequest (line 46) | class CreateGitHubPRRequest(BaseModel):
class Video (line 52) | class Video(BaseModel):
class Draft (line 71) | class Draft(BaseModel):
class Feedback (line 81) | class Feedback(BaseModel):
class ZoomRecording (line 89) | class ZoomRecording(BaseModel):
class VideoImportResponse (line 104) | class VideoImportResponse(BaseModel):
class VideoResponse (line 109) | class VideoResponse(BaseModel):
class SummaryResponse (line 114) | class SummaryResponse(BaseModel):
class DraftsListResponse (line 118) | class DraftsListResponse(BaseModel):
class DraftSaveResponse (line 122) | class DraftSaveResponse(BaseModel):
class FeedbackResponse (line 127) | class FeedbackResponse(BaseModel):
class StatusResponse (line 132) | class StatusResponse(BaseModel):
class TranscriptResponse (line 136) | class TranscriptResponse(BaseModel):
class ZoomRecordingsResponse (line 140) | class ZoomRecordingsResponse(BaseModel):
class ZoomMeetingRecordings (line 146) | class ZoomMeetingRecordings(BaseModel):
class ZoomMeetingsResponse (line 154) | class ZoomMeetingsResponse(BaseModel):
class LumaEvent (line 160) | class LumaEvent(BaseModel):
class LumaEventsResponse (line 170) | class LumaEventsResponse(BaseModel):
FILE: 2025-07-01-ai-content-pipeline-2/backend/oauth_setup.py
function check_environment (line 29) | def check_environment():
function get_authenticated_youtube_service (line 47) | def get_authenticated_youtube_service():
function test_youtube_connection (line 108) | def test_youtube_connection(youtube):
function setup_zoom_oauth (line 133) | def setup_zoom_oauth():
function test_zoom_connection (line 176) | def test_zoom_connection():
function test_google_auth (line 214) | def test_google_auth():
function test_zoom_auth (line 230) | def test_zoom_auth():
function create_sample_upload_request (line 235) | def create_sample_upload_request(youtube):
function main (line 259) | def main():
FILE: 2025-07-01-ai-content-pipeline-2/backend/oauth_setup_claude.py
function check_environment (line 16) | def check_environment():
function check_credential_files (line 34) | def check_credential_files():
function setup_google_oauth (line 67) | def setup_google_oauth():
function setup_zoom_oauth (line 155) | def setup_zoom_oauth():
function test_google_auth (line 208) | def test_google_auth():
function test_zoom_auth (line 248) | def test_zoom_auth():
function cleanup_invalid_tokens (line 277) | def cleanup_invalid_tokens():
function main (line 314) | def main():
FILE: 2025-07-01-ai-content-pipeline-2/backend/run_migration.py
function run_migration (line 15) | def run_migration():
FILE: 2025-07-01-ai-content-pipeline-2/backend/schema.sql
type videos (line 8) | CREATE TABLE IF NOT EXISTS videos (
type drafts (line 22) | CREATE TABLE IF NOT EXISTS drafts (
type feedback (line 33) | CREATE TABLE IF NOT EXISTS feedback (
type idx_videos_zoom_meeting_id (line 41) | CREATE INDEX IF NOT EXISTS idx_videos_zoom_meeting_id ON videos(zoom_mee...
type idx_videos_status (line 42) | CREATE INDEX IF NOT EXISTS idx_videos_status ON videos(status)
type idx_videos_processing_stage (line 43) | CREATE INDEX IF NOT EXISTS idx_videos_processing_stage ON videos(process...
type idx_drafts_video_id (line 44) | CREATE INDEX IF NOT EXISTS idx_drafts_video_id ON drafts(video_id)
type idx_drafts_created_at (line 45) | CREATE INDEX IF NOT EXISTS idx_drafts_created_at ON drafts(created_at DESC)
type idx_feedback_draft_id (line 46) | CREATE INDEX IF NOT EXISTS idx_feedback_draft_id ON feedback(draft_id)
FILE: 2025-07-01-ai-content-pipeline-2/backend/setup_supabase.py
function main (line 13) | def main():
FILE: 2025-07-01-ai-content-pipeline-2/backend/test_zoom_recordings.py
function get_zoom_access_token (line 8) | def get_zoom_access_token():
function get_recordings (line 20) | def get_recordings(meeting_id, access_token):
function main (line 31) | def main():
FILE: 2025-07-01-ai-content-pipeline-2/backend/video_processor.py
class VideoProcessor (line 15) | class VideoProcessor:
method __init__ (line 16) | def __init__(self):
method _setup_cache_directory (line 20) | def _setup_cache_directory(self) -> str:
method _get_cache_filename (line 28) | def _get_cache_filename(self, zoom_meeting_id: str, recording_id: str)...
method _load_youtube_credentials (line 35) | def _load_youtube_credentials(self) -> Optional[Credentials]:
method process_video (line 77) | async def process_video(self, video_id: str, zoom_meeting_id: str):
method _download_zoom_recording (line 126) | async def _download_zoom_recording(self, zoom_meeting_id: str) -> str:
method _get_transcript (line 244) | async def _get_transcript(self, zoom_meeting_id: str) -> Optional[str]:
method _upload_to_youtube (line 260) | async def _upload_to_youtube(
FILE: 2025-07-01-ai-content-pipeline-2/backend/zoom_client.py
class ZoomClient (line 13) | class ZoomClient:
method __init__ (line 14) | def __init__(self):
method _get_access_token (line 18) | def _get_access_token(self) -> str:
method _get_new_token (line 33) | def _get_new_token(self) -> str:
method _make_request (line 60) | def _make_request(
method get_recordings (line 95) | def get_recordings(
method get_recording_details (line 149) | def get_recording_details(
method get_transcript (line 173) | def get_transcript(self, meeting_id: str) -> Optional[str]:
method _get_chat_transcript (line 226) | def _get_chat_transcript(self, meeting_id: str, recording_id: str) -> ...
FILE: 2025-07-01-ai-content-pipeline-2/frontend/src/app/layout.tsx
function RootLayout (line 18) | function RootLayout({
FILE: 2025-07-01-ai-content-pipeline-2/frontend/src/app/page.tsx
type FilterType (line 7) | type FilterType = "all" | "processing" | "ready" | "failed";
function HomePage (line 9) | function HomePage() {
FILE: 2025-07-01-ai-content-pipeline-2/frontend/src/app/videos/[id]/page.tsx
function VideoDetailPage (line 37) | function VideoDetailPage() {
FILE: 2025-07-01-ai-content-pipeline-2/frontend/src/components/TranscriptViewer.tsx
type TranscriptViewerProps (line 8) | interface TranscriptViewerProps {
function TranscriptViewer (line 12) | function TranscriptViewer({ videoId }: TranscriptViewerProps) {
FILE: 2025-07-01-ai-content-pipeline-2/frontend/src/components/VideoImportForm.tsx
function VideoImportForm (line 9) | function VideoImportForm() {
FILE: 2025-07-01-ai-content-pipeline-2/frontend/src/components/VideoList.tsx
function VideoList (line 8) | function VideoList() {
FILE: 2025-07-01-ai-content-pipeline-2/frontend/src/components/ZoomRecordingsList.tsx
function getLast3MonthsRange (line 8) | function getLast3MonthsRange() {
function ZoomRecordingsList (line 18) | function ZoomRecordingsList() {
FILE: 2025-07-01-ai-content-pipeline-2/frontend/src/components/github/CreateGitHubPRButton.tsx
type CreateGitHubPRButtonProps (line 26) | interface CreateGitHubPRButtonProps {
function CreateGitHubPRButton (line 38) | function CreateGitHubPRButton({
FILE: 2025-07-01-ai-content-pipeline-2/frontend/src/components/home/video-list.tsx
type FilterType (line 24) | type FilterType = "all" | "processing" | "ready" | "failed";
type VideoListProps (line 26) | interface VideoListProps {
function VideoList (line 30) | function VideoList({ filter = "all" }: VideoListProps) {
FILE: 2025-07-01-ai-content-pipeline-2/frontend/src/components/home/zoom-recordings-list.tsx
type ZoomRecording (line 24) | interface ZoomRecording {
type ZoomMeetingRecording (line 38) | interface ZoomMeetingRecording {
function getLastNMonthsRange (line 53) | function getLastNMonthsRange(months: number) {
function ZoomRecordingsList (line 63) | function ZoomRecordingsList() {
FILE: 2025-07-01-ai-content-pipeline-2/frontend/src/components/shared/empty-state.tsx
type EmptyStateProps (line 5) | interface EmptyStateProps {
function EmptyState (line 13) | function EmptyState({
FILE: 2025-07-01-ai-content-pipeline-2/frontend/src/components/shared/error-message.tsx
type ErrorMessageProps (line 8) | interface ErrorMessageProps {
function ErrorMessage (line 15) | function ErrorMessage({
FILE: 2025-07-01-ai-content-pipeline-2/frontend/src/components/shared/loading-indicator.tsx
type LoadingIndicatorProps (line 4) | interface LoadingIndicatorProps {
function LoadingIndicator (line 11) | function LoadingIndicator({
FILE: 2025-07-01-ai-content-pipeline-2/frontend/src/components/shared/youtube-embed.tsx
type YouTubeEmbedProps (line 5) | interface YouTubeEmbedProps {
function extractVideoId (line 12) | function extractVideoId(url: string): string | null {
function YouTubeEmbed (line 28) | function YouTubeEmbed({
FILE: 2025-07-01-ai-content-pipeline-2/frontend/src/components/theme-provider.tsx
function ThemeProvider (line 6) | function ThemeProvider({
FILE: 2025-07-01-ai-content-pipeline-2/frontend/src/components/ui/alert.tsx
function Alert (line 22) | function Alert({
function AlertTitle (line 37) | function AlertTitle({ className, ...props }: React.ComponentProps<"div">) {
function AlertDescription (line 50) | function AlertDescription({
FILE: 2025-07-01-ai-content-pipeline-2/frontend/src/components/ui/badge.tsx
function Badge (line 28) | function Badge({
FILE: 2025-07-01-ai-content-pipeline-2/frontend/src/components/ui/button.tsx
function Button (line 38) | function Button({
FILE: 2025-07-01-ai-content-pipeline-2/frontend/src/components/ui/card.tsx
function Card (line 5) | function Card({ className, ...props }: React.ComponentProps<"div">) {
function CardHeader (line 18) | function CardHeader({ className, ...props }: React.ComponentProps<"div">) {
function CardTitle (line 28) | function CardTitle({ className, ...props }: React.ComponentProps<"div">) {
function CardDescription (line 41) | function CardDescription({ className, ...props }: React.ComponentProps<"...
function CardAction (line 51) | function CardAction({ className, ...props }: React.ComponentProps<"div">) {
function CardContent (line 61) | function CardContent({ className, ...props }: React.ComponentProps<"div"...
function CardFooter (line 71) | function CardFooter({ className, ...props }: React.ComponentProps<"div">) {
FILE: 2025-07-01-ai-content-pipeline-2/frontend/src/components/ui/dialog.tsx
function Dialog (line 9) | function Dialog({
function DialogTrigger (line 15) | function DialogTrigger({
function DialogPortal (line 21) | function DialogPortal({
function DialogClose (line 27) | function DialogClose({
function DialogOverlay (line 33) | function DialogOverlay({
function DialogContent (line 49) | function DialogContent({
function DialogHeader (line 83) | function DialogHeader({ className, ...props }: React.ComponentProps<"div...
function DialogFooter (line 93) | function DialogFooter({ className, ...props }: React.ComponentProps<"div...
function DialogTitle (line 106) | function DialogTitle({
function DialogDescription (line 119) | function DialogDescription({
FILE: 2025-07-01-ai-content-pipeline-2/frontend/src/components/ui/input.tsx
type InputProps (line 5) | type InputProps = React.InputHTMLAttributes<HTMLInputElement>;
FILE: 2025-07-01-ai-content-pipeline-2/frontend/src/components/ui/scroll-area.tsx
function ScrollArea (line 8) | function ScrollArea({
function ScrollBar (line 31) | function ScrollBar({
FILE: 2025-07-01-ai-content-pipeline-2/frontend/src/components/ui/separator.tsx
function Separator (line 8) | function Separator({
FILE: 2025-07-01-ai-content-pipeline-2/frontend/src/components/ui/tabs.tsx
function Tabs (line 8) | function Tabs({
function TabsList (line 21) | function TabsList({
function TabsTrigger (line 37) | function TabsTrigger({
function TabsContent (line 53) | function TabsContent({
FILE: 2025-07-01-ai-content-pipeline-2/frontend/src/components/ui/textarea.tsx
function Textarea (line 5) | function Textarea({ className, ...props }: React.ComponentProps<"textare...
FILE: 2025-07-01-ai-content-pipeline-2/frontend/src/components/video/draft-editor.tsx
type DraftEditorProps (line 46) | interface DraftEditorProps {
type CurrentDraftState (line 52) | interface CurrentDraftState {
function DraftEditor (line 58) | function DraftEditor({ videoId }: DraftEditorProps) {
FILE: 2025-07-01-ai-content-pipeline-2/frontend/src/components/video/email-preview.tsx
type EmailPreviewProps (line 10) | interface EmailPreviewProps {
function EmailPreview (line 18) | function EmailPreview({
FILE: 2025-07-01-ai-content-pipeline-2/frontend/src/components/video/linkedin-preview.tsx
type LinkedInDraft (line 17) | type LinkedInDraft = LinkedInPost;
type LinkedInPreviewProps (line 19) | interface LinkedInPreviewProps {
function LinkedInPreview (line 26) | function LinkedInPreview({
FILE: 2025-07-01-ai-content-pipeline-2/frontend/src/components/video/transcript-viewer.tsx
type TranscriptViewerProps (line 13) | interface TranscriptViewerProps {
function TranscriptViewer (line 18) | function TranscriptViewer({
FILE: 2025-07-01-ai-content-pipeline-2/frontend/src/components/video/x-preview.tsx
type XDraft (line 17) | type XDraft = TwitterThread;
type XPreviewProps (line 19) | interface XPreviewProps {
function XPreview (line 26) | function XPreview({
FILE: 2025-07-01-ai-content-pipeline-2/frontend/src/components/zoom/zoom-recordings-list.tsx
type ZoomRecordingFile (line 28) | interface ZoomRecordingFile {
type ZoomMeetingRecording (line 35) | interface ZoomMeetingRecording {
function getLastNMonthsRange (line 46) | function getLastNMonthsRange(months: number) {
function ZoomRecordingsList (line 56) | function ZoomRecordingsList() {
FILE: 2025-07-01-ai-content-pipeline-2/frontend/src/lib/api.ts
constant API_BASE_URL (line 1) | const API_BASE_URL = process.env.NEXT_PUBLIC_API_URL || "http://localhos...
type VideoImportRequest (line 3) | interface VideoImportRequest {
type DraftUpdateRequest (line 7) | interface DraftUpdateRequest {
type FeedbackRequest (line 13) | interface FeedbackRequest {
type ZoomRecording (line 17) | interface ZoomRecording {
type ZoomMeetingRecordings (line 31) | interface ZoomMeetingRecordings {
type ZoomMeetingsResponse (line 39) | interface ZoomMeetingsResponse {
method importVideo (line 46) | async importVideo(request: VideoImportRequest) {
method getZoomRecordings (line 56) | async getZoomRecordings(params?: {
method summarizeVideo (line 72) | async summarizeVideo(videoId: string): Promise<void> {
method saveDraft (line 88) | async saveDraft(videoId: string, draft: DraftUpdateRequest) {
method addFeedback (line 98) | async addFeedback(draftId: string, feedback: FeedbackRequest) {
method getTranscript (line 107) | async getTranscript(videoId: string): Promise<string> {
FILE: 2025-07-01-ai-content-pipeline-2/frontend/src/lib/apiClient.ts
constant API_BASE_URL (line 7) | const API_BASE_URL = process.env.NEXT_PUBLIC_API_URL || "http://localhos...
type XDraft (line 10) | type XDraft = TwitterThread;
type LinkedInDraft (line 11) | type LinkedInDraft = LinkedInPost;
type DraftContent (line 13) | interface DraftContent {
function handleResponse (line 19) | async function handleResponse<T>(response: Response): Promise<T> {
FILE: 2025-07-01-ai-content-pipeline-2/frontend/src/lib/supabase.ts
type Video (line 32) | interface Video {
type XDraft (line 46) | type XDraft = TwitterThread;
type LinkedInDraft (line 47) | type LinkedInDraft = LinkedInPost;
type Draft (line 49) | interface Draft {
FILE: 2025-07-01-ai-content-pipeline-2/frontend/src/lib/utils.ts
function cn (line 4) | function cn(...inputs: ClassValue[]) {
FILE: 2025-07-08-context-engineering/main.py
function main (line 5) | def main(resume: str):
FILE: 2025-07-15-decaying-resolution-memory/examine_threads.py
function connect_to_redis (line 17) | def connect_to_redis():
function examine_thread_keys (line 28) | def examine_thread_keys(r: redis.Redis):
function export_threads_to_files (line 120) | def export_threads_to_files(r: redis.Redis, output_dir: str = "raw"):
function main (line 188) | def main():
FILE: 2025-07-15-decaying-resolution-memory/explore_redis.py
function connect_to_redis (line 16) | def connect_to_redis():
function explore_keys (line 28) | def explore_keys(r: redis.Redis, pattern: str = "*", limit: int = 100):
function examine_key (line 62) | def examine_key(r: redis.Redis, key: str):
function find_trace_keys (line 127) | def find_trace_keys(r: redis.Redis, pattern: str = "*trace*"):
function main (line 160) | def main():
FILE: 2025-07-15-decaying-resolution-memory/main.py
function main (line 1) | def main():
FILE: 2025-07-15-decaying-resolution-memory/redact_pii.py
function redact_pii_in_text (line 11) | async def redact_pii_in_text(text: str) -> str:
function chunk_text (line 21) | def chunk_text(text: str, chunk_size: int = CHUNK_SIZE):
function process_file (line 26) | async def process_file(input_path: Path, output_path: Path, file_pbar: t...
function main (line 60) | def main():
FILE: 2025-07-22-multimodality/data/psuedocode.py
function analyze_pages_with_transactions (line 3) | def analyze_pages_with_transactions(pages: BamlImage[]):
FILE: 2025-07-22-multimodality/main.py
function ensure_dir (line 12) | def ensure_dir(path: str) -> None:
function pil_to_cv (line 16) | def pil_to_cv(image: PILImage) -> np.ndarray:
function classify_and_draw_layout_regions (line 20) | def classify_and_draw_layout_regions(
function find_horizontal_bands (line 70) | def find_horizontal_bands(mask: PILImage, min_height: int = 15, min_rati...
function draw_horizontal_bands (line 91) | def draw_horizontal_bands(img: PILImage, bands: List[Tuple[int, int]]) -...
function compare_pages (line 103) | def compare_pages(
function main (line 138) | def main() -> None:
function take_page (line 157) | def take_page(img: BamlImage):
FILE: 2025-07-29-eval-many-models-same-prompt/main.py
function run_unit_test (line 13) | async def run_unit_test(test_name: str, model: str):
function main (line 28) | async def main():
FILE: 2025-07-29-eval-many-models-same-prompt/streamlit_app.py
function detect_llm_patterns (line 9) | def detect_llm_patterns(text):
function highlight_text_with_patterns (line 110) | def highlight_text_with_patterns(text, patterns, highlight_enabled=True):
function display_text_with_llm_detection (line 136) | def display_text_with_llm_detection(text, highlight_enabled=True, label=...
function load_results (line 160) | def load_results():
function main (line 194) | def main():
FILE: 2025-07-29-eval-many-models-same-prompt/test_loader.py
function load_test (line 5) | def load_test(name: str) -> Tuple[VideoSummary, EmailStructure]:
FILE: 2025-08-19-interruptible-agents/agents/planner_agent.py
function plan_searches (line 5) | async def plan_searches(query: str) -> WebSearchPlan:
FILE: 2025-08-19-interruptible-agents/agents/search_agent.py
function summarize_search_term (line 4) | async def summarize_search_term(term: str, reason: str) -> str:
FILE: 2025-08-19-interruptible-agents/agents/writer_agent.py
function write_research_report (line 5) | async def write_research_report(query: str, summaries: list[str]) -> Rep...
FILE: 2025-08-19-interruptible-agents/hello.py
function main (line 11) | async def main() -> None:
FILE: 2025-08-19-interruptible-agents/manager.py
class ResearchManager (line 10) | class ResearchManager:
method __init__ (line 11) | def __init__(self):
method run (line 14) | async def run(self, query: str) -> None:
method _plan_searches (line 36) | async def _plan_searches(self, query: str) -> WebSearchPlan:
method _perform_searches (line 39) | async def _perform_searches(self, search_plan: WebSearchPlan) -> list[...
method _search (line 55) | async def _search(self, item: WebSearchItem) -> tuple[WebSearchItem, s...
method _write_report (line 62) | async def _write_report(self, query: str, search_results: list[str]) -...
method _print_section (line 66) | def _print_section(self, title: str) -> None:
method _print_info (line 70) | def _print_info(self, message: str) -> None:
method _print_success (line 73) | def _print_success(self, message: str) -> None:
method _print_error (line 77) | def _print_error(self, message: str) -> None:
method _print_progress (line 81) | def _print_progress(self, completed: int, total: int) -> None:
method _print_planned_searches (line 84) | def _print_planned_searches(self, plan: WebSearchPlan) -> None:
FILE: 2025-08-19-interruptible-agents/runtime.py
class ProgressEvent (line 15) | class ProgressEvent:
class Message (line 22) | class Message:
class ConversationRuntime (line 27) | class ConversationRuntime:
method __init__ (line 28) | def __init__(self, convo_id: str, max_events: int = 500) -> None:
method emit (line 39) | def emit(self, event_type: str, message: str) -> None:
method queue_message (line 44) | def queue_message(self, msg: Message) -> None:
class RuntimeAwareResearchManager (line 52) | class RuntimeAwareResearchManager(ResearchManager):
method __init__ (line 53) | def __init__(self, runtime: ConversationRuntime) -> None:
method _print_section (line 58) | def _print_section(self, title: str) -> None: # type: ignore[override]
method _print_info (line 61) | def _print_info(self, message: str) -> None: # type: ignore[override]
method _print_success (line 64) | def _print_success(self, message: str) -> None: # type: ignore[override]
method _print_error (line 67) | def _print_error(self, message: str) -> None: # type: ignore[override]
method _print_progress (line 70) | def _print_progress(self, completed: int, total: int) -> None: # type...
class AgentThread (line 74) | class AgentThread(threading.Thread):
method __init__ (line 75) | def __init__(self, runtime: ConversationRuntime, initial_query: str) -...
method stop (line 82) | def stop(self) -> None:
method run (line 85) | def run(self) -> None: # noqa: C901 - keep simple even if a bit long
method _boundary_check (line 140) | def _boundary_check(self) -> bool:
method _finish (line 185) | def _finish(self, status: str) -> None:
class InMemoryAgentSystem (line 191) | class InMemoryAgentSystem:
method __init__ (line 192) | def __init__(self) -> None:
method start (line 197) | def start(self, convo_id: str, query: str) -> ConversationRuntime:
method queue (line 208) | def queue(self, convo_id: str, msg: Message) -> None:
method cancel (line 212) | def cancel(self, convo_id: str) -> None:
method get_runtime (line 216) | def get_runtime(self, convo_id: str) -> ConversationRuntime:
method is_done (line 219) | def is_done(self, convo_id: str) -> bool:
method _require_runtime (line 223) | def _require_runtime(self, convo_id: str) -> ConversationRuntime:
FILE: 2025-08-26-claude-for-non-code-workflows/tools/pull-metrics.ts
type Metric (line 6) | interface Metric {
function fetchMetrics (line 12) | async function fetchMetrics(): Promise<Metric[]> {
function randomFloat (line 50) | function randomFloat(min: number, max: number): number {
function formatChange (line 54) | function formatChange(change: number): string {
function displayMetric (line 59) | async function displayMetric(metric: Metric, index: number): Promise<voi...
function main (line 85) | async function main() {
FILE: 2025-09-02-voice-agent-supervisor-threading/voice_agent.py
function format_conversation (line 58) | def format_conversation(conv: List[Dict[str, str]]) -> str:
function record_audio_with_silence_detection (line 66) | def record_audio_with_silence_detection(max_duration: int = 10, silence_...
function record_audio (line 115) | async def record_audio(duration: int = 5) -> bytes:
function transcribe_audio (line 120) | async def transcribe_audio(audio_bytes: bytes) -> str:
function get_user_input (line 158) | async def get_user_input() -> str:
function speak_text_async (line 173) | async def speak_text_async(text: str) -> None:
function stop_tts (line 248) | def stop_tts():
function run_compliance_check (line 262) | async def run_compliance_check(convo_snapshot: List[Dict[str, str]]) -> ...
function stream_assistant_response (line 274) | async def stream_assistant_response(convo_text: str):
function handle_supervisor_result (line 283) | async def handle_supervisor_result(supervisor_task: asyncio.Task, convo_...
function handle_turn (line 303) | async def handle_turn(user_text: str) -> None:
function main_conversation (line 394) | async def main_conversation():
function main (line 439) | async def main():
FILE: 2025-09-09-generative-uis/my-app/src/app/layout.tsx
function RootLayout (line 20) | function RootLayout({
FILE: 2025-09-09-generative-uis/my-app/src/app/page.tsx
function Home (line 8) | function Home() {
FILE: 2025-09-16-coding-agent-tools-bash-vs-mcp/linear-cli/linear-cli.ts
function getGitBranch (line 29) | function getGitBranch(): string {
function extractIssueId (line 37) | function extractIssueId(branchName: string): string | null {
function getIssueIdInteractively (line 43) | async function getIssueIdInteractively(defaultId: string | null = null):...
function resolveIssueId (line 57) | async function resolveIssueId(providedId?: string): Promise<string> {
function listIssues (line 77) | async function listIssues() {
function getIssue (line 127) | async function getIssue(issueId?: string, options?: { comments?: boolean...
function addComment (line 192) | async function addComment(message: string, options: { issueId?: string }) {
FILE: 2025-09-16-coding-agent-tools-bash-vs-mcp/src/index.ts
constant PORT (line 10) | const PORT = process.env.PORT || 3050;
constant ANTHROPIC_API_URL (line 11) | const ANTHROPIC_API_URL = 'https://api.anthropic.com';
function getLogFileName (line 16) | function getLogFileName(): string {
function logRequestResponse (line 28) | async function logRequestResponse(
FILE: 2025-09-16-coding-agent-tools-bash-vs-mcp/src/inspect-logs.ts
type LogEntry (line 8) | interface LogEntry {
function processLine (line 23) | async function processLine(line: string, lineNumber: number, seenMessage...
function streamFromStdin (line 94) | async function streamFromStdin() {
function processLines (line 121) | async function processLines(lines: string[]) {
function inspectFile (line 142) | async function inspectFile(filePath: string) {
function main (line 149) | async function main() {
FILE: 2025-09-23-evals-for-classification/scripts/build_vector_store.py
class VectorStoreBuilder (line 29) | class VectorStoreBuilder:
method __init__ (line 32) | def __init__(self, force_rebuild: bool = False):
method build_vector_store (line 45) | def build_vector_store(self) -> None:
method _generate_embeddings (line 117) | def _generate_embeddings(self, texts: list[str]) -> list[list[float]]:
function main (line 127) | def main():
FILE: 2025-09-23-evals-for-classification/src/classification/embeddings.py
class EmbeddingService (line 12) | class EmbeddingService:
method __init__ (line 15) | def __init__(self, use_vector_store: bool = True) -> None:
method embed_text (line 33) | def embed_text(self, text: str) -> list[float]:
method embed_category (line 52) | def embed_category(self, category: Category) -> list[float]:
method compute_similarity (line 82) | def compute_similarity(self, embedding1: list[float], embedding2: list...
FILE: 2025-09-23-evals-for-classification/src/classification/expander.py
function expand_user_query (line 6) | def expand_user_query(text: str) -> str:
FILE: 2025-09-23-evals-for-classification/src/classification/narrowing.py
class NarrowingStrategyBase (line 17) | class NarrowingStrategyBase(ABC):
method __init__ (line 20) | def __init__(
method narrow (line 47) | def narrow(self, text: str, categories: list[Category]) -> list[Catego...
method _narrow_with_embedding_similarity (line 59) | def _narrow_with_embedding_similarity(
method _narrow_with_vector_store (line 78) | def _narrow_with_vector_store(self, text: str, max_results: int) -> li...
method _narrow_in_memory (line 98) | def _narrow_in_memory(self, text: str, categories: list[Category], max...
method _narrow_with_llm (line 124) | def _narrow_with_llm(self, text: str, categories: list[Category], max_...
class LLMBasedNarrowing (line 164) | class LLMBasedNarrowing(NarrowingStrategyBase):
method __init__ (line 167) | def __init__(self) -> None:
method narrow (line 171) | def narrow(self, text: str, categories: list[Category]) -> list[Catego...
class HybridNarrowing (line 189) | class HybridNarrowing(NarrowingStrategyBase):
method __init__ (line 192) | def __init__(self, embedding_service: EmbeddingService, use_vector_sto...
method _validate_hybrid_settings (line 202) | def _validate_hybrid_settings(self) -> bool:
method narrow (line 217) | def narrow(self, text: str, categories: list[Category]) -> list[Catego...
method narrow_with_stages (line 235) | def narrow_with_stages(self, text: str, categories: list[Category]) ->...
method _narrow_with_embedding_only (line 269) | def _narrow_with_embedding_only(self, text: str, categories: list[Cate...
method _narrow_with_embedding (line 281) | def _narrow_with_embedding(self, text: str, categories: list[Category]...
method _narrow_with_llm_stage (line 293) | def _narrow_with_llm_stage(self, text: str, categories: list[Category]...
class CategoryNarrower (line 310) | class CategoryNarrower:
method __init__ (line 313) | def __init__(self, embedding_service: EmbeddingService, use_vector_sto...
method narrow_categories (line 325) | def narrow_categories(self, text: str, categories: list[Category]) -> ...
method narrow_categories_with_stages (line 339) | def narrow_categories_with_stages(self, text: str, categories: list[Ca...
FILE: 2025-09-23-evals-for-classification/src/classification/pipeline.py
class ClassificationPipeline (line 17) | class ClassificationPipeline:
method __init__ (line 20) | def __init__(self, use_vector_store: bool = True) -> None:
method _get_categories (line 49) | def _get_categories(self) -> list[Category]:
method classify (line 59) | def classify(self, text: str, max_candidates: int | None = None) -> Cl...
FILE: 2025-09-23-evals-for-classification/src/classification/selection.py
class CategorySelector (line 8) | class CategorySelector:
method select_best_category (line 11) | def select_best_category(self, text: str, candidates: list[Category]) ...
method _build_dynamic_enum (line 33) | def _build_dynamic_enum(self, categories: list[Category]) -> TypeBuilder:
FILE: 2025-09-23-evals-for-classification/src/classification/vector_store.py
class CategoryVectorStore (line 20) | class CategoryVectorStore:
method __init__ (line 23) | def __init__(self, auto_create: bool = False) -> None:
method is_available (line 37) | def is_available() -> bool:
method _load_vector_store (line 45) | def _load_vector_store(self, auto_create: bool = False) -> None:
method _validate_embedding_model (line 76) | def _validate_embedding_model(self) -> None:
method _create_collection (line 90) | def _create_collection(self) -> None:
method _build_category_cache (line 104) | def _build_category_cache(self) -> None:
method find_similar_categories (line 113) | def find_similar_categories(
method get_cached_embedding (line 144) | def get_cached_embedding(self, category_path: str) -> list[float] | None:
method add_category (line 161) | def add_category(self, category: Category, embedding: list[float]) -> ...
method has_category (line 191) | def has_category(self, category_path: str) -> bool:
method get_collection_info (line 202) | def get_collection_info(self) -> dict[str, Any]:
FILE: 2025-09-23-evals-for-classification/src/config/settings.py
class Settings (line 13) | class Settings(BaseSettings):
class Config (line 31) | class Config:
FILE: 2025-09-23-evals-for-classification/src/data/category_loader.py
class CategoryLoader (line 10) | class CategoryLoader:
method __init__ (line 13) | def __init__(self) -> None:
method load_categories (line 19) | def load_categories(self) -> list[Category]:
method _parse_category_file (line 32) | def _parse_category_file(self, file_path: Path) -> list[Category]:
method _parse_category_line (line 54) | def _parse_category_line(self, line: str) -> Category:
FILE: 2025-09-23-evals-for-classification/src/data/models.py
class Category (line 8) | class Category(BaseModel):
method level (line 20) | def level(self) -> int:
method parent_path (line 25) | def parent_path(self) -> str:
class ClassificationRequest (line 30) | class ClassificationRequest(BaseModel):
class ClassificationResult (line 37) | class ClassificationResult(BaseModel):
FILE: 2025-09-23-evals-for-classification/src/shared/correctness.py
class CorrectnessDefinition (line 13) | class CorrectnessDefinition(str, Enum):
class CategoryHierarchyHelper (line 21) | class CategoryHierarchyHelper:
method __init__ (line 24) | def __init__(self, all_categories: List[Category]):
method _build_hierarchy_maps (line 33) | def _build_hierarchy_maps(self):
method get_parent_path (line 50) | def get_parent_path(self, path: str) -> str | None:
method get_child_paths (line 61) | def get_child_paths(self, path: str) -> List[str]:
method get_sibling_paths (line 72) | def get_sibling_paths(self, path: str) -> List[str]:
method is_parent_of (line 88) | def is_parent_of(self, potential_parent: str, child: str) -> bool:
method is_child_of (line 100) | def is_child_of(self, potential_child: str, parent: str) -> bool:
method is_sibling_of (line 112) | def is_sibling_of(self, path1: str, path2: str) -> bool:
class CorrectnessEvaluator (line 127) | class CorrectnessEvaluator:
method __init__ (line 130) | def __init__(self, all_categories: List[Category]):
method is_correct (line 138) | def is_correct(self, predicted_path: str, ground_truth_path: str, defi...
method get_correctness_explanation (line 167) | def get_correctness_explanation(
FILE: 2025-09-23-evals-for-classification/src/shared/enums.py
class NarrowingStrategy (line 6) | class NarrowingStrategy(str, Enum):
FILE: 2025-09-23-evals-for-classification/src/shared/logger.py
class ClassificationLogger (line 8) | class ClassificationLogger:
method __init__ (line 11) | def __init__(self, name: str = "classification", level: str = "INFO"):
method _setup_handler (line 25) | def _setup_handler(self):
method info (line 35) | def info(self, message: str, **kwargs):
method warning (line 39) | def warning(self, message: str, **kwargs):
method error (line 43) | def error(self, message: str, **kwargs):
method debug (line 47) | def debug(self, message: str, **kwargs):
method success (line 51) | def success(self, message: str, **kwargs):
method processing (line 56) | def processing(self, message: str, **kwargs):
class ColoredFormatter (line 61) | class ColoredFormatter(logging.Formatter):
method format (line 84) | def format(self, record):
function get_logger (line 96) | def get_logger(name: str, level: str = "INFO") -> ClassificationLogger:
function setup_logging (line 117) | def setup_logging(level: str = "INFO", log_file: Path | None = None):
FILE: 2025-09-23-evals-for-classification/tests/data/test_cases.py
class TestCase (line 11) | class TestCase(TypedDict):
FILE: 2025-09-23-evals-for-classification/tests/integration/test_narrowing_accuracy.py
class NarrowingResult (line 33) | class NarrowingResult:
class StrategyResults (line 49) | class StrategyResults:
class NarrowingAccuracyTester (line 61) | class NarrowingAccuracyTester:
method __init__ (line 64) | def __init__(self):
method test_strategy (line 77) | def test_strategy(self, strategy_name: str, narrower) -> StrategyResults:
method analyze_failures (line 171) | def analyze_failures(self, strategy_results: StrategyResults) -> None:
method compare_strategies (line 206) | def compare_strategies(self, results_list: list[StrategyResults]) -> N...
method run_all_tests (line 234) | def run_all_tests(self) -> dict[str, StrategyResults]:
method save_results_to_json (line 262) | def save_results_to_json(self, results: dict[str, StrategyResults]) ->...
function main (line 334) | def main():
FILE: 2025-09-23-evals-for-classification/tests/integration/test_pipeline_accuracy.py
class PipelineResult (line 39) | class PipelineResult:
class PipelineResults (line 54) | class PipelineResults:
class PipelineAccuracyTester (line 67) | class PipelineAccuracyTester:
method __init__ (line 70) | def __init__(self, use_vector_store: bool = True):
method test_pipeline (line 83) | def test_pipeline(self) -> PipelineResults:
method analyze_failures (line 170) | def analyze_failures(self, pipeline_results: PipelineResults) -> None:
method print_summary (line 236) | def print_summary(self, pipeline_results: PipelineResults) -> None:
method run_test (line 276) | def run_test(self) -> PipelineResults:
method save_results_to_json (line 287) | def save_results_to_json(self, results: PipelineResults) -> Path:
function main (line 369) | def main():
FILE: 2025-09-23-evals-for-classification/tests/integration/test_selection_accuracy.py
class SelectionResult (line 28) | class SelectionResult:
class SelectionResults (line 40) | class SelectionResults:
class SelectionAccuracyTester (line 51) | class SelectionAccuracyTester:
method __init__ (line 54) | def __init__(self):
method test_selection (line 71) | def test_selection(self) -> SelectionResults:
method analyze_failures (line 150) | def analyze_failures(self, selection_results: SelectionResults) -> None:
method print_summary (line 180) | def print_summary(self, selection_results: SelectionResults) -> None:
method run_test (line 206) | def run_test(self) -> SelectionResults:
method save_results_to_json (line 217) | def save_results_to_json(self, results: SelectionResults) -> Path:
function main (line 279) | def main():
FILE: 2025-09-23-evals-for-classification/tests/run_tests.py
function run_narrowing_accuracy_test (line 33) | def run_narrowing_accuracy_test():
function run_selection_accuracy_test (line 41) | def run_selection_accuracy_test():
function run_pipeline_accuracy_test (line 49) | def run_pipeline_accuracy_test():
function run_unit_tests (line 57) | def run_unit_tests():
function run_all_tests (line 129) | def run_all_tests():
function main (line 160) | def main():
FILE: 2025-09-23-evals-for-classification/tests/unit/classification/embeddings_test.py
function mock_category (line 13) | def mock_category():
function mock_openai_response (line 25) | def mock_openai_response():
function mock_settings (line 34) | def mock_settings():
function embedding_service_no_vector_store (line 43) | def embedding_service_no_vector_store():
function embedding_service_with_vector_store (line 55) | def embedding_service_with_vector_store():
function test_init_with_vector_store_success (line 72) | def test_init_with_vector_store_success(
function test_init_with_vector_store_failure (line 111) | def test_init_with_vector_store_failure(
function test_init_without_vector_store (line 148) | def test_init_without_vector_store(mock_openai: mock.MagicMock, mock_set...
function test_embed_text_cache_hit (line 171) | def test_embed_text_cache_hit(embedding_service_no_vector_store: Embeddi...
function test_embed_text_cache_miss (line 194) | def test_embed_text_cache_miss(
function test_embed_category_vector_store_cache_hit (line 224) | def test_embed_category_vector_store_cache_hit(
function test_embed_category_memory_cache_hit (line 248) | def test_embed_category_memory_cache_hit(
function test_embed_category_generate_new_embedding (line 283) | def test_embed_category_generate_new_embedding(
function test_embed_category_vector_store_add_failure (line 315) | def test_embed_category_vector_store_add_failure(
function test_embed_category_no_vector_store (line 345) | def test_embed_category_no_vector_store(embedding_service_no_vector_stor...
function test_embed_category_no_vector_store_generate_new (line 365) | def test_embed_category_no_vector_store_generate_new(
function test_embed_category_vector_store_has_category_already (line 389) | def test_embed_category_vector_store_has_category_already(
function test_compute_similarity (line 420) | def test_compute_similarity(
function test_compute_similarity_identical_embeddings (line 449) | def test_compute_similarity_identical_embeddings(
function test_compute_similarity_orthogonal_embeddings (line 470) | def test_compute_similarity_orthogonal_embeddings(
function test_compute_similarity_opposite_embeddings (line 492) | def test_compute_similarity_opposite_embeddings(
function test_compute_similarity_real_embeddings (line 514) | def test_compute_similarity_real_embeddings(
function test_compute_similarity_zero_norm_handling (line 539) | def test_compute_similarity_zero_norm_handling(
function test_cache_persistence_across_calls (line 572) | def test_cache_persistence_across_calls(
FILE: 2025-09-23-evals-for-classification/tests/unit/classification/narrowing_test.py
function mock_categories (line 28) | def mock_categories():
function mock_large_categories (line 70) | def mock_large_categories():
function mock_embedding_service (line 87) | def mock_embedding_service():
class TestLLMBasedNarrowing (line 96) | class TestLLMBasedNarrowing:
method test_narrow_empty_categories (line 99) | def test_narrow_empty_categories(self):
method test_narrow_success_with_category_names (line 117) | def test_narrow_success_with_category_names(self, mock_categories: lis...
method test_narrow_fallback_on_llm_failure (line 144) | def test_narrow_fallback_on_llm_failure(self, mock_categories: list[Ca...
class TestHybridNarrowing (line 169) | class TestHybridNarrowing:
method test_init (line 172) | def test_init(self, mock_embedding_service: EmbeddingService):
method test_narrow_empty_categories (line 189) | def test_narrow_empty_categories(self, mock_embedding_service: Embeddi...
method test_narrow_with_embedding_then_llm (line 207) | def test_narrow_with_embedding_then_llm(
method test_narrow_with_embedding_in_memory (line 237) | def test_narrow_with_embedding_in_memory(
method test_narrow_with_llm_already_few_categories (line 263) | def test_narrow_with_llm_already_few_categories(
method test_narrow_uses_hybrid_flow_when_valid (line 289) | def test_narrow_uses_hybrid_flow_when_valid(
method test_narrow_falls_back_when_invalid_settings (line 319) | def test_narrow_falls_back_when_invalid_settings(
method test_narrow_with_embedding_only_uses_vector_store (line 345) | def test_narrow_with_embedding_only_uses_vector_store(
method test_narrow_with_embedding_only_falls_back_to_in_memory (line 376) | def test_narrow_with_embedding_only_falls_back_to_in_memory(
class TestCategoryNarrower (line 416) | class TestCategoryNarrower:
method test_init (line 419) | def test_init(self, mock_embedding_service: EmbeddingService):
method test_narrow_categories_with_hybrid_strategy (line 436) | def test_narrow_categories_with_hybrid_strategy(
class TestNarrowingStrategyBase (line 463) | class TestNarrowingStrategyBase:
method test_abstract_base_cannot_be_instantiated (line 466) | def test_abstract_base_cannot_be_instantiated(self):
method test_abstract_method_must_be_implemented (line 478) | def test_abstract_method_must_be_implemented(self):
FILE: 2025-09-23-evals-for-classification/tests/unit/classification/pipeline_test.py
function mock_categories (line 22) | def mock_categories():
class TestClassificationPipeline (line 49) | class TestClassificationPipeline:
method test_get_categories_caching_behavior (line 52) | def test_get_categories_caching_behavior(self, mock_categories: list[C...
method test_get_categories_returns_cached_when_available (line 80) | def test_get_categories_returns_cached_when_available(self, mock_categ...
method test_classify_method_basic_structure (line 101) | def test_classify_method_basic_structure(self, mock_categories: list[C...
method test_classify_with_max_candidates_parameter (line 160) | def test_classify_with_max_candidates_parameter(self, mock_categories:...
method test_pipeline_component_access (line 193) | def test_pipeline_component_access(self, mock_categories: list[Categor...
method test_pipeline_categories_cache_behavior (line 223) | def test_pipeline_categories_cache_behavior(self, mock_categories: lis...
method test_pipeline_embedding_service_integration (line 253) | def test_pipeline_embedding_service_integration(self):
method test_pipeline_narrower_integration (line 274) | def test_pipeline_narrower_integration(self, mock_categories: list[Cat...
method test_pipeline_selector_integration (line 299) | def test_pipeline_selector_integration(self, mock_categories: list[Cat...
method test_classification_result_structure (line 322) | def test_classification_result_structure(self, mock_categories: list[C...
class TestClassificationPipelineEdgeCases (line 359) | class TestClassificationPipelineEdgeCases:
method test_empty_categories_cache (line 362) | def test_empty_categories_cache(self):
method test_pipeline_with_none_vector_store (line 384) | def test_pipeline_with_none_vector_store(self):
method test_pipeline_component_mocking (line 399) | def test_pipeline_component_mocking(self, mock_categories: list[Catego...
class TestClassificationPipelineIntegration (line 437) | class TestClassificationPipelineIntegration:
method test_pipeline_classification_result_creation (line 440) | def test_pipeline_classification_result_creation(self, mock_categories...
method test_pipeline_component_interaction_pattern (line 479) | def test_pipeline_component_interaction_pattern(self, mock_categories:...
method test_pipeline_metadata_structure (line 519) | def test_pipeline_metadata_structure(self):
FILE: 2025-09-23-evals-for-classification/tests/unit/classification/selection_test.py
function mock_categories (line 23) | def mock_categories():
class TestCategorySelector (line 50) | class TestCategorySelector:
method test_init (line 53) | def test_init(self):
method test_select_best_category_single_candidate_logic (line 69) | def test_select_best_category_single_candidate_logic(self, mock_catego...
method test_select_best_category_empty_candidates_logic (line 93) | def test_select_best_category_empty_candidates_logic(self):
method test_select_best_category_name_matching_logic (line 108) | def test_select_best_category_name_matching_logic(self, mock_categorie...
method test_select_best_category_invalid_name_logic (line 132) | def test_select_best_category_invalid_name_logic(self, mock_categories...
method test_build_dynamic_enum_structure_logic (line 160) | def test_build_dynamic_enum_structure_logic(self, mock_categories: lis...
method test_build_dynamic_enum_multiple_categories_logic (line 189) | def test_build_dynamic_enum_multiple_categories_logic(self, mock_categ...
method test_build_dynamic_enum_preserves_order_logic (line 223) | def test_build_dynamic_enum_preserves_order_logic(self, mock_categorie...
method test_build_dynamic_enum_empty_categories_logic (line 247) | def test_build_dynamic_enum_empty_categories_logic(self):
method test_category_name_matching_comprehensive (line 266) | def test_category_name_matching_comprehensive(self, mock_categories: l...
method test_case_sensitive_category_matching_logic (line 291) | def test_case_sensitive_category_matching_logic(self, mock_categories:...
method test_duplicate_category_names_first_match_logic (line 317) | def test_duplicate_category_names_first_match_logic(self):
method test_special_characters_in_category_names_logic (line 356) | def test_special_characters_in_category_names_logic(self):
method test_selector_method_single_candidate_logic_validation (line 399) | def test_selector_method_single_candidate_logic_validation(self, mock_...
method test_selector_method_empty_candidates_logic_validation (line 421) | def test_selector_method_empty_candidates_logic_validation(self):
class TestCategorySelectorEdgeCases (line 437) | class TestCategorySelectorEdgeCases:
method test_selector_initialization_no_dependencies (line 440) | def test_selector_initialization_no_dependencies(self):
method test_category_matching_edge_cases_logic (line 453) | def test_category_matching_edge_cases_logic(self):
method test_selector_component_isolation_logic_validation (line 494) | def test_selector_component_isolation_logic_validation(self, mock_cate...
method test_whitespace_and_special_character_handling (line 516) | def test_whitespace_and_special_character_handling(self):
class TestCategorySelectorIntegration (line 559) | class TestCategorySelectorIntegration:
method test_realistic_category_selection_scenario_logic (line 562) | def test_realistic_category_selection_scenario_logic(self):
method test_full_selection_workflow_simulation_logic (line 614) | def test_full_selection_workflow_simulation_logic(self, mock_categorie...
method test_selector_error_handling_patterns_logic (line 667) | def test_selector_error_handling_patterns_logic(self, mock_categories:...
method test_selector_with_various_category_types_logic (line 693) | def test_selector_with_various_category_types_logic(self, mock_categor...
method test_comprehensive_name_matching_scenarios (line 713) | def test_comprehensive_name_matching_scenarios(self, mock_categories: ...
FILE: 2025-09-23-evals-for-classification/tests/unit/classification/vector_store_test.py
function mock_category (line 12) | def mock_category():
function mock_categories (line 23) | def mock_categories():
function mock_embedding (line 48) | def mock_embedding():
function mock_embeddings (line 54) | def mock_embeddings():
class TestCategoryVectorStore (line 63) | class TestCategoryVectorStore:
method test_init_auto_create_false_no_directory (line 66) | def test_init_auto_create_false_no_directory(self):
method test_init_auto_create_true_creates_directory (line 83) | def test_init_auto_create_true_creates_directory(self):
method test_init_collection_not_found_auto_create_false (line 119) | def test_init_collection_not_found_auto_create_false(self):
method test_init_collection_not_found_auto_create_true (line 146) | def test_init_collection_not_found_auto_create_true(self):
method test_validate_embedding_model_mismatch (line 185) | def test_validate_embedding_model_mismatch(self):
method test_validate_embedding_model_match (line 227) | def test_validate_embedding_model_match(self):
method test_build_category_cache (line 266) | def test_build_category_cache(self):
method test_find_similar_categories_basic (line 318) | def test_find_similar_categories_basic(self, mock_embedding, mock_cate...
method test_find_similar_categories_with_min_similarity (line 383) | def test_find_similar_categories_with_min_similarity(self, mock_embedd...
method test_find_similar_categories_no_collection (line 445) | def test_find_similar_categories_no_collection(self, mock_embedding):
method test_get_cached_embedding_exists (line 482) | def test_get_cached_embedding_exists(self):
method test_get_cached_embedding_not_exists (line 534) | def test_get_cached_embedding_not_exists(self):
method test_get_cached_embedding_no_collection (line 576) | def test_get_cached_embedding_no_collection(self):
method test_add_category_success (line 616) | def test_add_category_success(self, mock_category, mock_embedding):
method test_add_category_no_collection (line 673) | def test_add_category_no_collection(self, mock_category, mock_embedding):
method test_has_category_exists (line 709) | def test_has_category_exists(self):
method test_has_category_not_exists (line 754) | def test_has_category_not_exists(self):
method test_get_collection_info_success (line 796) | def test_get_collection_info_success(self):
method test_get_collection_info_no_collection (line 846) | def test_get_collection_info_no_collection(self):
method test_is_available_true (line 882) | def test_is_available_true(self):
method test_is_available_false_file_not_found (line 920) | def test_is_available_false_file_not_found(self):
method test_is_available_false_collection_not_found (line 940) | def test_is_available_false_collection_not_found(self):
class TestCategoryVectorStoreEdgeCases (line 972) | class TestCategoryVectorStoreEdgeCases:
method test_find_similar_categories_no_distances (line 975) | def test_find_similar_categories_no_distances(self, mock_embedding):
method test_get_cached_embedding_empty_embeddings (line 1031) | def test_get_cached_embedding_empty_embeddings(self):
method test_get_cached_embedding_none_embeddings (line 1079) | def test_get_cached_embedding_none_embeddings(self):
method test_build_category_cache_missing_path_metadata (line 1127) | def test_build_category_cache_missing_path_metadata(self):
method test_validate_embedding_model_no_stored_model (line 1177) | def test_validate_embedding_model_no_stored_model(self):
method test_add_category_with_special_characters (line 1216) | def test_add_category_with_special_characters(self, mock_embedding):
class TestCategoryVectorStoreIntegration (line 1274) | class TestCategoryVectorStoreIntegration:
method test_complete_workflow_simulation (line 1277) | def test_complete_workflow_simulation(self, mock_category, mock_embedd...
method test_error_recovery_patterns (line 1350) | def test_error_recovery_patterns(self):
method test_caching_consistency (line 1371) | def test_caching_consistency(self):
FILE: 2025-09-23-evals-for-classification/ui/analysis.py
function analyze_pipeline_errors (line 27) | def analyze_pipeline_errors(
function create_waffle_chart (line 117) | def create_waffle_chart(values, labels, colors, title):
FILE: 2025-09-23-evals-for-classification/ui/app.py
function render_sidebar (line 78) | def render_sidebar():
function render_main_content (line 149) | def render_main_content(current_data):
function main (line 250) | def main():
FILE: 2025-09-23-evals-for-classification/ui/components.py
function render_error_overview (line 26) | def render_error_overview(analysis):
function render_failure_breakdown (line 76) | def render_failure_breakdown(analysis):
function render_failed_cases_table (line 147) | def render_failed_cases_table(analysis):
function render_error_analysis (line 188) | def render_error_analysis(ui_data, correctness_definition: CorrectnessDe...
function _evaluate_flexible_correctness (line 241) | def _evaluate_flexible_correctness(final_path: str, ground_truth: str, c...
function _render_test_case_header (line 262) | def _render_test_case_header(case_data: dict[str, Any], correctness_defi...
function _collect_pipeline_categories (line 300) | def _collect_pipeline_categories(case_data: dict[str, Any]) -> set:
function _create_pipeline_table_data (line 322) | def _create_pipeline_table_data(case_data: dict[str, Any], categories_to...
function _render_pipeline_table (line 361) | def _render_pipeline_table(table_data: list[dict[str, Any]]):
function render_test_case_analysis (line 395) | def render_test_case_analysis(
function render_custom_testing (line 420) | def render_custom_testing():
FILE: 2025-09-23-evals-for-classification/ui/data_operations.py
function get_available_saved_runs (line 15) | def get_available_saved_runs() -> List[Dict[str, Any]]:
function load_saved_run (line 43) | def load_saved_run(run_name: str) -> Optional[Dict[str, Any]]:
function save_current_results_as_run (line 85) | def save_current_results_as_run(run_name: str, description: str, pipelin...
function transform_pipeline_results_for_ui (line 141) | def transform_pipeline_results_for_ui(pipeline_data: Dict[str, Any]) -> ...
FILE: 2025-09-30-dyanmic-schemas/backend/server.py
function execute_baml_call (line 32) | async def execute_baml_call(
function execute_baml_stream (line 43) | async def execute_baml_stream(
function generate_baml_call (line 54) | async def generate_baml_call(
function generate_baml_stream (line 63) | async def generate_baml_stream(
function generate_baml (line 71) | async def generate_baml(
function execute_baml (line 86) | async def execute_baml(
function handle_stream (line 119) | def handle_stream(stream: BamlStream[StreamTypeVar, FinalTypeVar], to_da...
function convert_to_base64 (line 133) | def convert_to_base64(img: PILImage):
function read_input_content (line 138) | async def read_input_content(
FILE: 2025-09-30-dyanmic-schemas/frontend/app/layout.tsx
function RootLayout (line 20) | function RootLayout({
FILE: 2025-09-30-dyanmic-schemas/frontend/app/page.tsx
function Home (line 12) | function Home() {
FILE: 2025-09-30-dyanmic-schemas/frontend/components/ansii-string.tsx
type AnsiStyles (line 4) | interface AnsiStyles {
type Segment (line 10) | interface Segment {
type AnsiColorTextProps (line 15) | interface AnsiColorTextProps {
FILE: 2025-09-30-dyanmic-schemas/frontend/components/error-message.tsx
type ErrorMessageProps (line 3) | interface ErrorMessageProps {
function ErrorMessage (line 7) | function ErrorMessage({ error }: ErrorMessageProps) {
FILE: 2025-09-30-dyanmic-schemas/frontend/components/execution-result-section.tsx
type AnyObject (line 12) | type AnyObject = Record<string, unknown> | unknown[] | string | number |...
type ExecutionResultSectionProps (line 14) | interface ExecutionResultSectionProps {
function ExecutionResultSection (line 18) | function ExecutionResultSection({ executionResult }: ExecutionResultSect...
function JsonSyntaxHighlight (line 67) | function JsonSyntaxHighlight({ json }: { json: AnyObject }) {
function formatAsYaml (line 83) | function formatAsYaml(data: AnyObject): string {
function PrettyPrint (line 134) | function PrettyPrint({ data, level = 0 }: { data: AnyObject; level?: num...
function TableView (line 236) | function TableView({ data }: { data: AnyObject }) {
function formatCellValue (line 398) | function formatCellValue(value: AnyObject, key?: string): React.ReactNode {
FILE: 2025-09-30-dyanmic-schemas/frontend/components/generated-baml-section.tsx
type BAML (line 14) | interface BAML {
type GeneratedBAMLSectionProps (line 19) | interface GeneratedBAMLSectionProps {
function GeneratedBAMLSection (line 36) | function GeneratedBAMLSection({
FILE: 2025-09-30-dyanmic-schemas/frontend/components/input-section.tsx
type InputSectionProps (line 13) | interface InputSectionProps {
function InputSection (line 18) | function InputSection({ onGenerate, isGenerating }: InputSectionProps) {
FILE: 2025-09-30-dyanmic-schemas/frontend/components/markdown/MarkdownRenderer.tsx
function ErrorFallback (line 26) | function ErrorFallback({ error }: { error: Error }) {
function MarkdownRenderer (line 36) | function MarkdownRenderer({ source }: { source: string }) {
function MarkdownContent (line 44) | function MarkdownContent({ source }: { source: string }) {
FILE: 2025-09-30-dyanmic-schemas/frontend/components/markdown/shiki-grammars.ts
function convertTextmateToShiki (line 14) | function convertTextmateToShiki(
FILE: 2025-09-30-dyanmic-schemas/frontend/components/ui/badge.tsx
function Badge (line 28) | function Badge({
FILE: 2025-09-30-dyanmic-schemas/frontend/components/ui/button.tsx
function Button (line 37) | function Button({
FILE: 2025-09-30-dyanmic-schemas/frontend/components/ui/card.tsx
function Card (line 5) | function Card({ className, ...props }: React.ComponentProps<"div">) {
function CardHeader (line 18) | function CardHeader({ className, ...props }: React.ComponentProps<"div">) {
function CardTitle (line 28) | function CardTitle({ className, ...props }: React.ComponentProps<"div">) {
function CardDescription (line 38) | function CardDescription({ className, ...props }: React.ComponentProps<"...
function CardContent (line 48) | function CardContent({ className, ...props }: React.ComponentProps<"div"...
function CardFooter (line 58) | function CardFooter({ className, ...props }: React.ComponentProps<"div">) {
FILE: 2025-09-30-dyanmic-schemas/frontend/components/ui/input.tsx
function Input (line 5) | function Input({ className, type, ...props }: React.ComponentProps<"inpu...
FILE: 2025-09-30-dyanmic-schemas/frontend/components/ui/separator.tsx
function Separator (line 8) | function Separator({
FILE: 2025-09-30-dyanmic-schemas/frontend/components/ui/table.tsx
function Table (line 7) | function Table({ className, ...props }: React.ComponentProps<"table">) {
function TableHeader (line 22) | function TableHeader({ className, ...props }: React.ComponentProps<"thea...
function TableBody (line 32) | function TableBody({ className, ...props }: React.ComponentProps<"tbody"...
function TableFooter (line 42) | function TableFooter({ className, ...props }: React.ComponentProps<"tfoo...
function TableRow (line 55) | function TableRow({ className, ...props }: React.ComponentProps<"tr">) {
function TableHead (line 68) | function TableHead({ className, ...props }: React.ComponentProps<"th">) {
function TableCell (line 81) | function TableCell({ className, ...props }: React.ComponentProps<"td">) {
function TableCaption (line 94) | function TableCaption({
FILE: 2025-09-30-dyanmic-schemas/frontend/components/ui/tabs.tsx
function Tabs (line 8) | function Tabs({
function TabsList (line 21) | function TabsList({
function TabsTrigger (line 37) | function TabsTrigger({
function TabsContent (line 53) | function TabsContent({
FILE: 2025-09-30-dyanmic-schemas/frontend/components/ui/textarea.tsx
function Textarea (line 5) | function Textarea({ className, ...props }: React.ComponentProps<"textare...
FILE: 2025-09-30-dyanmic-schemas/frontend/lib/utils.ts
function cn (line 4) | function cn(...inputs: ClassValue[]) {
function fetchSSE (line 17) | async function fetchSSE<PartialType, FinalType>(url: string, formData: F...
FILE: 2025-10-12-unconference-sf/dex-ralph-demo/prisma/migrations/20251012214243_init/migration.sql
type "User" (line 2) | CREATE TABLE "User" (
type "Session" (line 13) | CREATE TABLE "Session" (
type "Account" (line 26) | CREATE TABLE "Account" (
type "Verification" (line 41) | CREATE TABLE "Verification" (
type "User" (line 51) | CREATE UNIQUE INDEX "User_email_key" ON "User"("email")
type "Session" (line 54) | CREATE UNIQUE INDEX "Session_token_key" ON "Session"("token")
type "Session" (line 57) | CREATE INDEX "Session_userId_idx" ON "Session"("userId")
type "Account" (line 60) | CREATE INDEX "Account_userId_idx" ON "Account"("userId")
type "Account" (line 63) | CREATE UNIQUE INDEX "Account_providerId_accountId_key" ON "Account"("pro...
type "Verification" (line 66) | CREATE UNIQUE INDEX "Verification_identifier_value_key" ON "Verification...
FILE: 2025-10-12-unconference-sf/dex-ralph-demo/src/app/api/auth/[...all]/route.ts
constant GET (line 3) | const GET = auth.handler;
constant POST (line 4) | const POST = auth.handler;
FILE: 2025-10-12-unconference-sf/dex-ralph-demo/src/app/dashboard/page.tsx
function DashboardPage (line 7) | async function DashboardPage() {
FILE: 2025-10-12-unconference-sf/dex-ralph-demo/src/app/dashboard/sign-out-button.tsx
function SignOutButton (line 7) | function SignOutButton() {
FILE: 2025-10-12-unconference-sf/dex-ralph-demo/src/app/layout.tsx
function RootLayout (line 20) | function RootLayout({
FILE: 2025-10-12-unconference-sf/dex-ralph-demo/src/app/login/page.tsx
function LoginPage (line 7) | function LoginPage() {
FILE: 2025-10-12-unconference-sf/dex-ralph-demo/src/app/page.tsx
function Home (line 3) | function Home() {
FILE: 2025-10-12-unconference-sf/dex-ralph-demo/src/lib/auth.ts
type Session (line 41) | type Session = typeof auth.$Infer.Session;
FILE: 2025-10-21-agentic-rag-context-engineering/agent_runtime.py
class AgentState (line 17) | class AgentState:
class AgentCallbacks (line 28) | class AgentCallbacks:
class AgentRuntime (line 39) | class AgentRuntime:
method __init__ (line 42) | def __init__(self, state: AgentState, callbacks: Optional[AgentCallbac...
method execute_tool (line 47) | async def execute_tool(self, tool: types.AgentTools, depth: int = 0) -...
method execute_sub_agent (line 55) | async def execute_sub_agent(self, tool: types.AgentTool, parent_depth:...
method run_iteration (line 146) | async def run_iteration(self, depth: int = 0) -> tuple[bool, Optional[...
method run_loop (line 256) | async def run_loop(self, user_message: str, max_iterations: int = 999,...
FILE: 2025-10-21-agentic-rag-context-engineering/main.py
function execute_bash (line 17) | def execute_bash(tool: types.BashTool, working_dir: str = ".") -> str:
function execute_glob (line 42) | def execute_glob(tool: types.GlobTool, working_dir: str = ".") -> str:
function execute_grep (line 78) | def execute_grep(tool: types.GrepTool, working_dir: str = ".") -> str:
function execute_ls (line 128) | def execute_ls(tool: types.LSTool, working_dir: str = ".") -> str:
function execute_read (line 160) | def execute_read(tool: types.ReadTool, working_dir: str = ".") -> str:
function execute_edit (line 203) | def execute_edit(tool: types.EditTool, working_dir: str = ".") -> str:
function execute_multi_edit (line 238) | def execute_multi_edit(tool: types.MultiEditTool, working_dir: str = "."...
function execute_write (line 272) | def execute_write(tool: types.WriteTool, working_dir: str = ".") -> str:
function execute_notebook_read (line 292) | def execute_notebook_read(tool: types.NotebookReadTool, working_dir: str...
function execute_notebook_edit (line 319) | def execute_notebook_edit(tool: types.NotebookEditTool, working_dir: str...
function execute_web_fetch (line 367) | def execute_web_fetch(tool: types.WebFetchTool, working_dir: str = ".") ...
function execute_todo_read (line 398) | def execute_todo_read(tool: types.TodoReadTool, working_dir: str = ".") ...
function execute_todo_write (line 413) | def execute_todo_write(tool: types.TodoWriteTool, working_dir: str = "."...
function execute_web_search (line 428) | def execute_web_search(tool: types.WebSearchTool, working_dir: str = "."...
function execute_exit_plan_mode (line 477) | def execute_exit_plan_mode(tool: types.ExitPlanModeTool, working_dir: st...
function execute_agent (line 482) | async def execute_agent(tool: types.AgentTool) -> str:
function execute_tool (line 496) | async def execute_tool(tool: types.AgentTools, working_dir: str = ".") -...
function agent_loop (line 535) | async def agent_loop(user_message: str, max_iterations: int = 999, worki...
function print_iteration (line 560) | async def print_iteration(iteration: int, depth: int) -> None:
function print_tool_start (line 568) | async def print_tool_start(tool_name: str, params: dict, tool_idx: int, ...
function print_tool_result (line 582) | async def print_tool_result(result: str, depth: int) -> None:
function main (line 591) | def main():
FILE: 2025-10-21-agentic-rag-context-engineering/tui.py
class StatusBar (line 22) | class StatusBar(Static):
method __init__ (line 25) | def __init__(self):
method update_status (line 31) | def update_status(self, status: str, iteration: Optional[int] = None):
method render (line 37) | def render(self) -> Text:
class TodoPanel (line 50) | class TodoPanel(Static):
method render (line 53) | def render(self) -> Panel:
class AgentLog (line 81) | class AgentLog(RichLog):
method __init__ (line 84) | def __init__(self):
method log_user (line 88) | def log_user(self, query: str):
method log_iteration (line 95) | def log_iteration(self, iteration: int):
method log_tool (line 99) | def log_tool(self, tool_name: str, params: dict):
method log_result (line 122) | def log_result(self, result: str):
method log_agent_reply (line 137) | def log_agent_reply(self, message: str):
method log_error (line 144) | def log_error(self, error: str):
class CommandInput (line 152) | class CommandInput(Input):
method __init__ (line 155) | def __init__(self):
class BAMMYApp (line 162) | class BAMMYApp(App):
method __init__ (line 216) | def __init__(self, working_dir: Optional[str] = None, initial_query: O...
method compose (line 241) | def compose(self) -> ComposeResult:
method on_mount (line 265) | def on_mount(self) -> None:
method on_input_submitted (line 288) | async def on_input_submitted(self, event: Input.Submitted) -> None:
method action_reset_conversation (line 303) | def action_reset_conversation(self) -> None:
method action_interrupt_agent (line 321) | def action_interrupt_agent(self) -> None:
method on_iteration (line 337) | async def on_iteration(self, iteration: int, depth: int) -> None:
method on_tool_start (line 346) | async def on_tool_start(self, tool_name: str, params: dict, tool_idx: ...
method on_tool_result (line 355) | async def on_tool_result(self, result: str, depth: int) -> None:
method on_agent_reply (line 373) | async def on_agent_reply(self, message: str) -> None:
method on_status_update (line 378) | async def on_status_update(self, status: str, iteration: int) -> None:
method on_sub_agent_start (line 385) | async def on_sub_agent_start(self, description: str, prompt: str, dept...
method on_sub_agent_complete (line 399) | async def on_sub_agent_complete(self, result: str, depth: int) -> None:
method process_command (line 409) | async def process_command(self, query: str) -> None:
function run_tui (line 460) | def run_tui(working_dir: Optional[str] = None, initial_query: Optional[s...
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/prisma/migrations/20251028172009_init/migration.sql
type "User" (line 2) | CREATE TABLE "User" (
type "Todo" (line 11) | CREATE TABLE "Todo" (
type "List" (line 25) | CREATE TABLE "List" (
type "ListShare" (line 35) | CREATE TABLE "ListShare" (
type "Comment" (line 45) | CREATE TABLE "Comment" (
type "Reaction" (line 56) | CREATE TABLE "Reaction" (
type "User" (line 67) | CREATE UNIQUE INDEX "User_email_key" ON "User"("email")
type "Todo" (line 70) | CREATE INDEX "Todo_userId_idx" ON "Todo"("userId")
type "Todo" (line 73) | CREATE INDEX "Todo_listId_idx" ON "Todo"("listId")
type "List" (line 76) | CREATE INDEX "List_userId_idx" ON "List"("userId")
type "ListShare" (line 79) | CREATE INDEX "ListShare_listId_idx" ON "ListShare"("listId")
type "ListShare" (line 82) | CREATE INDEX "ListShare_userId_idx" ON "ListShare"("userId")
type "ListShare" (line 85) | CREATE UNIQUE INDEX "ListShare_listId_userId_key" ON "ListShare"("listId...
type "Comment" (line 88) | CREATE INDEX "Comment_todoId_idx" ON "Comment"("todoId")
type "Comment" (line 91) | CREATE INDEX "Comment_userId_idx" ON "Comment"("userId")
type "Reaction" (line 94) | CREATE INDEX "Reaction_todoId_idx" ON "Reaction"("todoId")
type "Reaction" (line 97) | CREATE INDEX "Reaction_userId_idx" ON "Reaction"("userId")
type "Reaction" (line 100) | CREATE UNIQUE INDEX "Reaction_todoId_userId_emoji_key" ON "Reaction"("to...
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/prisma/migrations/20251028183716_add_priority_to_todos/migration.sql
type "new_Todo" (line 4) | CREATE TABLE "new_Todo" (
type "Todo" (line 21) | CREATE INDEX "Todo_userId_idx" ON "Todo"("userId")
type "Todo" (line 22) | CREATE INDEX "Todo_listId_idx" ON "Todo"("listId")
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/prisma/migrations/20251028190218_add_notifications/migration.sql
type "Notification" (line 2) | CREATE TABLE "Notification" (
type "Notification" (line 19) | CREATE INDEX "Notification_userId_idx" ON "Notification"("userId")
type "Notification" (line 22) | CREATE INDEX "Notification_todoId_idx" ON "Notification"("todoId")
type "Notification" (line 25) | CREATE INDEX "Notification_listId_idx" ON "Notification"("listId")
type "Notification" (line 28) | CREATE INDEX "Notification_actorId_idx" ON "Notification"("actorId")
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/prisma/migrations/20251028191557_add_recurring_todos/migration.sql
type "new_Todo" (line 4) | CREATE TABLE "new_Todo" (
type "Todo" (line 25) | CREATE INDEX "Todo_userId_idx" ON "Todo"("userId")
type "Todo" (line 26) | CREATE INDEX "Todo_listId_idx" ON "Todo"("listId")
type "Todo" (line 27) | CREATE INDEX "Todo_parentRecurringTodoId_idx" ON "Todo"("parentRecurring...
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/prisma/migrations/20251028192204_add_attachments/migration.sql
type "Attachment" (line 2) | CREATE TABLE "Attachment" (
type "Attachment" (line 16) | CREATE INDEX "Attachment_todoId_idx" ON "Attachment"("todoId")
type "Attachment" (line 19) | CREATE INDEX "Attachment_userId_idx" ON "Attachment"("userId")
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/prisma/migrations/20251028193702_add_templates/migration.sql
type "Template" (line 2) | CREATE TABLE "Template" (
type "Template" (line 16) | CREATE INDEX "Template_userId_idx" ON "Template"("userId")
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/prisma/migrations/20251028194458_add_email_notification_preferences/migration.sql
type "new_User" (line 4) | CREATE TABLE "new_User" (
type "User" (line 15) | CREATE UNIQUE INDEX "User_email_key" ON "User"("email")
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/prisma/migrations/20251028195051_add_email_digests/migration.sql
type "new_Notification" (line 7) | CREATE TABLE "new_Notification" (
type "Notification" (line 26) | CREATE INDEX "Notification_userId_idx" ON "Notification"("userId")
type "Notification" (line 27) | CREATE INDEX "Notification_todoId_idx" ON "Notification"("todoId")
type "Notification" (line 28) | CREATE INDEX "Notification_listId_idx" ON "Notification"("listId")
type "Notification" (line 29) | CREATE INDEX "Notification_actorId_idx" ON "Notification"("actorId")
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/prisma/migrations/20251028200059_add_digest_customization/migration.sql
type "new_User" (line 4) | CREATE TABLE "new_User" (
type "User" (line 22) | CREATE UNIQUE INDEX "User_email_key" ON "User"("email")
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/prisma/migrations/20251028201814_add_activity_log/migration.sql
type "ActivityLog" (line 2) | CREATE TABLE "ActivityLog" (
type "ActivityLog" (line 17) | CREATE INDEX "ActivityLog_userId_idx" ON "ActivityLog"("userId")
type "ActivityLog" (line 20) | CREATE INDEX "ActivityLog_todoId_idx" ON "ActivityLog"("todoId")
type "ActivityLog" (line 23) | CREATE INDEX "ActivityLog_listId_idx" ON "ActivityLog"("listId")
type "ActivityLog" (line 26) | CREATE INDEX "ActivityLog_createdAt_idx" ON "ActivityLog"("createdAt")
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/prisma/migrations/20251028203200_add_custom_recurrence_patterns/migration.sql
type "new_Template" (line 4) | CREATE TABLE "new_Template" (
type "Template" (line 25) | CREATE INDEX "Template_userId_idx" ON "Template"("userId")
type "new_Todo" (line 26) | CREATE TABLE "new_Todo" (
type "Todo" (line 53) | CREATE INDEX "Todo_userId_idx" ON "Todo"("userId")
type "Todo" (line 54) | CREATE INDEX "Todo_listId_idx" ON "Todo"("listId")
type "Todo" (line 55) | CREATE INDEX "Todo_parentRecurringTodoId_idx" ON "Todo"("parentRecurring...
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/prisma/migrations/20251029150838_add_todo_dependencies/migration.sql
type "TodoDependency" (line 2) | CREATE TABLE "TodoDependency" (
type "TodoDependency" (line 12) | CREATE INDEX "TodoDependency_todoId_idx" ON "TodoDependency"("todoId")
type "TodoDependency" (line 15) | CREATE INDEX "TodoDependency_dependsOnTodoId_idx" ON "TodoDependency"("d...
type "TodoDependency" (line 18) | CREATE UNIQUE INDEX "TodoDependency_todoId_dependsOnTodoId_key" ON "Todo...
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/app/actions/comments.ts
type CommentWithUser (line 10) | interface CommentWithUser extends Comment {
type ReactionWithUser (line 18) | interface ReactionWithUser extends Reaction {
function requireAuth (line 26) | async function requireAuth() {
function getTodoNotificationRecipients (line 34) | async function getTodoNotificationRecipients(
function createComment (line 86) | async function createComment(
function getCommentsByTodo (line 144) | async function getCommentsByTodo(
function deleteComment (line 179) | async function deleteComment(
function toggleReaction (line 232) | async function toggleReaction(
function getReactionsByTodo (line 315) | async function getReactionsByTodo(todoId: string): Promise<{
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/app/actions/lists.ts
type ListWithUser (line 10) | interface ListWithUser extends List {
type CreateListInput (line 18) | interface CreateListInput {
type UpdateListInput (line 22) | interface UpdateListInput {
function requireAuth (line 26) | async function requireAuth() {
function createList (line 34) | async function createList(
function getLists (line 69) | async function getLists(): Promise<{
function getList (line 108) | async function getList(
function updateList (line 147) | async function updateList(
function deleteList (line 202) | async function deleteList(
function shareList (line 242) | async function shareList(
function unshareList (line 326) | async function unshareList(
function getListShares (line 374) | async function getListShares(listId: string): Promise<{
function getCurrentUserId (line 423) | async function getCurrentUserId(): Promise<{
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/app/actions/templates.ts
type CreateTemplateInput (line 13) | interface CreateTemplateInput {
type UpdateTemplateInput (line 27) | interface UpdateTemplateInput {
function requireAuth (line 41) | async function requireAuth() {
function createTemplate (line 49) | async function createTemplate(
function getTemplates (line 92) | async function getTemplates(): Promise<{
function getTemplate (line 120) | async function getTemplate(
function updateTemplate (line 148) | async function updateTemplate(
function deleteTemplate (line 224) | async function deleteTemplate(
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/app/actions/todos.ts
type TodoWithUser (line 19) | interface TodoWithUser extends Todo {
type CreateTodoInput (line 27) | interface CreateTodoInput {
type UpdateTodoInput (line 44) | interface UpdateTodoInput {
type BatchUpdateResult (line 61) | interface BatchUpdateResult {
type BatchDeleteResult (line 68) | interface BatchDeleteResult {
function requireAuth (line 75) | async function requireAuth() {
function createNextRecurringInstance (line 83) | async function createNextRecurringInstance(
function getNotificationRecipients (line 159) | async function getNotificationRecipients(
function createTodo (line 186) | async function createTodo(
function getTodos (line 250) | async function getTodos(filters?: {
function getTodo (line 335) | async function getTodo(
function updateTodo (line 374) | async function updateTodo(
function deleteTodo (line 588) | async function deleteTodo(
function batchUpdateTodos (line 654) | async function batchUpdateTodos(
function batchDeleteTodos (line 798) | async function batchDeleteTodos(
function updateTodoStatus (line 889) | async function updateTodoStatus(
type TodoDependency (line 896) | interface TodoDependency {
type TodoWithDependencies (line 919) | interface TodoWithDependencies {
function detectCircularDependency (line 924) | async function detectCircularDependency(
function addTodoDependency (line 957) | async function addTodoDependency(
function removeTodoDependency (line 1111) | async function removeTodoDependency(
function getTodoDependencies (line 1224) | async function getTodoDependencies(todoId: string): Promise<{
type TodoNodeData (line 1305) | interface TodoNodeData extends Record<string, unknown> {
type DependencyGraphData (line 1318) | interface DependencyGraphData {
function getDependencyGraph (line 1326) | async function getDependencyGraph(filters?: {
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/app/api/activity-logs/route.ts
function GET (line 10) | async function GET(request: Request) {
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/app/api/attachments/[id]/route.ts
function GET (line 7) | async function GET(
function DELETE (line 59) | async function DELETE(
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/app/api/attachments/route.ts
function POST (line 6) | async function POST(request: NextRequest) {
function GET (line 75) | async function GET(request: NextRequest) {
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/app/api/auth/login/route.ts
function POST (line 4) | async function POST(request: NextRequest) {
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/app/api/auth/logout/route.ts
function POST (line 4) | async function POST() {
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/app/api/auth/session/route.ts
function GET (line 4) | async function GET() {
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/app/api/auth/verify/route.ts
function GET (line 8) | async function GET(request: NextRequest) {
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/app/api/cron/send-digests/route.ts
function POST (line 11) | async function POST() {
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/app/api/lists/[id]/route.ts
type RouteContext (line 6) | interface RouteContext {
function GET (line 10) | async function GET(_request: NextRequest, context: RouteContext) {
function PUT (line 39) | async function PUT(request: NextRequest, context: RouteContext) {
function DELETE (line 83) | async function DELETE(_request: NextRequest, context: RouteContext) {
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/app/api/lists/route.ts
function POST (line 6) | async function POST(request: NextRequest) {
function GET (line 42) | async function GET() {
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/app/api/notifications/[id]/route.ts
type RouteContext (line 5) | interface RouteContext {
function PATCH (line 9) | async function PATCH(_request: NextRequest, context: RouteContext) {
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/app/api/notifications/route.ts
function GET (line 5) | async function GET() {
function PATCH (line 35) | async function PATCH() {
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/app/api/notifications/unread-count/route.ts
function GET (line 5) | async function GET() {
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/app/api/settings/notification-preferences/route.ts
function GET (line 8) | async function GET() {
constant VALID_FREQUENCIES (line 41) | const VALID_FREQUENCIES = ["IMMEDIATE", "DAILY", "WEEKLY", "NEVER"] as c...
type NotificationFrequency (line 42) | type NotificationFrequency = (typeof VALID_FREQUENCIES)[number];
function PATCH (line 44) | async function PATCH(request: NextRequest) {
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/app/api/todos/[id]/route.ts
type RouteContext (line 6) | interface RouteContext {
function GET (line 10) | async function GET(_request: NextRequest, context: RouteContext) {
function PUT (line 39) | async function PUT(request: NextRequest, context: RouteContext) {
function DELETE (line 110) | async function DELETE(_request: NextRequest, context: RouteContext) {
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/app/api/todos/route.ts
function POST (line 6) | async function POST(request: NextRequest) {
function GET (line 69) | async function GET() {
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/app/layout.tsx
function RootLayout (line 20) | function RootLayout({
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/app/login/page.tsx
function LoginPage (line 8) | function LoginPage() {
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/app/page.tsx
type ViewMode (line 17) | type ViewMode = "list" | "kanban" | "graph";
function Home (line 19) | function Home() {
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/app/verify/page.tsx
function VerifyPage (line 7) | function VerifyPage() {
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/components/activity-logs/ActivityLogList.tsx
type ActivityLog (line 6) | interface ActivityLog {
type ActivityLogListProps (line 27) | interface ActivityLogListProps {
function formatTimeAgo (line 33) | function formatTimeAgo(dateString: string): string {
function getActivityIcon (line 53) | function getActivityIcon(activityType: ActivityType): string {
function ActivityLogList (line 100) | function ActivityLogList({
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/components/attachments/AttachmentList.tsx
type AttachmentListProps (line 6) | interface AttachmentListProps {
function AttachmentList (line 11) | function AttachmentList({
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/components/attachments/FileUpload.tsx
type FileUploadProps (line 5) | interface FileUploadProps {
function FileUpload (line 10) | function FileUpload({
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/components/auth/LoginForm.tsx
type LoginFormProps (line 5) | interface LoginFormProps {
function LoginForm (line 9) | function LoginForm({ onSuccess }: LoginFormProps) {
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/components/auth/LogoutButton.tsx
type LogoutButtonProps (line 6) | interface LogoutButtonProps {
function LogoutButton (line 10) | function LogoutButton({ className = "" }: LogoutButtonProps) {
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/components/common/KeyboardShortcutsHelp.tsx
type KeyboardShortcutsHelpProps (line 5) | interface KeyboardShortcutsHelpProps {
type Shortcut (line 10) | interface Shortcut {
type ShortcutCategory (line 15) | interface ShortcutCategory {
constant SHORTCUTS (line 20) | const SHORTCUTS: ShortcutCategory[] = [
function KeyboardShortcutsHelp (line 45) | function KeyboardShortcutsHelp({
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/components/dependencies/DependencyList.tsx
type DependencyListProps (line 7) | interface DependencyListProps {
function DependencyList (line 13) | function DependencyList({
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/components/dependencies/DependencySelector.tsx
type DependencySelectorProps (line 7) | interface DependencySelectorProps {
function DependencySelector (line 12) | function DependencySelector({
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/components/graph/GraphView.tsx
type GraphViewProps (line 30) | interface GraphViewProps {
function GraphView (line 72) | function GraphView({ lists }: GraphViewProps) {
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/components/graph/GraphViewWrapper.tsx
type GraphViewWrapperProps (line 7) | interface GraphViewWrapperProps {
function GraphViewWrapper (line 11) | function GraphViewWrapper({ lists }: GraphViewWrapperProps) {
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/components/graph/TodoNode.tsx
type TodoNodeData (line 8) | interface TodoNodeData extends Record<string, unknown> {
constant STATUS_COLORS (line 19) | const STATUS_COLORS: Record<TodoStatus, string> = {
constant PRIORITY_COLORS (line 26) | const PRIORITY_COLORS: Record<TodoPriority, string> = {
constant PRIORITY_LABELS (line 34) | const PRIORITY_LABELS: Record<TodoPriority, string> = {
function TodoNode (line 42) | function TodoNode({ data }: { data: TodoNodeData }) {
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/components/lists/ListForm.tsx
type ListFormProps (line 7) | interface ListFormProps {
function ListForm (line 13) | function ListForm({ list, onSuccess, onCancel }: ListFormProps) {
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/components/lists/ListItem.tsx
type ListItemProps (line 10) | interface ListItemProps {
function ListItem (line 16) | function ListItem({
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/components/lists/ListManagement.tsx
function ListManagement (line 9) | function ListManagement() {
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/components/lists/ListSelector.tsx
type ListSelectorProps (line 7) | interface ListSelectorProps {
function ListSelector (line 13) | function ListSelector({
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/components/lists/ShareListForm.tsx
type ShareListFormProps (line 6) | interface ShareListFormProps {
function ShareListForm (line 12) | function ShareListForm({
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/components/lists/SharedUsersList.tsx
type Share (line 6) | interface Share {
type SharedUsersListProps (line 15) | interface SharedUsersListProps {
function SharedUsersList (line 20) | function SharedUsersList({
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/components/notifications/NotificationBell.tsx
type NotificationBellProps (line 5) | interface NotificationBellProps {
function NotificationBell (line 9) | function NotificationBell({
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/components/notifications/NotificationList.tsx
type Notification (line 5) | interface Notification {
type NotificationListProps (line 13) | interface NotificationListProps {
function formatTimeAgo (line 17) | function formatTimeAgo(dateString: string): string {
function NotificationList (line 37) | function NotificationList({ onClose }: NotificationListProps) {
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/components/settings/NotificationPreferences.tsx
type NotificationPreference (line 5) | type NotificationPreference = "IMMEDIATE" | "DAILY" | "WEEKLY" | "NEVER";
type DigestCustomization (line 7) | interface DigestCustomization {
type NotificationPreferencesResponse (line 16) | interface NotificationPreferencesResponse {
constant PREFERENCE_OPTIONS (line 21) | const PREFERENCE_OPTIONS: NotificationPreference[] = [
constant PREFERENCE_DESCRIPTIONS (line 28) | const PREFERENCE_DESCRIPTIONS: Record<NotificationPreference, string> = {
constant DIGEST_OPTION_LABELS (line 35) | const DIGEST_OPTION_LABELS: Record<keyof DigestCustomization, string> = {
function NotificationPreferences (line 44) | function NotificationPreferences() {
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/components/templates/TemplateForm.tsx
type TemplateFormProps (line 13) | interface TemplateFormProps {
constant PRIORITY_OPTIONS (line 19) | const PRIORITY_OPTIONS: TodoPriority[] = [
constant RECURRENCE_OPTIONS (line 27) | const RECURRENCE_OPTIONS: RecurrencePattern[] = [
function TemplateForm (line 35) | function TemplateForm({
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/components/templates/TemplateItem.tsx
type TemplateItemProps (line 9) | interface TemplateItemProps {
function TemplateItem (line 14) | function TemplateItem({
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/components/templates/TemplateManagement.tsx
function TemplateManagement (line 9) | function TemplateManagement() {
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/components/templates/TemplateSelector.tsx
type TemplateSelectorProps (line 7) | interface TemplateSelectorProps {
function TemplateSelector (line 14) | function TemplateSelector({
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/components/todos/BatchActionBar.tsx
type BatchActionBarProps (line 7) | interface BatchActionBarProps {
constant STATUS_OPTIONS (line 18) | const STATUS_OPTIONS: TodoStatus[] = ["TODO", "DOING", "DONE", "CANCELLE...
constant PRIORITY_OPTIONS (line 19) | const PRIORITY_OPTIONS: TodoPriority[] = [
function BatchActionBar (line 27) | function BatchActionBar({
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/components/todos/CommentThread.tsx
type CommentThreadProps (line 12) | interface CommentThreadProps {
function CommentThread (line 17) | function CommentThread({
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/components/todos/KanbanBoard.tsx
constant KANBAN_COLUMNS (line 19) | const KANBAN_COLUMNS: { status: TodoStatus; label: string; color: string...
constant PRIORITY_FILTER_OPTIONS (line 34) | const PRIORITY_FILTER_OPTIONS = [
constant DUE_DATE_FILTER_OPTIONS (line 43) | const DUE_DATE_FILTER_OPTIONS = [
function KanbanBoard (line 51) | function KanbanBoard() {
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/components/todos/KanbanCard.tsx
constant PRIORITY_COLORS (line 16) | const PRIORITY_COLORS: Record<TodoPriority, string> = {
constant PRIORITY_LABELS (line 24) | const PRIORITY_LABELS: Record<TodoPriority, string> = {
type KanbanCardProps (line 32) | interface KanbanCardProps {
function KanbanCard (line 41) | function KanbanCard({
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/components/todos/ReactionBar.tsx
type ReactionBarProps (line 7) | interface ReactionBarProps {
type GroupedReaction (line 13) | interface GroupedReaction {
constant COMMON_EMOJIS (line 20) | const COMMON_EMOJIS = ["👍", "❤️", "😄", "😮", "😢", "🎉", "🚀", "👏"];
function ReactionBar (line 22) | function ReactionBar({
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/components/todos/RecurrenceSelector.tsx
type RecurrenceSelectorProps (line 14) | interface RecurrenceSelectorProps {
constant BASIC_PATTERNS (line 20) | const BASIC_PATTERNS: RecurrencePattern[] = [
function RecurrenceSelector (line 28) | function RecurrenceSelector({
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/components/todos/TodoForm.tsx
type TodoFormProps (line 16) | interface TodoFormProps {
constant PRIORITY_OPTIONS (line 22) | const PRIORITY_OPTIONS: TodoPriority[] = [
constant RECURRENCE_OPTIONS (line 30) | const RECURRENCE_OPTIONS: RecurrencePattern[] = [
function TodoForm (line 38) | function TodoForm({ todo, onSuccess, onCancel }: TodoFormProps) {
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/components/todos/TodoItem.tsx
type TodoItemProps (line 17) | interface TodoItemProps {
constant STATUS_COLORS (line 25) | const STATUS_COLORS: Record<TodoStatus, string> = {
constant PRIORITY_COLORS (line 33) | const PRIORITY_COLORS: Record<TodoPriority, string> = {
constant PRIORITY_LABELS (line 41) | const PRIORITY_LABELS: Record<TodoPriority, string> = {
constant STATUS_OPTIONS (line 49) | const STATUS_OPTIONS: TodoStatus[] = ["TODO", "DOING", "DONE", "CANCELLE...
function TodoItem (line 51) | function TodoItem({
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/components/todos/TodoList.tsx
constant STATUS_FILTER_OPTIONS (line 20) | const STATUS_FILTER_OPTIONS = [
constant PRIORITY_FILTER_OPTIONS (line 28) | const PRIORITY_FILTER_OPTIONS = [
constant DUE_DATE_FILTER_OPTIONS (line 37) | const DUE_DATE_FILTER_OPTIONS = [
function TodoList (line 45) | function TodoList() {
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/lib/activity-log-server.ts
type CreateActivityLogInput (line 6) | interface CreateActivityLogInput {
type ActivityLogWithRelations (line 15) | interface ActivityLogWithRelations {
function createActivityLog (line 39) | async function createActivityLog(
function getActivityLogsForTodo (line 58) | async function getActivityLogsForTodo(
function getActivityLogsForList (line 92) | async function getActivityLogsForList(
function getActivityLogsForUser (line 126) | async function getActivityLogsForUser(
function getRecentActivityLogs (line 160) | async function getRecentActivityLogs(
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/lib/attachments-server.ts
constant UPLOAD_DIR (line 7) | const UPLOAD_DIR = join(process.cwd(), "uploads");
function ensureUploadDir (line 9) | async function ensureUploadDir() {
function createAttachment (line 15) | async function createAttachment(params: {
function getAttachments (line 67) | async function getAttachments(todoId: string): Promise<{
function getAttachment (line 100) | async function getAttachment(id: string): Promise<{
function deleteAttachment (line 134) | async function deleteAttachment(id: string): Promise<{
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/lib/auth-server.ts
type Session (line 10) | interface Session {
type MagicLinkTokenPayload (line 16) | interface MagicLinkTokenPayload {
constant SESSION_COOKIE (line 21) | const SESSION_COOKIE = "session_token";
constant SESSION_DURATION (line 22) | const SESSION_DURATION = 7 * 24 * 60 * 60 * 1000;
constant TOKEN_DURATION (line 23) | const TOKEN_DURATION = 15 * 60;
function createMagicToken (line 25) | function createMagicToken(email: string): string {
function verifyMagicToken (line 33) | function verifyMagicToken(token: string): string | null {
function findOrCreateUser (line 45) | async function findOrCreateUser(email: string): Promise<User> {
function createSession (line 57) | async function createSession(
function getSession (line 79) | async function getSession(): Promise<Session | null> {
function deleteSession (line 94) | async function deleteSession(): Promise<void> {
function sendMagicLink (line 99) | async function sendMagicLink(
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/lib/auth.ts
constant USER_KEY (line 5) | const USER_KEY = "auth_user";
function getUser (line 7) | function getUser(): User | null {
function setUser (line 13) | function setUser(user: User): void {
function clearUser (line 18) | function clearUser(): void {
function isAuthenticated (line 23) | function isAuthenticated(): boolean {
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/lib/comments-server.ts
function createComment (line 10) | async function createComment(
function getCommentsByTodo (line 51) | async function getCommentsByTodo(
function deleteComment (line 78) | async function deleteComment(
function toggleReaction (line 117) | async function toggleReaction(
function getReactionsByTodo (line 163) | async function getReactionsByTodo(
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/lib/config.ts
type Config (line 1) | interface Config {
function getEnvVar (line 18) | function getEnvVar(key: string): string {
function getEnvVarWithDefault (line 26) | function getEnvVarWithDefault(key: string, defaultValue: string): string {
function loadConfig (line 30) | function loadConfig(): Config {
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/lib/digest-notifications-server.ts
type UnsentNotificationsResult (line 4) | interface UnsentNotificationsResult {
type MarkDigestedResult (line 10) | interface MarkDigestedResult {
type UpdateDigestResult (line 16) | interface UpdateDigestResult {
type GroupedNotifications (line 21) | interface GroupedNotifications {
function getUnsentDigestNotifications (line 25) | async function getUnsentDigestNotifications(
function markNotificationsAsDigested (line 60) | async function markNotificationsAsDigested(
function shouldSendDailyDigest (line 85) | function shouldSendDailyDigest(lastDigestSentAt: Date | null): boolean {
function shouldSendWeeklyDigest (line 97) | function shouldSendWeeklyDigest(lastDigestSentAt: Date | null): boolean {
function updateLastDigestSentAt (line 109) | async function updateLastDigestSentAt(
function groupNotificationsByType (line 130) | function groupNotificationsByType(
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/lib/email-digests.ts
function getResend (line 7) | function getResend(): Resend {
type GroupedNotifications (line 14) | interface GroupedNotifications {
function groupNotificationsByType (line 23) | function groupNotificationsByType(
function getNotificationTypeLabel (line 42) | function getNotificationTypeLabel(type: NotificationType): string {
function getNotificationTypeColor (line 54) | function getNotificationTypeColor(type: NotificationType): string {
function getSummaryStats (line 66) | function getSummaryStats(grouped: GroupedNotifications): string[] {
function buildNotificationSectionHtml (line 103) | function buildNotificationSectionHtml(
function getDigestEmailHtml (line 135) | function getDigestEmailHtml(
function buildNotificationSectionText (line 188) | function buildNotificationSectionText(
function getDigestEmailText (line 207) | function getDigestEmailText(
function sendDigestEmail (line 245) | async function sendDigestEmail(
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/lib/email-notifications.ts
function getResend (line 8) | function getResend(): Resend {
function getTodoCreatedHtml (line 16) | function getTodoCreatedHtml(
function getTodoCreatedText (line 54) | function getTodoCreatedText(
function getTodoUpdatedHtml (line 73) | function getTodoUpdatedHtml(
function getTodoUpdatedText (line 111) | function getTodoUpdatedText(
function getTodoDeletedHtml (line 130) | function getTodoDeletedHtml(
function getTodoDeletedText (line 168) | function getTodoDeletedText(
function getTodoCommentedHtml (line 187) | function getTodoCommentedHtml(
function getTodoCommentedText (line 225) | function getTodoCommentedText(
function getTodoReactedHtml (line 244) | function getTodoReactedHtml(
function getTodoReactedText (line 282) | function getTodoReactedText(
function getListSharedHtml (line 301) | function getListSharedHtml(
function getListSharedText (line 339) | function getListSharedText(
function sendTodoCreatedNotification (line 358) | async function sendTodoCreatedNotification(
function sendTodoUpdatedNotification (line 385) | async function sendTodoUpdatedNotification(
function sendTodoDeletedNotification (line 412) | async function sendTodoDeletedNotification(
function sendTodoCommentedNotification (line 439) | async function sendTodoCommentedNotification(
function sendTodoReactedNotification (line 466) | async function sendTodoReactedNotification(
function sendListSharedNotification (line 493) | async function sendListSharedNotification(
function sendNotification (line 521) | async function sendNotification(
function shouldSendDailyDigest (line 559) | function shouldSendDailyDigest(lastDigestSentAt: Date | null): boolean {
function shouldSendWeeklyDigest (line 569) | function shouldSendWeeklyDigest(lastDigestSentAt: Date | null): boolean {
function getUnsentDigestNotifications (line 579) | async function getUnsentDigestNotifications(userId: string) {
function getDigestEmailHtml (line 589) | function getDigestEmailHtml(
function getDigestEmailText (line 636) | function getDigestEmailText(
function sendDigestEmail (line 661) | async function sendDigestEmail(
function markNotificationsAsDigested (line 695) | async function markNotificationsAsDigested(
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/lib/email.ts
function getResend (line 8) | function getResend(): Resend {
function getMagicLinkEmailTemplate (line 15) | function getMagicLinkEmailTemplate(magicLink: string): string {
function getMagicLinkEmailText (line 52) | function getMagicLinkEmailText(magicLink: string): string {
function getNotificationEmailTemplate (line 64) | function getNotificationEmailTemplate(
function getNotificationEmailText (line 97) | function getNotificationEmailText(message: string, actionUrl: string): s...
function getNotificationEmailSubject (line 107) | function getNotificationEmailSubject(
function sendMagicLinkEmail (line 121) | async function sendMagicLinkEmail(
function sendNotificationEmail (line 157) | async function sendNotificationEmail(
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/lib/hooks/useKeyboardShortcuts.ts
type KeyboardShortcutHandler (line 3) | type KeyboardShortcutHandler = (event: KeyboardEvent) => void;
type KeyboardShortcutConfig (line 5) | interface KeyboardShortcutConfig {
type UseKeyboardShortcutsOptions (line 9) | interface UseKeyboardShortcutsOptions {
function useKeyboardShortcuts (line 65) | function useKeyboardShortcuts(
FILE: 2025-10-28-ralph-wiggum-coding-agent-power-tools/webapp/src/lib/lists-server.ts
function createList (line 12) | async function createList(
function getList (line 33) | async function getLis
Copy disabled (too large)
Download .json
Condensed preview — 1856 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (12,956K chars).
[
{
"path": ".claude/commands/complete_episode.md",
"chars": 6686,
"preview": "# Complete Episode Command\n\nThis command updates episode documentation and writes an email after completing a live sessi"
},
{
"path": ".claude/commands/email_prep.md",
"chars": 3543,
"preview": "# Email Generation Command\n\n## Step 1: Determine Target Directory\nIf this command is invoked with no arguments, ask the "
},
{
"path": ".claude/commands/episode_prep.md",
"chars": 4902,
"preview": "---\nname: episode_prep\ndescription: prepare an episode\n---\n\n# Episode Prep Command\n\nThis command prepares the documentat"
},
{
"path": ".claude/commands/find_clips.md",
"chars": 1507,
"preview": "# Find Clips Command\n\nThis command runs a CLI that finds clippable content after completing a live session.\n\n## Overview"
},
{
"path": ".claude/commands/socials.md",
"chars": 1174,
"preview": "\n\n6. **Socials**\n - create a socials.md file in the just-completed episode folder with Twitter posts based on the whit"
},
{
"path": ".claude/commands/suggest_titles.md",
"chars": 1728,
"preview": "# Suggest Titles Command\n\nThis command runs a CLI that suggests episode titles from a transcript after completing a live"
},
{
"path": ".envrc",
"chars": 12,
"preview": "dotenv .env\n"
},
{
"path": ".gitignore",
"chars": 2201,
"preview": "# macOS\n.DS_Store\n\n# baml\nbaml_client/\ntools/.env\n\n\n# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n*$py."
},
{
"path": ".vscode/settings.json",
"chars": 1046,
"preview": "{\n \"python.analysis.typeCheckingMode\": \"basic\",\n \"workbench.colorCustomizations\": {\n \"activityBar.activeBac"
},
{
"path": "2025-03-31-large-scale-classification/.vscode/settings.json",
"chars": 51,
"preview": "{\n \"python.analysis.typeCheckingMode\": \"basic\"\n}"
},
{
"path": "2025-03-31-large-scale-classification/README.md",
"chars": 2233,
"preview": "\n# 🦄 large scale classification\n\n> llms are great at classification from 5, 10, maybe even 50 categories. but how do we"
},
{
"path": "2025-03-31-large-scale-classification/baml_src/clients.baml",
"chars": 1481,
"preview": "// Learn more about clients at https://docs.boundaryml.com/docs/snippets/clients/overview\n\nclient<llm> CustomGPT4o {\n p"
},
{
"path": "2025-03-31-large-scale-classification/baml_src/generators.baml",
"chars": 799,
"preview": "// This helps use auto generate libraries you can use in the language of\n// your choice. You can have multiple generator"
},
{
"path": "2025-03-31-large-scale-classification/baml_src/pick_best_category.baml",
"chars": 980,
"preview": "enum Category {\n @@dynamic\n}\n\nfunction PickBestCategories(text: string, count: int) -> Category[] {\n client \"opena"
},
{
"path": "2025-03-31-large-scale-classification/baml_src/resume.baml",
"chars": 904,
"preview": "// Defining a data model.\nclass Resume {\n name string\n email string\n experience string[]\n skills string[]\n}\n\n// Crea"
},
{
"path": "2025-03-31-large-scale-classification/hello.py",
"chars": 5029,
"preview": "import dotenv\nimport openai\nimport numpy as np\nfrom baml_client import b\nfrom baml_client.type_builder import TypeBuilde"
},
{
"path": "2025-03-31-large-scale-classification/meta.md",
"chars": 586,
"preview": "---\nguid: aitw-001\ntitle: S01E01 – Large Scale Classification\ndescription: LLMs are great at classification from 5, 10, "
},
{
"path": "2025-03-31-large-scale-classification/pyproject.toml",
"chars": 266,
"preview": "[project]\nname = \"large-scale-classification\"\nversion = \"0.1.0\"\ndescription = \"Add your description here\"\nreadme = \"READ"
},
{
"path": "2025-03-31-large-scale-classification/tools.json",
"chars": 100999,
"preview": "{\n \"e2b__run_code\": {\n \"name\": \"e2b__run_code\",\n \"description\": \"Run python code in a secure sandbox by E2B. Usin"
},
{
"path": "2025-04-07-reasoning-models-vs-prompts/.gitignore",
"chars": 480,
"preview": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pn"
},
{
"path": "2025-04-07-reasoning-models-vs-prompts/README.md",
"chars": 1850,
"preview": "\n# 🦄 reasoning models vs reasoning prompts\n\n> models can reason but you can also reason within a prompt. which technique"
},
{
"path": "2025-04-07-reasoning-models-vs-prompts/baml_src/chat_with_graph.baml",
"chars": 10161,
"preview": "class Message {\n role \"user\" | \"assistant\" | \"tool\"\n content string\n}\n\nclass GraphQuery {\n action \"graph_query\""
},
{
"path": "2025-04-07-reasoning-models-vs-prompts/baml_src/clients.baml",
"chars": 1481,
"preview": "// Learn more about clients at https://docs.boundaryml.com/docs/snippets/clients/overview\n\nclient<llm> CustomGPT4o {\n p"
},
{
"path": "2025-04-07-reasoning-models-vs-prompts/baml_src/generators.baml",
"chars": 798,
"preview": "// This helps use auto generate libraries you can use in the language of\n// your choice. You can have multiple generator"
},
{
"path": "2025-04-07-reasoning-models-vs-prompts/baml_src/resume.baml",
"chars": 904,
"preview": "// Defining a data model.\nclass Resume {\n name string\n email string\n experience string[]\n skills string[]\n}\n\n// Crea"
},
{
"path": "2025-04-07-reasoning-models-vs-prompts/eslint.config.mjs",
"chars": 393,
"preview": "import { dirname } from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { FlatCompat } from \"@eslint/eslintrc\";\n\ncon"
},
{
"path": "2025-04-07-reasoning-models-vs-prompts/meta.md",
"chars": 584,
"preview": "---\nguid: aitw-002\ntitle: S01E02 – Reasoning Models vs Reasoning Prompts\ndescription: Models can reason but you can also"
},
{
"path": "2025-04-07-reasoning-models-vs-prompts/next.config.ts",
"chars": 204,
"preview": "import { withBaml } from '@boundaryml/baml-nextjs-plugin';\nimport type { NextConfig } from \"next\";\n\nconst nextConfig: Ne"
},
{
"path": "2025-04-07-reasoning-models-vs-prompts/package.json",
"chars": 812,
"preview": "{\n \"name\": \"2025-04-07-reasoning-models-vs-prompts\",\n \"version\": \"0.1.0\",\n \"private\": true,\n \"scripts\": {\n \"dev\":"
},
{
"path": "2025-04-07-reasoning-models-vs-prompts/postcss.config.mjs",
"chars": 81,
"preview": "const config = {\n plugins: [\"@tailwindcss/postcss\"],\n};\n\nexport default config;\n"
},
{
"path": "2025-04-07-reasoning-models-vs-prompts/src/actions/chat.ts",
"chars": 4595,
"preview": "\"use server\";\n\nimport { moviesSchema } from \"@/lib/graphSchema\";\nimport { Neo4jSession } from \"@/lib/neo4j\";\nimport { b "
},
{
"path": "2025-04-07-reasoning-models-vs-prompts/src/app/globals.css",
"chars": 488,
"preview": "@import \"tailwindcss\";\n\n:root {\n --background: #ffffff;\n --foreground: #171717;\n}\n\n@theme inline {\n --color-backgroun"
},
{
"path": "2025-04-07-reasoning-models-vs-prompts/src/app/layout.tsx",
"chars": 713,
"preview": "import type { Metadata } from \"next\";\nimport { Geist, Geist_Mono } from \"next/font/google\";\nimport \"./globals.css\";\n\ncon"
},
{
"path": "2025-04-07-reasoning-models-vs-prompts/src/app/page.tsx",
"chars": 202,
"preview": "import App from \"@/components/App\";\n\nexport default function Home() {\n return (\n <div className=\"min-h-screen p-8 sm"
},
{
"path": "2025-04-07-reasoning-models-vs-prompts/src/components/App.tsx",
"chars": 10941,
"preview": "\"use client\";\nimport { useState, useRef, useEffect } from \"react\";\nimport { streamChatResponse } from \"@/actions/chat\";\n"
},
{
"path": "2025-04-07-reasoning-models-vs-prompts/src/lib/fakeResponse.ts",
"chars": 1531,
"preview": "import { ChatMessage } from \"@/actions/chat\"\n\nexport type ReplyResponse = {\n action: \"reply\";\n content: string;\n}\n"
},
{
"path": "2025-04-07-reasoning-models-vs-prompts/src/lib/graphSchema.ts",
"chars": 8172,
"preview": "export const moviesSchema = `\n{\n \"nodes\": [\n {\n \"name\": \"_Bloom_Perspective_\",\n \"indexes\": [],\n \"cons"
},
{
"path": "2025-04-07-reasoning-models-vs-prompts/src/lib/neo4j.ts",
"chars": 794,
"preview": "import neo4j, { type Driver, type Session } from 'neo4j-driver';\n\nlet driver: Driver | null = null;\n\nfunction getNeo4jDr"
},
{
"path": "2025-04-07-reasoning-models-vs-prompts/tsconfig.json",
"chars": 602,
"preview": "{\n \"compilerOptions\": {\n \"target\": \"ES2017\",\n \"lib\": [\"dom\", \"dom.iterable\", \"esnext\"],\n \"allowJs\": true,\n "
},
{
"path": "2025-04-15-code-generation-small-models/README.md",
"chars": 1995,
"preview": "\n# 🦄 code generation with small models\n\n> large models can do a lot, but so can small models. we'll discuss techniques f"
},
{
"path": "2025-04-15-code-generation-small-models/agent/README.md",
"chars": 0,
"preview": ""
},
{
"path": "2025-04-15-code-generation-small-models/agent/baml_src/clients.baml",
"chars": 1660,
"preview": "// Learn more about clients at https://docs.boundaryml.com/docs/snippets/clients/overview\n\nclient<llm> CustomGPT4o {\n p"
},
{
"path": "2025-04-15-code-generation-small-models/agent/baml_src/generate_diff.baml",
"chars": 3767,
"preview": "class Diff {\n update_notes string[]\n updated_code string[] @description(#\"\n use triple backticks to allow f"
},
{
"path": "2025-04-15-code-generation-small-models/agent/baml_src/generators.baml",
"chars": 799,
"preview": "// This helps use auto generate libraries you can use in the language of\n// your choice. You can have multiple generator"
},
{
"path": "2025-04-15-code-generation-small-models/agent/baml_src/resume.baml",
"chars": 904,
"preview": "// Defining a data model.\nclass Resume {\n name string\n email string\n experience string[]\n skills string[]\n}\n\n// Crea"
},
{
"path": "2025-04-15-code-generation-small-models/agent/hello.py",
"chars": 424,
"preview": "import ast\n\ndef find_imports(code: str) -> list[str]:\n tree = ast.parse(code)\n for node in ast.walk(tree):\n "
},
{
"path": "2025-04-15-code-generation-small-models/agent/pyproject.toml",
"chars": 230,
"preview": "[project]\nname = \"2025-04-15-code-generation-small-models\"\nversion = \"0.1.0\"\ndescription = \"Add your description here\"\nr"
},
{
"path": "2025-04-15-code-generation-small-models/agent/test_utils.py",
"chars": 599,
"preview": "from utils import load_files, walk_directory\n\ndef test_load_files():\n # Test loading specific files\n files = load_"
},
{
"path": "2025-04-15-code-generation-small-models/agent/utils.py",
"chars": 2035,
"preview": "import os\nfrom pathlib import Path\nfrom typing import Dict, List, Set, Union\n\n# Common patterns to ignore\nDEFAULT_IGNORE"
},
{
"path": "2025-04-15-code-generation-small-models/meta.md",
"chars": 598,
"preview": "---\nguid: aitw-003\ntitle: S01E03 – Code Generation with Small Models\ndescription: Large models can do a lot, but so can "
},
{
"path": "2025-04-15-code-generation-small-models/project/README.md",
"chars": 0,
"preview": ""
},
{
"path": "2025-04-15-code-generation-small-models/project/calculator.py",
"chars": 941,
"preview": "\"\"\"Core calculator logic handling operations and memory.\"\"\"\n\nfrom operations import add, subtract, multiply, divide\n\ncla"
},
{
"path": "2025-04-15-code-generation-small-models/project/hello.py",
"chars": 85,
"preview": "def main():\n print(\"Hello from project!\")\n\n\nif __name__ == \"__main__\":\n main()\n"
},
{
"path": "2025-04-15-code-generation-small-models/project/interface.py",
"chars": 2552,
"preview": "\"\"\"User interface for the calculator application.\"\"\"\n\nfrom calculator import Calculator\n\nclass CalculatorInterface:\n "
},
{
"path": "2025-04-15-code-generation-small-models/project/main.py",
"chars": 209,
"preview": "\"\"\"Main entry point for the calculator application.\"\"\"\n\nfrom interface import CalculatorInterface\n\ndef main():\n calcu"
},
{
"path": "2025-04-15-code-generation-small-models/project/operations.py",
"chars": 470,
"preview": "\"\"\"Basic mathematical operations for the calculator.\"\"\"\n\ndef add(a: float, b: float) -> float:\n \"\"\"Add two numbers.\"\""
},
{
"path": "2025-04-15-code-generation-small-models/project/pyproject.toml",
"chars": 153,
"preview": "[project]\nname = \"project\"\nversion = \"0.1.0\"\ndescription = \"Add your description here\"\nreadme = \"README.md\"\nrequires-pyt"
},
{
"path": "2025-04-22-twelve-factor-agents/README.md",
"chars": 1571,
"preview": "\n# Building a 12 Factor Agent \n\n> In this episode, we dove deep on the theory behind 12 factor agents, before getting ha"
},
{
"path": "2025-04-22-twelve-factor-agents/final/baml_src/agent.baml",
"chars": 2837,
"preview": "// human tools are async requests to a human\ntype HumanTools = ClarificationRequest | DoneForNow\n\nclass ClarificationReq"
},
{
"path": "2025-04-22-twelve-factor-agents/final/baml_src/clients.baml",
"chars": 1481,
"preview": "// Learn more about clients at https://docs.boundaryml.com/docs/snippets/clients/overview\n\nclient<llm> CustomGPT4o {\n p"
},
{
"path": "2025-04-22-twelve-factor-agents/final/baml_src/generators.baml",
"chars": 795,
"preview": "// This helps use auto generate libraries you can use in the language of\n// your choice. You can have multiple generator"
},
{
"path": "2025-04-22-twelve-factor-agents/final/baml_src/tool_calculator.baml",
"chars": 390,
"preview": "type CalculatorTools = AddTool | SubtractTool | MultiplyTool | DivideTool\n\n\nclass AddTool {\n intent \"add\"\n a int |"
},
{
"path": "2025-04-22-twelve-factor-agents/final/package.json",
"chars": 965,
"preview": "{\n \"name\": \"my-agent\",\n \"version\": \"0.1.0\",\n \"private\": true,\n \"scripts\": {\n \"dev\": \"tsx src/index.ts\",\n \"buil"
},
{
"path": "2025-04-22-twelve-factor-agents/final/src/agent.ts",
"chars": 2843,
"preview": "import { AddTool, SubtractTool, DivideTool, MultiplyTool, b } from \"../baml_client\";\n\nexport interface Event {\n type:"
},
{
"path": "2025-04-22-twelve-factor-agents/final/src/cli.ts",
"chars": 1556,
"preview": "// cli.ts lets you invoke the agent loop from the command line\n\nimport { agentLoop, Thread, Event } from \"../src/agent\";"
},
{
"path": "2025-04-22-twelve-factor-agents/final/src/index.ts",
"chars": 175,
"preview": "import { cli } from \"./cli\"\n\nasync function hello(): Promise<void> {\n console.log('hello, world!')\n}\n\nasync function "
},
{
"path": "2025-04-22-twelve-factor-agents/final/src/server.ts",
"chars": 2001,
"preview": "import express from 'express';\nimport { Thread, agentLoop } from '../src/agent';\nimport { ThreadStore } from '../src/sta"
},
{
"path": "2025-04-22-twelve-factor-agents/final/src/state.ts",
"chars": 578,
"preview": "import crypto from 'crypto';\nimport { Thread } from '../src/agent';\n\n\n// you can replace this with any simple state mana"
},
{
"path": "2025-04-22-twelve-factor-agents/final/tsconfig.json",
"chars": 546,
"preview": "{\n \"compilerOptions\": {\n \"target\": \"ES2017\",\n \"lib\": [\"esnext\"],\n \"allowJs\": true,\n \"skipLibCheck\": true,\n "
},
{
"path": "2025-04-22-twelve-factor-agents/meta.md",
"chars": 544,
"preview": "---\nguid: aitw-004\ntitle: S01E04 – Twelve Factor Agents\ndescription: Learn how to build production-ready AI agents using"
},
{
"path": "2025-04-22-twelve-factor-agents/step-by-step/hack/restore-walkthrough.ts",
"chars": 4053,
"preview": "import * as fs from 'fs';\nimport * as path from 'path';\nimport chalk from 'chalk';\n\n// Extract file operations from a ch"
},
{
"path": "2025-04-22-twelve-factor-agents/step-by-step/hack/run-walkthrough.ts",
"chars": 12446,
"preview": "import { execSync, spawn } from 'child_process';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport * as rea"
},
{
"path": "2025-04-22-twelve-factor-agents/step-by-step/package.json",
"chars": 965,
"preview": "{\n \"name\": \"my-agent\",\n \"version\": \"0.1.0\",\n \"private\": true,\n \"scripts\": {\n \"dev\": \"tsx src/index.ts\",\n \"buil"
},
{
"path": "2025-04-22-twelve-factor-agents/step-by-step/tsconfig.json",
"chars": 546,
"preview": "{\n \"compilerOptions\": {\n \"target\": \"ES2017\",\n \"lib\": [\"esnext\"],\n \"allowJs\": true,\n \"skipLibCheck\": true,\n "
},
{
"path": "2025-04-22-twelve-factor-agents/step-by-step/walkthrough/00-index.ts",
"chars": 148,
"preview": "async function hello(): Promise<void> {\n console.log('hello, world!')\n}\n\nasync function main() {\n await hello()\n}\n"
},
{
"path": "2025-04-22-twelve-factor-agents/step-by-step/walkthrough/01-agent.baml",
"chars": 606,
"preview": "class DoneForNow {\n intent \"done_for_now\"\n message string \n}\n\nfunction DetermineNextStep(\n thread: string \n) -> Don"
},
{
"path": "2025-04-22-twelve-factor-agents/step-by-step/walkthrough/01-agent.ts",
"chars": 920,
"preview": "import { b } from \"../baml_client\";\n\n// tool call or a respond to human tool\ntype AgentResponse = Awaited<ReturnType<typ"
},
{
"path": "2025-04-22-twelve-factor-agents/step-by-step/walkthrough/01-cli.ts",
"chars": 758,
"preview": "// cli.ts lets you invoke the agent loop from the command line\n\nimport { agentLoop, Thread, Event } from \"./agent\";\n\nexp"
},
{
"path": "2025-04-22-twelve-factor-agents/step-by-step/walkthrough/01-index.ts",
"chars": 175,
"preview": "import { cli } from \"./cli\"\n\nasync function hello(): Promise<void> {\n console.log('hello, world!')\n}\n\nasync function "
},
{
"path": "2025-04-22-twelve-factor-agents/step-by-step/walkthrough/02-agent.baml",
"chars": 624,
"preview": "class DoneForNow {\n intent \"done_for_now\"\n message string \n}\n\nfunction DetermineNextStep(\n thread: string \n) -> Cal"
},
{
"path": "2025-04-22-twelve-factor-agents/step-by-step/walkthrough/02-tool_calculator.baml",
"chars": 390,
"preview": "type CalculatorTools = AddTool | SubtractTool | MultiplyTool | DivideTool\n\n\nclass AddTool {\n intent \"add\"\n a int |"
},
{
"path": "2025-04-22-twelve-factor-agents/step-by-step/walkthrough/03-agent.ts",
"chars": 1562,
"preview": "import { b } from \"../baml_client\";\n\n// tool call or a respond to human tool\ntype AgentResponse = Awaited<ReturnType<typ"
},
{
"path": "2025-04-22-twelve-factor-agents/step-by-step/walkthrough/03b-agent.ts",
"chars": 2565,
"preview": "import { AddTool, SubtractTool, DivideTool, MultiplyTool, b } from \"../baml_client\";\n\nexport interface Event {\n type:"
},
{
"path": "2025-04-22-twelve-factor-agents/step-by-step/walkthrough/04-agent.baml",
"chars": 806,
"preview": "class DoneForNow {\n intent \"done_for_now\"\n message string \n}\n\nfunction DetermineNextStep(\n thread: string \n) -> Cal"
},
{
"path": "2025-04-22-twelve-factor-agents/step-by-step/walkthrough/04b-agent.baml",
"chars": 917,
"preview": "class DoneForNow {\n intent \"done_for_now\"\n message string \n}\n\nfunction DetermineNextStep(\n thread: string \n) -> Cal"
},
{
"path": "2025-04-22-twelve-factor-agents/step-by-step/walkthrough/04c-agent.baml",
"chars": 1966,
"preview": "class DoneForNow {\n intent \"done_for_now\"\n message string \n}\n\nfunction DetermineNextStep(\n thread: string \n) -> Cal"
},
{
"path": "2025-04-22-twelve-factor-agents/step-by-step/walkthrough/05-agent.baml",
"chars": 2292,
"preview": "// human tools are async requests to a human\ntype HumanTools = ClarificationRequest | DoneForNow\n\nclass ClarificationReq"
},
{
"path": "2025-04-22-twelve-factor-agents/step-by-step/walkthrough/05-agent.ts",
"chars": 2600,
"preview": "import { AddTool, SubtractTool, DivideTool, MultiplyTool, b } from \"../baml_client\";\n\nexport interface Event {\n type:"
},
{
"path": "2025-04-22-twelve-factor-agents/step-by-step/walkthrough/05-cli.ts",
"chars": 1556,
"preview": "// cli.ts lets you invoke the agent loop from the command line\n\nimport { agentLoop, Thread, Event } from \"../src/agent\";"
},
{
"path": "2025-04-22-twelve-factor-agents/step-by-step/walkthrough/05b-agent.baml",
"chars": 3162,
"preview": "// human tools are async requests to a human\ntype HumanTools = ClarificationRequest | DoneForNow\n\nclass ClarificationReq"
},
{
"path": "2025-04-22-twelve-factor-agents/step-by-step/walkthrough/05c-agent.baml",
"chars": 3174,
"preview": "// human tools are async requests to a human\ntype HumanTools = ClarificationRequest | DoneForNow\n\nclass ClarificationReq"
},
{
"path": "2025-04-22-twelve-factor-agents/step-by-step/walkthrough/06-agent.baml",
"chars": 3296,
"preview": "// human tools are async requests to a human\ntype HumanTools = ClarificationRequest | DoneForNow\n\nclass ClarificationReq"
},
{
"path": "2025-04-22-twelve-factor-agents/step-by-step/walkthrough/07-agent.ts",
"chars": 2609,
"preview": "import { AddTool, SubtractTool, DivideTool, MultiplyTool, b } from \"../baml_client\";\n\nexport interface Event {\n type:"
},
{
"path": "2025-04-22-twelve-factor-agents/step-by-step/walkthrough/07b-agent.ts",
"chars": 2843,
"preview": "import { AddTool, SubtractTool, DivideTool, MultiplyTool, b } from \"../baml_client\";\n\nexport interface Event {\n type:"
},
{
"path": "2025-04-22-twelve-factor-agents/step-by-step/walkthrough/07c-agent.baml",
"chars": 2837,
"preview": "// human tools are async requests to a human\ntype HumanTools = ClarificationRequest | DoneForNow\n\nclass ClarificationReq"
},
{
"path": "2025-04-22-twelve-factor-agents/step-by-step/walkthrough/08-server.ts",
"chars": 687,
"preview": "import express from 'express';\nimport { Thread, agentLoop } from '../src/agent';\n\nconst app = express();\napp.use(express"
},
{
"path": "2025-04-22-twelve-factor-agents/step-by-step/walkthrough/09-server.ts",
"chars": 2001,
"preview": "import express from 'express';\nimport { Thread, agentLoop } from '../src/agent';\nimport { ThreadStore } from '../src/sta"
},
{
"path": "2025-04-22-twelve-factor-agents/step-by-step/walkthrough/09-state.ts",
"chars": 578,
"preview": "import crypto from 'crypto';\nimport { Thread } from '../src/agent';\n\n\n// you can replace this with any simple state mana"
},
{
"path": "2025-04-22-twelve-factor-agents/step-by-step/walkthrough/10-agent.ts",
"chars": 2687,
"preview": "import { AddTool, SubtractTool, DivideTool, MultiplyTool, b } from \"../baml_client\";\n\nexport interface Event {\n type:"
},
{
"path": "2025-04-22-twelve-factor-agents/step-by-step/walkthrough/10-server.ts",
"chars": 2960,
"preview": "import express from 'express';\nimport { Thread, agentLoop } from '../src/agent';\nimport { ThreadStore } from '../src/sta"
},
{
"path": "2025-04-22-twelve-factor-agents/step-by-step/walkthrough.md",
"chars": 7232,
"preview": "### Building the 12-factor agent template from scratch\n\nSteps to start from an bare TS repo and build up a 12-factor age"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/README.md",
"chars": 2409,
"preview": "\n## Building 12 Factor Agents - AI That Works Live NYC\n\nThis doc will serve as the source of truth for the event - check"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/meta.md",
"chars": 640,
"preview": "---\nguid: aitw-workshop-nyc\ntitle: Workshop NYC – Twelve Factor Agents\ndescription: Live workshop in NYC on building 12 "
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/pre-requisites/00-hello-world/README.md",
"chars": 2667,
"preview": "# Chapter 0 - Hello World\n\nLet's start with a basic TypeScript setup and a hello world program.\n\nThis guide is written i"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/pre-requisites/00-hello-world/walkthrough/00-.gitignore",
"chars": 27,
"preview": "baml_client/\nnode_modules/\n"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/pre-requisites/00-hello-world/walkthrough/00-index.ts",
"chars": 148,
"preview": "async function hello(): Promise<void> {\n console.log('hello, world!')\n}\n\nasync function main() {\n await hello()\n}\n"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/pre-requisites/00-hello-world/walkthrough/00-package.json",
"chars": 422,
"preview": "{\n \"name\": \"my-agent\",\n \"version\": \"0.1.0\",\n \"private\": true,\n \"scripts\": {\n \"dev\": \"tsx src/index.ts\","
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/pre-requisites/00-hello-world/walkthrough/00-tsconfig.json",
"chars": 592,
"preview": "{\n \"compilerOptions\": {\n \"target\": \"ES2017\",\n \"lib\": [\"esnext\"],\n \"allowJs\": true,\n \"skipLibCheck"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/pre-requisites/01-cli-and-agent/.gitignore",
"chars": 27,
"preview": "baml_client/\nnode_modules/\n"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/pre-requisites/01-cli-and-agent/README.md",
"chars": 4688,
"preview": "# Chapter 1 - CLI and Agent Loop\n\nNow let's add BAML and create our first agent with a CLI interface.\n\nFirst, we'll need"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/pre-requisites/01-cli-and-agent/package.json",
"chars": 423,
"preview": "{\n \"name\": \"my-agent\",\n \"version\": \"0.1.0\",\n \"private\": true,\n \"scripts\": {\n \"dev\": \"tsx src/index.ts\","
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/pre-requisites/01-cli-and-agent/src/index.ts",
"chars": 148,
"preview": "async function hello(): Promise<void> {\n console.log('hello, world!')\n}\n\nasync function main() {\n await hello()\n}\n"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/pre-requisites/01-cli-and-agent/tsconfig.json",
"chars": 592,
"preview": "{\n \"compilerOptions\": {\n \"target\": \"ES2017\",\n \"lib\": [\"esnext\"],\n \"allowJs\": true,\n \"skipLibCheck"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/pre-requisites/01-cli-and-agent/walkthrough/01-agent.baml",
"chars": 606,
"preview": "class DoneForNow {\n intent \"done_for_now\"\n message string \n}\n\nfunction DetermineNextStep(\n thread: string \n) -> Don"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/pre-requisites/01-cli-and-agent/walkthrough/01-agent.ts",
"chars": 920,
"preview": "import { b } from \"../baml_client\";\n\n// tool call or a respond to human tool\ntype AgentResponse = Awaited<ReturnType<typ"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/pre-requisites/01-cli-and-agent/walkthrough/01-cli.ts",
"chars": 758,
"preview": "// cli.ts lets you invoke the agent loop from the command line\n\nimport { agentLoop, Thread, Event } from \"./agent\";\n\nexp"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/pre-requisites/01-cli-and-agent/walkthrough/01-index.ts",
"chars": 175,
"preview": "import { cli } from \"./cli\"\n\nasync function hello(): Promise<void> {\n console.log('hello, world!')\n}\n\nasync function "
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/pre-requisites/README.md",
"chars": 1197,
"preview": "## NYC workshop pre-requisites\n\n\nThis folder contains the pre-requisites for the NYC workshop on 2025-05-10\n\n\n### the fa"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/pre-requisites/final/.gitignore",
"chars": 27,
"preview": "baml_client/\nnode_modules/\n"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/pre-requisites/final/README.md",
"chars": 112,
"preview": "# Final state\n\nThis repo is the final state of the codebase after completing all the steps in `01-cli-and-agent`"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/pre-requisites/final/baml_src/agent.baml",
"chars": 606,
"preview": "class DoneForNow {\n intent \"done_for_now\"\n message string \n}\n\nfunction DetermineNextStep(\n thread: string \n) -> Don"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/pre-requisites/final/baml_src/clients.baml",
"chars": 1481,
"preview": "// Learn more about clients at https://docs.boundaryml.com/docs/snippets/clients/overview\n\nclient<llm> CustomGPT4o {\n p"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/pre-requisites/final/baml_src/generators.baml",
"chars": 795,
"preview": "// This helps use auto generate libraries you can use in the language of\n// your choice. You can have multiple generator"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/pre-requisites/final/package.json",
"chars": 472,
"preview": "{\n \"name\": \"my-agent\",\n \"version\": \"0.1.0\",\n \"private\": true,\n \"scripts\": {\n \"dev\": \"tsx src/index.ts"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/pre-requisites/final/src/agent.ts",
"chars": 920,
"preview": "import { b } from \"../baml_client\";\n\n// tool call or a respond to human tool\ntype AgentResponse = Awaited<ReturnType<typ"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/pre-requisites/final/src/cli.ts",
"chars": 758,
"preview": "// cli.ts lets you invoke the agent loop from the command line\n\nimport { agentLoop, Thread, Event } from \"./agent\";\n\nexp"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/pre-requisites/final/src/index.ts",
"chars": 175,
"preview": "import { cli } from \"./cli\"\n\nasync function hello(): Promise<void> {\n console.log('hello, world!')\n}\n\nasync function "
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/pre-requisites/final/tsconfig.json",
"chars": 592,
"preview": "{\n \"compilerOptions\": {\n \"target\": \"ES2017\",\n \"lib\": [\"esnext\"],\n \"allowJs\": true,\n \"skipLibCheck"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/02-calculator-tools/.gitignore",
"chars": 27,
"preview": "baml_client/\nnode_modules/\n"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/02-calculator-tools/README.md",
"chars": 1437,
"preview": "# Chapter 2 - Add Calculator Tools\n\nLet's add some calculator tools to our agent.\n\nLet's start by adding a tool definiti"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/02-calculator-tools/baml_src/agent.baml",
"chars": 606,
"preview": "class DoneForNow {\n intent \"done_for_now\"\n message string \n}\n\nfunction DetermineNextStep(\n thread: string \n) -> Don"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/02-calculator-tools/baml_src/clients.baml",
"chars": 1481,
"preview": "// Learn more about clients at https://docs.boundaryml.com/docs/snippets/clients/overview\n\nclient<llm> CustomGPT4o {\n p"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/02-calculator-tools/baml_src/generators.baml",
"chars": 795,
"preview": "// This helps use auto generate libraries you can use in the language of\n// your choice. You can have multiple generator"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/02-calculator-tools/package.json",
"chars": 472,
"preview": "{\n \"name\": \"my-agent\",\n \"version\": \"0.1.0\",\n \"private\": true,\n \"scripts\": {\n \"dev\": \"tsx src/index.ts"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/02-calculator-tools/src/agent.ts",
"chars": 920,
"preview": "import { b } from \"../baml_client\";\n\n// tool call or a respond to human tool\ntype AgentResponse = Awaited<ReturnType<typ"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/02-calculator-tools/src/cli.ts",
"chars": 758,
"preview": "// cli.ts lets you invoke the agent loop from the command line\n\nimport { agentLoop, Thread, Event } from \"./agent\";\n\nexp"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/02-calculator-tools/src/index.ts",
"chars": 175,
"preview": "import { cli } from \"./cli\"\n\nasync function hello(): Promise<void> {\n console.log('hello, world!')\n}\n\nasync function "
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/02-calculator-tools/tsconfig.json",
"chars": 592,
"preview": "{\n \"compilerOptions\": {\n \"target\": \"ES2017\",\n \"lib\": [\"esnext\"],\n \"allowJs\": true,\n \"skipLibCheck"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/02-calculator-tools/walkthrough/02-agent.baml",
"chars": 624,
"preview": "class DoneForNow {\n intent \"done_for_now\"\n message string \n}\n\nfunction DetermineNextStep(\n thread: string \n) -> Cal"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/02-calculator-tools/walkthrough/02-tool_calculator.baml",
"chars": 390,
"preview": "type CalculatorTools = AddTool | SubtractTool | MultiplyTool | DivideTool\n\n\nclass AddTool {\n intent \"add\"\n a int |"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/03-tool-loop/.gitignore",
"chars": 27,
"preview": "baml_client/\nnode_modules/\n"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/03-tool-loop/README.md",
"chars": 5385,
"preview": "# Chapter 3 - Process Tool Calls in a Loop\n\nNow let's add a real agentic loop that can run the tools and get a final ans"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/03-tool-loop/baml_src/agent.baml",
"chars": 624,
"preview": "class DoneForNow {\n intent \"done_for_now\"\n message string \n}\n\nfunction DetermineNextStep(\n thread: string \n) -> Cal"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/03-tool-loop/baml_src/clients.baml",
"chars": 1481,
"preview": "// Learn more about clients at https://docs.boundaryml.com/docs/snippets/clients/overview\n\nclient<llm> CustomGPT4o {\n p"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/03-tool-loop/baml_src/generators.baml",
"chars": 795,
"preview": "// This helps use auto generate libraries you can use in the language of\n// your choice. You can have multiple generator"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/03-tool-loop/baml_src/tool_calculator.baml",
"chars": 390,
"preview": "type CalculatorTools = AddTool | SubtractTool | MultiplyTool | DivideTool\n\n\nclass AddTool {\n intent \"add\"\n a int |"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/03-tool-loop/package.json",
"chars": 472,
"preview": "{\n \"name\": \"my-agent\",\n \"version\": \"0.1.0\",\n \"private\": true,\n \"scripts\": {\n \"dev\": \"tsx src/index.ts"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/03-tool-loop/src/agent.ts",
"chars": 920,
"preview": "import { b } from \"../baml_client\";\n\n// tool call or a respond to human tool\ntype AgentResponse = Awaited<ReturnType<typ"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/03-tool-loop/src/cli.ts",
"chars": 758,
"preview": "// cli.ts lets you invoke the agent loop from the command line\n\nimport { agentLoop, Thread, Event } from \"./agent\";\n\nexp"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/03-tool-loop/src/index.ts",
"chars": 175,
"preview": "import { cli } from \"./cli\"\n\nasync function hello(): Promise<void> {\n console.log('hello, world!')\n}\n\nasync function "
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/03-tool-loop/tsconfig.json",
"chars": 592,
"preview": "{\n \"compilerOptions\": {\n \"target\": \"ES2017\",\n \"lib\": [\"esnext\"],\n \"allowJs\": true,\n \"skipLibCheck"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/03-tool-loop/walkthrough/03-agent.ts",
"chars": 1562,
"preview": "import { b } from \"../baml_client\";\n\n// tool call or a respond to human tool\ntype AgentResponse = Awaited<ReturnType<typ"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/03-tool-loop/walkthrough/03b-agent.ts",
"chars": 2565,
"preview": "import { AddTool, SubtractTool, DivideTool, MultiplyTool, b } from \"../baml_client\";\n\nexport interface Event {\n type:"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/04-baml-tests/.gitignore",
"chars": 27,
"preview": "baml_client/\nnode_modules/\n"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/04-baml-tests/README.md",
"chars": 3036,
"preview": "# Chapter 4 - Add Tests to agent.baml\n\nLet's add some tests to our BAML agent.\n\nto start, leave the baml logs enabled\n\n "
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/04-baml-tests/baml_src/agent.baml",
"chars": 624,
"preview": "class DoneForNow {\n intent \"done_for_now\"\n message string \n}\n\nfunction DetermineNextStep(\n thread: string \n) -> Cal"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/04-baml-tests/baml_src/clients.baml",
"chars": 1481,
"preview": "// Learn more about clients at https://docs.boundaryml.com/docs/snippets/clients/overview\n\nclient<llm> CustomGPT4o {\n p"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/04-baml-tests/baml_src/generators.baml",
"chars": 795,
"preview": "// This helps use auto generate libraries you can use in the language of\n// your choice. You can have multiple generator"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/04-baml-tests/baml_src/tool_calculator.baml",
"chars": 390,
"preview": "type CalculatorTools = AddTool | SubtractTool | MultiplyTool | DivideTool\n\n\nclass AddTool {\n intent \"add\"\n a int |"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/04-baml-tests/package.json",
"chars": 476,
"preview": " {\n \"name\": \"my-agent\",\n \"version\": \"0.1.0\",\n \"private\": true,\n \"scripts\": {\n \"dev\": \"tsx src/inde"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/04-baml-tests/src/agent.ts",
"chars": 2565,
"preview": "import { AddTool, SubtractTool, DivideTool, MultiplyTool, b } from \"../baml_client\";\n\nexport interface Event {\n type:"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/04-baml-tests/src/cli.ts",
"chars": 758,
"preview": "// cli.ts lets you invoke the agent loop from the command line\n\nimport { agentLoop, Thread, Event } from \"./agent\";\n\nexp"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/04-baml-tests/src/index.ts",
"chars": 175,
"preview": "import { cli } from \"./cli\"\n\nasync function hello(): Promise<void> {\n console.log('hello, world!')\n}\n\nasync function "
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/04-baml-tests/tsconfig.json",
"chars": 592,
"preview": "{\n \"compilerOptions\": {\n \"target\": \"ES2017\",\n \"lib\": [\"esnext\"],\n \"allowJs\": true,\n \"skipLibCheck"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/04-baml-tests/walkthrough/04-agent.baml",
"chars": 806,
"preview": "class DoneForNow {\n intent \"done_for_now\"\n message string \n}\n\nfunction DetermineNextStep(\n thread: string \n) -> Cal"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/04-baml-tests/walkthrough/04b-agent.baml",
"chars": 917,
"preview": "class DoneForNow {\n intent \"done_for_now\"\n message string \n}\n\nfunction DetermineNextStep(\n thread: string \n) -> Cal"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/04-baml-tests/walkthrough/04c-agent.baml",
"chars": 1966,
"preview": "class DoneForNow {\n intent \"done_for_now\"\n message string \n}\n\nfunction DetermineNextStep(\n thread: string \n) -> Cal"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/05-human-tools/.gitignore",
"chars": 27,
"preview": "baml_client/\nnode_modules/\n"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/05-human-tools/README.md",
"chars": 5367,
"preview": "# Chapter 5 - Multiple Human Tools\n\nIn this section, we'll add support for multiple tools that serve to \ncontact humans."
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/05-human-tools/baml_src/agent.baml",
"chars": 1966,
"preview": "class DoneForNow {\n intent \"done_for_now\"\n message string \n}\n\nfunction DetermineNextStep(\n thread: string \n) -> Cal"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/05-human-tools/baml_src/clients.baml",
"chars": 1481,
"preview": "// Learn more about clients at https://docs.boundaryml.com/docs/snippets/clients/overview\n\nclient<llm> CustomGPT4o {\n p"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/05-human-tools/baml_src/generators.baml",
"chars": 795,
"preview": "// This helps use auto generate libraries you can use in the language of\n// your choice. You can have multiple generator"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/05-human-tools/baml_src/tool_calculator.baml",
"chars": 390,
"preview": "type CalculatorTools = AddTool | SubtractTool | MultiplyTool | DivideTool\n\n\nclass AddTool {\n intent \"add\"\n a int |"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/05-human-tools/package.json",
"chars": 472,
"preview": "{\n \"name\": \"my-agent\",\n \"version\": \"0.1.0\",\n \"private\": true,\n \"scripts\": {\n \"dev\": \"tsx src/index.ts"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/05-human-tools/src/agent.ts",
"chars": 2565,
"preview": "import { AddTool, SubtractTool, DivideTool, MultiplyTool, b } from \"../baml_client\";\n\nexport interface Event {\n type:"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/05-human-tools/src/cli.ts",
"chars": 758,
"preview": "// cli.ts lets you invoke the agent loop from the command line\n\nimport { agentLoop, Thread, Event } from \"./agent\";\n\nexp"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/05-human-tools/src/index.ts",
"chars": 175,
"preview": "import { cli } from \"./cli\"\n\nasync function hello(): Promise<void> {\n console.log('hello, world!')\n}\n\nasync function "
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/05-human-tools/tsconfig.json",
"chars": 592,
"preview": "{\n \"compilerOptions\": {\n \"target\": \"ES2017\",\n \"lib\": [\"esnext\"],\n \"allowJs\": true,\n \"skipLibCheck"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/05-human-tools/walkthrough/05-agent.baml",
"chars": 2292,
"preview": "// human tools are async requests to a human\ntype HumanTools = ClarificationRequest | DoneForNow\n\nclass ClarificationReq"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/05-human-tools/walkthrough/05-agent.ts",
"chars": 2590,
"preview": "import { AddTool, SubtractTool, DivideTool, MultiplyTool, b } from \"../baml_client\";\n\nexport interface Event {\n type:"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/05-human-tools/walkthrough/05-cli.ts",
"chars": 1556,
"preview": "// cli.ts lets you invoke the agent loop from the command line\n\nimport { agentLoop, Thread, Event } from \"../src/agent\";"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/05-human-tools/walkthrough/05b-agent.baml",
"chars": 3162,
"preview": "// human tools are async requests to a human\ntype HumanTools = ClarificationRequest | DoneForNow\n\nclass ClarificationReq"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/05-human-tools/walkthrough/05c-agent.baml",
"chars": 3174,
"preview": "// human tools are async requests to a human\ntype HumanTools = ClarificationRequest | DoneForNow\n\nclass ClarificationReq"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/06-customize-prompt/.gitignore",
"chars": 27,
"preview": "baml_client/\nnode_modules/\n"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/06-customize-prompt/README.md",
"chars": 1344,
"preview": "# Chapter 6 - Customize Your Prompt with Reasoning\n\nIn this section, we'll explore how to customize the prompt of the ag"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/06-customize-prompt/baml_src/agent.baml",
"chars": 3174,
"preview": "// human tools are async requests to a human\ntype HumanTools = ClarificationRequest | DoneForNow\n\nclass ClarificationReq"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/06-customize-prompt/baml_src/clients.baml",
"chars": 1481,
"preview": "// Learn more about clients at https://docs.boundaryml.com/docs/snippets/clients/overview\n\nclient<llm> CustomGPT4o {\n p"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/06-customize-prompt/baml_src/generators.baml",
"chars": 795,
"preview": "// This helps use auto generate libraries you can use in the language of\n// your choice. You can have multiple generator"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/06-customize-prompt/baml_src/tool_calculator.baml",
"chars": 390,
"preview": "type CalculatorTools = AddTool | SubtractTool | MultiplyTool | DivideTool\n\n\nclass AddTool {\n intent \"add\"\n a int |"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/06-customize-prompt/package.json",
"chars": 472,
"preview": "{\n \"name\": \"my-agent\",\n \"version\": \"0.1.0\",\n \"private\": true,\n \"scripts\": {\n \"dev\": \"tsx src/index.ts"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/06-customize-prompt/src/agent.ts",
"chars": 2590,
"preview": "import { AddTool, SubtractTool, DivideTool, MultiplyTool, b } from \"../baml_client\";\n\nexport interface Event {\n type:"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/06-customize-prompt/src/cli.ts",
"chars": 1556,
"preview": "// cli.ts lets you invoke the agent loop from the command line\n\nimport { agentLoop, Thread, Event } from \"../src/agent\";"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/06-customize-prompt/src/index.ts",
"chars": 175,
"preview": "import { cli } from \"./cli\"\n\nasync function hello(): Promise<void> {\n console.log('hello, world!')\n}\n\nasync function "
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/06-customize-prompt/tsconfig.json",
"chars": 592,
"preview": "{\n \"compilerOptions\": {\n \"target\": \"ES2017\",\n \"lib\": [\"esnext\"],\n \"allowJs\": true,\n \"skipLibCheck"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/06-customize-prompt/walkthrough/06-agent.baml",
"chars": 3301,
"preview": "// human tools are async requests to a human\ntype HumanTools = ClarificationRequest | DoneForNow\n\nclass ClarificationReq"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/07-context-window/.gitignore",
"chars": 27,
"preview": "baml_client/\nnode_modules/\n"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/07-context-window/README.md",
"chars": 5604,
"preview": "# Chapter 7 - Customize Your Context Window\n\nIn this section, we'll explore how to customize the context window\nof the a"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/07-context-window/baml_src/agent.baml",
"chars": 3301,
"preview": "// human tools are async requests to a human\ntype HumanTools = ClarificationRequest | DoneForNow\n\nclass ClarificationReq"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/07-context-window/baml_src/clients.baml",
"chars": 1481,
"preview": "// Learn more about clients at https://docs.boundaryml.com/docs/snippets/clients/overview\n\nclient<llm> CustomGPT4o {\n p"
},
{
"path": "2025-05-10-workshop-nyc-twelve-factor-agents/workshop-agents/07-context-window/baml_src/generators.baml",
"chars": 795,
"preview": "// This helps use auto generate libraries you can use in the language of\n// your choice. You can have multiple generator"
}
]
// ... and 1656 more files (download for full content)
About this extraction
This page contains the full source code of the hellovai/ai-that-works GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1856 files (33.8 MB), approximately 3.2M tokens, and a symbol index with 2713 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.