# Binance Event Contract Agent Implementation Plan > **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task. **Goal:** Build a modular-monolith quantitative agent platform for Binance event contracts with multi-agent dry-run, backtesting, self-optimization, OpenAI-compatible model switching, and a React monitoring/confirmation console. **Architecture:** Use a single repository with a backend app, React frontend, shared persistence, and deepagents-based orchestration. Keep execution control in explicit system state machines while agents act only as structured proposers whose outputs are validated, persisted, replayed, and compared. **Tech Stack:** TypeScript, Node.js, React, deepagents, PostgreSQL, Redis, WebSocket, OpenAI-compatible SDK/client, Vitest, Playwright --- ### Task 1: Initialize repository and workspace structure **Files:** - Create: `package.json` - Create: `pnpm-workspace.yaml` - Create: `tsconfig.base.json` - Create: `.gitignore` - Create: `apps/api/package.json` - Create: `apps/web/package.json` - Create: `packages/shared/package.json` - Create: `packages/agent-runtime/package.json` - Create: `packages/strategy-lab/package.json` - Create: `packages/market-data/package.json` - Create: `packages/execution-ledger/package.json` - Create: `docs/architecture/README.md` **Step 1: Write the failing workspace smoke test** Create a simple test in `packages/shared` that imports a constant from another package path that does not exist yet. **Step 2: Run test to verify it fails** Run: `pnpm test --filter shared` Expected: FAIL because the workspace package export is missing. **Step 3: Write minimal workspace scaffolding** Create the monorepo package manifests, base TypeScript config, and initial package exports so the smoke test can resolve imports. **Step 4: Run test to verify it passes** Run: `pnpm test --filter shared` Expected: PASS **Step 5: Commit** ```bash git add . git commit -m "chore: initialize workspace structure" ``` ### Task 2: Create shared domain schemas and enums **Files:** - Create: `packages/shared/src/domain/strategy.ts` - Create: `packages/shared/src/domain/experiment.ts` - Create: `packages/shared/src/domain/model-profile.ts` - Create: `packages/shared/src/domain/trade.ts` - Create: `packages/shared/src/domain/market.ts` - Create: `packages/shared/src/index.ts` - Test: `packages/shared/src/domain/strategy.test.ts` **Step 1: Write the failing test** Write tests that assert strategy states, model profile parsing, and dry-run trade records conform to explicit schemas. **Step 2: Run test to verify it fails** Run: `pnpm vitest packages/shared/src/domain/strategy.test.ts` Expected: FAIL because the schemas and enums do not exist. **Step 3: Write minimal implementation** Create versioned domain types and validation schemas for: - strategy lifecycle states - model profiles - market snapshots - dry-run/live trade proposals - experiment results **Step 4: Run test to verify it passes** Run: `pnpm vitest packages/shared/src/domain/strategy.test.ts` Expected: PASS **Step 5: Commit** ```bash git add packages/shared git commit -m "feat: add shared domain schemas" ``` ### Task 3: Build configuration loading and model profile registry **Files:** - Create: `apps/api/src/config/env.ts` - Create: `apps/api/src/config/model-profile-registry.ts` - Create: `apps/api/src/config/config.test.ts` - Modify: `packages/shared/src/domain/model-profile.ts` **Step 1: Write the failing test** Write tests that load sample OpenAI-compatible profiles and assert agent bindings resolve correctly. **Step 2: Run test to verify it fails** Run: `pnpm vitest apps/api/src/config/config.test.ts` Expected: FAIL because the registry and loader do not exist. **Step 3: Write minimal implementation** Implement: - env loading - model profile parsing - profile lookup by name - agent-to-profile binding resolution **Step 4: Run test to verify it passes** Run: `pnpm vitest apps/api/src/config/config.test.ts` Expected: PASS **Step 5: Commit** ```bash git add apps/api/src/config packages/shared/src/domain/model-profile.ts git commit -m "feat: add model profile registry" ``` ### Task 4: Implement market data ingestion interfaces and normalized snapshot storage **Files:** - Create: `packages/market-data/src/provider/binance.ts` - Create: `packages/market-data/src/service/normalizer.ts` - Create: `packages/market-data/src/service/market-store.ts` - Create: `packages/market-data/src/index.ts` - Test: `packages/market-data/src/service/normalizer.test.ts` **Step 1: Write the failing test** Write tests that feed raw market payloads and assert normalized snapshots are created with timestamps and versioned identifiers. **Step 2: Run test to verify it fails** Run: `pnpm vitest packages/market-data/src/service/normalizer.test.ts` Expected: FAIL because normalization/storage code does not exist. **Step 3: Write minimal implementation** Implement: - Binance market data adapter interface - normalized snapshot builder - in-memory repository abstraction for snapshots Keep transport and persistence separated. **Step 4: Run test to verify it passes** Run: `pnpm vitest packages/market-data/src/service/normalizer.test.ts` Expected: PASS **Step 5: Commit** ```bash git add packages/market-data git commit -m "feat: add market snapshot normalization" ``` ### Task 5: Create execution ledger primitives for simulated and proposed live trades **Files:** - Create: `packages/execution-ledger/src/service/trade-ledger.ts` - Create: `packages/execution-ledger/src/service/state-machine.ts` - Create: `packages/execution-ledger/src/index.ts` - Test: `packages/execution-ledger/src/service/trade-ledger.test.ts` **Step 1: Write the failing test** Write tests covering: - dry-run trade creation - settlement updates - live proposal creation - manual confirm/reject transitions **Step 2: Run test to verify it fails** Run: `pnpm vitest packages/execution-ledger/src/service/trade-ledger.test.ts` Expected: FAIL because the ledger/state machine does not exist. **Step 3: Write minimal implementation** Implement trade lifecycle handling with explicit state transitions and audit timestamps. **Step 4: Run test to verify it passes** Run: `pnpm vitest packages/execution-ledger/src/service/trade-ledger.test.ts` Expected: PASS **Step 5: Commit** ```bash git add packages/execution-ledger git commit -m "feat: add execution ledger state machine" ``` ### Task 6: Create agent runtime contracts and structured-output adapters **Files:** - Create: `packages/agent-runtime/src/contracts/agent-task.ts` - Create: `packages/agent-runtime/src/contracts/agent-output.ts` - Create: `packages/agent-runtime/src/runtime/orchestrator.ts` - Create: `packages/agent-runtime/src/runtime/output-validator.ts` - Create: `packages/agent-runtime/src/index.ts` - Test: `packages/agent-runtime/src/runtime/output-validator.test.ts` **Step 1: Write the failing test** Write tests that assert malformed agent responses are rejected and valid structured responses are accepted. **Step 2: Run test to verify it fails** Run: `pnpm vitest packages/agent-runtime/src/runtime/output-validator.test.ts` Expected: FAIL because runtime contracts and validation do not exist. **Step 3: Write minimal implementation** Define agent task payloads and implement structured output validation around deepagents integration boundaries. **Step 4: Run test to verify it passes** Run: `pnpm vitest packages/agent-runtime/src/runtime/output-validator.test.ts` Expected: PASS **Step 5: Commit** ```bash git add packages/agent-runtime git commit -m "feat: add agent runtime contracts" ``` ### Task 7: Implement first-pass agent roles **Files:** - Create: `packages/agent-runtime/src/agents/orchestrator-agent.ts` - Create: `packages/agent-runtime/src/agents/signal-agent.ts` - Create: `packages/agent-runtime/src/agents/risk-agent.ts` - Create: `packages/agent-runtime/src/agents/evaluator-agent.ts` - Create: `packages/agent-runtime/src/agents/optimizer-agent.ts` - Test: `packages/agent-runtime/src/agents/signal-agent.test.ts` **Step 1: Write the failing test** Write tests for: - signal agent structured output shape - risk agent skip decisions - optimizer proposal schema **Step 2: Run test to verify it fails** Run: `pnpm vitest packages/agent-runtime/src/agents/signal-agent.test.ts` Expected: FAIL because agent role implementations do not exist. **Step 3: Write minimal implementation** Implement lightweight role wrappers that: - prepare prompts/messages - call the model profile client - validate structured output - return domain-safe results **Step 4: Run test to verify it passes** Run: `pnpm vitest packages/agent-runtime/src/agents/signal-agent.test.ts` Expected: PASS **Step 5: Commit** ```bash git add packages/agent-runtime/src/agents git commit -m "feat: add core agent roles" ``` ### Task 8: Build strategy registry and lifecycle state handling **Files:** - Create: `packages/strategy-lab/src/registry/strategy-registry.ts` - Create: `packages/strategy-lab/src/service/strategy-state-service.ts` - Create: `packages/strategy-lab/src/index.ts` - Test: `packages/strategy-lab/src/registry/strategy-registry.test.ts` **Step 1: Write the failing test** Write tests for: - strategy version creation - state transitions - immutable result history **Step 2: Run test to verify it fails** Run: `pnpm vitest packages/strategy-lab/src/registry/strategy-registry.test.ts` Expected: FAIL because registry/state handling does not exist. **Step 3: Write minimal implementation** Implement versioned strategy registration and lifecycle transitions for `draft`, `candidate`, `dry-run`, `approved-for-live`, and `archived`. **Step 4: Run test to verify it passes** Run: `pnpm vitest packages/strategy-lab/src/registry/strategy-registry.test.ts` Expected: PASS **Step 5: Commit** ```bash git add packages/strategy-lab git commit -m "feat: add strategy registry lifecycle" ``` ### Task 9: Implement dry-run engine for parallel strategy evaluation **Files:** - Create: `packages/strategy-lab/src/dry-run/dry-run-engine.ts` - Create: `packages/strategy-lab/src/dry-run/dry-run-scheduler.ts` - Test: `packages/strategy-lab/src/dry-run/dry-run-engine.test.ts` - Modify: `packages/agent-runtime/src/runtime/orchestrator.ts` - Modify: `packages/execution-ledger/src/service/trade-ledger.ts` **Step 1: Write the failing test** Write tests that run multiple strategy definitions against the same market snapshot and assert isolated simulated trades are produced. **Step 2: Run test to verify it fails** Run: `pnpm vitest packages/strategy-lab/src/dry-run/dry-run-engine.test.ts` Expected: FAIL because the dry-run engine does not exist. **Step 3: Write minimal implementation** Implement the dry-run pipeline: - snapshot intake - signal evaluation - risk filtering - simulated order write Ensure each strategy instance is isolated and parallel-safe. **Step 4: Run test to verify it passes** Run: `pnpm vitest packages/strategy-lab/src/dry-run/dry-run-engine.test.ts` Expected: PASS **Step 5: Commit** ```bash git add packages/strategy-lab packages/agent-runtime/src/runtime/orchestrator.ts packages/execution-ledger/src/service/trade-ledger.ts git commit -m "feat: add parallel dry-run engine" ``` ### Task 10: Implement historical replay and backtest runner **Files:** - Create: `packages/strategy-lab/src/backtest/replay-runner.ts` - Create: `packages/strategy-lab/src/backtest/backtest-runner.ts` - Create: `packages/strategy-lab/src/backtest/windowing.ts` - Test: `packages/strategy-lab/src/backtest/backtest-runner.test.ts` **Step 1: Write the failing test** Write tests that replay a fixed sequence of market snapshots and assert repeatable outcomes for a test strategy. **Step 2: Run test to verify it fails** Run: `pnpm vitest packages/strategy-lab/src/backtest/backtest-runner.test.ts` Expected: FAIL because the replay/backtest runner does not exist. **Step 3: Write minimal implementation** Implement deterministic replay with explicit training, validation, and forward windows. **Step 4: Run test to verify it passes** Run: `pnpm vitest packages/strategy-lab/src/backtest/backtest-runner.test.ts` Expected: PASS **Step 5: Commit** ```bash git add packages/strategy-lab/src/backtest git commit -m "feat: add backtest replay runner" ``` ### Task 11: Implement scoring and baseline comparison **Files:** - Create: `packages/strategy-lab/src/scoring/risk-adjusted-score.ts` - Create: `packages/strategy-lab/src/scoring/baselines.ts` - Test: `packages/strategy-lab/src/scoring/risk-adjusted-score.test.ts` **Step 1: Write the failing test** Write tests that assert: - drawdown penalizes score - higher stability improves score - candidate strategies are compared against random, momentum, and mean-reversion baselines **Step 2: Run test to verify it fails** Run: `pnpm vitest packages/strategy-lab/src/scoring/risk-adjusted-score.test.ts` Expected: FAIL because scoring and baselines do not exist. **Step 3: Write minimal implementation** Implement the risk-adjusted score and baseline evaluators. **Step 4: Run test to verify it passes** Run: `pnpm vitest packages/strategy-lab/src/scoring/risk-adjusted-score.test.ts` Expected: PASS **Step 5: Commit** ```bash git add packages/strategy-lab/src/scoring git commit -m "feat: add strategy scoring and baselines" ``` ### Task 12: Implement experiment store and optimizer feedback loop **Files:** - Create: `packages/strategy-lab/src/experiments/experiment-store.ts` - Create: `packages/strategy-lab/src/experiments/optimizer-loop.ts` - Test: `packages/strategy-lab/src/experiments/optimizer-loop.test.ts` - Modify: `packages/agent-runtime/src/agents/evaluator-agent.ts` - Modify: `packages/agent-runtime/src/agents/optimizer-agent.ts` **Step 1: Write the failing test** Write tests that verify evaluator summaries can produce optimizer proposals which enqueue backtest candidates without changing live state. **Step 2: Run test to verify it fails** Run: `pnpm vitest packages/strategy-lab/src/experiments/optimizer-loop.test.ts` Expected: FAIL because the loop/store do not exist. **Step 3: Write minimal implementation** Implement: - experiment persistence - evaluator summary ingestion - optimizer proposal creation - candidate queueing for backtest **Step 4: Run test to verify it passes** Run: `pnpm vitest packages/strategy-lab/src/experiments/optimizer-loop.test.ts` Expected: PASS **Step 5: Commit** ```bash git add packages/strategy-lab/src/experiments packages/agent-runtime/src/agents/evaluator-agent.ts packages/agent-runtime/src/agents/optimizer-agent.ts git commit -m "feat: add optimizer feedback loop" ``` ### Task 13: Build backend app shell with HTTP and WebSocket APIs **Files:** - Create: `apps/api/src/server.ts` - Create: `apps/api/src/routes/strategies.ts` - Create: `apps/api/src/routes/experiments.ts` - Create: `apps/api/src/routes/models.ts` - Create: `apps/api/src/routes/live-confirm.ts` - Create: `apps/api/src/ws/events.ts` - Test: `apps/api/src/server.test.ts` **Step 1: Write the failing test** Write tests that assert the API exposes strategy, experiment, model, and live-confirm endpoints and emits socket events for updates. **Step 2: Run test to verify it fails** Run: `pnpm vitest apps/api/src/server.test.ts` Expected: FAIL because the server and routes do not exist. **Step 3: Write minimal implementation** Implement the backend shell with: - route registration - in-process service wiring - WebSocket event publishing **Step 4: Run test to verify it passes** Run: `pnpm vitest apps/api/src/server.test.ts` Expected: PASS **Step 5: Commit** ```bash git add apps/api git commit -m "feat: add backend api shell" ``` ### Task 14: Build React console shell and live dashboards **Files:** - Create: `apps/web/src/app/router.tsx` - Create: `apps/web/src/pages/dashboard.tsx` - Create: `apps/web/src/pages/strategies.tsx` - Create: `apps/web/src/pages/experiments.tsx` - Create: `apps/web/src/pages/live-confirm.tsx` - Create: `apps/web/src/pages/models-config.tsx` - Create: `apps/web/src/lib/api.ts` - Create: `apps/web/src/lib/socket.ts` - Test: `apps/web/src/pages/dashboard.test.tsx` **Step 1: Write the failing test** Write tests that assert each core page renders expected panels from mocked API/WebSocket data. **Step 2: Run test to verify it fails** Run: `pnpm vitest apps/web/src/pages/dashboard.test.tsx` Expected: FAIL because the UI shell does not exist. **Step 3: Write minimal implementation** Implement a simple but usable React console with the five approved views. **Step 4: Run test to verify it passes** Run: `pnpm vitest apps/web/src/pages/dashboard.test.tsx` Expected: PASS **Step 5: Commit** ```bash git add apps/web git commit -m "feat: add monitoring console shell" ``` ### Task 15: Add manual live-confirm workflow end to end **Files:** - Modify: `apps/api/src/routes/live-confirm.ts` - Modify: `packages/execution-ledger/src/service/state-machine.ts` - Modify: `apps/web/src/pages/live-confirm.tsx` - Test: `apps/api/src/live-confirm-flow.test.ts` **Step 1: Write the failing test** Write an integration test that creates a live proposal, confirms it, and rejects another proposal with audit metadata. **Step 2: Run test to verify it fails** Run: `pnpm vitest apps/api/src/live-confirm-flow.test.ts` Expected: FAIL because the full flow is incomplete. **Step 3: Write minimal implementation** Implement explicit confirm/reject endpoints and UI actions, persisting actor and timestamp metadata. **Step 4: Run test to verify it passes** Run: `pnpm vitest apps/api/src/live-confirm-flow.test.ts` Expected: PASS **Step 5: Commit** ```bash git add apps/api/src/routes/live-confirm.ts packages/execution-ledger/src/service/state-machine.ts apps/web/src/pages/live-confirm.tsx git commit -m "feat: add manual live confirmation flow" ``` ### Task 16: Add persistence adapters for PostgreSQL and Redis **Files:** - Create: `apps/api/src/db/schema.sql` - Create: `apps/api/src/db/repositories/strategy-repository.ts` - Create: `apps/api/src/db/repositories/experiment-repository.ts` - Create: `apps/api/src/db/repositories/trade-repository.ts` - Create: `apps/api/src/cache/redis-client.ts` - Test: `apps/api/src/db/repositories/strategy-repository.test.ts` **Step 1: Write the failing test** Write repository tests using a test database or local containerized database. **Step 2: Run test to verify it fails** Run: `pnpm vitest apps/api/src/db/repositories/strategy-repository.test.ts` Expected: FAIL because persistence adapters do not exist. **Step 3: Write minimal implementation** Implement persistence adapters and map domain entities to database records. **Step 4: Run test to verify it passes** Run: `pnpm vitest apps/api/src/db/repositories/strategy-repository.test.ts` Expected: PASS **Step 5: Commit** ```bash git add apps/api/src/db apps/api/src/cache git commit -m "feat: add persistence adapters" ``` ### Task 17: Add deterministic replay fixtures and integration coverage **Files:** - Create: `tests/fixtures/market/window-10m.json` - Create: `tests/integration/dry-run-replay.test.ts` - Create: `tests/integration/backtest-candidate-promotion.test.ts` **Step 1: Write the failing test** Write integration tests that: - replay a fixed 10-minute market sequence through multiple strategies - assert repeatable results - assert candidate promotion refuses failing risk-adjusted baselines **Step 2: Run test to verify it fails** Run: `pnpm vitest tests/integration` Expected: FAIL because the end-to-end integration path is incomplete. **Step 3: Write minimal implementation** Fill missing wiring required to make deterministic replay and promotion gates pass. **Step 4: Run test to verify it passes** Run: `pnpm vitest tests/integration` Expected: PASS **Step 5: Commit** ```bash git add tests git commit -m "test: add deterministic replay integration coverage" ``` ### Task 18: Add local developer experience and deployment packaging **Files:** - Create: `docker-compose.yml` - Create: `.env.example` - Create: `README.md` - Create: `scripts/dev.ps1` - Create: `scripts/test.ps1` - Create: `scripts/start-local.ps1` **Step 1: Write the failing test** Write a smoke-check script or README verification checklist that fails when required env variables or services are missing. **Step 2: Run test to verify it fails** Run: `powershell -File scripts/test.ps1` Expected: FAIL because scripts and packaging do not exist. **Step 3: Write minimal implementation** Add: - local startup instructions - containerized dependencies - environment template - developer scripts **Step 4: Run test to verify it passes** Run: `powershell -File scripts/test.ps1` Expected: PASS **Step 5: Commit** ```bash git add docker-compose.yml .env.example README.md scripts git commit -m "chore: add local dev and deployment packaging" ``` ### Task 19: Verify the whole vertical slice **Files:** - Modify: `README.md` - Modify: `docs/architecture/README.md` **Step 1: Run the focused test suites** Run: ```bash pnpm vitest packages/shared packages/market-data packages/execution-ledger packages/agent-runtime packages/strategy-lab pnpm vitest apps/api apps/web tests/integration ``` Expected: PASS **Step 2: Run the app smoke start** Run: ```bash powershell -File scripts/start-local.ps1 ``` Expected: API starts, web starts, database/cache dependencies become reachable. **Step 3: Verify manual live-confirm flow** Run the app and manually confirm: - market data appears - multiple dry-run strategies render - experiments show history - a proposed live trade can be confirmed/rejected **Step 4: Update docs** Document: - how strategy versions move through states - how model profiles are configured - how to add a new agent role **Step 5: Commit** ```bash git add README.md docs/architecture/README.md git commit -m "docs: finalize vertical slice verification notes" ```