Getting started#
This guide gets a local Quilombo instance running and records the first inventory facts.
Run locally#
Quilombo requires Python 3.14 and uv.
uv sync
uv run python manage.py migrate
uv run python manage.py runserver
Open http://127.0.0.1:8000/ and create an account. New accounts receive a private Home
workspace automatically.
Create a workspace token#
From an authenticated browser session, issue a token through:
POST /api/workspaces/{workspace-slug}/tokens/
The raw qlo_... token is displayed once. Store it securely and send it as a bearer token:
curl \
-H 'Authorization: Bearer qlo_...' \
https://quilombo.life/api/workspaces/home/
Record inventory#
Use POST /api/workspaces/{workspace-slug}/bulk-upsert/ for related changes. Include a unique
idempotency_key; the operation is transactional and quantities replace the current recorded
values.
{
"idempotency_key": "workshop-2026-08-15-001",
"provenance": {
"source_kind": "agent",
"source_reference": "Processed from a workshop photo on 2026-08-15"
},
"locations": [
{"key": "drawer-1", "name": "Drawer 1", "kind": "drawer"}
],
"items": [
{
"key": "aaa-batteries",
"name": "AAA batteries",
"category": "battery",
"aliases": ["AAA cells", "AAA battery"],
"attributes": {"size": "AAA"},
"unit": "lot"
}
],
"holdings": [
{
"item_key": "aaa-batteries",
"location_key": "drawer-1",
"quantity": "1",
"approximate": true
}
]
}
Then search with GET /api/workspaces/{workspace-slug}/search/?q=AAA%20batteries or use the MCP
find_inventory tool.