Concept · access
Use when
You give a client part of a project and need to manage its content, agents, access and activity in one place.
Looking for something else?
The limit alone, with no agents or access list (card View). Which credential you hold (card Credential). A group of Files (card Collection).
For
A Brain is the handoff of part of a project. It has a name, a purpose and four parts.- Content is one published View. Everything with access to the Brain reads that View and nothing else.
- Agents is a read-only Kit version and the instructions for the firm’s own agents. A Brain may have no Kit. Then only the clients’ own agents, such as Claude, work in it.
- Access lists the clients, agents, API keys, invites and the page that reach the Content. Each one is an access.
- Activity lists each search and read made through them.
Use when
- You hand a client part of a project and want one place to see who has it.
- You add an agent or an API key for a client’s content.
- You must end one person’s access, or all access, to that content.
- The person asks what a client or an agent read.
- A client or a prospect must read part of the project in a browser, with no account (rules brain.15 to brain.20).
Not this
- A limit for one key with no list of who has it: use a View (card View).
- Which credential you hold and what it can do: use card Credential.
- Putting Files into groups: use a collection (card Collection).
Rules
-
brain.1A Brain always has one published View as its Content, and it cannot change. Enforced:penumbra brains createrefuses a retired or unpublished View withbrain_view_unavailable.penumbra brains updatehas no flag for the View, and the API refuses a View in an update withrequest_invalid. Your job: to change what clients read, edit and publish the View (card rule view.1), or make a new Brain. -
brain.2A Brain name is unique among the active Brains of the project. Enforced: a second Brain with the same name is refused withbrain_name_taken. Spaces and letter case do not make a name different. -
brain.3Access comes from the own limit of each person, key or agent to the View. Enforced:penumbra brains attachrefuses a person, key or agent that is not limited to the Brain’s View withbrain_door_view_mismatch. Your job: limit it first withpenumbra access attach, or create it for the Brain in one call (rule brain.4). -
brain.4Create new access for a Brain in one call. Enforced: a key for a Brain can only read, and a write scope is refused withview_requires_read_only. Your job: usepenumbra keys create "<name>" --scope files.search --brain <brain-id>for a key, andpenumbra kits connections create "<name>" --brain <brain-id>for an agent. Each creates the key or agent, limits it to the Content and adds it to the Brain, or creates nothing. -
brain.5The Kit of a Brain can only read. Enforced: a Kit version with a permission outside the read set is refused withbrain_kit_not_read_only. A Kit that is not active, not shared with the project, or not the version’s own is refused withbrain_kit_unavailable. The CLI has no command that shares a Kit with the project. -
brain.6An agent’s access needs the Brain’s own Kit version. Enforced: a Brain with no Kit refuses an agent withbrain_kit_required, and an agent on another Kit version is refused withbrain_door_kit_mismatch. A newer Kit version on the Brain does not change agents that already exist. -
brain.7An access belongs to one Brain. Enforced: an access open in another Brain on the same View is refused withbrain_door_in_other_brain. A key that belongs to an agent is refused as an API key withbrain_door_kind_mismatch. -
brain.8A client’s own agents are part of the client. Enforced: attaching one is refused withbrain_door_belongs_to_client. They act as the client, follow the client’s View, and appear under the client as “Also uses Claude”. Their reads appear in Activity as the client. -
brain.9Ending one access ends it for the whole project, not only for this Brain. Enforced:penumbra brains remove-doorrevokes the key or agent, removes the client from the project, or cancels the invite, and it asks to confirm. Without a terminal it needs--yesand otherwise exits withconfirmation_required. Your job: tell the person that the client loses the whole project and not only this Brain. Nothing detaches an access and keeps it. -
brain.10Retiring a Brain ends all of its access, all or nothing. Enforced: if any access cannot end,penumbra brains retireis refused withbrain_retire_refused, nothing changes, and the answer names each one with the authority it needs. Your job: expect that the Files, the graph, the View and the Kit stay. -
brain.11Instructions reach the Brain’s agents, and the client can read them. Your job: never put anything in--instructionsthat a client must not see. Enforced: more than 8192 bytes is refused as invalid. A Brain counts bytes, so a character outside ASCII takes more than one. A Kit counts characters (card rule kit.13). -
brain.12Only a signed-in person who manages access can change or read a Brain. Enforced: a key or agent is refused withhuman_session_required, and any other person withpermission_denied. An editor, or a key withcontext.view.write, can change a View but not a Brain. -
brain.13An access shows a state only when it needs attention. Your job: readpenumbra brains show <brain-id>for each of these. Moved means the person, key or agent now has another View or none, and its access follows that limit and not the Brain. Closed means the person, key or agent is gone. A pending invite waits for the client. -
brain.14Activity shows each search and read, and not what was asked. Your job: do not promise the person that you can show a client’s questions. A read receipt belongs to the Brain only while the access was in it. -
brain.15A page is made by publishing and by nothing else. Enforced: publishing makes the page and its own limit to the View in one step. Any other change to that limit is refused withbrain_app_boundary_managed_by_publish. Your job: tell the person that a page has no key to copy and no account to remove. -
brain.16A page is open to anyone with its web address, or only to the people on its list. Enforced: a page for a list refuses a request with no open session of that page. An email that is not on the list gets the same answer as one that is, and no message. Your job: say which of the two the person chose. Say that anyone with the web address of a public page reads it. -
brain.17Unpublishing, expiry, or retiring its Brain or View ends a page. Enforced: the next request reaching the runtime refuses its content, and existing sessions no longer admit reads. The answer isbrain_app_not_found, like an unknown web address, or the owner’s expiry message when one was set. Public content already cached may remain visible for up to 30 seconds; pages for a list are not cached. Publishing a View again does not bring the page back. Your job: publish the page again if it must return. It gets a new web address. -
brain.18A page shows the Content and nothing more. Enforced: it reads through its own limit to the View. History, the ontology and extraction are refused, and a File outside the View reads as missing. Turning downloads off removes the Download action and blocks non-image originals. Image originals and derived previews remain readable. Your job: do not promise a visitor more than the Content, or promise that previews cannot be saved. -
brain.19The plan limits how many pages are published. Enforced: publishing past the limit is refused withplan_brain_app_limit. Free has 1, Pro has 3 and Team has 10. Your job: offer to unpublish one page first. -
brain.20A page for a list shows its owner who opened it. Enforced: Activity lists each person’s email, first and last visit and the pages they read. It never holds what they searched for. Your job: do not promise a visitor that the owner cannot see that they opened the page.
Failure signs
- A client reads more than the Brain’s Content: an access is
moved, or it was given full project access (rule brain.13). - A client reads nothing: the View was retired or has no published version (card rule view.11).
- A client’s agent cannot find something the person sees: problem hidden-reads-as-missing.
- A key or agent cannot be added: rules brain.3, brain.6 and brain.7.
Doors
No CLI command invites a client. Ask the person to open the Brain in the App
under Brains, and choose Give access.
A signed-in person who manages access manages a page. Use the CLI
(
penumbra brains page show and the commands beside it), the SDK or the platform
API. On MCP, brain_page is only on the connection of a person who is an owner or
admin of the project. A key, a Kit and a delegated agent do not have it. The project’s approval floor holds publishing, opening the page
wider and unpublishing (card approval). It does not list the people or show
who looked: use the CLI. Recipe publish-a-brain-page says what to prepare.
The CLI word
The CLI calls an access a door. The command ispenumbra brains remove-door <brain-id> <door-id>. Take <door-id> from the
row that penumbra brains show prints under access.
HTTP reference
- List brains
- Create brain
- Get brain
- Update brain
- Attach brain connection
- Remove brain connection
- List brain receipts
- Retire brain