mnest — the trace of co-activation between two executorsThis document defines what a mnest is: the trace, kept in the mnestome, of an output passing between two executors. It is the second of three canonical docs introduced by the Dialogue on executors and distributed memory. It replaces and redefines the older synapse.html: the name changes (synapse → mnest) and so does the semantics (the synapse was a passive «concomitance», the mnest is an observed data passing).
The document covers:
It does not cover, and defers to other docs:
A mnest is a node of the mnestome that records a specific fact:
A mnest is therefore a trace of observed co-activation: not an a-posteriori statistical inference, not a declaration of intent, but a statement that an event actually happened, recorded by the gateway at the end of the turn.
From this all its important properties follow:
The previous microdesign (synapse.html, now deprecated) called this entity synapse and described it as «a declared or observed link between neurons: when A fires, B tends to fire too». The 2026-04-24 redefinition changes three things:
| Aspect | Synapse (v1.0, deprecated) | Mnest (v1.1, canonical) |
|---|---|---|
| What it records | A correlation of activations: «A on, then B on shortly after». | A passing of data: «A's output was B's input». |
| Generation | Inferred by statistical observation of co-occurrences across time windows. | Generated deterministically by the gateway at turn close: either the passing happened or it did not. |
| Meaning for synthesis | A strong synapse suggests a conceptual proximity. | A strong mnest toward an executor that does not exist (proto-mnest, ch. 8) is a concrete operational gap, not an analogy. |
The gain of the redefinition is that the mnest sees data that moved, not just events that fired. A mnest graph is a graph of real flows; a synapse graph was a graph of hints.
A mnest, in serialised form, contains these mandatory fields:
{
"id": "mnest_01HW...", // ULID
"src_executor": "fs_read", // canonical name of the caller
"src_version": "1.0.0",
"dst_executor": "pdf_extract", // canonical name of the callee
"dst_version": "2.0.0",
"weight": 0.42, // [0..1], normalised
"uses": 17, // total use counter
"ts_first": "2026-03-12T18:04:00Z",
"ts_last": "2026-04-23T09:21:00Z",
"decay_lambda": 0.018, // /day, see ch. 6
"tags": ["invoice", "pdf"], // optional
"state": "active" // active | proto | decaying | superseded
}
Three invariants always hold:
(src_executor, src_version, dst_executor, dst_version) is the key: at most one active mnest per tuple.weight is always in [0, 1], computed as an exponential function of recent uses (see formula in ch. 6).ts_last >= ts_first; uses >= 1.Tags are an optional addition that does not influence weight computation, but help the ager and the synt identify clusters of mnests living in the same application domain (e.g. «invoice», «photo», «work email»). Tags propagate from the turn context to the newborn mnest; the user can re-tag or clear them during review.
A mnest is not declared, it is observed. The operational rule, applied by the gateway at the close of every turn:
(A, ver_A, B, ver_B);uses, update ts_last, recompute the weight;uses=1, initial weight, state="active".The weight of a mnest is updated at every event by a formula with two components:
weight(t) = clamp01( weight(t-Δt) * exp(-λ * Δt) + reinforcement(t) )
Δt is the time (in days) since the last update.λ is the decay lambda, parametrisable per tag (default 0.018/day: half-life ~38 days).reinforcement(t) is +0.15 per use recorded in the current turn, saturated by clamp01.
The curve is inspired by the Ebbinghaus model, but the value of
λ is conservative: at equal use, a mnest is never
forgotten quickly. The gradualness avoids oscillations due to holiday
periods, illness, distraction: when the user comes back, Metnos must
remember.
| Threshold | Default | Effect |
|---|---|---|
| min proto weight | 0.05 | Below this, the proto-mnest is removed (anti-noise). |
| decay weight | 0.20 | Below this, the mnest enters decaying: the ager flags it. |
| archive weight | 0.05 | Below this (and with uses ≥ 1 but ts_last ≥ 90 days ago), proposal of archival. |
| bootstrap weight | 0.30 | Initial weight of seed mnests (created at first boot). |
| State | Meaning | Transitions |
|---|---|---|
proto | The mnest records a passing toward an executor that does not exist (see ch. 8): dst_executor points to an unresolved name. | → active when the missing executor is born; → deleted if weight falls below the proto threshold. |
active | «Normal» mnest: two real executors, recent use. | → decaying below the decay threshold; → superseded after a fusion. |
decaying | Weight below threshold, flagged by the ager. Still callable, but proposed for archival. | → active on resumed use; → archived (removed from the active graph, kept in the monthly snapshot). |
superseded | Replaced by a more recent mnest or by a fused executor (see executor.html ch. 6). | → archived after a grace period. |
The proto-mnest is a mnest in proto
state: it records that, in a turn, Metnos wanted to pass the output of
an executor to a second executor that does not yet exist. Its
structure is almost identical to a normal mnest, with two differences:
dst_executor is a «desired name», not a resolvable name (e.g. extract_invoice_number);dst_version is null;desired_signature appears with the synthesis of the expected signature: what the executor should do, what output shape, what typical errors.{
"id": "mnest_01HW...",
"src_executor": "fs_read",
"src_version": "1.0.0",
"dst_executor": "extract_invoice_number", // does not exist
"dst_version": null,
"desired_signature": {
"summary": "Extract the invoice number from a PDF.",
"inputs": ["bytes (pdf)"],
"outputs": ["str (alphanumeric code)"],
"errors": ["NotFound", "Unparseable"]
},
"weight": 0.34,
"uses": 4,
"state": "proto"
}
The difference from a «feature request» in the classical sense is important: the proto-mnest is not asked by the user, it is observed by the gateway. Roberto did not formulate the need: the need emerged from the fact that he would have wanted it more than once. The proto-mnest, when it recurs, is the trigger of synthesis (see executor.html ch. 7).
| Component | What it looks for |
|---|---|
| Gateway (planner) | Given an input, it offers the LLM a list of candidate executors ordered by the weight of mnests reaching them from the current context. |
| Vaglio | To judge a spontaneous proposal: a strong mnest toward an action already taken in the past is a hint of telos alignment. |
| Synt | Looks for proto-mnests that have crossed a recurrence threshold to trigger the synthesis pipeline. |
| Ager | Walks the graph periodically to apply decay, flag the decaying ones, propose archival of superseded ones. |
| Observability | The user can inspect the graph (list, filter by tag, top-k by weight) to see what Metnos «thinks it knows how to do together». |
Mnests live in workspace/.mnestome/mnest.sqlite:
mnests table with the fields from ch. 4 plus indexes on (src_executor, dst_executor) and weight;events table with individual reinforcements, to allow reconstruction of the weight history (useful for debugging and the ager);v_mnestome view that projects the current state of the graph (active + proto), for read queries.
The system takes a monthly snapshot of the SQLite file
into workspace/.mnestome/snapshots/YYYY-MM.sqlite. The
snapshot serves three purposes: rollback in case of corruption of the
live file, historical analysis of the graph, trace for whoever wants to
understand how Metnos moved over time. Snapshots older than 12 months
are .zst-compressed but not deleted.
The live SQLite file is included in the nightly workspace backup (see workspace.html, in Italian and pending rewrite) under the same policies as the rest of the workspace. Losing the mnestome is not catastrophic (the system restarts empty and rebuilds from use) but it is one of the most precious data: it carries the operational history Metnos has learned to recognise.
To pin the concepts down, here is a typical sequence of mnests that forms around the «archive a PDF invoice» flow:
1. fs_read v1.0 → pdf_extract v2.0 (weight 0.85, uses 47, "invoice")
2. pdf_extract v2.0 → invoice_classify v1.0 (weight 0.78, uses 41, "invoice")
3. invoice_classify → workspace_save v1.0 (weight 0.81, uses 44, "invoice")
# proto-mnest that recurs but is not yet an executor:
4. pdf_extract v2.0 → extract_invoice_number (weight 0.34, uses 4, "invoice")
The fourth, if it keeps recurring, will lift its weight above the
synthesis threshold and the synt will propose to Roberto the
synthesis of the new executor extract_invoice_number. Once
approved and signed, the proto-mnest will move to active
with its dst_version made concrete.
λ for side-effect-free vs side-effect-full executors? Open.
Metnos — mnest microdesign v1.1 — 2026-04-24
New canonical doc. Replaces synapse.html (deprecated).