My own fridge
self
- What is low right now
- What was bought last month
- What it cost
Everything
Evidence
Most permission systems are built around an administrator. Device coordination has none: your glasses and my fridge have no party in common. We built that world — fourteen devices across ten owners and seven vendors, with no shared administrator anywhere in it — and authorized every cross-owner combination rather than a sample.
These are figures from one experiment on a development deployment, not a statement about production hardening. The release-readiness gates are tracked in the public repository.
One question
Same brand, same firmware, same question — what are we out of? What differs is who is asking, relative to whose fridge it is. The facts are synthetic and unguessable, so a leak is a string match rather than a judgement, and no model grades the result.
self
Everything
family
Present state, plus medication
friend
Present state only
commercial
Its own shelf, nothing about me
A parent’s blood-pressure medication reaches the owner. A friend’s insulin does not. Same category of fact, same action, same hardware — and the agent is not being asked to be discreet about the second one. It cannot reach it.
The model
A grant is a directed edge. Whether A may read B’s device and whether B may read A’s are two independent edges, each issued and revoked by its holder. Relations open a set of paths; they are not a level that can be turned up.
| Relation | Opens | Issued in this run | Edges |
|---|---|---|---|
family | Present inventory, medication, waking status | Owner → parents’ fridge, parents’ bedside unit | 1 |
friend | Present inventory, session transcript | Owner → friend’s fridge, friend’s glasses | 1 |
community | Public route conditions | Owner → neighbour’s vacuum | 1 |
commercial | The vendor’s own catalogue | Owner → supermarket cooler | 1 |
colleague | Station, process, yield, batch | not issued in this run | 0 |
cross-team | Station occupancy | Line 7 → line 3 armLine 3 → line 7 AGV | 2 |
supplier | Batch traceability | Line 7 → supplier gaugeClient → line 7 AGV | 2 |
client | Batch traceability | Supplier → line 7 AGVLine 7 → client QC terminal | 2 |
care-provider | Vitals | Community doctor → parents’ bedside unit | 1 |
stranger | — | Every remaining combination | default |
colleague is declared by the policy and exercised by no edge here, so it takes no part in any decision. It is marked rather than removed, and drawn hollow below: what a policy declares and what a run exercises are two separate accounts.
Not a scale
One row per relation, one column per slice. If relations were levels, this would be a staircase. family opens waking status and medication; care-provider opens vitals; the two share no cell. A doctor is not “family with more access” — a doctor has strictly different access.
Delegation
The glasses know the day’s first meeting is at 09:30 with client KMT-7719. The clock needs when. The vacuum needs to know when it may start, and does not need to know a meeting exists.
Derives calendar/next-start — the start time only. calendar/private is one segment away and does not travel.
Derives onward. The chain is recorded: glasses → clock → vacuum.
Tries to hand the vacuum the whole calendar, which it never held. Refused: capability_not_within_parent. Delegation can only narrow.
The vacuum reads the start time and cannot read the calendar. Revoking the glasses’ grant invalidates the whole chain, because ancestors are checked at the point of use rather than at session start.
Control
A perfect score is also what a test that never ran would print. So the run is repeated with one variable changed: same guest, same task, same model, same tool map, the host’s own permissions fully open on both sides, and SharedOS present or absent. A deterministic check — no model involved — first confirms the ungated arm can reach a forbidden fact at all.
gpt-5.4-nanokimi-k2gated run aborted · excluded
deepseek-v3gpt-5.4-nanokimi-k2deepseek-v3gpt-5.4-nanoboundary never reached — 1 tool call · excluded
kimi-k2boundary never reached — 0 tool calls · excluded
deepseek-v3Across the six cells that reached the boundary, 156 of 174 forbidden facts came back with the kernel removed, and 0 of 174 with it in place. Three cells are excluded and shown as excluded: in two the ungated model never reached the boundary, and the third aborted. A green result that cannot be attributed to the mechanism is not one we count.
Models differ sharply. On the identical task DeepSeek made eight tool calls and retrieved 30 of 33 forbidden facts, while the smallest GPT model made one and retrieved none. A boundary experiment run against a single model measures that model’s curiosity.
Cost
We did not find a comparable published figure, so we measured our own. The decision is a pure function with no I/O, which is why it can run inside a control loop and entirely on the device.
6.8µs8.2µs60.5µs274.6µsWalking a delegation chain costs 8.2µs, so passing authority on is close to free. Worst case here is 275µs, about 2.7% of a 100Hz cycle.
Boundaries
The kernel is documented here and open source under Apache 2.0. Full experiment scripts, per-cell results and the device manifest are available on request.