# Agent Lab MVP Todos ## Workflow - Main session owns this file and evaluates progress after each todo. - Work on one todo at a time: write its plan, execute it, verify it, then update this file. - Do not plan all implementation details upfront. Later todos may change after each evaluation. - Detailed plans live beside this file as `docs/plans/todo-N-*.md`. - Status values: `pending`, `in_progress`, `done`, `blocked`. ## Current State - Branch: `codex/agent-lab-mvp`. - Repo started with only `README.md`, `LICENSE`, and `.gitignore`. - Existing uncommitted setup from earlier false start: `pyproject.toml`, `uv.lock`, and tests under `tests/`. - Temporary browser companion files exist under `.superpowers/` and should not become product code. ## Todos | ID | Status | Plan | Goal | Verification | | --- | --- | --- | --- | --- | | 1 | done | `docs/plans/todo-1-project-foundation.md` | Establish uv/FastAPI project skeleton, DDD package layout, and core failing tests for parser, event agent, and runtime routing. | `uv run pytest` fails only because implementation is missing, not because tests or imports are malformed. | | 2 | done | `docs/plans/todo-2-domain-runtime.md` | Implement domain models, OpenAI Chat Completions compatible stream parsing, EventAgent tools, and the direct async runtime loop. | Core tests pass with mocked ChatAgent client. | | 3 | done | `docs/plans/todo-3-websocket-api.md` | Add FastAPI config, HTTP routes, WebSocket protocol, static debug page, and assistant transcript persistence for multi-turn LLM calls. | WebSocket contract tests pass; app imports successfully. | | 4 | done | `docs/plans/todo-4-real-llm-smoke.md` | Document env-based real LLM run flow, add a lightweight manual smoke helper, and make sure settings names are clear. | App starts with env-based config; docs show exact `uv` commands and required env vars. | | 5 | done | `docs/plans/todo-5-tool-call-history.md` | Harden Chat Completions history so assistant tool calls and tool replies are sent in provider-compatible order. | Tests prove the next model call includes assistant `tool_calls` before `tool` replies. | | 6 | done | `docs/plans/todo-6-cleanup-closeout.md` | Clean temporary/generated files, update contributor docs, and run final verification. | Git status contains only intended source/docs files; `uv run pytest` passes. | | 7 | done | `docs/plans/todo-7-provider-compatibility.md` | Fix review findings for real Chat Completions compatible providers: default model fallback, role-aware message serialization, and configurable usage streaming. | Tests prove provider payload shape and full suite passes. | | 8 | done | `docs/plans/todo-8-tool-pre-message-guard.md` | Prevent manually configured pre-messages from producing invalid provider `tool` payloads without `tool_call_id`. | Tests prove invalid tool pre-messages are rejected and UI no longer exposes `tool` role. |