Technical overview

What Thinking Surface is

Shared, permissioned context for a business, a team, or a household, connected to the AI you already use, so you can work something through with everything on hand. Nothing is absorbed behind your back, and nothing needs filing while you think. This page covers what it holds, how the permission model works, why there is no application to log into, and what it deliberately does not do.

Why we built it

Every general-purpose assistant now has some form of memory. Turn it on and it will remember what your company does, that you prefer short answers, that your operations manager is called Dana. It is genuinely useful, and it did not solve the problem we had.

The problem, in the words it was first said out loud:

Even with memory on, I don’t feel like I’m making real progress.

That sentence is worth sitting with, because it rules out the obvious diagnosis. The complaint is not that the model forgot. Recall was never the scarce thing. What was missing was compounding: the property that Tuesday’s conversation stands on what was settled on Monday, that a second person’s conversation stands on both, and that an automation running at three in the morning stands on all three.

Assistant memory cannot have that property, for three structural reasons rather than any failure of engineering. It is per-user: your assistant’s memory is yours, not your operations manager’s. It is vendor-scoped: move to a different assistant and you begin again. And it is a store rather than a structure: it can hand back what you said, but it cannot tell you what already governs the question you are asking, who has the standing to settle it, or what settling it would cost. There is nothing in it to think inside, only something to be reminded of.

That third gap is the one the product is built into. A Surface gives the thinking a shape: what has already been ruled on in this area, who may rule on it, what a commitment would displace, what is still only proposed. The assistant navigates by that shape instead of by recall. The same shape is what makes recording cheap: when something does settle, there is a specific place for it to go.

The shape is deliberately loose, because deciding is not a linear process. Most of a real working conversation is rabbit trails: the tangent that turns out to matter, the half-formed thought you would not defend yet. So trying things stays free: what-ifs are computed and thrown away, and only what you confirm becomes record.

A session that settles nothing is not a failed session. It is the normal case, and the record is built to survive it.

A second observation shaped the design more than the first. Once a record is shared, the question of who may write to it stops being an access-control detail and becomes an org chart. In most software the org chart lives in a permissions screen while the real authority, who can commit the company to a price or approve a client’s terms, lives in people’s heads. We put authority in the record layer, as data, on the same footing as the records it governs.

What a Surface is

A Surface is shared, permissioned context: for a business, one team inside it, a department, one person’s own read on their company, a household. You decide how tight or wide it is, and you do not need anyone’s permission to make one.

Exploring it is safe, which is the part that separates it from assistant memory. Nothing is written because a model judged it worth remembering: what-ifs are computed and thrown away, and a thought you are not ready to stand behind goes to an inbox rather than into the record. Nor is there filing to do as you go. The offer to keep something comes when it settles, which in a long session usually means near the end, and what it keeps lands as a proposal rather than as policy. You can think freely without quietly steering what the business believes.

How many you want is a judgment call, and the answer is usually fewer than people expect. Separation inside a Surface already comes two ways: scopes organise it by client, department, or product line, and audience restricts it, enforced in the database. Reach for a second Surface only when something must not share a tenant at all: different books, or a read of the business that is genuinely yours rather than the company’s. Splitting is a wall, not a filter, because no search spans Surfaces.

It is a connector, not an application. There is no dashboard and no second place to keep current. You add it to Claude, ChatGPT, or Grok the way you would add any other connector, and from then on the assistant you already talk to knows what everyone sharing it knows.

A Surface holds five kinds of thing:

Decisions
What was settled, by whom, under what authority, and what it displaced: the capacity spent, the cash committed, the option foreclosed. Also what a decision replaced when it superseded one, and what is still only proposed.
Commitments
What you have promised, to whom, due when, drawing on whose capacity.
People
Who knows what, who introduced whom, what was said and when.
Knowledge
The rules, the exceptions, the things that never had a field to live in.
Numbers
Assumptions carrying their provenance and an as-of date, and a model to run them through. Committed versions are kept and can be set side by side; the what-if layer on top of them is deliberately thrown away.

It is not where all your data lives, and it is not trying to be. Your assistant can hold many connectors at once, and it should: your books, your bank, your email, your calendar, whatever system actually runs your operation. Each of those answers the question it was built for, which is what is true right now, and a Surface holds none of it. No balances, no invoice status, no inventory counts. It links to the record in the system that owns it and never copies the value across, so there is no cache here to go stale and no second number to reconcile.

Three different things are in play when you are working something out, and it is worth being clear that they are not the same thing:

  • your assistant’s memory knows you: how you work, what you have told it
  • your connected systems know what is true right now
  • a Surface knows what has been settled, promised, ruled out, and learned

The model composes all three live, at the moment you ask. That is the whole architecture, and the reason we do not ingest the others: a copy is always a little out of date, and the moment there are two numbers for the same thing you have a reconciliation problem instead of an answer. So this is not a replacement for the tools you already run, and not a replacement for your assistant’s memory either. It is the third input, the one that usually never gets written down anywhere.

It replaces nothing. It holds the part nothing else keeps.

How it works

The connection

The product is a remote MCP server, which is the thing your assistant already knows how to connect to. You sign in the way you would for any other connector, and that sign-in binds to exactly one Surface. That constraint is load-bearing rather than incidental: it is what makes “this conversation is about this Surface” a fact the server knows rather than something a model has to be trusted to keep straight.

To point an existing connection somewhere else, start Reconnect or Reauthorize in your assistant and choose the new Surface during sign-in. The completed flow gives the client a fresh credential; an already-issued credential never changes which Surface it can reach.

Automations and scripts use a key instead of signing in. A key belongs to a person and is held to exactly the same limits they are, so it is never a way around the rules.

The record

Underneath it is a graph: things, and the links between them. A link can end without being erased, so “they used to work there” stays true instead of disappearing. Every change keeps the version before it, so nothing is quietly overwritten.

Two attributes do most of the organizing work. Every entity carries scopes (client/acme, dept/production, pricing/floor), so “everything about this client” is a structural query rather than a search guess. And every entity carries an audience, which is how a founder’s “don’t share this one” stays with the founders through every tool, workflow, and triage step, because the constraint is on the row and not on a screen.

Permission, and where it is enforced

This is the part worth being precise about, because most products answer it differently than they appear to. The request path runs the database as the person making the request, not as a service account with a filter applied afterwards.

AI client
  │
  └─ connector sign-in ──────► one Surface, one member
       │
       └─ the person who signed in
            │
            └─ the database, acting AS THAT PERSON
                 │
                 └─ only the rows they may see
The tool layer decides which tools you are offered. It is not what protects the data.

Every permission question routes through one check, and that check lives in the database rather than in the application. The practical consequence: if the tool layer had a bug tomorrow, a missing check or a mis-wired filter, the database would still refuse the read. Permission is a floor, not a wrapper.

Access is a role crossed with a domain. Roles are owner, admin, member, and viewer. Domains are the five kinds of thing a Surface holds, plus an inbox for untriaged captures and a capacity domain deliberately split out from finance, so whoever actually knows what the team can take on can record commitments without also seeing cash, revenue, and deals.

DomainOwnerAdminMemberViewer
knowledgeread · writeread · writeread · writeread
peopleread · writeread · writeread · writeread
decisionsread · write · ratifyread · writeread · writeread
capacityread · writeread · writeread · writeread
inboxread · writeread · writeread—
financeread · writeread · write——

Defaults. Domains are held per member, so a bookkeeper can be given finance and nothing else.

Ratification

A decision enters the record as a proposal. It becomes binding when someone with the authority to do so ratifies it. That authority is a third verb alongside read and write, and it is seeded to owners only, not to admins, which is a distinction most permission models collapse and this one keeps.

Owners delegate it by scope. A grant binds a person to a scope pattern: the account manager who runs client/acme can ratify decisions scoped to that client, and only that client, without becoming a co-owner and without gaining sight of the books. A decision must match every one of its scopes against a grant to qualify, and a decision carrying no scopes at all stays owner-only. A grant that matches everything is the thing the design exists to avoid.

The gate is enforced in three independent places, the deepest of them inside the database where even a privileged write cannot get around it. The redundancy is deliberate: two of the three exist to defend against our own future mistakes.

Capture

The failure mode of every shared record is that nobody maintains it. We treat that as the primary product risk rather than a support problem, and the whole mechanism follows from it: capture happens inside the conversation you were already having, at the moment something settles, in one sentence.

The server instructs every connected model to route by kind. A settled rule becomes a decision proposal. A fact about a person goes to the people tools. A figure goes to the financial model along with where it came from. A half-formed thought goes straight to the inbox without stopping to ask, precisely because the inbox is not the record: it is triaged later rather than promoted now, and the triage step never merges on its own. It proposes.

Capture is cheap. Record is never assumed.

Nothing becomes record because a model judged it important. This is also the only honest thing to say about the loop the product depends on: unsettled talk becomes “what happened last time” only if you say yes.

Computation

Thinking Surface contains no solver, and that is a decision rather than a gap. When you ask what has to not happen if you take a job at a given price, the answer is computed deterministically, in ordinary code, with no model in the loop, against the commitments you have actually declared. The model asks the question, presents the result, and records what you confirm. It is the interface to the calculator, never the calculator.

Asking is deliberately cheap. A what-if is an ephemeral layer over a stored version, never persisted, never versioned, never something you have to clean up, so there is no cost to trying the tenth variation, and no quiet penalty for exploring a direction you abandon. Committing is the separate, deliberate act, and only the committed versions are kept and comparable.

One consequence is worth stating because it shows the posture. Capacity ceilings live on the finance-gated financial model, but the simulation is a capacity-domain tool, so a production lead with capacity access and no finance access reads zero rows for the ceiling. Rather than returning a confident “it fits,” the answer comes back explicitly marked as unknown, naming what it could not see, and the tool is instructed not to soften it. A tool that guesses quietly is worse than one that says it cannot see.

Things we decided not to build

An interface
There is a sign-in page, a place to create a Surface, members, and keys. That is the whole application. Anything more would be a worse version of the conversation you are already in, and it would compete with the record for your attention.
Cross-Surface search
One grant, one Surface, no query that spans them. It costs convenience for anyone holding more than one. It buys a boundary we can describe in one sentence and never have to qualify.
Learning across customers
No aggregation, no cross-tenant training, no “businesses like yours also.” These records are identity-dense and small-n; they cannot be honestly de-identified. Anything collective here will be authored rather than extracted.
Ingestion
No warehouse, no sync, no nightly copy of your other systems. Reasoning over a copy means answering from data that was true earlier, and the staleness is invisible at the point it does damage. Composing live at the moment of the question costs a round trip and is worth it.

What it does not do yet

The product is in invite-only beta. These are real gaps, not roadmap language.

  • No SSO or SAML, and no audit log. It should not be evaluated as enterprise-ready, because it is not.
  • Nothing pushes. There are no notifications and no digests; what is waiting for you (proposals you can ratify, overdue follow-ups, commitments assigned to you) appears when a session opens, not before.
  • Team invitations depend on outbound email we have not finished wiring. Until that lands, adding a teammate carries an asterisk.
  • One Surface per connector grant. The binding itself is deliberate. Switching uses the client’s Reconnect or Reauthorize flow, because only the client can safely replace its credential; the server cannot switch a live connection in place.
  • Export covers decisions and entries as deterministic, paginated dumps. It is not yet a complete backup of everything a Surface holds.
  • There is no published price. Beta is invite-only.

Questions

Select a question to open it.

How is this different from my assistant’s own memory?

Memory is storage. It is yours alone, tied to one vendor, and it records what was said. The difference here is not mainly where the bytes live. It is that a Surface is a structure for working something through.

That structure is what the assistant navigates by. It can see what already governs the area you are talking about, who has the authority to settle it, what a commitment would displace, and what is still only a proposal, so it can walk you through the thinking rather than merely recall the last time you had it. The same structure is what makes capture cost nothing: when something does settle, there is a specific place for it to go, and the model already knows which place.

It is deliberately loose, because deciding things is not a linear process. Most of a real working conversation is rabbit trails: the tangent that turns out to matter, the half-formed thought you are not ready to stand behind. Those go to the inbox and get triaged later; only what you confirm becomes record. Nothing pushes you toward a conclusion, and nothing penalises you for not reaching one.

Which is why what persists is wider than a list of conclusions. A what-if costs nothing and is never written down. You can price the same job nine ways without leaving a trace. What does persist is the shape the thinking took: the versions you committed, side by side; what a decision displaced, including the option it foreclosed and what that cost; what depends on what, as typed links between things; and the proposals nobody ratified, which stand as exactly that rather than quietly becoming policy.

The short version we use in conversation: memory records what was said; this records where the thinking stands. That means what you weighed, what you ruled out and at what cost, what depends on what, and the parts you actually settled.

Do I need my company to set this up?

No. You sign in, make a Surface, connect it, and start. There is no account above yours, no administrator to provision anything, and nothing to procure. A Surface belongs to whoever made it. You invite people if and when you want to, and plenty of useful Surfaces have exactly one member.

If your employer later runs its own, that is a separate Surface rather than a parent of yours. There is no hierarchy for one to sit above another. Holding both is reasonable: a department head with their own read on their own budget, who is also a member of the organisation’s.

Work in one at a time, though. Unrelated Surfaces coexist in an assistant without trouble. Several connectors is a normal setup. Two that cover the sameoperation are the confusing case: the assistant is left guessing which record a new fact belongs to and whose ratified decisions govern the answer, which is precisely the inference one-grant-one-Surface exists to remove. Pick the record you are working in.

Which assistants does it work with?

Any client that supports remote MCP connectors with OAuth. Today that means Claude, ChatGPT, and Grok. Nothing about the design is specific to one of them, which is the point: the record should outlive whichever one you prefer this year.

Where do I log in to see my data?

You mostly don’t. The site handles sign-in, creating a Surface, members, and API keys. Everything else happens in the assistant. If you want the contents outside a conversation, export them.

Who can see what I put in?

The members of your Surface, narrowed by their role, their domains, and each entry’s audience, enforced in the database rather than in the interface. No other Surface can query yours; there is no mechanism that would let it. We do not train on your records or aggregate them across customers.

What happens if I stop using it?

Export your decisions and entries and take them. The export is deterministic and paginated, and it is not gated behind a conversation with us. It is also, honestly, not yet a complete backup. See the gaps above.

Do I have to maintain it?

That is the risk the whole design is aimed at. You are asked one concrete question at the moment something settles, and you answer yes or no. There is no form to fill in and no weekly hygiene ritual. If a Surface is going stale, that is our design problem, not your discipline problem.

My bookkeeper shouldn’t see strategy, and my floor lead shouldn’t see the books.

That is the role-and-domain grid above. Give the bookkeeper finance and nothing else; give the floor lead knowledge, people, and capacity, and the books stay invisible, not hidden in the UI but absent from the rows the database will return.

I’m an agency with forty clients. Forty Surfaces?

One. Clients are entities scoped client/<name> inside a single Surface, which is what makes “everything about this client” structural and what lets you delegate ratification for one client to the person who runs it. Separation within a Surface comes from scopes and audience, not from tenancy.

I run several businesses.

Then you want several Surfaces, roughly one wherever the books are. Each connection binds to one Surface. You can keep several connected at once, or use your assistant’s Reconnect or Reauthorize action and choose another Surface during sign-in.

What stops the model from making things up?

Nothing stops a model from being wrong, and we do not claim otherwise. What we do is narrow where it is permitted to invent. Names, emails, titles, and what someone said in a meeting must come verbatim from the conversation. A first-name-only record is correct and an invented surname is a real harm, and the server says so in those words. Numbers carry their provenance, so any figure can answer “says who?”. Computation is done in code rather than in the model. And nothing enters the record because a model decided it should.

Does it replace the systems I already run?

No, and it is designed not to: your books, your CRM, your bank, whatever runs your day-to-day. Those hold operational state, which is a different thing from what you decided, what you promised, what you ruled out, and who knows what. Connect them all; your assistant reads each of them live and this one for the part none of them has a field for. The answer you get is one none of them could give alone.