Development
Read AGENTS.md in the repository first: it holds the ground rules every change follows.
Checks
Section titled “Checks”pnpm check # lint and format, typecheck, tests and build for every package, Rust includedpnpm test # Vitest and cargo testpnpm format # apply Biome fixesCI runs pnpm check, the backend contract suite and the hosted Connect browser suite on every push and pull request.
The contract comes first
Section titled “The contract comes first”When a screen needs data the API doesn’t provide, change the contract first, then the SDK, then the mock (with a test), then the hook, then the page. pnpm --filter @zupflow/contract generate refreshes openapi.json, which also regenerates this site’s API reference.
The contract suite against the backend
Section titled “The contract suite against the backend”CARGO_INCREMENTAL=0 pnpm contract:backendRuns the shared suite, the same cases the mock passes, against the Rust server on a fresh fixture. pnpm test:integration runs it together with the Taskboard journeys and the hosted Connect browser tests.
Taskboard
Section titled “Taskboard”Taskboard is a fake MCP app with its own strict OAuth (metadata discovery, dynamic registration, PKCE, rotating refresh tokens) and three tools: list_tasks (read-only), create_task (writes) and delete_task (destructive). It lets you go through Connect, tool discovery, approvals and token refresh end to end, with no real service.
CARGO_INCREMENTAL=0 scripts/taskboard-dev.shIt serves Taskboard and a development server, with Taskboard live ready in Sandbox, and prints the commands to start the Console and a browser that trusts Taskboard’s certificate. In a Sandbox workspace, Add installation, choose Taskboard live and allow access. Then start a run with call create_task {"title":"Hello"}.
These docs
Section titled “These docs”The site is apps/docs, built with Starlight. Pages are Markdown or MDX in src/content/docs; anything interactive is a React component in src/components, used from MDX.
pnpm --filter @zupflow/docs dev # http://localhost:5190pnpm --filter @zupflow/docs build