✓ Microdesign — aligned with the code. Canonical doc approved after the end-to-end simulation, aligned with the Architecture and the Dialogue on executors and distributed memory. Normative reference for implementation.
← Documentation index Microdesign › mnest

Metnos

mnest — the trace of co-activation between two executors
Microdesign —
Aligned with Architecture (ch. 9) and the Dialogue on executors.

Audience: whoever implements the graph, the reinforcement, the decay.
Reading time: 14 minutes.

Contents

  1. Scope and boundaries
  2. What a mnest is
  3. Mnest vs. synapse
  4. Anatomy of a mnest
  5. Automatic generation
  6. Reinforcement and decay
  7. Lifecycle states
  8. The proto-mnest
  9. Who consults the mnests
  10. Persistence and snapshots
  11. Example: the invoice sequence
  12. Open questions

1. Scope and boundaries

This 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. The mnest records an observed data passing between two executors, not a passive concomitance.

executor A fired executor B fired next mnest co-activation trace mnestome emergent graph
Figure 1 — A mnest is born when two executors fire in sequence; the trace strengthens with repetition and flows into the graph (mnestome).

Boundaries

The document covers:

It does not cover, and defers to other docs:

2. What a mnest is

A mnest is a node of the mnestome that records a specific fact:

«In this turn, the output of executor A was passed as input to executor B, and B completed successfully.»

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:

3. Semantics of the mnest

The mnest records a passing of data («A's output was B's input»), generated deterministically by the gateway at turn close: either the passing happened or it did not. A strong mnest toward an executor that does not exist (proto-mnest, ch. 8) is a concrete operational gap, not an analogy.

The mnest sees data that moved, not just events that fired. A mnest graph is a graph of real flows.

4. Anatomy of a mnest

A mnest, in serialised form, contains these mandatory fields:

{
 "id": "mnest_01HW...", // ULID
 "src_executor": "read_files", // canonical name of the caller
 "src_version": "1.0.0",
 "dst_executor": "read_files_pdf", // 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:

Tags, briefly

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.

5. Automatic generation

A mnest is not declared, it is observed. The operational rule, applied by the gateway at the close of every turn:

  1. For every call pair A → B within the turn where A's output was passed as B's input:
    1. look up an active mnest with key (A, ver_A, B, ver_B);
    2. if it exists, increment uses, update ts_last, recompute the weight;
    3. if not, create one with uses=1, initial weight, state="active".
  2. If the turn included a request to pass to an executor that does not exist, record a proto-mnest instead (ch. 8).
  3. If the turn had a long chain (A → B → C), record two separate mnests: A→B and B→C. The mnestome does not represent arcs longer than one.
Why arcs of length one. Transitivity can be reconstructed on the fly by walking the graph, but the elementary datum must remain observational. Longer mnests would be inferences, not observations; introducing them would muddy the distinction in ch. 3.

6. Reinforcement and decay

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) )

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.

Operational thresholds

ThresholdDefaultEffect
min proto weight0.05Below this, the proto-mnest is removed (anti-noise).
decay weight0.20Below this, the mnest enters decaying: the ager flags it.
archive weight0.05Below this (and with uses ≥ 1 but ts_last ≥ 90 days ago), proposal of archival.
bootstrap weight0.30Initial weight of seed mnests (created at first boot).

7. Lifecycle states

StateMeaningTransitions
protoThe 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.
decayingWeight 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).
supersededReplaced by a more recent mnest or by a fused executor (see executor.html ch. 6).→ archived after a grace period.

8. The proto-mnest

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:

{
 "id": "mnest_01HW...",
 "src_executor": "read_files",
 "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).

9. Who consults the mnests

ComponentWhat 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.
VaglioTo judge a spontaneous proposal: a strong mnest toward an action already taken in the past is a hint of telos alignment.
SyntLooks for proto-mnests that have crossed a recurrence threshold to trigger the synthesis pipeline.
AgerWalks the graph periodically to apply decay, flag the decaying ones, propose archival of superseded ones.
ObservabilityThe user can inspect the graph (list, filter by tag, top-k by weight) to see what Metnos «thinks it knows how to do together».

10. Persistence and snapshots

Mnests live in workspace/.mnestome/mnest.sqlite:

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.

Backup

The live SQLite file is included in the nightly workspace backup 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.

11. Example: the invoice sequence

To pin the concepts down, here is a typical sequence of mnests that forms around the «archive a PDF invoice» flow:

1. read_files → read_files_pdf v2.0 (weight 0.85, uses 47, "invoice")
2. read_files_pdf v2.0 → invoice_classify (weight 0.78, uses 41, "invoice")
3. invoice_classify → workspace_save (weight 0.81, uses 44, "invoice")

# proto-mnest that recurs but is not yet an executor:
4. read_files_pdf 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.

12. Open questions

  1. Garbage collection of the SQLite file. When is space for archived mnests reclaimed in the live file? Never (full history) or periodically (for size)? Open.
  2. LLM-suggested tags. The gateway can have the LLM suggest tags during turn close. How much to trust those tags? Should the user ratify them? Open.
  3. Cross-sender mnests. When Metnos has multiple paired senders in the future (guests), are mnests per-sender or global? Likely global with a sender-of-origin tag, but to be decided.
  4. Differentiated decay by category. Is it useful to have different λ for side-effect-free vs side-effect-full executors? Open.

first in the triad
executor
The unit of code the mnest connects.
third in the triad
mnestome
The emergent graph of all mnests.
level 1
Architecture, ch. 9
The big picture: executor, mnest, mnestome.
index
Microdesign
All docs.

Metnos — mnest microdesign
Canonical doc.