Sign in to this tenant
Pick a question, or ask one
Research
A deeper run: the engine explores the question in several passes, each building on the last, and synthesises at the end. It opens a thread like any question; the findings arrive as it works. Costs more, takes longer.
History
your past questions on this tenant, from the labor ledger| when | kind | question | took | exit |
|---|
Inbox
what arrived on the inbound channel — the API, the drop folder — stored as it came; nothing has been read from it yet| received | channel | sender | subject | attachments |
|---|
Send a message
What an integration sends: who it is from, a subject, text, files. Attributed to web:desk; it lands under inbox/ in your workspace and in its ledger. A file put in inbox/drop/ on the tenant arrives the same way without the API.
Queue
everything to decide is a record with outcomes: what the runtime found, what it refers to, the choices; the decision is yours, recorded under your name, and what follows it is carried out by the runtime| created | kind | record | findings | assigned | status |
|---|
pick a record
pick a task, or draft one
Proposals awaiting review
What the engine learned about the shape of your data — never a value. A content? flag is a hint from a reader; read the line and decide. Apply files it on a page as unverified; drop discards it.
| proposal | flag | page |
|---|
Pages
| page | tag | entries | first entry |
|---|
Tools
Data sources
A source is offered to the engine only when its verification passes here, for the policy file as it is, and only to the principals granted it in Settings › Access. Anything else is absent, not warned about.
| source | where · tools | offered | why | who reaches it |
|---|
Register a database from an aida-scope hand-over
The zip your IT downloaded from aida-scope after signing and verifying. The password of the engine's user is entered separately, below, and never travels with the bundle. A mailbox is registered on the tenant itself with aida-mailbox register; it then appears above like any source.
The engine user's password
Stored in your workspace's environment file on the tenant, never in git, never shown again. The engine reads it on every run; then verify.
Monitoring
Intake
goal 1 measured: orders drafted without a warning, deviations found by rule, blocked, seconds from arrival to record — from the run reports and the queueby rule · blocked · open records · by day
By day
| day | runs | failures | p95 | tokens in / out | cost |
|---|
By model and by channel
| model | runs | failures | p95 | cost |
|---|
| channel | runs | failures | p95 |
|---|
Recent runs
| when | kind | caller | exit | took | model | question |
|---|
Incidents and in flight
Memory, sources, workspace, and who looked
"who looked" is the operator's trail on your tenant: every time simtree read your rows, with the reason given.
Your integrations
A system of yours that asks this tenant: it sends its key as Authorization: Bearer and names the person behind each request. The key is shown once, when created; revoke and create again to rotate. It works on the next request, no restart. Then give a principal below the identity web:<name> and grant it the sources it may use.
| name | created | by | key |
|---|
Access
Who may reach which data source: one table, access.yaml in your workspace, ratified by each change's commit under your name. A principal is a person, a workflow or a system; its identities are how a run announces itself — telegram:<id>, web:<integration> (every actor of it) or web:<integration>:<actor> (one), task:<name>, env:<token>, cli, test, <channel>:*. The most specific identity wins; * under sources is every source.
| principal | identities | sources |
|---|
Channels on this tenant
What runs here is set by the operator: the chat, the desk, the integrations above. An identity in the table above names one of these, or one sender or actor on it.
Admin access
One admin key per tenant, issued by the operator; rotating it is theirs. Your name on sign-in is recorded on every action and is the attesting identity when you ratify.
Status
…
The API this page uses
Everything here is a call to /api/v1/… on this origin with two headers, Authorization: Bearer <admin key> and X-Actor: <name>. The spec is at /api/v1/openapi.json, the interactive docs at /api/v1/docs. Integrating into your own admin means making the same calls this page makes.
GET /api/v1/admin/memory proposals with flag and page, and the pages
POST /api/v1/admin/memory/apply {ids, page?} POST /api/v1/admin/memory/drop {ids}
POST /api/v1/admin/memory/add {text, page?}
GET /api/v1/admin/memory/pages/{page}/review POST /api/v1/admin/memory/pages/{page}/ratify
GET /api/v1/admin/memory/audit POST /api/v1/admin/memory/contradictions
GET /api/v1/admin/memory/history GET /api/v1/admin/status
GET /api/v1/admin/tasks POST /api/v1/admin/tasks {id, goal} GET /api/v1/admin/tasks/{id} | /outcomes | /file | /actions
PUT /api/v1/admin/tasks/{id}/file {human, message} PUT /api/v1/admin/tasks/{id}/enabled {enabled} POST /api/v1/admin/tasks/{id}/run | /record
GET /api/v1/admin/digests GET /api/v1/admin/digests/{stamp}
GET /api/v1/admin/monitor?days= GET /api/v1/admin/monitor/rows?days=&limit=&what=
GET /api/v1/admin/integrations POST /api/v1/admin/integrations {name} → the key, once DELETE /api/v1/admin/integrations/{name}
GET /api/v1/admin/channels GET /api/v1/admin/sources
POST /api/v1/admin/sources {name, host, port, zip (base64)}
POST /api/v1/admin/sources/{name}/secret {password} POST /api/v1/admin/sources/{name}/verify
GET /api/v1/admin/access the table: principals, identities, sources
POST /api/v1/admin/access/principals {name, kind, identities, sources} DELETE /api/v1/admin/access/principals/{name}
POST | DELETE /api/v1/admin/access/principals/{name}/identities {identity}
POST | DELETE /api/v1/admin/access/grants {principal, source} every write is a commit under your name
POST /api/v1/conversations/{uid}/messages {text, actor, client_msg_id, thread_ref?, mode? (ask|dig), loop?}
GET /api/v1/conversations/{uid}/inflight what is running, and the limits (one per thread, a cap per conversation)
GET /api/v1/admin/captures/{path} one of your captures, for history
GET /api/v1/conversations/{uid}/events?after=&epoch=&wait_s=
GET /api/v1/search?q=&limit=&since=&source= the text sources you may read, by their index, before any model: per-source counts, hits with snippets; mode "or" when no message had every word
GET /api/v1/search?related=&source=&limit= instead of q: the thread and the messages sharing a reference with that message, each hit with why
POST /api/v1/inbox multipart/form-data: sender, subject, text, files (any number) → the item, duplicate:true when stored already
GET /api/v1/inbox?limit=&before= GET /api/v1/inbox/{id} GET /api/v1/inbox/{id}/files/{name} the bytes, as stored
GET /api/v1/queue?status=&kind=&assigned=&limit=&before= the decision queue, newest first, every record whole; GET /api/v1/queue/{id} adds its ledger; GET /api/v1/queue/counts
POST /api/v1/queue/{id}/decide {outcome, note?} take an outcome as the person behind X-Actor; 409 already decided, 403 when it requires a kind your principal is not