Minding — the user's mind in the graph
@<handle>/mind holds what belongs to the user and travels with them: contours, live realms and their purpose, machines and deployments, the people of their contexts, dated facts, lessons from finished work. This skill is that realm's memory — recall and write, by reflex, not by ritual. Both reflexes key to the question, not the session: a verstakified repo kills only the routing case (AGENTS.md names the session's realm) — everything else fires from any session.
Two reflexes
| Reflex |
Fires when |
Move |
| RECALL |
the user asks ('вспомни', 'что ты знаешь…'); the task needs a user holding (a deploy target, a machine trait, a person's rhythm, an expiry); nothing names the realm in play; the "what's on me" ask |
§1 — map-level or fact-level read; the agenda ask → §4 |
| WRITE |
a fact concerns the user, will matter later, and has no project-realm home |
§1b: route it to @<handle>/mind per the skeleton — never to harness-local memory |
Bootstrap (§3) and reconcile (§2) run on explicit request only.
The address
nks_me(action="whoami") → handle
nks_orient(realm="@<handle>/mind") → the contour map
- The address is a convention in this skill, not a fact in the world. Never scan
nks_realm(action="list") for "this user's personal realm". (why: a runtime search is the guessing this skill removes.)
Realm not found: "@<handle>/mind" is the answer — no contour yet → §3. Do not fall back to listing realms.
- Handle is stable: re-read it once per session, not per call.
- A personal contour already living under a different slug is settled at bootstrap, once: move it to
mind, or leave a stub at @<handle>/mind — one key:true landmark naming the real address (a cold session then pays one extra orient).
§1 Recall
Two depths, priced separately:
- Map-level — which realm owns this, what do I have, which contour: one
nks_orient(realm="@<handle>/mind"), no lens. It returns: root holons = contours; attrs.key=true landmarks = live-realm cards + routing rules; ACTIVE BIANHUA = the person's own transformations. Answer from the map, or name the realm and hand to entry. Ceiling: 2 calls.
- Fact-level — a specific remembered fact (a path on a box, a person's rhythm, an expiry): search first, skip the orient —
nks_search(realm="@<handle>/mind", q=<term>), plus nks_semantic_search when the memory may be worded differently than the ask. Lexical q is AND-matched and stem-sensitive: one or two short terms in the realm's language («caddy», «домен») — a multi-word query silently misses cards that carry every word but one. Read the mode badge before trusting the hit: atita is a former fact, anagata a planned one. Deeper reads follow entry's protocol (orient → search → look), run inside this realm. Ceiling: 3 calls, then answer with what you have.
Two rules at either depth: two contours claim the question → ask one line naming both, never pick silently; a miss is an answer — "этого в памяти нет" beats a confident invention, and a miss the user corrects is the write reflex's cue (§1b).
§1b The write reflex
The graph twin of "worth remembering, nowhere to put it": about the user + useful later + serves no single project → it goes here. Shapes are in references/personal-realm.md — the user's own machines (§7), people (§2b), dated facts (§7), lessons (§8), findings serving several contours.
Classification: whose fact is it? Two boundaries, not one. Infrastructure that exists to serve this project — its servers (staging, prod), its deploy pipeline, its dated duties — belongs to the project's realm, never here, however long the servers outlive the repo. Here belongs what is the user's own and serves no single project: their personal machines, their expiries, people, cross-project lessons. A fact about another contour → that contour's realm (the map names it). A card here carries only its own subject's traits — a project's deploy procedure is not a machine trait. (why: benchmarks on cold sessions — agents route project servers to the project realm and personal machines to mind on this boundary, where single-question tests misroute.)
Three-way routing, in order: a fact about this project → its realm or AGENTS.md (the repo's persistence rules); a fact about another contour → anchored in that contour's realm, posed_to its steward (inquiry: anchor where the addressee orients, not where you stand); a fact about the user that no project owns → here. Two guards on the last branch: never what a call answers (Storage rule below); never a second copy of a project realm's content.
The routing runs both directions — where a fact belongs is where to look for it: a deploy target, a machine trait, a person's rhythm, a cross-project lesson are read from @<handle>/mind mid-repo-work exactly because that is where they are written. And a write is preceded by a read anyway: locate the card before adding to it.
§2 Reconcile
Consolidation of the memory. Run on request, on a new realm / machine / job, or when the map is visibly behind. Never on recall's cadence. (why: a reconcile-priced recall gets skipped, and then the session guesses.)
Observe — nks_realm(action="list") · nks_me(action="kartas") · nks_org(action="list").
Diff and classify every row:
| Verdict |
Move |
| in the world, not in the map |
classify: contour + what it's for, or fold under a disposable class (§ Storage) |
| in the map, not in the world |
crystallize, then release — ask what the contour proved; if there is an answer, write it as a grundsatz/bildung with arose_from to the card, then nks_update(volitive_mode="visarjana") / ontic atita, reason stated |
| in both |
leave it |
(why crystallize first: an archived realm is never re-read. Release without it deletes the only part of a finished contour that had long value.)
Wire identity — for every live realm where the person holds a role: nks_update(realm=<R>, node_id=<karta>, user="me", basis_version=<v>), or user="me" at creation. Only kartas the person actually stands behind. (why: the link is a claim about reality — and §4 sees nothing else.)
Sweep (§4).
Report what changed and what you left out. A silent reconcile reads as "all fine".
Idempotent — a re-run touches only what moved.
§3 Bootstrap
Audit each concern against its source and classify absent / stale / correct (same machinery as verstakify). Do not branch on "does the realm exist".
| Concern |
Kind |
Absent → |
| what realms/roles/orgs exist |
derived |
never write it down |
| what each live realm is for; contours; what's dead |
authored |
ask the user |
| machines, deployments, checkouts |
authored |
ask the user |
| routing and disposable-class rules |
authored |
propose, user confirms |
| standing preferences ("how to act with me") |
authored |
the globally injected instruction file of each harness the user runs — create if absent, one source linked across harnesses; never a node here |
Then fill references/personal-realm.md and run §2 once, so the first map is born verified.
When not to build one (provisional threshold): all three of ≤3 realms, a single contour, no organizations → say so and stop. (why: an unreconciled map answers fast and wrong; a bootstrap run on everyone is a rite, not a tool.)
§4 Agenda across all realms
nks_me(action="kartas") → [(realm, karta-seq)]
nks_search(realm=<R>, q="", posed_to=<seq>,
volitive_mode="chanda,adhimoksha,upeksha,virodha",
limit=100) → open items, per realm
Three rules make a sweep honest:
- The filter is part of the call. The
volitive_mode CSV keeps answered and released rows (visarjana) off the wire entirely.
- Two kinds of closed rows survive it — drop them on read: rows rendered with the 🌅 sunset badge (closed by their carrier), and
virodha rows of any genre except risk (a refused question is closed; a risk in virodha is live — that is its active mode).
- Read the "N of M" header. Past
limit the page truncates — and a truncated agenda looks complete. Page on until N = M.
The person's standing in a realm is a karta bound via user — typically the 主 (owner) karta; agent kartas the person runs bind the same way. That binding is the cross-realm identity. A standing webhook armed on a bound karta (nks_admin(action="add_webhook", node_id=<karta>, …)) turns this pull-sweep into push: the graph wakes you instead.
Sweep @<handle>/mind too — a duty you posed to your own 主 karta lives nowhere else.
Cost = number of live contours, not accesses. Kartas without the user link do not appear at all — §2.3 is the precondition, not an optimization.
Never stored. (why: a saved agenda states yesterday's obligations with today's confidence.)
Storage rule
Store only what no call can answer — minus secrets, which are unanswerable and still never stored.
| Never store |
Store (authored) |
| realm list, access, roles, org membership |
what each live realm is for; when to route there |
| which kartas the person holds |
contour of each realm; what's dead or dormant |
| the §4 agenda |
routing and naming rules |
| anything a tool returns on demand |
the user's own machines and checkouts, per-machine tool surfaces |
| a second copy of a project realm's content |
the people of each contour, and what is open with them |
| secrets — credentials, tokens, keys |
dated facts: expiries, renewals, review cycles |
| prose restating what orient already shows |
external word serving more than one contour (a finding, a benchmark, a diagnosis belonging to no single project); lessons crystallized out of retired contours (§2) |
- Classes, not cards. Disposable realms (benchmark runs, experiments) get one grundsatz naming the pattern — never a card each. (why: the rule outlives its population.)
People and dated facts
- A person is a karta — the role they play in your contour, with its motivation. Bind it:
user=<their sub> when they are on the platform (writing Decision 2b), manifested_as="agantuka" 客 when they answer on their own time from beyond your boundary. What is open with them is a vimarsha posed_to that karta, not a note about them.
- A date is an attr, not prose — an expiry, a renewal, a review cycle is a
sachverhalt carrying its timestamp in attrs (writing, Decision 4); a recurring duty is a kriya. attrs.parked_until and attrs.wake_condition carry "not now, wake me then" and are honoured by the staleness detectors — use them instead of writing a date into a description.
Limits
- Cross-realm arrows do not exist. Everything
@<handle>/mind says about another realm is prose and attrs, never an edge. No propagation, no anga across realms.
- Not a hub. §4's unity comes from iteration, not structure. Keep the realm thin so it doesn't pretend otherwise.
- Recall is only as honest as the last §2.
Seams
| Skill |
Seam |
| entry |
one-directional: minding names the realm and hands over; entry stays self-contained. |
| verstakify |
a verstakified repo names its realm in AGENTS.md → the routing question dies there; user-field recall stays, and the memory-guard moment (a blocked local-memory write) is where the write reflex routes user-scoped facts here. Same audit machinery; verstakify binds the owner karta memory's §4 sweeps. |
| autonomous |
§4 is the cross-realm view of the inboxes that autonomous works through one realm at a time. |
| assembly |
the person's own transformations, if mapped, are an assembly at the scale of a life — owner accepts each telos. |
| intake |
classifying a newly appeared realm is external word entering under provenance — and this contour is where word serving several contours lands, instead of the realm that happened to be open. |
| inquiry |
crystallization is the §2 release move: a finished contour leaves a form behind, not just an absence. |
Acceptance
- Map-level recall answers in ≤2 calls, or asks one question naming the candidates; fact-level reaches a stored fact in ≤3 calls, search-first.
- A recall miss is reported as a miss — and offered as a write.
Realm not found is read as routing (→ §3), not as failure.
- In a verstakified repo the session-routing question never fires; user-field recall and writes still run there.
- §2 is idempotent and reports what it dropped.
- After §3,
nks_me(action="kartas") returns a karta for every live realm where the person holds a role.
- Nothing derivable was written into the realm.
- On a user who doesn't need one: says so, stops.
What minding is NOT
- Not a session ritual — nothing routes through it by protocol; it fires by its triggers or not at all.
- Not the harness's memory feature — no MEMORY.md, no local files; the graph is the carrier, and user-facts routed here are exactly the ones that must survive a machine change.
- Not the home of standing preferences — "how to act with me" (language, workflow rules, style) is an instruction, not a fact: its home is the globally injected user instruction file (
~/.claude/CLAUDE.md, ~/.config/opencode/AGENTS.md), which every session loads without being asked — a node here is the wrong carrier, nothing auto-reads it per session. The layer is established once by verstakify (cross-project memory: yes) — or by §3 above when it is absent. (why: a preference nobody injects is a preference nobody obeys.)
- Not
entry — that orients inside a given realm, used by every agent already told where to go.
- Not an index of the access surface — it stores the authored remainder.
- Not a scheduler — §4 says what awaits; what to do with it belongs to the person and autonomous.
1---2name: minding3description: The user's mind in the graph — the personal realm @handle/mind; this skill is its memory: recall and write by reflex, not ritual. WRITE when a durable fact about the user surfaces mid-task and serves no single project — their personal machines, their expiries, people, cross-project lessons → @handle/mind (never harness-local memory). A project's servers, pipeline and dated duties are that project's facts — its own realm, never here. A fact about another project → its realm via this realm's contour map. RECALL when the user's own field is in play: 'вспомни', 'что ты знаешь обо мне', 'что у меня есть', 'что на мне', 'где задеплоено', 'do you remember', 'what's on my plate', or a task needs such a fact. 'запомни' → write. 'заведи мне память' → bootstrap. Needs the nks_* MCP tools.4---56# Minding — the user's mind in the graph78`@<handle>/mind` holds what belongs to the user and travels with them: contours, live realms and their purpose, machines and deployments, the people of their contexts, dated facts, lessons from finished work. This skill is that realm's **memory** — recall and write, **by reflex, not by ritual**. Both reflexes key to the **question, not the session**: a verstakified repo kills only the routing case (AGENTS.md names the session's realm) — everything else fires from any session.910## Two reflexes1112| Reflex | Fires when | Move |13|---|---|---|14| **RECALL** | the user asks ('вспомни', 'что ты знаешь…'); the task needs a user holding (a deploy target, a machine trait, a person's rhythm, an expiry); nothing names the realm in play; the "what's on me" ask | §1 — map-level or fact-level read; the agenda ask → §4 |15| **WRITE** | a fact concerns the user, will matter later, and has no project-realm home | §1b: route it to `@<handle>/mind` per the skeleton — never to harness-local memory |1617Bootstrap (§3) and reconcile (§2) run on explicit request only.1819## The address2021```22nks_me(action="whoami") → handle23nks_orient(realm="@<handle>/mind") → the contour map24```2526- The address is a **convention in this skill**, not a fact in the world. Never scan `nks_realm(action="list")` for "this user's personal realm". *(why: a runtime search is the guessing this skill removes.)*27- `Realm not found: "@<handle>/mind"` **is the answer** — no contour yet → §3. Do not fall back to listing realms.28- Handle is stable: re-read it once per session, not per call.29- A personal contour already living under a **different slug** is settled at bootstrap, once: move it to `mind`, or leave a **stub at `@<handle>/mind`** — one `key:true` landmark naming the real address (a cold session then pays one extra orient).3031## §1 Recall3233Two depths, priced separately:34351. **Map-level** — which realm owns this, what do I have, which contour: one `nks_orient(realm="@<handle>/mind")`, no lens. It returns: root holons = contours; `attrs.key=true` landmarks = live-realm cards + routing rules; ACTIVE BIANHUA = the person's own transformations. Answer from the map, or name the realm and hand to **entry**. Ceiling: 2 calls.362. **Fact-level** — a *specific* remembered fact (a path on a box, a person's rhythm, an expiry): **search first, skip the orient** — `nks_search(realm="@<handle>/mind", q=<term>)`, plus `nks_semantic_search` when the memory may be worded differently than the ask. Lexical `q` is AND-matched and stem-sensitive: one or two short terms **in the realm's language** («caddy», «домен») — a multi-word query silently misses cards that carry every word but one. Read the mode badge before trusting the hit: `atita` is a *former* fact, `anagata` a planned one. Deeper reads follow **entry**'s protocol (orient → search → look), run inside this realm. Ceiling: 3 calls, then answer with what you have.3738Two rules at either depth: two contours claim the question → ask one line naming both, never pick silently; **a miss is an answer** — "этого в памяти нет" beats a confident invention, and a miss the user corrects is the write reflex's cue (§1b).3940## §1b The write reflex4142The graph twin of "worth remembering, nowhere to put it": about the user + useful later + serves no single project → it goes here. Shapes are in `references/personal-realm.md` — the user's own machines (§7), people (§2b), dated facts (§7), lessons (§8), findings serving several contours.4344**Classification: whose fact is it?** Two boundaries, not one. Infrastructure that exists to serve **this project** — its servers (staging, prod), its deploy pipeline, its dated duties — belongs to the project's realm, never here, however long the servers outlive the repo. Here belongs what is the user's **own** and serves no single project: their personal machines, their expiries, people, cross-project lessons. A fact about **another** contour → that contour's realm (the map names it). A card here carries only its own subject's traits — a project's deploy procedure is not a machine trait. *(why: benchmarks on cold sessions — agents route project servers to the project realm and personal machines to mind on this boundary, where single-question tests misroute.)*4546Three-way routing, in order: a fact about **this** project → its realm or AGENTS.md (the repo's persistence rules); a fact about **another** contour → anchored in *that* contour's realm, `posed_to` its steward (**inquiry**: anchor where the addressee orients, not where you stand); a fact about the **user** that no project owns → here. Two guards on the last branch: never what a call answers (Storage rule below); never a second copy of a project realm's content.4748**The routing runs both directions** — where a fact belongs is where to look for it: a deploy target, a machine trait, a person's rhythm, a cross-project lesson are *read* from `@<handle>/mind` mid-repo-work exactly because that is where they are written. And a write is preceded by a read anyway: locate the card before adding to it.4950## §2 Reconcile5152Consolidation of the memory. Run on request, on a new realm / machine / job, or when the map is visibly behind. **Never on recall's cadence.** *(why: a reconcile-priced recall gets skipped, and then the session guesses.)*53541. **Observe** — `nks_realm(action="list")` · `nks_me(action="kartas")` · `nks_org(action="list")`.552. **Diff and classify** every row:5657 | Verdict | Move |58 |---|---|59 | in the world, not in the map | classify: contour + what it's for, or fold under a disposable class (§ Storage) |60 | in the map, not in the world | **crystallize, then release** — ask what the contour proved; if there is an answer, write it as a `grundsatz`/`bildung` with `arose_from` to the card, *then* `nks_update(volitive_mode="visarjana")` / ontic `atita`, reason stated |61 | in both | leave it |6263 *(why crystallize first: an archived realm is never re-read. Release without it deletes the only part of a finished contour that had long value.)*64653. **Wire identity** — for every live realm where the person holds a role: `nks_update(realm=<R>, node_id=<karta>, user="me", basis_version=<v>)`, or `user="me"` at creation. Only kartas the person actually stands behind. *(why: the link is a claim about reality — and §4 sees nothing else.)*664. **Sweep** (§4).675. **Report what changed and what you left out.** A silent reconcile reads as "all fine".6869Idempotent — a re-run touches only what moved.7071## §3 Bootstrap7273Audit each concern against its source and classify **absent / stale / correct** (same machinery as **verstakify**). Do not branch on "does the realm exist".7475| Concern | Kind | Absent → |76|---|---|---|77| what realms/roles/orgs exist | derived | never write it down |78| what each live realm is for; contours; what's dead | authored | ask the user |79| machines, deployments, checkouts | authored | ask the user |80| routing and disposable-class rules | authored | propose, user confirms |81| standing preferences ("how to act with me") | authored | the globally injected instruction file of each harness the user runs — create if absent, one source linked across harnesses; never a node here |8283Then fill `references/personal-realm.md` and run §2 once, so the first map is born verified.8485**When not to build one** (provisional threshold): **all three** of ≤3 realms, a single contour, no organizations → say so and stop. *(why: an unreconciled map answers fast and wrong; a bootstrap run on everyone is a rite, not a tool.)*8687## §4 Agenda across all realms8889```90nks_me(action="kartas") → [(realm, karta-seq)]91nks_search(realm=<R>, q="", posed_to=<seq>,92 volitive_mode="chanda,adhimoksha,upeksha,virodha",93 limit=100) → open items, per realm94```9596Three rules make a sweep honest:9798- **The filter is part of the call.** The `volitive_mode` CSV keeps answered and released rows (`visarjana`) off the wire entirely.99- **Two kinds of closed rows survive it — drop them on read:** rows rendered with the 🌅 sunset badge (closed by their carrier), and `virodha` rows of any genre except risk (a refused question is closed; a risk in `virodha` is *live* — that is its active mode).100- **Read the "N of M" header.** Past `limit` the page truncates — and a truncated agenda looks complete. Page on until N = M.101102The person's standing in a realm is a karta bound via `user` — typically the **主 (owner) karta**; agent kartas the person runs bind the same way. That binding *is* the cross-realm identity. A standing webhook armed on a bound karta (`nks_admin(action="add_webhook", node_id=<karta>, …)`) turns this pull-sweep into push: the graph wakes you instead.103104**Sweep `@<handle>/mind` too** — a duty you posed to your own 主 karta lives nowhere else.105106Cost = number of **live** contours, not accesses. Kartas without the `user` link do not appear at all — §2.3 is the precondition, not an optimization.107108Never stored. *(why: a saved agenda states yesterday's obligations with today's confidence.)*109110## Storage rule111112**Store only what no call can answer** — minus secrets, which are unanswerable *and* still never stored.113114| Never store | Store (authored) |115|---|---|116| realm list, access, roles, org membership | what each live realm is **for**; when to route there |117| which kartas the person holds | contour of each realm; what's dead or dormant |118| the §4 agenda | routing and naming rules |119| anything a tool returns on demand | the user's own machines and checkouts, per-machine tool surfaces |120| a second copy of a project realm's content | the people of each contour, and what is open with them |121| secrets — credentials, tokens, keys | dated facts: expiries, renewals, review cycles |122| prose restating what orient already shows | external word serving **more than one** contour (a finding, a benchmark, a diagnosis belonging to no single project); lessons crystallized out of retired contours (§2) |123124- **Classes, not cards.** Disposable realms (benchmark runs, experiments) get **one** grundsatz naming the pattern — never a card each. *(why: the rule outlives its population.)*125126### People and dated facts127128- **A person is a karta** — the role they play *in your contour*, with its motivation. Bind it: `user=<their sub>` when they are on the platform (**writing** Decision 2b), `manifested_as="agantuka"` 客 when they answer on their own time from beyond your boundary. What is open with them is a vimarsha `posed_to` that karta, not a note *about* them.129- **A date is an attr, not prose** — an expiry, a renewal, a review cycle is a `sachverhalt` carrying its timestamp in `attrs` (**writing**, Decision 4); a recurring duty is a kriya. `attrs.parked_until` and `attrs.wake_condition` carry "not now, wake me then" and are honoured by the staleness detectors — use them instead of writing a date into a description.130131## Limits132133- **Cross-realm arrows do not exist.** Everything `@<handle>/mind` says about another realm is prose and attrs, never an edge. No propagation, no `anga` across realms.134- **Not a hub.** §4's unity comes from iteration, not structure. Keep the realm thin so it doesn't pretend otherwise.135- **Recall is only as honest as the last §2.**136137## Seams138139| Skill | Seam |140|---|---|141| **entry** | one-directional: minding names the realm and hands over; **entry stays self-contained**. |142| **verstakify** | a verstakified repo names its realm in AGENTS.md → the routing question dies there; user-field recall stays, and the memory-guard moment (a blocked local-memory write) is where the write reflex routes user-scoped facts here. Same audit machinery; verstakify binds the owner karta memory's §4 sweeps. |143| **autonomous** | §4 is the cross-realm view of the inboxes that **autonomous** works through one realm at a time. |144| **assembly** | the person's own transformations, if mapped, are an assembly at the scale of a life — owner accepts each telos. |145| **intake** | classifying a newly appeared realm is external word entering under provenance — and this contour is where word serving *several* contours lands, instead of the realm that happened to be open. |146| **inquiry** | crystallization is the §2 release move: a finished contour leaves a form behind, not just an absence. |147148## Acceptance149150- Map-level recall answers in ≤2 calls, or asks one question naming the candidates; fact-level reaches a stored fact in ≤3 calls, search-first.151- A recall miss is reported as a miss — and offered as a write.152- `Realm not found` is read as routing (→ §3), not as failure.153- In a verstakified repo the session-routing question never fires; user-field recall and writes still run there.154- §2 is idempotent and reports what it dropped.155- After §3, `nks_me(action="kartas")` returns a karta for every live realm where the person holds a role.156- Nothing derivable was written into the realm.157- On a user who doesn't need one: says so, stops.158159## What minding is NOT160161- **Not a session ritual** — nothing routes through it by protocol; it fires by its triggers or not at all.162- **Not the harness's memory feature** — no MEMORY.md, no local files; the graph is the carrier, and user-facts routed here are exactly the ones that must survive a machine change.163- **Not the home of standing preferences** — "how to act with me" (language, workflow rules, style) is an *instruction*, not a fact: its home is the globally injected user instruction file (`~/.claude/CLAUDE.md`, `~/.config/opencode/AGENTS.md`), which every session loads without being asked — a node here is the wrong carrier, nothing auto-reads it per session. The layer is established once by **verstakify** (cross-project memory: yes) — or by §3 above when it is absent. *(why: a preference nobody injects is a preference nobody obeys.)*164- **Not `entry`** — that orients inside a given realm, used by every agent already told where to go.165- **Not an index of the access surface** — it stores the authored remainder.166- **Not a scheduler** — §4 says what awaits; what to do with it belongs to the person and **autonomous**.