# SETUP — Day 0 foundation is live The shared rails Person C is supposed to ship on Day 0 are in place. A, B, and C can each run their own track without blocking on one another. ## First-time setup ```bash # 1) Install deps (requires uv: `curl -LsSf https://astral.sh/uv/install.sh | sh`) make install # 2) Copy env template, fill in keys you have cp .env.example .env.local # at minimum set GROQ_API_KEY or OPENROUTER_API_KEY for real LLM calls # (the mocks below run without any keys) # 3) Bring up Postgres + Redis + Langfuse make up # 4) Apply DB schema make migrate # 5) Smoke-test the orchestrator end-to-end (uses mocks if no keys present) python -m app.orchestrator "please write today's SOAP note" # 6) Run the API + UI make api # in one terminal — FastAPI on :8000 make ui # in another terminal — Gradio on :7860 ``` ## Verify the foundation ```bash make test # contract + routing smoke tests make lint # ruff curl localhost:8000/health curl -X POST localhost:8000/orchestrate -d '{"utterance":"book me an appointment"}' -H 'content-type: application/json' ``` ## Where each person starts | You are… | Open this | First file you touch | |---|---|---| | **Person A** | `plans/PLAN_PERSON_A.md` | `app/agents/documentation/api.py` + `wiki/conditions/hypertension.md` | | **Person B** | `plans/PLAN_PERSON_B.md` | `app/agents/appointment/api.py` + `app/integrations/whatsapp.py` | | **Person C** | `plans/PLAN_PERSON_C.md` | `app/agents/roster/api.py` + `app/db/migrations/versions/` | Every public agent function currently raises `NotImplementedError` with the owner and target day. Every router endpoint returns the mock so the UI can be driven end-to-end while the real agents are being built. When you replace a `NotImplementedError`, also delete that agent's `mocks.py` import from `app/orchestrator.py` and `app/api/routers/*.py` — or leave the mocks as a fallback path, your call.