retrieval
A memory is only as useful as what reaches the conversation. innernet never hands an AI the whole map and hopes. Every ask goes through one door, innernet_context, and comes back as a small, ranked package with a receipt.
the one call#
{ "name": "innernet_context", "arguments": { "slug": "my-product", "intent": "what did we decide about pricing?" } }intent is the question in the person's own words. Not a keyword list, not "pricing": the whole ask. The selector reads it the way a person would, and a precise question gets a precise slice. Over REST it is the same handler:
curl "https://innernet.live/api/v1/context?slug=my-product&intent=what+did+we+decide+about+pricing" \
-H "Authorization: Bearer innernet_..."what comes back#
| field | what it is |
|---|---|
read_first | One line: answer from focus, or the memory holds nothing on this. Read it before anything else. |
focus | The sections that answer the ask, best first: { dimension, section, text }. A section too long to fit is excerpted and marked partial. |
periphery | A handful of near-misses, { ref, summary }: close enough to mention, not close enough to send whole. |
retrieval_advice | What to open next if the conversation turns (usually an innernet_get_dimension call). |
spine | What this project is: name, tagline, type, its core, open tasks, what moved lately, and as_of. |
map | Every dimension by name, so nothing in the memory is out of reach. |
personal_context | Only when facts about the person bear on this ask, and only shareable ones. |
sent | The receipt: which selector chose the slice, how many tokens went, how many personal facts were shared, how many private ones were withheld. |
meta | holds_answer, asks_about_past, and the counts behind the receipt. |
the budget#
Focus has a hard ceiling of about 1,600 tokens. The package is bounded by the ask, never by the size of the memory: a map with nine hundred sections answers in the same one to two thousand tokens as a small one. That is what keeps innernet cheap to call on every turn, and it is why a good intent matters more than a big context window.
when the memory holds nothing#
meta.holds_answer: false and a read_first that says so. That is an answer, not a failure: the AI should say the memory has nothing on it rather than guess from the project name. The periphery still lists what was close, so the conversation can go there instead.
history stays out of the way#
Every dimension keeps its superseded decisions under a ## history heading. Retrieval leaves those lines out of focus, because an AI that reads "was X, now Y" next to "Y" tends to repeat the X. When the ask is about the past ("what did we use before?", "why did we change…"), meta.asks_about_past flips and the history of every admitted dimension rides along. See branches & history.
captures that haven't folded yet#
A capture lands in the commit log in milliseconds; netti folds it into dimensions afterwards. Until it does, retrieval splices recent captures in as a pending_captures section on projects you own, so something you said a minute ago is already answerable.
lean loads, full opens#
innernet_load_project is lean by default: one line per dimension, the capture protocol and a slice of personal context. It orients a session. innernet_get_dimension opens one page whole when the conversation turns that way, and full: true on a load returns every body (the REST GET /projects/{slug} always does). For answering questions, innernet_context is almost always the right call.