The system
How the system worksThe DirectoryDispatchThe LedgerAI modelsAI agentsYour installationThe appThe research libraryWhat changes for your businessUse it from your softwareEverything it can do
Messaging
iMessageWhatsApp
Ads and leads
AdsCreativeLeads
Devices
Devices
Industries
RealtorsRestaurantsHome services
Explore
How it worksPermissions and limitsCompareSet upQuestionsText me

An AI workspace that operates on the business, not on screenshots of it

Drop in a competitor ad. The Space turns it into objects, links them with typed edges, lets two people and an agent work the same ids, projects its numbers, opens issues on them and keeps watching on a rule. Every card on this page is the live object, in the look of its app.

Drop in a competitor ad. The Space turns it into objects, links them, and keeps watching.

A live Space: open it.

The same graph as a dashboard

The overview is the graph again, as numbered panels: the input, the analysis, the competitor, its pages, the variants, the graph, a direct reply field, the differences beside us (unknowns are said, never filled), what is not known (each a need a person or an agent can take), the rules as switches, the metrics, the timeline, the apps the engine registers, the people and the agent. Every panel reads the same ids.

A live Space: open it.

One address in, a graph out

The address https://relevanceai.com/ was dropped into the Space on 2026-10-09. The build fetched the page itself (sha256 ade5239277240a02…, 301339 bytes) and made these objects, each with its own id and its own page:

  • asset obj_6d0c383a011ce1d35583e74b: the original, with its hash and the exact fetch
  • ad obj_6df3cb08754fb4008f21b3be: what the page presents as its ad (headline, text, image, call to action); labelled as such
  • competitor obj_9a90225482d0d81ed742c2c1: Relevance AI, resolved from the landing page’s domain, never from a name alone; the evidence is on the edge
  • pages ×6 and research ×1: the competitor’s public pages (each with its hash) and public search results, labelled as search results
  • analysis obj_a0e0c09160cba70ca3d08e8a: nine statements, each extracted with its source, confirmed, rejected or left open
  • claims ×2: sentences the page makes, each an object the ad contains_claim
  • hypotheses ×3 and variants ×3: each variant derived_from the ad and tests one hypothesis
  • rule obj_7056be75b84c01cb84dcb14e: a sentence turned into a structure the runtime enforces

Every line on the board is a typed edge with its evidence, author, time and version. Click one.

The ad, as an object

Correct one statement

The analysis is not a paragraph. It is nine statements, each marked extracted (with the words it was read from), confirmed, rejected or open. Anyone reading this page may confirm, correct or reject a statement here; the change is recorded with who made it, the earlier value is kept, and the same statement changes on the board above and on the object’s own page.

The same object from a reply

A reply addresses the object by its id, not a recap of a chat. The Space’s agent reads the words: find their other public pages, make three variants, check this competitor daily are operations; anything else is kept as a note on the object. What the reply made appears in the Space, not only here.

A live Space: open it.

The rule

The sentence “Check this competitor daily. When a new offer appears, compare it with ours and propose three alternatives. Do not publish anything without approval. Only generate alternatives if they sell a product we also sell.” became version 1 of a rule: every day at 09:00; if offer.changed eq true and product.overlap eq true; then observe, compare_offer, propose_variants ×3; gates: approval before publish; approval before send; budget: max_fetches 4, model_calls 0, max_variants 3, max_runs_per_day 1. A dry run reads what the Space knows and spends nothing. A new sentence makes a new version with its difference against the one before. Activation and checks are gated by role; this build never publishes or sends from a rule.

A live Space: open it.

Numbers, and a projection over them

A metric is a number with a source and a date; this page invents none. Below, two kinds are real to this build: the views of six articles of this site (its own counter), and a base the owner typed in as an example, labelled as such. A projection is an object: the sentence “if CTR goes up 10% and CPC down 5%” became assumptions; the funnel was recomputed with the formulas written in the object (clicks = impressions × CTR, spend = clicks × CPC, conversions = clicks × CVR, revenue = conversions × AOV); every row names its measured source, its formula or its assumption; rows that need a metric nobody measured stay empty and say so. Toggle Traffic, Spend, Conversion or Market; transpose rows and columns; open the JSON under the view; reply to the projection to change an assumption (a new version, with its history).

A live Space: open it.

Views from a sentence

A view is a saved definition over the same objects: what to show, grouped by which field, filtered how, sorted how, drawn as a table, a board, a chart, a funnel or the apps. It is made by a sentence through one grammar (show | table | board | chart | graph | list <what> [by <field>] [where <field> <op> <value>] [sorted by <field>] [as funnel|bars|lines] · compare <a> and <b> · levers <kinds> · arrange | group | filter | sort … · apps · what is missing to compare <metric> · if <scenario>, show the funnel). What the grammar does not understand is said back, never guessed: “show the flibbertigibbet by moon phase” answers “not understood: by moon phase / flibbertigibbet”. A model saying any of this says it through the same grammar; no model was called to make these.

The sentences below were typed into this Space on 2026-10-09; each saved view, its id and what the grammar read are in facts.views_from_sentences. The levers on the Metrics view above are sliders: each writes a new projection version when it settles, and two moved together write one version; a projected row opens into the intermediate variables and the formula that produced it, each input marked measured, assumed, derived or missing.

“table of pages by competitor sorted by date”

A live Space: open it.

“chart article views” — the six article view counts this build measures itself, each bar naming its source.

A live Space: open it.

“if CTR up 10% and CPC down 5%, show the funnel” — the projection is made from the scenario, then the funnel rows open into their inputs.

A live Space: open it.

“compare us and Relevance AI”

A live Space: open it.

“apps” — every object of the Space that lives in an app, drawn as that app: the issue as a Reminders card, the pages as Safari, the screenshots as Photos.

A live Space: open it.

The canvas — two or more views side by side, each with its own width, saved with the Space.

A live Space: open it.

Issues on the same objects

An issue is a task of this build (its Tasks tab), opened from the Space with a zero-context spec composed from the object it is about, attached to the Space and linked to that object with an about edge. The board of issues is the Tasks list by state.

A live Space: open it.

What happened, in order

Every ingest, resolution, interpretation, correction, proposal, dry run, activation and refusal is an event with its actor, the object’s version and its Ledger row.

A live Space: open it.

Two people, one object, the server deciding

the proof: two signed-in people, one object, a change seen by both, a refusal
JSONthe proof: two signed-in people, one object, a change seen by both, a refusal
9 keys
"what_this_is""two separately authenticated humans and the deterministic Space agent on one canonical object graph; every step below is a live call the build answered, with its receipt"
"human_a" 3 keys
"who""the owner"
"how""the build key (x-sheets-key), the same credential the Console uses"
"viewer" 2 keys
"kind""owner"
"id""owner"
"human_b" 6 keys
"who""Space tester (member)"
"person_id""p_n5cauqlp"
"how""a person record added by the owner (POST /api/people), a one-time invitation link made with link_only (not sent by the build; the owner hands it over), signed in by POST to that link: an ms_session cookie of their own"
"role_in_space""editor"
"ops_granted" 6 items
"read"
"analysis.confirm"
"variant.review"
"policy.revise"
"policy.dryrun"
"space.layout"
"viewer" 2 keys
"kind""person"
"id""p_n5cauqlp"
"agent" 4 keys
"id""space-agent"
"kind""deterministic"
"what_it_did" 3 items
"resolved the advertiser from the landing page’s domain (ad.resolve, ex_b88f6460728fe2b33e22f4ce9db2)"
"wrote the analysis (ad.interpret, ex_f0a63b467224c58e054129995ba6)"
"read the watched pages twice on the owner’s press and recorded two observations (policy.check, ex_ab497a2a77c3836604e285791bef and ex_553e759661f9df0a7058c3663d5f)"
"model_calls"0
"canonical_object" 3 keys
"id""obj_a0e0c09160cba70ca3d08e8a"
"type""analysis"
"sequence" 10 items
4 keys
"step"1
"who""human B"
"read""GET /live/s/obj_c78144b0b422f79531d614fd.json with their own session"
"saw" 4 keys
"me" 3 keys
"kind""person"
"id""p_n5cauqlp"
"role""editor"
"objects"20
"ops_offered_on_the_analysis" 1 item
"analysis.confirm"
"ops_offered_on_the_rule" 2 items
"policy.revise"
"policy.dryrun"
6 keys
"step"2
"who""human A"
"read""the analysis before any change"
"version""282e5745512c"
"hook""extracted"
"offer""extracted"
5 keys
"step"3
"who""human B"
"did""POST /live/s/…/reply {object_id: the analysis, text: "confirm hook"}: read as analysis.confirm"
"execution""ex_37f26ece904e17986804b8cd92ed"
"event""corrected (ledger worker:misc-sheets:3898e13f-f8dd-4b4f-8825-c21f5b5cfacf:2)"
7 keys
"step"4
"who""human B"
"did""POST /live/objects/obj_a0e0c09160cba70ca3d08e8a/ops/analysis.confirm {field: offer, decision: reject, note: the figures $7, $48, $1.2 are per-task costs in the page text, not the offer the ad makes}"
"execution""ex_38822e0a85530807918a15c452b3"
"version_after""405141e27e3c"
"event""corrected (ledger worker:misc-sheets:4b398714-831e-4a6e-8438-0ea9aaf5233e:2)"
"kept""the earlier value in the statement’s history (history: 1)"
7 keys
"step"5
"who""human A"
"read""the same object, GET /api/blocks/objects/obj_a0e0c09160cba70ca3d08e8a"
"version""405141e27e3c"
"hook""confirmed by Space tester (member) (person)"
"offer""rejected by Space tester (member) (person)"
"note""the version the owner reads is the version B wrote; nothing was re-created"
5 keys
"step"6
"who""human B"
"did""POST /live/objects/obj_7056be75b84c01cb84dcb14e/ops/policy.activate"
"answer" 5 keys
"http"403
"state""refused"
"code""not_granted"
"reason""You were not granted policy.activate on this object."
"ledger""worker:misc-sheets:479bf1e6-a483-40cc-8113-53f34f0c8683:1"
"event""denied"
6 keys
"step"7
"who""human B"
"did""POST …/ops/policy.revise {text: "Only generate alternatives if they sell a product we also sell."}"
"execution""ex_1d468782c0c102ca521558b791e6"
"result" 2 keys
"version"2
"diff" 3 keys
"added" 1 item
1 key
"condition" 3 keys
"field""product.overlap"
"op""eq"
"value"true
"changed" 1 item
3 keys
"gate""variants_only_if_conditions"
"from"null
"to"true
"removed"
"event""revised (ledger worker:misc-sheets:6d5c1ad0-927e-4bfd-abdc-aa2f98e878d2:2)"
5 keys
"step"8
"who""human B"
"did""reply to the ad: "Find their other public pages and offers" (read as competitor.expand)"
"answer""refused: You were not granted competitor.expand on this object."
"event""denied (ledger worker:misc-sheets:5267144c-1c0f-40ee-a7e4-353e6291a656:1)"
5 keys
"step"9
"who""human A"
"did""policy.activate (ex_dcebeaccfb4860c8112159fbfc18): active, next check 2026-10-09T09:00:00Z; then policy.check twice on the owner’s press"
"observations" 2 items
"obj_0d4432a7d566c0872f27e2ec: nothing changed on 4 watched pages (first reading)"
"obj_483635a9343e0b3becfc4671: nothing changed on 4 watched pages"
"dry_run_after" 3 keys
"facts" 4 keys
"ad.count"1
"page.changed"false
"offer.changed"false
"product.overlap"false
"holds"false
"would_run"
4 keys
"step"10
"who""a visitor (no sign-in)"
"before_sharing" 2 keys
"GET /live/s/….json"403
"POST analysis.confirm"403
"after_the_owner_shared" 3 keys
"GET /live/s/….json" 2 keys
"me" 2 keys
"kind""guest"
"role""viewer"
"objects"22
"POST analysis.confirm (field cta, confirm)""succeeded, ex_9c2394eaa1d2218376b771751def: the owner granted * [read, analysis.confirm] on this one object"
"POST policy.dryrun" 3 keys
"http"403
"code""not_granted"
"ledger""worker:misc-sheets:be93ec73-ddde-438e-ae45-f6ec8c96fa71:1"
"where_the_decision_is_made""src/blocks.js authorize(), on the server, from the object’s grants and the viewer the request proves (key, session cookie, or a visitor cookie); the widgets only draw what the server offers"
"synchronization""polling: every surface reads the graph again every 20 seconds (not while someone types) and at once after any widget on the page changes an object; no push"
"not_claimed""cryptographic non-repudiation. Each event carries the actor the server resolved and a Ledger row id; the Ledger is append-only on the build, not independently witnessed."

What is real here, and what is not

real fetches, simulated data, model calls
JSONreal fetches, simulated data, model calls
7 keys
"real_fetches""every page in this Space was read by the build’s WEB_FETCH tool and kept with its sha256; the asset is the landing page as fetched"
"simulated_data""none"
"the_ad""the landing page’s own presentation of itself (og:title, og:description, og:image, its first call to action), labelled so on the ad object; a Meta Ad Library address is accepted but its content cannot be read from the cloud (Meta answers the cloud browser with a bot challenge; recorded on the asset when it happens)"
"model_calls_in_the_pipeline"0
"inferences""none made: the two statements that need one (positioning, audience) are left open and say so; the model path is the owner’s chat, where this object travels with the words"
"variant_images""not rendered: variant.render is wired to Workers AI and runs only on the owner’s press; the variants here are objects with a headline, a prompt, a hypothesis and a review state"
"public_search_results""stand in for an ad library and are labelled as such on the research object"
where it stops
JSONwhere it stops
7 items
"Meta Ad Library pages are not readable from the cloud (bot challenge); the Mac scraper opens the owner’s own Chrome and was not run"
"two of nine statements of the analysis are open (positioning, audience): they need a model, which is not run here"
"the rule’s clock is read as UTC; the scheduled pass runs only when the switch spaces-monitor is on (off by default)"
"edge access scope is recorded (members) but every edge of a readable space is shown; per-edge disclosure is not enforced yet"
"the example base metrics were typed by the owner as an example and are labelled so on each metric; the site’s view counts are the only measured numbers here"
"Meta Ads tools of this build do not reach a service today (META_ADS_ACCOUNTS answers “no way that reaches a service”), so no ad-account metric is imported"
"offers: the competitor’s pricing page carries no prices in its HTML, so 0 products were made; the figures the landing page carries were extracted as “offer” and a person rejected the statement"

The object graph behind the page

A Space is itself an object (type space, adapter spaces). Its members are grants on the space and on everything it contains; a role (viewer, editor, approver) is a list of operations. Objects live in ms.app_objects; edges in ms.app_edges (source, target, type, evidence, author, version, access); events in ms.app_events, each with a Ledger row. Every operation runs through the live-objects engine: authorized on the server for this viewer, written as an intent first, receipted. The graph is read at GET /live/s/<space id>.json by whoever opens it, under their own permissions.

the graph today
JSONthe graph today
4 keys
"objects"31
"edges"62
"events"35
"by_type" 15 keys
"task"1
"need"1
"projection"1
"metric"6
"observation"2
"policy"1
"variant"3
"hypothesis"3
"research"1
"page"6
"claim"2
"analysis"1
"competitor"1
"ad"1
"asset"1
edges by type
JSONedges by type
14 keys
"contains"31
"evidenced_by"1
"publishes"1
"links_to"1
"owns"6
"interprets"1
"contains_claim"2
"about"2
"derived_from"3
"tests"3
"watches"1
"observed"2
"triggers"2
"projects"6
events, by kind, with Ledger rows
JSONevents, by kind, with Ledger rows
15 keys
"denied" 3 items
6 keys
"id""ev_1eb31fa9e487472063f5"
"object""obj_7056be75b84c01cb84dcb14e"
"actor""a visitor (guest:78f2056f10b86b25d3408189)"
"at""2026-10-09T06:56:02.386Z"
"ledger""worker:misc-sheets:be93ec73-ddde-438e-ae45-f6ec8c96fa71:1"
"version""4af25c77fcfe"
6 keys
"id""ev_ad03d633059cbe695f60"
"object""obj_9a90225482d0d81ed742c2c1"
"actor""Space tester (member) (person:p_n5cauqlp)"
"at""2026-10-09T06:55:12.631Z"
"ledger""worker:misc-sheets:5267144c-1c0f-40ee-a7e4-353e6291a656:1"
"version""4998509197dd"
6 keys
"id""ev_bb55d4fe8c92b21200e6"
"object""obj_7056be75b84c01cb84dcb14e"
"actor""Space tester (member) (person:p_n5cauqlp)"
"at""2026-10-09T06:55:11.452Z"
"ledger""worker:misc-sheets:479bf1e6-a483-40cc-8113-53f34f0c8683:1"
"version""d706bfb4560e"
"corrected" 3 items
6 keys
"id""ev_d45666a06bc00b5eefb1"
"object""obj_a0e0c09160cba70ca3d08e8a"
"actor""a visitor (guest:78f2056f10b86b25d3408189)"
"at""2026-10-09T06:56:01.775Z"
"ledger""worker:misc-sheets:1ab6ffc0-1377-4642-88af-4edbd4e42417:2"
"version""405141e27e3c"
6 keys
"id""ev_e1588206d72560bdba84"
"object""obj_a0e0c09160cba70ca3d08e8a"
"actor""Space tester (member) (person:p_n5cauqlp)"
"at""2026-10-09T06:55:10.770Z"
"ledger""worker:misc-sheets:4b398714-831e-4a6e-8438-0ea9aaf5233e:2"
"version""7e838d47712c"
6 keys
"id""ev_6fcb190f77cb134161a0"
"object""obj_a0e0c09160cba70ca3d08e8a"
"actor""Space tester (member) (person:p_n5cauqlp)"
"at""2026-10-09T06:54:31.072Z"
"ledger""worker:misc-sheets:3898e13f-f8dd-4b4f-8825-c21f5b5cfacf:2"
"version""1e6cf4747b06"
"shared" 1 item
6 keys
"id""ev_3fac1e0aa1d697ea5655"
"object""obj_a0e0c09160cba70ca3d08e8a"
"actor""the owner"
"at""2026-10-09T06:56:00.498Z"
"ledger""worker:misc-sheets:56526fbd-00b4-4594-9fbe-e959554e3c9b:1"
"version""405141e27e3c"
"member_added" 2 items
6 keys
"id""ev_511abb00af449a905b22"
"object""obj_c78144b0b422f79531d614fd"
"actor""the owner"
"at""2026-10-09T06:55:59.830Z"
"ledger""worker:misc-sheets:771970eb-4a96-4314-89b0-ad35b973a577:2"
"version""70a7e05f5a2d"
6 keys
"id""ev_e73541851aeb2dcc2caf"
"object""obj_c78144b0b422f79531d614fd"
"actor""the owner"
"at""2026-10-09T06:49:14.272Z"
"ledger""worker:misc-sheets:933f1d1a-b50a-4504-81a9-98a8218b7579:2"
"version""34524ca537d0"
"dry_run" 2 items
6 keys
"id""ev_0bd0c946b282bc1f835c"
"object""obj_7056be75b84c01cb84dcb14e"
"actor""the owner"
"at""2026-10-09T06:55:57.776Z"
"ledger""worker:misc-sheets:bb4fb6e4-caa0-4c86-99ad-a7bd0595a612:2"
"version""dbbc98c59c39"
6 keys
"id""ev_d3ba7d723c538fb2d9e2"
"object""obj_7056be75b84c01cb84dcb14e"
"actor""the owner"
"at""2026-10-09T06:49:15.884Z"
"ledger""worker:misc-sheets:e0aba1f9-60bf-475b-a169-a25c998a4a41:2"
"version""5b844c9bb3b9"
"executed" 2 items
6 keys
"id""ev_3ae1c812905a25ef981a"
"object""obj_7056be75b84c01cb84dcb14e"
"actor""the owner"
"at""2026-10-09T06:55:56.603Z"
"ledger""worker:misc-sheets:aac7e55f-d6ac-4ef9-8831-3257c2ee49e1:15"
"version""ddb97c529860"
6 keys
"id""ev_2f9bacb67d27ba900cc8"
"object""obj_7056be75b84c01cb84dcb14e"
"actor""the owner"
"at""2026-10-09T06:55:51.990Z"
"ledger""worker:misc-sheets:87700cd4-5728-45b3-8207-3e42702e6bb6:15"
"version""2f50eb2e6723"
"observed" 2 items
6 keys
"id""ev_e60c45e579f9a9dba975"
"object""obj_0d4432a7d566c0872f27e2ec"
"actor""the owner"
"at""2026-10-09T06:55:56.573Z"
"ledger""worker:misc-sheets:aac7e55f-d6ac-4ef9-8831-3257c2ee49e1:14"
"version""bb37a689596d"
6 keys
"id""ev_931bce95dfa9d346272a"
"object""obj_483635a9343e0b3becfc4671"
"actor""the owner"
"at""2026-10-09T06:55:51.959Z"
"ledger""worker:misc-sheets:87700cd4-5728-45b3-8207-3e42702e6bb6:14"
"version""39558ba9564e"
"activated" 1 item
6 keys
"id""ev_0a154ccc436f3c1fc642"
"object""obj_7056be75b84c01cb84dcb14e"
"actor""the owner"
"at""2026-10-09T06:55:47.644Z"
"ledger""worker:misc-sheets:af0a7c67-e9cd-4205-adf1-d5225849f6ea:2"
"version""eba1f0f1d0e1"
"revised" 1 item
6 keys
"id""ev_45ae00363d8fe7365855"
"object""obj_7056be75b84c01cb84dcb14e"
"actor""Space tester (member) (person:p_n5cauqlp)"
"at""2026-10-09T06:55:12.011Z"
"ledger""worker:misc-sheets:6d5c1ad0-927e-4bfd-abdc-aa2f98e878d2:2"
"version""d706bfb4560e"
"commented" 1 item
6 keys
"id""ev_c765f9164af94749f9b3"
"object""obj_6df3cb08754fb4008f21b3be"
"actor""the owner"
"at""2026-10-09T06:53:49.075Z"
"ledger""worker:misc-sheets:9c36b4f8-a678-4fc4-b83c-c460e8acaf5a:1"
"version""7d04c5d00c69"
"interpreted" 2 items
6 keys
"id""ev_5841b0f0120c118c53fa"
"object""obj_6df3cb08754fb4008f21b3be"
"actor""the owner"
"at""2026-10-09T06:53:47.095Z"
"ledger""worker:misc-sheets:328db083-7e14-45c2-b43e-c65bb4e64c62:2"
"version""ace451bc5aaa"
6 keys
"id""ev_b7ce4cd8fa4ebbb76f09"
"object""obj_6df3cb08754fb4008f21b3be"
"actor""the owner"
"at""2026-10-09T06:46:53.830Z"
"ledger""worker:misc-sheets:0cafed52-f128-452c-814e-6213ff33927f:11"
"version""cb9e074a8c89"
"proposed" 2 items
6 keys
"id""ev_df78d50820177291216e"
"object""obj_7056be75b84c01cb84dcb14e"
"actor""the owner"
"at""2026-10-09T06:48:05.047Z"
"ledger""worker:misc-sheets:3dde5558-62a6-4980-8eaf-5ec61c9ca800:2"
"version"""
6 keys
"id""ev_14f28b926e2dc0334fb0"
"object""obj_6df3cb08754fb4008f21b3be"
"actor""the owner"
"at""2026-10-09T06:48:00.907Z"
"ledger""worker:misc-sheets:8a1a7567-e8a8-44e0-9a91-537b09cd1eda:2"
"version""fd89bd0e49bd"
"expanded" 1 item
6 keys
"id""ev_9ed138fd41bc02a1b757"
"object""obj_9a90225482d0d81ed742c2c1"
"actor""the owner"
"at""2026-10-09T06:47:37.163Z"
"ledger""worker:misc-sheets:b900a8da-3688-498e-8399-91411e34f34c:23"
"version""63f0726541dc"
"resolved" 1 item
6 keys
"id""ev_a45a520a4402a17d61f0"
"object""obj_6df3cb08754fb4008f21b3be"
"actor""the owner"
"at""2026-10-09T06:46:53.392Z"
"ledger""worker:misc-sheets:0cafed52-f128-452c-814e-6213ff33927f:8"
"version""e45a9b47f90c"
"ingested" 1 item
6 keys
"id""ev_ec4ab243e035414d5c8d"
"object""obj_6df3cb08754fb4008f21b3be"
"actor""the owner"
"at""2026-10-09T06:46:53.024Z"
"ledger""worker:misc-sheets:0cafed52-f128-452c-814e-6213ff33927f:5"
"version"""
References (3)
  1. Specialist AI Agents for Every Task | Relevance AI — Relevance AI“Specialist AI Agents for Every Task”
  2. Enterprise AI Agents | Relevance AI — Relevance AI“Enterprise AI Agents”
  3. the Space, as JSON, read without a key — miscsubjects.com“Competitive intelligence”