Run every command from this folder:
cd ai-engineer-sg-2026-workshop-demoOpen this README during the demo. Start the servers first, then use the links.
- Slides + repo
- Checkpoint 02 main demo UI
- Checkpoint 02 config
- Checkpoint 03 take-home UI
- Checkpoint 03 recent runs
- Checkpoint 03 config
Checkpoint 02 is the main search API provider prospectus demo:
pnpm dev:02Checkpoint 03 is optional for the architecture/take-home walkthrough:
pnpm dev:03Use another terminal for checkpoint 01:
pnpm --filter @research-table/01-agent-ladder exa-js
pnpm --filter @research-table/01-agent-ladder chatbot
pnpm --filter @research-table/01-agent-ladder research-text
pnpm --filter @research-table/01-agent-ladder research-citations| Moment | Open / Run | Point At |
|---|---|---|
| Demo first | Checkpoint 02 UI | trace, reason, highlights, structured prospectus, citations |
| Checkpoint 1 | terminal ladder commands above | raw Exa highlights -> blob text -> search-backed blob text -> cited structured items |
| Checkpoint 2 | Checkpoint 02 UI | thinking_tool, search_tool, answer_tool, Zod-validated prospectus |
| Checkpoint 3 | Checkpoint 03 UI | schema -> candidates -> enrichments -> deterministic final table |
| Links / CTA | Slides + repo | repo, slides, credits, Exa hiring |
Tool calls make the model more capable. They do not automatically make the product more usable.
reason explains the move. Citations prove the claim.
The interesting jump is blob text -> inspectable research state.
The agent is not the product. The product is the inspectable state around it.
Run before people arrive:
pnpm typecheck
pnpm smoke:snapshot
pnpm --filter @research-table/01-agent-ladder smoke:live
pnpm --filter @research-table/02-research-agent-ux smoke:live
pnpm --filter @research-table/03-fake-websets smoke:liveCheckpoint 03 can always return a canned completed run:
curl -s -X POST http://localhost:3003/api/run \
-H 'content-type: application/json' \
-d '{"query":"Find search API providers for AI products that offer web search, content retrieval, and developer-friendly integration.","mode":"snapshot","maxCandidates":3,"maxSearches":2}'lsof -nP -iTCP:3002 -iTCP:3003 -sTCP:LISTEN
kill $(lsof -tiTCP:3002 -sTCP:LISTEN) 2>/dev/null || true
kill $(lsof -tiTCP:3003 -sTCP:LISTEN) 2>/dev/null || truepnpm install
cp .env.example .env
$EDITOR .env.env:
OPENAI_API_KEY=...
EXA_API_KEY=...
MODEL_NAME=gpt-4.1- Checkpoint 01 raw Exa SDK search
- Checkpoint 01 chatbot
- Checkpoint 01 research text agent
- Checkpoint 01 cited research agent
- Checkpoint 01 shared tools and schemas
- Checkpoint 02 prospectus prompt and tools
- Checkpoint 02 prospectus schemas
- Checkpoint 02 server endpoint
- Checkpoint 02 UI renderer
- Checkpoint 03 schema agent
- Checkpoint 03 prospecting agent
- Checkpoint 03 research agent
- Checkpoint 03 core schemas
- Checkpoint 03 pipeline
- Checkpoint 03 server endpoint
- Checkpoint 03 UI renderer
pnpm dev:01
pnpm dev:02
pnpm dev:03pnpm typecheck
pnpm smoke:snapshot
pnpm smoke:livepnpm dev:01pnpm --filter @research-table/01-agent-ladder exa-js
pnpm --filter @research-table/01-agent-ladder chatbot
pnpm --filter @research-table/01-agent-ladder research-text
pnpm --filter @research-table/01-agent-ladder research-citationspnpm --filter @research-table/01-agent-ladder dev
pnpm --filter @research-table/01-agent-ladder typecheck
pnpm --filter @research-table/01-agent-ladder smoke:livepnpm dev:02
open http://localhost:3002pnpm --filter @research-table/02-research-agent-ux dev
pnpm --filter @research-table/02-research-agent-ux typecheck
pnpm --filter @research-table/02-research-agent-ux smoke:livecurl -s http://localhost:3002/api/configcurl -s -X POST http://localhost:3002/api/run \
-H 'content-type: application/json' \
-d '{"query":"Research Exa and make a compact company prospectus.","maxItems":3}'Run checkpoint 02 on a different port:
PORT=3012 pnpm dev:02
open http://localhost:3012pnpm dev:03
open http://localhost:3003pnpm --filter @research-table/03-fake-websets dev
pnpm --filter @research-table/03-fake-websets typecheck
pnpm --filter @research-table/03-fake-websets smoke:snapshot
pnpm --filter @research-table/03-fake-websets smoke:livecurl -s http://localhost:3003/api/config
curl -s http://localhost:3003/runscurl -s -X POST http://localhost:3003/api/run \
-H 'content-type: application/json' \
-d '{"query":"Find search API providers for AI products that offer web search, content retrieval, and developer-friendly integration.","mode":"snapshot","maxCandidates":3,"maxSearches":2}'curl -s -X POST http://localhost:3003/api/run \
-H 'content-type: application/json' \
-d '{"query":"Find search API providers for AI products that offer web search, content retrieval, and developer-friendly integration.","mode":"live","maxCandidates":3,"maxSearches":2}'Run checkpoint 03 on a different port:
PORT=3013 pnpm dev:03
open http://localhost:3013lsof -nP -iTCP:3002 -iTCP:3003 -sTCP:LISTENkill $(lsof -tiTCP:3002 -sTCP:LISTEN) 2>/dev/null || true
kill $(lsof -tiTCP:3003 -sTCP:LISTEN) 2>/dev/null || true