pb.memory.
Everything here runs through the SDK. Install and create a client once.
client.ts
The client talks to
https://pnbr.io/v1. Set PENUMBRA_API_KEY in your
environment before running any of the snippets below.Part 1 — Research a domain into the graph
Every project ships with a preloaded system shape called Research. You do not design anything to start — your agent captures into it out of the box. It gives the team brain a consistent structure for everything it ingests.| Type | Captures |
|---|---|
inquiry | A line of investigation. |
source | Where evidence comes from. |
evidence | A specific observation drawn from a source. |
finding | A conclusion supported by evidence. |
open_question | A gap still to resolve. |
research_note | Freeform context. |
Stage research through a delta
Writes to the graph stage through a delta — a reviewable batch you build up, preview, then commit. Capture the entities your research produced, wire their relationships, preview the diff, and apply.Open a delta and add findings
Create a delta, then add the research entities as typed
Research entities.research.ts
Wire the relationships
Connect the entities so the finding traces back to its evidence and source.
research.ts
Preview before committing
plan() returns the diff the delta would produce. Use it to review before
anything lands in the shared graph.research.ts
Read it back
Once applied, the research is queryable. Search across the findings the team brain now holds.research.ts
Capture and extraction stage into a delta. Pass
apply: false when you want to
stage without committing, plan() to preview the diff, and revert() to undo
an applied delta. The delta is your review gate before anything joins the
shared graph.Part 2 — Give the brain memory
Research gives the team brain knowledge.pb.memory gives it memory — the things
your agents learn and should carry forward across sessions. It stores and recalls
with no setup.
memory.ts
| Field | What it holds |
|---|---|
content | The memory in natural language (required). |
kind | preference · decision · fact · lesson · observation · signal |
domain | The area it applies to (“discovery prep”, “sales process”). |
scope | agent · commons · project — who the memory is shared with. |
date_observed | When it was learned. |
source_context | Where it came from. |
expiry | Optional TTL, for memory that goes stale. |
ABOUT edge to the subject a memory concerns, and a
SUPERSEDED_BY edge when a newer memory replaces an older one.
Fork the memory shape for your domain
When the default does not fit, fork the memory shape and make it yours. It is a normal shape, so you get the full Workbench: cull the kinds you do not use, add the fields you do, rename what does not fit.Fork the default memory shape
In the Workbench, fork the memory shape into a new draft. You inherit its
fields and edges as a starting point rather than building memory from scratch.
Retune it
Cull the enum values you do not need, add domain-specific ones, or add fields
(a
client_id, a matter_number, whatever your domain remembers). Compile to
check it.How the two halves compose
Research and memory live in the same graph but on different planes. Research findings land on the semantic plane — the default canonical graph the team queries.pb.memory writes and reads on the memory plane, and recall
defaults there. The two reinforce each other: research teaches the brain a
domain, and memory keeps what your agents learn while operating on it.
Both halves are shape-governed. The Research shape and the memory shape are
shapes like any other — you can inspect, fork, compile, and
materialize them in the Workbench, which is how you bend the team brain to your
domain.
Design shapes
Fork the Research and memory shapes into a domain model.
Connect an agent
Wire an agent so it researches and remembers into the team brain.