Concept · core
Use when
You start a job, or you need to know which project you work in and what you may do there.
Looking for something else?
Which kind of credential you hold (card Credential). Reading one document (card File).
For
A project is the place for one body of work. It holds the Files you bring in and the entities you extract or write from them. It holds the Shapes that give those entities their types. It also holds the Views and Brains you share. Work moves through a project in one direction. A File keeps its versions. Search and extraction read the current version as passages. A citation ties an entity to the passage that supports it. A collection groups Files, a View includes collections, and a Brain includes a View. Every command and tool acts on one project at a time. Orient first, so you know which project it is and what your credential may do there.Use when
- You begin a job and do not yet know the project, your role or your limits.
- A command says no project is selected, or a project is not found.
- You must choose between several projects that one credential reaches.
- You need a short picture of what a project holds before you search it.
Not this
- Which credential you hold and what it can do: use card Credential.
- Reading, replacing or trashing one document: use card File.
Rules
project.1Orient before you act. Runpenumbra status. It shows who is signed in, the project, your role and up to four next steps. It then lists each command group that your credential cannot fully use or that may wait for approval. Your job: do this at the start of a job. A group that is not listed is fully open to you.penumbra status --alllists every group. A barepenumbracall prints a shorter version. Without it, you may plan a command your credential cannot run.project.2The CLI chooses one project for each command, in this order: the--projectflag, thePENUMBRA_PROJECTvariable, thepenumbra.jsonfile, then the profile. Your job: read the project line inpenumbra status. It names where the choice came from. A wrong choice writes into the wrong project.project.3The commandpenumbra usewritespenumbra.jsonin the current folder. With--global, it writes the profile instead. Your job: pass--projectfor one command. Usepenumbra useonly when the person wants the choice to last.project.4A project command needs a project. Enforced: with none chosen, the CLI exits with code 2 andproject_not_selected. It then lists the projects your credential reaches.project.5A project API key reaches one project. A person’s session or a connected agent can reach several, andpenumbra projects listshows them with your role. Enforced:penumbra userefuses a project you cannot reach withproject_not_found, except when you hold a key. Your job: pick from that list. A project that does not exist and one you may not enter look the same.project.6Your role and credential limit what you can do. Your job: ask before you plan around a command you doubt. Runpenumbra status --explain "<command>". It says whether the command would run, wait for approval, or be refused, and why.project.7One MCP connection can serve several projects. The toolpenumbra_projectslists them and their IDs. With one project, calls use it. Enforced: with more than one, a project tool call uses its project field, else the session’s project fromuse_project. With neither, the call is refused withproject_required. Your job: calluse_projectonce when you work in one project. Pass project to act in another project for one call. A client without an MCP session must pass project on each call.project.8The toolproject_overviewreturns a short summary: up to five recent Files, eight collections, eight Shapes and eight workspaces. Your job: read “not granted” or “unavailable” as unknown, never as empty. The result lists each missing section, and it never widens your grants.project.9Each project tool result names its project: the project field and a last line,Project: <name> (<id>). Your job: check that line before you report or change anything. A wrong project means a wrong answer.project.10A connection reaches only the projects its owner added. Enforced: the toolrequest_project_accessasks the person to add one of their existing projects. Nothing changes until they approve in the browser, and they choose the access, at most their own role. Your job: give the person thereview_url, then pollproject_access_status. After approval, refresh the tool list. To start a new project, userequest_project_creation.project.11A project’s Grammar is Penumbra’s rules for this project’s own types, written from its Shapes. It names the Shapes, types and relationships and lists the recipes. A project keeps no File for it. In a repository,penumbra domain syncwrites.penumbra/besidepenumbra.json.GRAMMAR.mdis the Grammar.types/holds the TypeScript of each published Shape.lock.jsonholds the digest of each file and the artifact of each Shape. Commit the folder like a lockfile. Enforced:penumbra domain sync --checkwrites nothing and exits 3 when a file is missing, differs or is not a published Shape. It changes only when a Shape or the Grammar’s text changes, so run it in CI. A reader limited to a View gets only the Shapes it may see. Your job: when you start work in a project, read.penumbra/GRAMMAR.mdif the repository has it. Otherwise call thegrammartool with no arguments. Use only the types it lists. After a Shape is published, runpenumbra domain syncand commit the result. The folder is as current as the last sync, so callgrammarwith no arguments when a type you need is missing.
Failure signs
- A command says no project is selected: rule project.4.
- A command writes into a project the person did not mean: rule project.2.
- Everything reads as missing, or the counts look small: problem hidden-reads-as-missing.
- You do not know what your credential can see: problem what-can-this-credential-see.
- Text names a tool this connection does not have: problem tool-named-but-missing.
- A tool call is refused with
project_required: rule project.7. - The person names a project that
penumbra_projectsdoes not list: rule project.10.
Doors
On a Kit,
project_overview fills only the sections that the Kit’s other read
tools back. On MCP, the tool list follows your current access. Refresh it at the start of
each client session.