|
| 1 | +--- |
| 2 | +title: Agent Permission Boundaries |
| 3 | +description: How permissions work when agents collaborate -- every agent acts within its own ceiling, and accountability for overreach lies with the agent that acted |
| 4 | +keywords: [permission, boundary, delegation, collaboration, security, accountability] |
| 5 | +--- |
| 6 | + |
| 7 | +# Agent Permission Boundaries |
| 8 | + |
| 9 | +## The rule in one sentence |
| 10 | + |
| 11 | +**Every agent acts within its own permission ceiling. If something is done that shouldn't have been, accountability lies with the agent that performed the action -- not with whoever asked for it.** |
| 12 | + |
| 13 | +## Why this rule is needed |
| 14 | + |
| 15 | +Once companions start collaborating -- one asking another for help, adding a remark to a companion that is mid-task, or interrupting it -- an unavoidable question appears: |
| 16 | + |
| 17 | +> Companion A asks companion B to do something. Whose permissions apply? |
| 18 | +
|
| 19 | +There are two possible answers. DesireCore chose the second. |
| 20 | + |
| 21 | +### Option 1: the requester's permissions apply (not adopted) |
| 22 | + |
| 23 | +The requested companion would be capped by whatever the requester is allowed to do -- permissions could only ever shrink as they are passed along. |
| 24 | + |
| 25 | +It sounds safer, but it falls apart immediately in real use: |
| 26 | + |
| 27 | +- **Specialization stops working.** Your "calendar assistant" has narrow permissions -- it can only read your calendar. When it asks the "writing companion" to draft meeting notes, capping the writer at the assistant's level means the writer cannot write files at all -- which is precisely the job you gave it. |
| 28 | +- **Accountability becomes ambiguous.** Whether an operation is allowed would depend on *who asked*, not *who is doing it*. The same operation would be permitted when A asks and refused when B asks -- so you could no longer tell what a companion can do by looking at its configuration. |
| 29 | +- **Permissions only shrink, eventually to nothing.** Across multiple hops (A asks B, B asks C), the ceiling narrows at every step until nothing is possible. You would be forced to over-provision every companion to compensate -- making the overall permission surface *larger*, not smaller. |
| 30 | + |
| 31 | +### Option 2: the executor's own permissions apply (DesireCore's choice) |
| 32 | + |
| 33 | +**Whoever acts is bound by their own ceiling.** |
| 34 | + |
| 35 | +- When companion B receives a request from companion A, it still acts entirely within the permissions **you** granted **B**: what it can read, what it can write, which tools it may call -- determined solely by B's own configuration. |
| 36 | +- A cannot make B exceed B's own ceiling by asking, because that ceiling is absolute. |
| 37 | +- Conversely, A cannot expand its own reach by asking B. Whatever B does is recorded against B, and the results come back to A -- but **the execution happened inside B's boundary**. |
| 38 | + |
| 39 | +## Accountability for overreach lies with the executor |
| 40 | + |
| 41 | +The other half of the rule matters just as much: **if a companion does something it shouldn't have, that is recorded against it.** |
| 42 | + |
| 43 | +- Each companion's capability boundary lives in its own configuration (tool grants, file read/write scope, risk level) -- a configuration you set yourself. |
| 44 | +- Every operation it performs enters **its own** receipts and audit trail. Reading one companion's receipts tells you everything it actually did; you never have to trace back "who told it to." |
| 45 | +- Investigation therefore has a fixed path: **first identify which companion acted, then look at why its permission configuration allowed it.** |
| 46 | + |
| 47 | +Put differently: a permission configuration is a **promise about that companion**, not a rule about who may command it. Adjusting a companion's permissions adjusts its behavioral ceiling in *every* situation -- whether the request came from you, from another companion, or from a scheduled job. |
| 48 | + |
| 49 | +## Which situations this covers |
| 50 | + |
| 51 | +The rule applies whenever one companion causes another to act: |
| 52 | + |
| 53 | +| Situation | Description | |
| 54 | +|-----------|-------------| |
| 55 | +| **Delegating a task** | A hands work to B | |
| 56 | +| **Sending a message** | A messages B, and B starts a turn to handle it | |
| 57 | +| **Interjecting** | B is busy; A adds a remark into B's current turn | |
| 58 | +| **Interrupting** | A aborts what B is currently doing | |
| 59 | +| **Fan-out** | A sends the same work to several companions at once | |
| 60 | + |
| 61 | +In every one of these, the acting party is bound by its own permissions. |
| 62 | + |
| 63 | +## This does not weaken controllability |
| 64 | + |
| 65 | +The rule is **not** a relaxation of limits -- it puts the limit in the right place: |
| 66 | + |
| 67 | +- **Your grants remain the only source.** Companion permissions are configured only by you. Companions cannot grant permissions to each other, nor collaborate their way around your settings. |
| 68 | +- **[Three-layer controllability](./three-layer-control) applies in full.** Regardless of whether a turn was started by you or by another companion, high-risk operations still hit the human gate, still produce receipts, and are still reversible. |
| 69 | +- **Boundaries are easier to verify.** You only need to answer "what did I grant this companion," rather than simulating "what would its permissions become if some other companion invoked it." |
| 70 | + |
| 71 | +If you don't want a companion to have a certain capability, the correct move is to **tighten that companion's own configuration** -- not to rely on other companions to gate it for you. |
| 72 | + |
| 73 | +## A concrete example |
| 74 | + |
| 75 | +Suppose you have two companions: |
| 76 | + |
| 77 | +- **Calendar assistant**: can read your calendar; cannot write files |
| 78 | +- **Writing companion**: can read and write under `~/Documents/` |
| 79 | + |
| 80 | +When the calendar assistant asks the writing companion to "turn today's meeting into notes": |
| 81 | + |
| 82 | +1. The writing companion acts under **its own** permissions -- it may write the notes file under `~/Documents/`; |
| 83 | +2. It equally **cannot** exceed its own boundary -- it cannot touch `~/SystemConfig/`, even if the calendar assistant asks it to; |
| 84 | +3. Writing the notes is recorded in the **writing companion's** receipts; |
| 85 | +4. If you decide the writing companion shouldn't be able to write files at all, what you change is **the writing companion's configuration** -- not the calendar assistant's ability to ask. |
| 86 | + |
| 87 | +## Next steps |
| 88 | + |
| 89 | +- Want the full picture on safety? Read [Three-Layer Controllability](./three-layer-control) |
| 90 | +- Want to understand how companions collaborate? Read [Delegation Model](./delegation-model) |
| 91 | +- Want to know how work is routed to the right companion? Read [Task Orchestration](./task-orchestration) |
0 commit comments