✓ Microdesign — aligned with the code. Canonical doc tested after implementation: TELOS.md populated in workspace/ with the seven canonical teloi, the non-renouncement telos integrated into the synt cascade (compose+generate+on-the-fly), aligned with Architecture and the triad executor+mnest+mnestome. Normative reference for implementation.
← Documentation index Microdesign › telos

Metnos

telos — ultimate ends, alignment, non-retreat
Microdesign —
Aligned with Architecture (ch. 11), executor/mnest/mnestome and synt.

Audience: those who will implement TELOS.md, the alignment function,
the bother budget and the stop clause.
Reading time: 22 minutes.

Contents

  1. Scope and boundaries
  2. Laws vs telos: two distinct grammars
  3. TELOS.md — the file
  4. The alignment function
  5. The non-retreat telos
  6. Bother budget and scheduler-driven quotas
  7. Learning from silences
  8. Anti-paternalism and the stop clause
  9. Python contract
  10. Revision rite
  11. Alternatives considered
  12. Conformance tests
  13. Open questions
  14. References

1. Scope and boundaries

Implementation status (v8): 11 lenses implemented and tested (10 best in production). Common framework in runtime/telos_lenses/_base.py with SHARED_PREAMBLE / SHARED_NAMING_SCHEMA / SHARED_OUTPUT_FORMAT. Naming Authority (runtime/naming_grammar.py) enforces 5 rules R0..R4 via GBNF + deterministic validator. Execution via CLI python3 -m runtime.telos_introspect and scheduler v2 daily@03:30. Per-lens toggle: METNOS_TELOS_LENS_<NAME>=1. Persistent telemetry: ~/.local/share/metnos/telos_proposals.jsonl.

A reactive system has an implicit evaluation function: «the user asked for X → do X well». A proactive system does not: it generates the intention itself. telos is the component that decides which intention makes sense before it becomes a proposal to the user, without asking the user to evaluate everything. In it gains a new telos — cultivate the tools — which does not concern spontaneous proposals but the silent retreat from a direct request: a zone the previous design left uncovered.

What it is

What it is not

2. Laws vs telos: two distinct grammars

The distinction is not stylistic: it is categorial. Laws and telos inhabit two orthogonal axes of Metnos's life.

LAWS what NEVER to do grammar of prohibition binary, hard constraint explicit modification rite absolute precedence always upheld SOUL.md (4 Laws) perimeter, non-harm, obedience, traceability TELOS what to tend toward grammar of tendency soft, graduated signal written by the user weighted, balanced approached, not reached TELOS.md (3-7 ends) time, order, punctuality, protection, discretion, parsimony, …
Figure 1 — Laws and telos occupy two different linguistic registers: the grammar of prohibition vs the grammar of tendency. They are complementary, not alternatives.
AspectLaws (constitution)Telos (this doc)
Language"do not do X""approach Y"
Mechanismhard constraint — immediate denysoft signal — weighted evaluation
Owner of the writingMetnos + user, with rite (Merkle)user, with a lighter rite (versioned)
Precedenceabsoluteunder Laws, after Policy, before user
When it actson every action (constitutional preflight)on spontaneous proposals, and in specific cases (ch. 5) on explicit requests too
Cost of violationhard abort, audit law3_trace_gapthe proposal does not reach the user; or the failure is traced

3. TELOS.md — the file

It lives in the workspace as the sixth canonical file. Markdown format with front-matter optional. A few lines, hand-written by the user. The canonical set was reduced to 6 telos on (, see note at the end of this chapter).

# My ultimate ends (,

## t.tempo — Free my time from repetitive chores
weight: 0.25
activation_threshold: 0.30
notes: if something frees at least 30 minutes/week and I can trust it,
 consider proposing it.

## t.ordine — Keep the order of my digital data
weight: 0.15
activation_threshold: 0.40
notes: I prefer small incremental tidying to large reorganisations.

## t.puntualita — Don't make me miss important deadlines
weight: 0.20
activation_threshold: 0.25
notes: a deadline is "important" if it concerns work, health, family,
 or if I marked it explicitly as such.

## t.protezione — Protect the privacy of me and those close to me
weight: 0.20
activation_threshold: 0.20
notes: below this threshold I am paranoid on purpose. Better a false
 alarm than a leak.

## t.discrezione — Surprise me usefully but do not interrupt me
weight: 0.10
activation_threshold: 0.50
notes: do not interrupt during meetings, sleep, dinner. Accumulate
 and propose at the evening digest.

## t.parsimonia — Don't spend (on APIs, services, compute time) more than needed
weight: 0.10
activation_threshold: 0.35
notes: always pick the cheapest option that reaches the necessary quality.

Mandatory fields per telos

FieldTypeMeaning
id (from the ## heading)str — t.<slug>Stable identifier. Used by the TrustStore to track per-telos fitness.
Sentencestr — one lineThe end in natural form. Read by the LLM for fit estimation.
weightfloat ∈ [0,1]How much this telos weighs against the others. Sum of weights = 1.0 (renormalised if not).
activation_thresholdfloat ∈ [0,1]The fit on this telos must clear the threshold for the contribution to be counted. Avoids summing noise.
notesstr — multilineContext for the LLM: edge cases, judgement criteria, exceptions. Read in the evaluation prompt.
Number of telos. Between 3 (useful minimum) and 7 (cognitive load limit). Past 7, the risk is redundant telos that cancel each other out. The current configuration has 6 entries. If a new dimension emerges, better revise the existing ones than add another.

4. The alignment function

Formula (,

contribi = weighti · gate(fiti, thresholdi)
top = max(contribi)
rest = ∑i contribi − top
expected_alignment = (α · top + γ · rest) · urgency · confidence − bother_cost

Where:

The current formula (2 · top + 0.5 · rest) guarantees that a perfect specialist on a heavy telos beats a mediocre generalist. The teleological Judge (LLM Qwen 3.6 35B-A3B local) discriminates per-telos with a bimodal distribution; the α boost expands the dynamic range of the dominant term and γ credits multi-telos proposals.

How fiti values are estimated

Not from hardcoded counters. They are estimated by an LLM with a textual explanation. The estimate is delegated to the Vaglio — phase 2 (teleological Judge), for a structural reason: an LLM tends to evaluate its own outputs favourably (self-enhancement bias documented, Zheng et al. 2023). The Judge of the Vaglio runs on a context separate from the proposer, prompt separate, possibly provider separate. The AlignmentEngine of this doc does not produce the estimate: it composes the final scalar with the fit values the Vaglio hands it.

Alignment ≠ R score

Disambiguation. The expected_alignment in this doc and the R score in synt §6 are two distinct metrics: A proposal must clear both filters: synt produces something good (R ≥ threshold), the teleological Vaglio decides whether it is worth delivering it (expected_alignment ≥ θ). They are orthogonal: an excellent proposal at the wrong moment stays silent.

Publication threshold and triage dashboard

Proposals are ranked by expected_alignment and surfaced to the user via the /admin/proposals/telos dashboard (wired). For each proposal the UI shows:

Decisions are persisted in ~/.local/share/metnos/telos_decisions.jsonl (append-only, LWW by prop_id = timestamp). Silently discarded proposals (below threshold) land in an inspectable internal journal:

// workspace/.audit/telos_rejected.jsonl
{"proposal_id": "ap_...", "kind": "homogenize_filenames",
 "expected_alignment": 0.08, "breakdown": {...},
 "reason": "bother_cost too high (4 proposals already today)",
 "at": "2026-04-25T19:42:00Z"}

Dashboard default θ: 0.30 (low quartile; override via min_alignment query param). Empirical cutoffs on 481 proposals: > 0.50 = 3 top proposals (0.6%); > 0.45 = 23 (5%, review threshold); > 0.40 = 88 (18%, top decile).

5. The anti-retreat clause and the stop clause

The anti-retreat semantics (exhaust the synt cascade before answering «I cannot») are active in the runtime as deterministic policy, not as a weighted telos. They guarantee that the system tries the cascade (compose, generate, merge) before emitting a failure.

5.1 The stop clause

An explicit stop disengages the telos. If the user says «leave it», «never mind», «I changed my mind» or equivalents, the non-retreat telos goes silent immediately. The synt cascade halts at the next safe point, the state moves to cancelled_by_user (not abandoned: there is a difference), and the pattern is not retried automatically.

Without the stop clause, the telos would be paternalism: «you asked me X, I keep looking even though you no longer want it». The stop makes non-retreat courage, not stubbornness (in the words of the synt microdesign). The stop is always audible: the LLM handling the turn carries in its prompt an explicit recogniser for stop phrases.

5.2 Abandonment thresholds

The non-retreat telos does not mean unlimited retry. The abandonment thresholds remain valid and are fixed in synt (ch. 8.3):

Once the cascade is exhausted within these thresholds, failure is allowed. The non-retreat telos does not ask to exceed them: it asks not to stop before.

6. Bother budget and scheduler-driven quotas

The user has a finite capacity to evaluate proposals. The more arrive in a window, the less attention each gets. For this reason, the alignment function includes a bother_cost that grows with the recent frequency of published proposals. The novelty in is the separation between ad-hoc proposals and scheduler-driven invocations (the builtin described in executor.html ch. 10).

6.1 Base model (ad-hoc proposals)

bother_cost(t) = α · exp( ∑p ∈ published k(t − tp) )

Where k(Δt) is a decreasing exponential kernel: a proposal published 1 minute ago contributes a lot, one of 8 hours ago almost nothing.

6.2 Scheduler-driven invocations

When a proposal is accepted together with a cadence (e.g. «ok, do this summary every morning at 8»), the consent covers the entire cadence, not only the first execution. From that moment on the subsequent invocations are not new spontaneous proposals: they are firings of the scheduler builtin, already pre-approved. The ad-hoc bother budget does not apply.

Type of publicationCounts toward bother budget?Modulation
Spontaneous ad-hoc proposal Yes, full Base model above. Telegram immediate ≤ 3/day, ≤ 1/hour.
Scheduler firing in agreed cadence No, separate quota One attention spend per scheduled firing. If it falls in a protected window, it is deferred to the next non-protected slot.
Scheduler firing outside the agreed cadence Yes, partial (50%) If the schedule fires at an atypical time (e.g. recent change of cadence, exceptional event), it weighs half an ad-hoc proposal.
Response to an explicit request No The user is already waiting. No bother.

6.3 Default daily budget

ChannelDefault ad-hocDefault scheduler
Evening digestup to 10 grouped proposalsincluded (1 digest, unlimited)
Telegram (immediate)max 3/day, max 1/houractive schedules ≤ 2/day per channel
Interactive CLImax 2/sessionscheduling on-demand
Protected windows00 (defer to next non-protected slot)

7. Learning from silences

Three kinds of feedback update the effective weights of the telos — not the declared weights in TELOS.md, which remain the user-revisable ground truth. The TrustStore extends with an axis telos_fitness: dict[telos_id, EMA].

SignalStrengthEffect on linked telos
Explicit accept+1.0EMA rises. Effective weight grows moderately.
Accept with edit+0.5EMA rises a little. Signals the telos was right, the plan was not.
Explicit reject−1.0EMA falls. The telos is less important than declared.
Reject with «never again»−2.0EMA falls a lot. The effect_class enters the telos's never-list.
Explicit stop (ch. 5.1)−0.7EMA of the involved telos falls: the user has reduced the appetite to insist on that thread.
48h silence−0.3Weak but present signal.
Viewed but undecided−0.1Almost no effect.
effective_weighti = declared_weighti · ( 0.5 + 0.5 · EMAi )

The effective weight oscillates between 50% and 150% of the declared one. It never goes to zero (to avoid catastrophic forgetting of a telos), it never doubles (to respect the user's intent).

Transparency of learning. Once a month, Metnos proposes to the user: «I have noticed that in recent weeks your accepted proposals are predominantly tied to order and punctuality, while parsimony is often ignored. Shall I update the declared weights, or leave them?». The user decides whether to promote the effective weight to declared. Silent learning does not hide: it is made visible.

8. Anti-paternalism and the stop clause

This is the trickiest trap of the design. A telos system applied without discernment becomes paternalistic. Without the distinction below, the non-retreat telos of ch. 5 would be the most extreme manifestation of this risk.

Anti-paternalism clause (reformulated ). Telos evaluate what Metnos is about to do for the user, not what the user does. Explicit exception: the non-retreat telos (ch. 5) applies to synt's behaviour while serving a request, but only until the user activates the stop clause.

Operationally, the alignment function never applies to:

It applies to:

This clause must also be reflected in the constitution as a sub-law: the Constitution is the level that prevents edge cases (e.g. synthesis attempts that would require forbidden capabilities).

8.1 Stop recognition

The user's stop is not only «leave it». The LLM pipeline carries in its prompt a recogniser for equivalent phrases, in Italian and English:

Ambiguous stops (e.g. «hmm, let's see later») trigger an explicit confirmation: «do you want me to stop on attempt X?». Better one extra question than insisting on an unwanted attempt.

9. Python contract

from typing import Protocol, Literal
from dataclasses import dataclass
from datetime import datetime
from uuid import UUID

@dataclass(frozen=True)
class Telos:
 id: str # "t.tempo"
 phrase: str # "Free my time from repetitive chores"
 weight_declared: float # [0,1], normalised sum
 activation_threshold: float # [0,1]
 notes: str # context for the LLM
 is_non_retreat: bool = False # reserved, currently unused

@dataclass(frozen=True)
class FitEstimate:
 telos_id: str
 fit: float # [0,1]
 why: str # textual explanation (for audit)

@dataclass(frozen=True)
class AlignmentResult:
 proposal_id: UUID
 expected_alignment: float
 per_telos: list[FitEstimate]
 urgency: float
 confidence: float
 bother_cost: float
 decision: Literal["publish", "reject", "defer_to_digest"]
 threshold_used: float
 at: datetime

@dataclass(frozen=True)
class StopSignal:
 """Emitted when the user activates the stop clause."""
 request_id: str # synt request_id to stop
 target_intent: str # what to stop
 raw_phrase: str # exact user words (audit)
 at: datetime

class TelosStore(Protocol):
 """Reads TELOS.md and exposes the current telos."""
 def current(self) -> list[Telos]:...
 def get(self, telos_id: str) -> Telos | None:...
 def version(self) -> str:... # current hash

class AlignmentEngine(Protocol):
 async def evaluate(
 self,
 proposal: "ActionProposal",
 urgency_hint: float = 1.0,
 ) -> AlignmentResult:
 """Estimate fit per telos (Vaglio), compose expected_alignment,
 apply bother_cost, decide publish/reject/defer."""...

class BotherBudget(Protocol):
 def current_cost_adhoc(self, channel: str, at: datetime) -> float:...
 def scheduler_quota_left(self, channel: str, schedule_id: str) -> int:...
 def record_published_adhoc(self, channel: str, proposal_id: UUID) -> None:...
 def record_scheduler_firing(self, channel: str, schedule_id: str) -> None:...
 def in_protected_window(self, at: datetime) -> bool:...

class StopRecognizer(Protocol):
 """Recognises the stop clause in the user's words."""
 async def detect(self, user_text: str, current_intent: str | None) -> StopSignal | None:
 """Returns a StopSignal if the phrase is a clear stop;
 None if it is not; raises a confirmation if ambiguous."""...

class TelosFeedback(Protocol):
 """Updates per-telos EMAs from user signals."""
 async def on_accept(self, proposal_id: UUID) -> None:...
 async def on_accept_with_edit(self, proposal_id: UUID) -> None:...
 async def on_reject(self, proposal_id: UUID, never_again: bool) -> None:...
 async def on_stop(self, signal: StopSignal) -> None:...
 async def on_silence_48h(self, proposal_id: UUID) -> None:...
 async def on_viewed_undecided(self, proposal_id: UUID) -> None:...

# Errors
class TelosFileMalformed(Exception):...
class TelosSignatureInvalid(Exception):...
class TelosFitEstimationFailed(Exception):...
class StopAmbiguousNeedsConfirm(Exception):...

10. Revision rite

TELOS.md is not technically constitutional (the Laws are) but still deserves a light rite:

  1. Manual writing: the user edits TELOS.md with an editor.
  2. Validation: Metnos re-reads, re-checks the format, normalises the weights.
  3. Recap: Metnos answers with a comparison «here is what changes from the previous version: parsimony weight +0.05, added t.convivialita, etc.».
  4. Signature: HMAC-SHA256 with a dedicated key (separate from the constitutional one).
  5. Versioning: the new file includes the previous_hash of the previous one; the old one moves to .audit/telos/. Light Merkle.
  6. Soft EMA reset: telos that were renamed or removed lose their EMA; new ones start from 0. Telos that only changed weight keep their EMA.
Difference from the constitution. SOUL.md requires approval from Metnos + user (they are shared safety rules). TELOS.md requires only the user (they are his ultimate ends). But both are versioned and signed: the audit of the telos over time is as valuable as that of the Laws.

11. Alternatives considered

AlternativeOutcomeReason
No explicit TELOS, only implicit feedback discarded Cold start impossible: without declared telos, the first 50 proposals are random. The user rejects them all, the EMA collapses, the system goes silent.
Non-retreat telos as Law 4 of the Constitution discarded Breaks the grammar of Laws (negative prohibitions). The telos is a positive push, it belongs here. See Architecture ch. 11.
Reward function learned from a dataset discarded We have no dataset. A learned function is opaque: the user does not know what Metnos is optimising.
Hierarchical goal graph postponed Nested telos increase expressive power but break manual writability. 3-7 flat telos cover 90% of cases.
Single global threshold θ (no per-telos) partial Adopted as the final θ, but combined with per-telos thresholds (activation_threshold) to prevent low noise across many telos from summing up.
Online learning (continuous RL) discarded Risk of reward hacking, opaque to the user. EMA from explicit signals is enough.
Implicit stop (timeout) discarded The user might be distracted, not uninterested. Stop must be explicit or confirmed.

12. Conformance tests

CaseVerification
Missing TELOS.mdThe alignment function rejects every spontaneous proposal with reason="no_telos_declared". Metnos asks the user to fill the file.
Telos with non-normalised weightsSum renormalised to 1.0 at load. Warning in log. Not an error.
fit = 0 on all telosexpected_alignment ≤ 0 − bother_cost < θ: reject.
High fit only on a sub-threshold telosThe contribution is set to 0 by the gate. Reject unless another telos contributes.
Proposal close to a protected windowDefer to evening digest, not immediate publication.
Same proposal type rejected 3 times with «never again»The effect_class enters telos_neverlist: subsequent ones are auto-rejected without an LLM call.
Explicit user request that violates a «classic» telos (e.g. high spend with parsimony telos)The alignment function is not invoked. Anti-paternalism (ch. 8).
Request the pool cannot servesynt enters the cascade. The non-retreat telos is active. If the cascade fails, outcome is abandoned motivated (not cancelled).
User activates the stop clause mid-cascadeState moves to cancelled_by_user. EMA of involved telos drops by 0.7. The pattern is not retried within 24h.
Ambiguous stop («hmm let's see»)Metnos asks for confirmation: «do you want me to stop on X?». Does not interrupt on its own.
Scheduler firing in protected windowDeferred to next non-protected slot. Not published immediately, not discarded.
Scheduler firing outside the agreed cadence (exceptional event)Weighs 50% of an ad-hoc proposal's bother.
TELOS.md revision with a removed telosThe new file valid, the old one in .audit/telos/. The removed telos's EMA is discarded. Audit record with diff.
10 ad-hoc proposals in 1 hour via TelegramBother_cost grows exponentially; from the 4th on, reject (defer_to_digest) even with high expected_alignment.
R vs expected_alignment disambiguationA synt proposal with R = 0.85 but expected_alignment = 0.10 is not published: quality is not enough, the moment is wrong.

13. Open questions

  1. «Recurrent» stop. If the user stops the same pattern N times in a row, should the system disable the anti-retreat clause for that thread? Or stick to per-occurrence rejection? Open; conservative default: per-occurrence rejection.
  2. Scheduler thresholds. When are agreed schedules «too many»? Tentative default: max 2/day per channel, max 1 schedule alive at a time per same topic. To be calibrated.
  3. Telos linked to effect_class. A telos may block an entire effect class, not just individual proposals. The telos_neverlist mechanism today operates on the effect_class; possible future extension: link an effect_class to several telos at once. Open.
  4. Multi-user. When Metnos has more paired senders, will telos be per-user, shared, or a mix? Probably per-user with a shared minimum set (security, perimeter). To be decided.

14. The 10 lateral lenses

Lateral lenses (runtime/telos_lenses/) are the creative generators that produce introspective proposals serving the telos. Modular architecture (ch. 9): each lens is a Python module with 3 elements (NAME, OPERATORS tuple, build_prompt(ctx, operator) function); registration in __init__.py. The LLM call loop + JSON parse + paternalism guard + GBNF wiring is centralized in _base.run_lens. Per-lens toggle: METNOS_TELOS_LENS_<NAME>=1.

Status v8: 10 lenses in production ( final). The 2 newer ones (counterfactual, constitutional) draw from 2022–2023 references. The compression lens (Schmidhuber 2010) was implemented but dropped after the v8 bench due to convergence failure: even with the strictest prompt, the local model could not reliably produce vocab-compliant super-verbs (violating the §2.2 entries exception). Rationale in. Convergence bench with Qwen 3.6 35B‑A3B + GBNF: 10/10 accepted lenses converge on first attempt, 0 paternalism, 0 invalid naming, 0 qualifier-object mismatch.

Lens What it does Reference
scamper7 brainstorming operators (Substitute / Combine / Adapt / Modify / Put to other use / Eliminate / Reverse) on top-N catalog executors.Eberle 1971; Osborn 1953 (Applied Imagination)
oulipoDeliberate temporary constraints Metnos self-imposes (no frontier API, no executor X for N days) to explore alternative local paths.Queneau & Le Lionnais 1960 (Ouvroir de Littérature Potentielle)
inverse_rlInfers UNSTATED telos by observing clusters of satisfied turns (proposed_action begins with PROPOSED_TELOS:).Russell 1998 (Learning agents for uncertain environments, IRL)
endgame_bookPrecomputes known deadline patterns (invoices, expirations, certificates) as deterministic scheduler v2 cascades.Thompson 1986 (chess endgame tablebases, KQKR)
analogy_transferTransfers a successful strategy from one Metnos domain (credentials Fernet, signatures hash) to another structurally similar domain.Hofstadter 1979 (GEB); Mitchell 2001 (Analogy-making as Perception)
boden_transformationalTransforms the CONTRACT (args signature / schema / return) of an executor rather than its defaults. Changes the space of possibility.Boden 1990 (The Creative Mind: Myths & Mechanisms)
pattern_languageExtracts composable micro-patterns from the mnestoma (e.g., inspect-then-act, verify-after-mutate) as abstract recipes with placeholders.Alexander 1977 (A Pattern Language); Gamma et al. 1994 (Design Patterns)
generative_designFor a composite brief (e.g., design of nightly scheduler), generates 2−3 Pareto-optimal candidates with explicit trade-offs across multiple telos.Bentley 1999 (Evolutionary Design); Krish 2011 (Generative Design Method)
counterfactualMirror of inverse_rl: extracts proposals from UNSATISFIED turns (long, retries, errors). Proposes the missing executor that would have resolved in 1−2 steps.Shinn et al. 2023 (Reflexion: Language Agents with Verbal RL, NeurIPS)
constitutionalFor each sensitive executor (mutating filesystem, outbound, credentials) identifies non-obvious failure modes and proposes DEFENSE (safety layer, conservative default).Bai et al. 2022 (Constitutional AI: Harmlessness from AI Feedback, Anthropic)

All 11 lenses are LLM-driven at their core (creativity required) but the GATING of proposals is deterministic (§7.9): anti-paternalism via regex, naming compliance via the Naming Authority (ch. 9), qualifier-object compatibility (R4) via a map in vocab.py. A proposal that violates a Naming Authority constraint CANNOT be emitted: the GBNF grammar blocks it at generation time.

15. References

Internal references

Literary and technical references


Continue reading

canonical
synt
The cascade that the non-retreat telos honours. R score disambiguated from expected_alignment.
canonical
executor
The artefacts synt produces and that telos evaluate at the moment of publication.
level 1
Architecture, ch. 11
Telos and Vaglio in the big-picture view.
index
Microdesign
All docs.

Metnos — telos microdesign
Without telos, proactivity is noise.