Norbius
Norbius
Every workspace can have an AI agent — Norbius on Colony — that works through the same collections and policies as the people who use it. You author what it knows and what it may use; the engine runs the loop.
The brief
# src/agent/+agent.md (templates/on-demand-services, excerpt)
# The on-demand services workspace
You are Norbius, the assistant of a home-services business. Customers book a **service** at their
address; each booking has one or more **visits**, and every visit is held by one **helper**.
## Whom you serve
Staff on the service desk take bookings and dispatch visits; helpers look at their own visits. Your
tools already carry each person's access.
## How the workspace behaves
- The business runs on **Singapore time**.
- A helper never holds two overlapping visits. A visit that becomes unreachable in time is moved to
the best other helper automatically. src/agent/+agent.md is the in-app agent’s brief for staff; without it there is no in-app agent. src/agent/+agent.external.md is the brief for external members; without it they get no agent. A brief states directives — what the collections mean and the house rules — never who may do what.
What the model sees
The system prompt is static per workspace release: the kernel prompt, the brief, an envoy’s task, and the skills with their one-line descriptions. It carries no date, actor or conversation state. Each message arrives with a sender header, and the context tool answers the time, the zone and who is acting.
Tools are your collections
The agent’s tools are the collection reads, queries and actions the acting policies grant, and the automations they may start. Each query and action sets its agent use with agent: 'direct' (the default), 'confirm' (in-app turns ask first) or 'never'. Every call is judged against the actor’s grants, and every write outcome is reported in the reply. Built-in tools lists the fixed tool set.
Skills
src/agent/skill/+<name>.skill.md is a skill: frontmatter with a description:, then ## sections. The agent sees each skill’s name and description, and reads the body when it needs it. A policy’s capabilities.skills decides who has it.
MCP servers
src/agent/mcp/+<name>.mcp.ts is mcp({ description, url, auth?, tools? }): a remote MCP server over streamable HTTP, whose URL and credentials are workspace secrets, so each tenant configures its own. tools allowlists the server’s tools. A server is reachable only through a policy’s capabilities.mcp, and an unreachable one answers Unavailable.
Triage
When the host configures AI, a fast decision model decides when a message in a conversation starts a turn: it may wait for more messages or, in a group conversation, leave them alone. A mention, a reply or send-now always starts a turn. agent: { triage: false } in +workspace.ts turns triage off for the in-app agent.
Beyond the app
The same agent answers on WhatsApp, Telegram and email through envoys.