Bel's Handbook

The Bel's handbook for House of Ur

House of Ur is a closed alpha for friends and family. New Houses enter with a house permit code; people join an existing House with a House invite. Once you belong to a House, you can use the Library, Sites, Domains, Vault, and messaging without a paid plan. AI models and live web search require an active subscription in Treasury — House of Ur provides OpenRouter and Brave Search on platform keys; you do not paste provider API keys for LLM or search.

What House of Ur is

House of Ur gives you a private House for working with AI servitors — long-running Dubsars, specialist workers, a House Library, public Sites, optional custom Domains, Vault credentials, and House settings in Bel's Chamber.

Your signed-in identity is separate from any one House. You may keep zero, one, or many Houses. Each House has exactly one Bel (owner). Others may dwell there as Ashibu. People of a House are managed in Household.

This alpha is intentionally small. It is not open public signup. New Houses need a house permit code. Joining someone else's House needs a House invite from their Bel. Once you are inside a House: use Dubsars for ongoing work, keep documents in the Library, publish folders as Sites when you want a public URL, and keep secrets in The Vault.

Where to sign in

Production app: https://app.house-of-ur.com/
Development app (blue theme): https://appdev.house-of-ur.com/
Marketing / this handbook live under www.house-of-ur.com and wwwdev.house-of-ur.com.

Bel and Ashibu

Bel is the title for the human owner of a House — one Bel per House. Bel owns billing, House settings, Vault secrets, House API keys, and inviting people into the Household.

Ashibu (Akkadian āšibu, a dweller / resident) is the title for a welcome member of the Household. Ashibu share day-to-day work: Hall, Library, Sites, Domains, Dubsars, Impressions. Treasury and Bel's Chamber are read-only for Ashibu. Vault secrets and House API keys stay Bel-only. Ashibu may leave a House; they cannot remove the Bel.

Your account may be Bel in one House and Ashibu in another. The product labels the role for the House you are standing in. Bel name and Bel-facing messages still refer to the House's Bel; Ashibu are named as themselves when they speak.

Start here

If you are brand new, pick the path that matches what you were given.

Create a House (house permit)

  1. Sign in with GitHub or Google at https://app.house-of-ur.com/signin (or the appdev host on the development stack).
  2. Create House and enter your house permit code. That code creates a new House and makes you its Bel. Each additional House needs its own permit.
  3. Set your House slug in Bel's Chamber if prompted. The slug becomes part of every built-in Sites hostname ({site}-{house}.house-of-ur.com).
  4. Enter the House. You can use House Hall, Library, Sites, Domains, Vault, Household, and Impressions without subscribing first.
  5. Subscribe in Treasury when you want AI. Dubsar wakes, servitor chat, web search, and creating new servitors need an active plan (and Shekel balance). Billing is per House.
  6. Create your first Dubsar (or publish a Library folder as a Site — that part does not require Treasury). Invite collaborators from Household when you are ready.

Join a House (House invite)

  1. Open the invite link you were given (/join/…). Sign in with GitHub or Google if you are not already signed in.
  2. Accept the invite. You become Ashibu of that House. You do not create a House, and you do not become Bel.
  3. Work in the House. Use the rooms your Bel has opened. If you need billing changes, Vault secrets, or more invites, ask the Bel.
Important

House of Ur runs OpenRouter and Brave Search on platform keys tied to the House subscription. You do not add OpenRouter or Brave API keys for model or search usage. Your own third-party credentials (WordPress, AWS, etc.) still belong in The Vault — Bel manages those.

Household

Household is the people room of the current House — members, pending invites, and leave / remove. Bel's Chamber is House settings. Treasury is money. Household is people.

Who Can
Bel List members; mint and revoke House invites; remove an Ashibu; cannot remove themselves as Bel.
Ashibu See the member list; leave the House. Cannot mint invites or remove others.

House invite links expire after a short time and show the token only once when minted. Pending invites never expose the raw token again. If you keep more than one House, switch Houses from the app chrome; URLs include the House id so a shared link returns to the same House.

Permit vs invite

A house permit code creates a new House (you become Bel). A House invite adds someone to an existing House as Ashibu. They are not interchangeable.

Houses and rooms

Your House is easiest to understand as a small set of rooms with clear jobs.

Room What it is for Use it when
House Hall Your front room and overview. You want to re-enter the House or jump to core areas.
Servitors' Quarters Create, inspect, and remove servitors. You want to add a worker or open a Dubsar timeline.
House Library Files and folders for your House. You want documents, prompts, or material to publish as a Site.
Sites Public hosting of a Library folder. You want a URL on *.house-of-ur.com (and optional custom hostname).
Domains Verify a registrar domain and attach hostnames to Sites. You want articles.example.com (or similar) without changing nameservers.
The Vault Credentials and secrets for runtime use (Bel). You need API keys or other values servitors may use (not OpenRouter/Brave).
Impressions House-wide timeline of usage, activity, and audit records. You want to see what happened, or open optional API payloads for debugging.
Usage charts Aggregated cost, tokens, and request volume. You want trends across the House, a provider, or one servitor.
Treasury Subscription, Shekels, packs, auto top-up, daily cap (Bel writes; Ashibu read-only). You want AI provider usage or to manage billing.
Household Members, House invites, leave / remove. You want to share the House with people, or leave it.
Bel's Chamber House-level settings (including House slug). Ashibu read-only. You want to edit Bel name, timezone, or slug.

House Hall

House Hall is the foyer. It orients you, surfaces the latest Daily Tablet entry, and sends you onward to the rooms where work happens.

Servitors' Quarters

Create and manage your workforce. For most meaningful ongoing work, start with a Dubsar.

House Library

The Library is for files and folders: reference material, notes, prompts, images, datasets, and working documents. Sites publish a chosen Library path; content stays in the Library as the source of truth.

The Vault

The Vault is for credentials, not documents. If a value would be dangerous to leave in a normal file, it belongs here. OpenRouter and Brave are not configured here — they come from Treasury. Ashibu do not manage Vault secrets.

Bel's Chamber

Bel's Chamber holds Bel name, timezone, and your House slug. Provider billing is managed in Treasury. Account-level profile and Create House live in user settings, not here. Ashibu can open Bel's Chamber to read House details; only the Bel changes them.

Servitor choices

A servitor is a worker you create for a specific style of job. In this alpha, most Houses should lean toward Dubsars first and treat the other types as more specialized tools.

In broad terms, capability runs Dubsar → Igigi → Apkallu → Kalu. More capable workers often want stronger (and usually more expensive) models.

Type When to use it How to think about models
Dubsar Default for ongoing projects, work lists, timers, webhooks, and continuity. Main model does the real work; maintenance model handles cheaper upkeep.
Igigi Technical tasks that need code execution outside a Dubsar MicroVM shell. Often rewards a stronger model.
Apkallu Structured tool use and live web search without Dubsar continuity. Good mid-weight worker when you do not need a timeline.
Kalu Simple chat-focused work. Cheaper models are often enough.

Dubsars

A Dubsar is a long-lived, event-sourced worker with a timeline, identity, work list, timers, messaging, and a shell. While awake it can use tools, read and write Library material, and run shell commands in a House-provisioned MicroVM executor (the primary path for Dubsar shell work).

You shape a Dubsar by talking to it on the timeline. Over time its Identity and Work List reflect the role and standing instructions you want it to carry forward.

Main model vs maintenance model

The main model handles core agentic work. The maintenance model handles lighter upkeep stages and can often be smaller and cheaper.

Sleep / wake cycle

  • Asleep: default; nothing running, no spend.
  • An event arrives: Bel message, webhook, timer, or another Dubsar — then Awake.
  • Awake: process the event and Work List until nothing left to do.
  • Maintenance: update Identity / Work List, then back to Asleep.

Model guidance for Dubsars

The picker is the OpenRouter model list. Experiment is normal.

  • deepseek/deepseek-v4-pro — current default main model for new Dubsars.
  • deepseek/deepseek-v4-flash — current default maintenance model for new Dubsars.
  • openai/gpt-5.3-codex — strong agentic main-model option.
  • openai/gpt-5.4-mini — cheap and useful, especially as maintenance.
  • z-ai/glm-5 — cheap, competent Dubsar option.
  • google/gemini-3-flash-preview — cheap; do not trust it with anything important.

Timeline first

The timeline shows messages, wakes, timers, and tool activity (including shell cards with a human-readable reason). If you want to understand what a Dubsar has been doing, start there.

Timers and recurring work

Ask for things like tomorrow at 9am… or every Monday…. Timers are a major reason Dubsars beat one-off chats for ongoing responsibilities.

Webhook input

External systems can POST into a Dubsar timeline. In Settings, enable webhooks and create a webhook code. Send to:

POST https://app.house-of-ur.com/api/houses/{houseId}/webhook/{dubsarId}
Header: X-Webhook-Code: {your-code}
(or Authorization: Bearer {your-code}, or ?code=)

On the development stack, use https://appdev.house-of-ur.com instead.

Dubsars and Library files

Dubsars can read and maintain Library files, and their MicroVM can sync selected folders for shell work (subject to size limits). Prefer the Library for durable documents; use the shell for ephemeral computation.

Dubsars working together

You can ask one Dubsar to consult or instruct another — useful for hand-offs and specialization.

If a Dubsar seems quiet

Quiet usually means asleep. Check the timeline and recent wakes before assuming something is broken. Executor repair exists as an ops escape hatch; day-to-day shell work runs on the MicroVM path, not a per-Dubsar Lambda you are expected to manage.

Optional payload logging

By default Impressions stores usage metadata (model, tokens, search queries) without full prompts/responses. For debugging a specific Dubsar, open Settings → Edit → Impressions logging and enable full LLM and/or web-search bodies (about seven days retention). Turn it off when finished — payloads can contain secrets.

Library and Vault

If it should behave like a document, put it in the Library. If it is a secret, put it in The Vault.

Use the Library for

Notes, markdown sites, prompts, datasets, images, and anything you might publish as a Site.

Use the Vault for

Third-party API keys and credentials your servitors need — not OpenRouter or Brave.

Publish from the Library

From a Library folder you can create a Site that serves that path. Badges and links in the Library help you jump between the folder and its Site.

Sites

A Site publishes a Library folder as a public website on House of Ur infrastructure. The Library remains the source of truth; the Site is the public edge.

Built-in hostname

  • Production: {siteSlug}-{houseSlug}.house-of-ur.com
  • Development: {siteSlug}-{houseSlug}-dev.house-of-ur.com

That built-in URL always remains available, even after you attach a custom hostname under Domains.

Modes

Mode Behaviour
static Normal static hosting with index / error documents as configured.
spa Single-page app style routing (unknown paths fall back appropriately).
raw Minimal processing — useful for simple file trees.

Cache

Library writes do not automatically flush the public CDN. When visitors should see fresh files, open the Site and use Refresh cache.

Rename

You can rename a Site slug while it has only the built-in hostname. Rename is blocked while a custom hostname is attached — detach first, rename, then re-attach if needed.

Provision status

New Sites provision asynchronously. Stay on the Site detail until status settles. If something looks stuck, try again later or use reconcile from the Site detail when offered; see Troubleshooting.

Domains

Domains lets you bring a registrar-owned domain into your House without changing nameservers. House of Ur never takes over your DNS zone. You paste specific records we show you.

  1. Add a domain in the Domains room (for example sites.example.com or example.com — whichever DNS zone you control for the labels you will attach).
  2. Prove ownership by creating the TXT (or instructed) verify record, then click verify. Status moves to verified when public DNS matches.
  3. Attach to a Site from Site detail: pick the verified domain and a subdomain label (for example label articles on domain sites.example.com → articles.sites.example.com). One custom hostname per Site.
  4. Finish certificate + traffic DNS: paste the ACM validation CNAME(s), wait until the certificate is ready, then CNAME the hostname to the CloudFront target shown in the UI. Use Check to refresh status.
Apex hosting

Serving a naked apex (example.com) as the Site hostname is not supported yet. For now, attach a subdomain (often www or a dedicated label like sites) and, if you need visitors on the apex, use your registrar’s apex→www (or similar) forward.

Conflicts

A hostname can only be attached in one place (across Houses and across prod vs dev). If it is taken, the app says: This hostname is already in use.

Treasury

Treasury is subscription and billing for AI provider usage. House of Ur bills through Paddle. Usage is metered in Shekels (₪) and visible in Impressions and Usage charts.

Without an active subscription you can still sign in, use Library / Sites / Domains, store non-provider secrets in The Vault, and read messages — but servitor LLM work, web search, and creating new servitors require Treasury.

Plans (typical)

Plan USD / month Included Shekels
Starter$20500 ₪
Standard$351000 ₪
Pro$702000 ₪

Pricing model: 1 USD = 30 ₪. Included allowance refreshes with the plan; purchased top-up packs do not expire the same way. You can buy Small / Medium / Large packs, enable auto top-up when balance runs low, and optionally set a daily spend cap.

When Shekels hit zero (on a normal House), provider work stops until you top up or renew. A daily cap, if set, can also block provider calls for the rest of the day.

OpenRouter

OpenRouter is the model gateway behind House of Ur. Every LLM request from your servitors goes through House of Ur's platform OpenRouter account, gated by Treasury. You do not create or paste your own OpenRouter API key in the app.

  1. Sign in and create or join a House (permit or House invite).
  2. Subscribe in Treasury when you want model access (Bel).
  3. Create servitors and pick models from the in-app list (sourced from OpenRouter).

Impressions

Impressions is the House's record of facts: what happened, when, and who was involved. Open it from the sidebar under the current House (/house/{houseId}/impressions). Usage charts live at /house/{houseId}/impressions/charts. Bel and Ashibu can both read Impressions.

  • Usage rows — OpenRouter completions and Brave searches (cost metadata, tokens, queries).
  • Audit rows — sign-ins and similar house events.

Charts aggregate cost (USD estimate), tokens, and request counts for the House, a provider, or one servitor. Impressions is not a full replacement for OpenRouter's own activity pages; it is your House ledger.

Common workflows

First useful Dubsar

  1. Subscribe in Treasury (if you have not already).
  2. Create a Dubsar in Servitors' Quarters.
  3. Tell it who it is and what it owns on the timeline.
  4. Point it at a Library folder if it should maintain documents.

Publish a simple site

  1. Put an index.html (or markdown site tree) in a Library folder.
  2. Create a Site from Sites or from the Library publish flow.
  3. Wait for provision; open the built-in hostname.
  4. After edits, use Refresh cache when visitors should see the new files.
  5. Optionally verify a Domain and attach a custom hostname.

Invite someone into your House

  1. As Bel, open Household.
  2. Mint a House invite and share the link (not a house permit code).
  3. They sign in, accept, and become Ashibu of this House.

Credentials for external systems

  1. Store the secret in The Vault.
  2. Grant visibility to the Dubsar that should use it.
  3. Ask the Dubsar to use that credential — do not paste long-lived secrets into the timeline if you can avoid it.

API reference

This section is for technical Bels and agent builders who want to call House APIs directly. It covers House-scoped HTTP endpoints Bel can use with a session or House API key. It is not a catalog of internal gateway actions.

Conventions

Item Value
Prod base URL https://app.house-of-ur.com
Dev base URL https://appdev.house-of-ur.com
Auth header Authorization: Bearer {access_token}
JSON errors Typically {"detail":{"error":"…","message":"…"}} (or FastAPI detail variants)

Auth

Browser Bels obtain tokens via social OAuth (sign-in chooser → /auth/github or /auth/google → callback → access + refresh tokens). Refresh with POST /auth/token/refresh. Logout: POST /auth/logout.

For scripts, create a House API key in the app, then exchange it:

POST /auth/token/apikey
{"api_key":"cou_ak_…"}

→ {"access_token":"…", …}

Then call /api/… with that bearer token. Keys are House-scoped; treat them like passwords.

Health

GET/api/health

Liveness check. No auth required.

GET/api/account

Signed-in user profile plus House memberships (role per House).

Houses

House routes are scoped under /api/houses/{houseId}/…. Authorization is membership in that House (and role for Bel-only writes). Session tokens are user-scoped; they do not embed a House id.

POST/api/houses

Create a House by redeeming a house permit code (people tokens only; caller becomes Bel).

GET/api/houses/{houseId}

House record.

PUT/api/houses/{houseId}

Update House fields Bel may edit (including slug where allowed).

GET/api/houses/{houseId}/dashboard

Hall / dashboard payload.

GET/api/houses/{houseId}/models

Model list for pickers (OpenRouter-backed).

Library

GET/api/houses/{houseId}/library

List folder contents (path query).

GET/api/houses/{houseId}/library/read

Read a text file.

POST/api/houses/{houseId}/library/patch

Write / patch file content.

POST/api/houses/{houseId}/library/folders

Create folder.

POST/api/houses/{houseId}/library/upload

Upload binary / file bytes.

GET/api/houses/{houseId}/library/download

Download a file.

POST/api/houses/{houseId}/library/rename

Rename path.

DELETE/api/houses/{houseId}/library

Delete path (query identifies target).

Sites

GET/api/houses/{houseId}/sites

List Sites → {"data":[…]}.

POST/api/houses/{houseId}/sites

Create Site. Body:

{"site_slug":"docs","library_path":"/public/docs","configuration":{"mode":"static"}}
GET/api/houses/{houseId}/sites/{siteId}

Site detail including provision status and custom hostname fields when attached.

PATCH/api/houses/{houseId}/sites/{siteId}

Update library path / configuration.

POST/api/houses/{houseId}/sites/{siteId}/rename

Body: {"site_slug":"new-slug"}. Blocked while a custom hostname is attached.

DELETE/api/houses/{houseId}/sites/{siteId}

Delete Site (Library content remains).

POST/api/houses/{houseId}/sites/{siteId}/invalidate

Refresh CDN cache (Bel “Refresh cache”).

POST/api/houses/{houseId}/sites/{siteId}/reconcile

Ask the platform to re-check / heal provision state.

POST/api/houses/{houseId}/sites/{siteId}/custom-hostname

Attach. Body: {"domain_id":"…","subdomain":"articles"}.

POST/api/houses/{houseId}/sites/{siteId}/custom-hostname/check

Re-check ACM / DNS / traffic status; returns updated instructions when still pending.

DELETE/api/houses/{houseId}/sites/{siteId}/custom-hostname

Detach custom hostname; built-in URL remains.

Domains

GET/api/houses/{houseId}/domains

List domains → {"data":[…]}.

POST/api/houses/{houseId}/domains

Body: {"domain_name":"sites.example.com"}.

GET/api/houses/{houseId}/domains/{domainId}

Detail + ownership DNS instructions while pending.

POST/api/houses/{houseId}/domains/{domainId}/verify

Poll public DNS for the ownership record.

DELETE/api/houses/{houseId}/domains/{domainId}

Remove domain (blocked if still in use by an attach).

Servitors and sessions

GET/api/houses/{houseId}/servitors

List servitors.

POST/api/houses/{houseId}/servitors

Create servitor (requires Treasury for normal Houses).

GET / PUT / DELETE/api/servitors/{servitorId}

Fetch, update, or delete.

POST/api/servitors/{servitorId}/sessions

Start a chat session (non-Dubsar flows).

POST/api/sessions/{sessionId}/messages

Send a message into a session.

Dubsars

GET/api/dubsars/{dubsarId}

Dubsar detail / settings snapshot.

PUT/api/dubsars/{dubsarId}

Update settings (models, webhook_enabled, logging flags, etc.).

POST/api/dubsars/{dubsarId}/messages

Bel message into the timeline (wakes the Dubsar).

GET/api/dubsars/{dubsarId}/events

Timeline events (pagination via query params where supported).

POST / DELETE/api/dubsars/{dubsarId}/webhook-codes[/{codeId}]

Manage inbound webhook codes.

POST/api/houses/{houseId}/webhook/{dubsarId}

Unauthenticated ingress for external systems (code via header / bearer / query). Not a Bel session call.

Treasury (billing)

All under /api/houses/{houseId}/billing/…. Common reads/actions:

  • GET …/tiers, GET …/tier-prices, GET …/packs, GET …/pack-prices
  • GET …/projection — balance / plan projection
  • PUT …/selection, POST …/checkout, POST …/pack-checkout
  • PUT …/daily-spend-cap, PATCH …/settings, GET …/auto-topup/eligibility
  • POST …/portal-session — Paddle customer portal

Impressions

GET/api/houses/{houseId}/impressions

List impressions (filters via query).

GET/api/houses/{houseId}/impressions/{impressionId}

Single impression.

GET/api/houses/{houseId}/impressions/{impressionId}/payload

Optional full payload when logging was enabled and still retained.

House API keys

GET / POST/api/houses/{houseId}/apikeys

List or create keys.

DELETE/api/apikeys/{keyId}

Revoke a key.

Example: list Sites on appdev
curl -s https://appdev.house-of-ur.com/api/houses/$HOUSE_ID/sites \
  -H "Authorization: Bearer $TOKEN"

Troubleshooting

Symptom Likely cause What to try
Servitor / Dubsar cannot use models or search No subscription, zero Shekels, or daily cap hit (financial_gate) Open Treasury; subscribe, buy a pack, or wait for the cap window to reset.
Domain stays pending verification TXT not published, wrong zone, or DNS not propagated Confirm the record at the DNS host that actually answers for the name; click verify again.
Custom hostname pending / failed ACM CNAME missing, or traffic CNAME not pointed at CloudFront yet Paste both instruction sets from Site detail; use Check; wait for DNS TTL.
“This hostname is already in use.” Hostname reserved on this or another House / env Pick another label, or detach it where it is currently attached.
Cannot rename Site Custom hostname still attached Detach custom hostname, rename, re-attach if needed.
Site not updating after Library edits CDN cache Refresh cache on the Site detail.
Site stuck provisioning Async provision / edge config lag Wait and reload; use reconcile if available; retry later on the same stack (dev vs prod).
Dubsar asleep / quiet No recent wake events Send a timeline message; check timers and webhook enablement.

Mesopotamian theming

House of Ur borrows names from ancient Mesopotamia as atmosphere, not as a history lesson. Bel, Ashibu, Dubsar, House Hall, Library, Treasury, Household, and Impressions are product labels first. Use the glossary when a word is unfamiliar.

Glossary

Bel

The human owner of a House — billing, settings, secrets, and Household invites.

Ashibu

A welcome dweller of the House (API role member) — full day-to-day work; not Bel.

House

A private workspace and billing entity. Separate from your signed-in account.

Household

The people room: members, House invites, leave / remove.

House permit code

Closed-alpha code that creates a new House and makes the redeemer Bel.

House invite

Bel-minted link that adds a signed-in person to an existing House as Ashibu.

House slug

Short public identity used in built-in Sites hostnames.

Servitor

An AI worker in the House (Dubsar, Igigi, Apkallu, or Kalu).

Dubsar

Long-lived continuous agent with timeline, work list, and MicroVM shell.

Library

House file tree; source of truth for Site content.

Site

Public hosting of a Library folder on a built-in (and optional custom) hostname.

Domain

A registrar domain verified into the House for attaching hostnames — without NS takeover.

Custom hostname

One extra DNS name attached to a Site (for example articles.sites.example.com).

Treasury

Subscription and Shekel billing for AI providers (one pool per House).

Shekel (₪)

Internal credit unit for metered AI usage (1 USD = 30 ₪ in the pricing model).

Impressions

Append-only House facts for usage and audit.

The Vault

Credential store for third-party secrets (not OpenRouter/Brave keys). Bel-managed.

OpenRouter

Platform model gateway used by House of Ur.