Skip to main content
Three ways in. They are not steps — pick the row that matches what you want, and ignore the other two. For a hosted API key and /v1 requests, use the separate Cloud quickstart. This page covers the open-source engine and its own commands.

A · the library

Two packages, numpy the only dependency. No key, no network, no database, and no model runs on your machine — the resolver is a lexical index over LOINC, not an LLM.
血脂 names a category rather than one observation, so it resolves to nothing. That is the design: a wrong code puts two different tests on one trend line. Reading a vendor export needs nothing further — zipfile and xml.etree are both stdlib:
For the rest: pip install 'mirobody[parse]' to turn a PDF, photo or spreadsheet into readings (that one calls a model, so it needs a key), and pip install 'mirobody[app]' for the server. Neither is needed for the above. ([agent] is the agent harness as a library, [test] the test suite.)

B · the stack

Postgres + pgvector, the server and the worker, with the demo record already seeded.
deploy.sh pulls the application image, which already contains the LOINC bundle, and writes a .env with generated secrets on first run. Docker users do not need Git LFS. Put one model key in .env, then restart the server and worker with docker compose up -d. Check available model features inside the server container:
Sign in as you@mirobody.ai with code 111111; no mail provider is involved. SEED_DEMO_DATA is on, so 2,019 readings across two accounts are already there. Set it to false before the first start if you intend to hold real data, and neither account is created. Four files in demo/upload/ are deliberately NOT seeded, so dropping one on the Data page walks the real path rather than doing nothing.

C · a checkout

serve is the deployment shape: it reads the shipped config and any config.{ENV}.yaml overlay, and expects persistent secrets. dev runs the same server in one process with an in-memory config and generated secrets:
If you do not already have Postgres with pgvector, start one first:
Then start the API, replacing the connection URL if you use an existing database. Check its health endpoint from another terminal:
The response includes a version field. Use pgvector rather than plain Postgres: the schema creates a vector column on first start. dev serves the API, not the web client. The built client lives at repo-root frontend/ and is outside the package, so it is there in a checkout and absent from a pip install. What dev is for is the API, the MCP surface and the agent; for the UI, use B. The secrets dev generates are per-run: sessions and encrypted config values do not survive a restart. Set JWT_KEY, CONFIG_ENCRYPTION_KEY and LOG_ENCRYPTION_KEY in the environment to keep them.

When it does not come up

Next

repository-layout.md for the map · pipeline.md for what happens to a reading · walkthrough.md for the four-minute tour of the running stack · provider-setup.md to turn on Garmin, Oura or Whoop.