The map
One graph
Everything lives in a single typed knowledge graph of entities and relationships. Planes partition it by role — interpreted knowledge, raw mirrors of external systems, agent memory, retired history — and every entity traces back to the source it came from. You never manage storage; you decide what the graph can hold and what lands in it.The bricks
| Primitive | What it is | Where it’s defined |
|---|---|---|
| Shape | Your domain model, made executable: entity types, their properties, the relationships between them. The central primitive — everything else is governed by it. | What is a shape |
| Type, property, relationship | The internals of a shape. Relationships are first-class and typed, not free-form edges. | Shapes & the graph |
| Entity & edge | Typed instances in the graph, conforming to a shape. | Explore & retrieve |
| Source | Registered raw material and the provenance anchor every entity traces back to. | Sources |
| Delta | A reviewable, revertible set of staged changes. Every write to the graph goes through one. | Deltas |
| Memory | A typed observation — what an agent or person learned, scoped to who should share it. | Memory |
| Project | The boundary: shapes attach to it, keys scope to it, agents operate inside it. | Projects & scopes |
Composition
This is where the leverage is. Primitives are simple; what they form together is not:- Ontology and grammar. The shapes attached to a project compose into one ontology with relationship rules across shapes. Traversal follows this grammar, which is why agent walks land on defined edges instead of crawling blindly.
- Context slices. Named, reusable subsets of the graph compiled for a purpose — the unit of “give the agent exactly this context.”
- Adherence and governance. Shapes carry an adherence mode (
strictorloose); writes stage through deltas; access is project- and scope-bound. Governance is composed into the structure, not bolted on per call. - Versions and lineage. Shapes are versioned, deltas are revertible, and the graph records what produced what — semantic git for meaning.
The verbs
Operations act on composed structure, never on the raw graph:| Verb | What it does | Surface |
|---|---|---|
| capture | Stage one typed entity. | pb.capture, penumbra_capture |
| extract | Coerce source material into many entities through a shape. | pb.extract |
| search / recall | Retrieve typed results across entities, sources, and memory. | pb.search, pb.memory.recall |
| traverse | Walk relationships along the grammar. | penumbra_traverse |
| synthesize | Turn recalled structure into a briefing that carries its own evidence. | pb.memory.synthesize |
| materialize | Publish a compiled shape draft into a project. | Materialize |
The backward pass
Every forward verb has a backward question: was that enough, and can I trust it? The decision-quality surface (pb.dq) answers it
— check whether a subject is fit for a purpose, audit whether a delta would
degrade the graph, trace whether a briefing’s claims are backed by stored
sources, repair what’s missing. Verdicts are dispositions and findings,
never scores.
The boundary
A shape is one model projected in both directions across Penumbra’s edge:- Compile out. The same shape becomes a provider-ready structured-output
schema (OpenAI, Anthropic, Gemini, Firecrawl) via
shape_workbench_export_schema, the agent tool surface you previewed in the Workbench, and the extraction bundle that governs what an LLM may produce. - Map in. Foreign material becomes structure: a website or document becomes a proposed shape, and a foreign API’s type system can be mapped onto your ontology through adjudicated correspondences (IR, beta).
The invariants
Four rules hold everywhere, on every surface:- Every write stages through a delta. Capture, extract, memory — all of
it.
apply: falseis your review gate;revertis your undo. - There are no confidence scores. Anywhere. Verdicts are dispositions and findings you can act on, not numbers you can’t.
- Materialize is dry-run by default and requires a
review_note. Nothing reaches a live project silently. - Starter shapes are discovered, not listed.
pb.shapes.starters()returns the curated kit;list()returns only your project’s own shapes.
The loops
The guides each run one loop end to end, with a concrete success state:| Loop | Guide | You’ll know it worked when… |
|---|---|---|
| Remember → recall | Give your agent memory | it knows tomorrow what you told it today |
| Capture → search | Quickstart | your note became typed structure |
| Register → extract → apply | Cognitive ETL pipeline | a document became governed graph |
| Design → compile → materialize | The Workbench | your expertise became an executable shape |
| Trace → check → repair → act | Grounded copilot | the agent refused to act on thin context |