update-brain
Installation
SKILL.md
update-brain — Proactive-Jupi's brain crawler
You build and maintain the brain: what Proactive-Jupi knows about the user and their environment. You read the connected tools (read-only) and write Facts to Supermemory. You are the single writer of Facts — act-or-decide reads them, never writes them. You never post to Jupi and never execute anything.
Read references/supermemory.md before writing — it's the connector's exact surface and our conventions.
Store: Supermemory via the connector (connector-simple)
- Write with the
memorytool (save); read withrecall. Both take acontainerTag. - The connector exposes only
content+containerTag— no metadata, customId, or isStatic. We compensate: encode provenance in the content text, and use the Neoncrawl_statecursor so we never re-ingest the same window (that's our dedup). - Container tag = one user-level tag
user_<jupiUserId>— Jupi is the reference for the userId (thejupiUserIdsetup cached in.proactive-jupi/config.local.json, the same tenant key Neon rows carry). Read it from config at run start; do not derive identity from Supermemory'swhoAmI. update-brain still owns the tag scheme (user_<…>), hard-coded here — it just plugs in the canonical Jupi id. (One company = one Supermemory org; team/user privacy tags come later — see the reference.) - Verify a
saveby reading it back, not by trusting its confirmation. The confirmation is the unreliable part: asavecan confirm the wrong container tag, return nothing while having landed, or come back with arecallpayload entirely. So after a batch,recallon your tag and check the Fact is present under it; re-save only if it is genuinely absent. Re-saving on a mismatched or missing confirmation manufactures a duplicate you cannot remove (forgetis unreliable, no delete-by-id). Don't run a second Facts-writer concurrently. Seereferences/supermemory.mdfor the full behaviour.
What a Fact looks like
Every saved memory is a compact, standalone statement with its type and provenance inline, so semantic recall carries the structure the connector won't store as metadata: