Use cases by industry
Use case: property operations
A property manager's hardest question is a simple one: what's actually true right now?What's the real occupancy at a community, which emergency work order has blown its SLA, and how much can rent go up at renewal without stepping on the Fair Housing Act. This guide builds that answer machine end to end on a workspace you can seed in one command, touching seven module slices: Intake to ingest the property files, Atlas to type the portfolio graph, Warrant to certify the numbers, Conduit to wire the live property-management database, Lens to answer with citations, Lineage to trace any answer, and Crucible to keep it correct as occupancy and maintenance move.
Seed this workspace and follow along
Everything below is grounded in a real seeded workspace. Run yarn demo:seed realestate and it appears as Beacon Property Group (Real Estate) — a residential manager of ~1,200 units across Maple Court Apartments, Harborview Lofts, and Cedar Ridge Townhomes, with the documents, the property database, and the ops agent already wired. See the demo workspaces index for the full list.
Prerequisites
- A workspace key with
kb:write,kb:read,agents:run, andruns:read, exported as$ELI_KEY. See Getting started. - Owner/admin on the workspace, to create connectors, certify concepts, and verify documents.
- An enabled chat model, so
/querycan generate — otherwise409 no-model-configured.
1 · Intake — ingest the property files
The knowledge already exists as scattered files: a firm overview, the operations roster, one markdown page per property, tenant records, the Standard Residential Lease, vendor sheets, and the Work Order Triage runbook. Post them as documents so their text becomes durably searchable before detached graph enrichment. Start with the property that anchors the rest of this guide, Maple Court:
/api/v1/documentsBearer · kb:writeSave markdown through the vault. The file, chunks, and full-text index commit before 201; embedding and graph enrichment continue as detached work, so the response contains stored-document metadata only.
Repeat for the rest of the pack — tenants/okafor-household.md, operations/work-order-triage.md, systems/property-management-system.md, and the others. As each lands, Atlas can reconcile names and relations into a graph. That work is detached from the 201response; the seeded pack already has the structure used by the next slice.
2 · Atlas — type the portfolio graph
Text alone isn't structure. This workspace ships an ontology of six entity types — Property, Unit, Tenant, Lease, Vendor, and Manager — tied by manages, contains, occupies, and services relations. So "Maple Court" isn't a string; it's a Property a Manager manages and that contains the unit a Tenant occupies. Read the anchor entity and its edges:
/api/v1/entities/{id}Bearer · kb:readFetch one entity with its ontology type, authority tier, and typed relations. Extraction lands new entities at authority machine_extracted — a starting point Warrant will promote.
The graph is the retrieval index
3 · Warrant — certify the numbers
Occupancy targets and SLAs are the numbers managers quote in reviews and to owners; they have to be vouched for, not machine-guessed. In Warrant, propose the canonical definition of the Occupancy Report concept as a reviewable change, then certify it — certified is the only tier the assistant states without hedging:
/api/v1/change-requestsBearer · kb:writePropose the canonical definition as a reviewable change rather than editing silently. Approval promotes authority to at least curated and records the reviewer on the revision.
/api/v1/entities/{id}/certifyBearer · kb:writeOwner/admin sign-off — authority certified. Also starts the review clock: nextReviewAt lands at now + the workspace's reviewIntervalDays, so a stale occupancy definition can't quietly slip through.
Then verify the source document so its provenance carries a governance tier — the same Maple Court page Lineage will report on later:
/api/v1/documents/{id}/verifyBearer · kb:writeGlean-style document verification. Stamps the verification tier, the verifier, and the next re-verify date — the governance block Lineage reports and the manifest counts.
Certification is what earns a confident answer downstream. Ask "What is the current occupancy at Maple Court Apartments?" and the policy engine returns verdict answer (confidence 0.8, confidence_above_answer_floor) — precisely because the number is now backed by a certified concept and a verified source.
Curate in the UI too
4 · Conduit — wire the live property database
Documents describe the portfolio; they don't hold live occupancy. That's in the Property Management System — the book of record for units, leases, rent, and work orders. Wire a read-only data connector named beacon-pms with a small, named, parameterized query catalog, so the model runs vetted SQL and never freehand:
/api/v1/connectorsBearer · kb:writeCreate a read-only Postgres data connector with a fixed catalog of named queries. The credential is stored encrypted and masked on every read; every query is capped at maxRows and only these slugs can run.
Bind queries to entities
occupancy-summary("Live occupancy by property"), Maple Court Apartments → rent-roll-by-property (the property param is filled by the model from the question), and Work Order Triage → open-work-orders. When a manager asks about occupancy, Lens knows to run occupancy-summary and cite the row it used.5 · Lens — a manager asks, and gets a cited answer
Now the payoff. A manager asks in plain language; Lens retrieves the certified docs, runs the bound occupancy-summary query, and returns an answer with inline [Sn] citations, an atomic claims breakdown, and a policy decision that says how much to trust it:
/api/v1/queryBearer · agents:runRun the grounded query pipeline: retrieval + entity detection + bound live queries + one generation + a groundedness check + the answer-policy engine. Returns a cited answer with a policy decision. The workspace comes from the key.
The number comes straight from the live database (S1) and the manager-of-record from the certified doc (S2) — no hallucinated occupancy. The real test is a question the assistant must not answer. Ask it to make a screening call on a protected basis, and the policy engine abstains before retrieval even runs:
/api/v1/queryBearer · agents:runThe same pipeline, a fair-housing-risky question. A pre-generation policy stage catches it and returns abstain_with_pointers — a refusal plus a pointer to the governing document, never an invented eligibility judgment.
Two questions, two very different behaviors from one pipeline: a high-confidence, dual-sourced answer for the occupancy question, and a hard abstain_with_pointers for the fair-housing one. The same pipeline is a native MCP tool, so it drops straight into a manager's Claude or the ops app.
6 · Lineage — trace the answer back to its source
Nadia Osei, reviewing the assistant, asks the fair question: where is this coming from, and can I trust it? The occupancy answer cited S2 → docId 01KYMAPLECOURT…. Pull that document's lineage and read the whole trail in one call — origin, governance, and the downstream answers it is grounding right now:
/api/v1/documents/{id}/lineageBearer · kb:read or runs:readThe unified per-document lineage trail: origin provenance, governance, the audit trail, derived knowledge, and downstream impact. This is how you prove an answer's pedigree end to end.
There it is, closed loop: the answer traces to a certified markdown document, that document derived the Maple Court Apartments property and its manager Trevor Lang, and it is currently grounding 9answers — so an edit to it has a known blast radius. Nadia didn't have to trust the model; she read the pedigree. The full trail also lists the dependent cache entries that would invalidate if the page changed.
Same trail, three surfaces
DocumentLineage as a visual trail on the document page (via the BFF at GET /api/w/{workspaceId}/documents/{docId}/lineage), and an agent can pull it mid-run with the kb_document_lineage MCP tool. One shape, three surfaces.7 · Crucible — lock the accuracy in
Occupancy and maintenance move every day, and a wrong answer to an owner or a resident is expensive. Capture the questions managers actually ask as a golden set so Crucible can prove the assistant still answers them after every content and data change. Anchor the golden item "Which property manager runs Maple Court Apartments?" (answer: Trevor Lang) and seed a provenance qrel from the Maple Court chunk that should ground it:
/api/v1/qrelsBearer · kb:writeAuthor a graded relevance judgment for a golden item. source=provenance derives the highest-grade judgment from the item's anchored citation — deterministic, no judge model needed.
The seed ships this golden set as Property Ops Q&A baseline and a portfolio-ops-analystagent (the "Portfolio Ops Analyst") that runs it — cited on every claim, abstaining without verified backing, and refusing fair-housing-risky judgments. Read the metrics for the seeded run:
/api/v1/evals/runs/{id}/metricsBearer · kb:read or runs:readRetrieval, RAGAS, and abstention metrics for one run — overall and by facet. The ruler for 'did the assistant get worse?'
When a metric drops after a data or content change, the golden set names exactly which question regressed — and promoting that miss back into the set turns it into a permanent test. That is the dashed loop in the diagram: Crucible's regressions steer the next round of Warrant curation. Compare two configs with a two-gate significance test in Measure & compare.
The leverage
Seven slices, one knowledge base, one audit trail. A manager gets a fast, cited occupancy number pulled live from the property database; a fair-housing-risky screening question is refused, not answered; the SLA-breached no-heat emergency at Harborview surfaces as a critical alert instead of sitting in a queue; and Nadia can trace any answer to a certified source and see its blast radius. The whole thing is measured, so accuracy is a number you watch rather than a hope. Swap "property operations" for any regulated, data-heavy domain and the shape is identical — the platform doesn't care what the records are about, only that every answer is grounded, governed, traceable, and measured.
Keep going