Microprogettazione — allineata al codice al 1°. Doc canonico testato dopo l'implementazione: TELOS.md popolato in workspace/ con i sette telos canonici, telos di non-rinuncia integrato nella cascata di synt (compose+generate+on-the-fly), allineamento con l'Architettura e la triade executor+mnest+mnestoma. Riferimento normativo per l'implementazione. Riferimento normativo per l'implementazione.
← Indice documentazione Microprogettazione › telos

Metnos

telos — fini ultimi, allineamento, non-rinuncia
Microprogettazione —
Allineata con Architettura (cap. 11), executor/mnest/mnestoma e synt.

Pubblico: chi implementerà TELOS.md, la funzione di allineamento,
il bother budget e la clausola di stop.
Lettura: 22 minuti.

Indice

  1. Scopo e confini
  2. Leggi vs telos: due grammatiche distinte
  3. TELOS.md — il file
  4. La funzione di allineamento
  5. Il telos di non-rinuncia
  6. Bother budget e invocazioni programmate
  7. Apprendimento dai silenzi
  8. Anti-paternalismo e clausola di stop
  9. Contratto Python
  10. Rito di revisione
  11. Alternative considerate
  12. Test di conformità
  13. Domande aperte
  14. Riferimenti

1. Scopo e confini

Stato implementazione v8): 11 lenti implementate e testate (di cui le 10 migliori in produzione, ). Framework comune in runtime/telos_lenses/_base.py con SHARED_PREAMBLE / SHARED_NAMING_SCHEMA / SHARED_OUTPUT_FORMAT in stile §6 prescrittivo (DEVI / NON DEVI / OK / ERRORE). Naming Authority (runtime/naming_grammar.py) impone 5 regole R0..R4 a prove di GBNF + validator deterministico. Esecuzione via CLI python3 -m runtime.telos_introspect e scheduler v2 daily@03:30. Toggle individuale per lente: METNOS_TELOS_LENS_<NAME>=1. Telemetria persistente: ~/.local/share/metnos/telos_proposals.jsonl.

Un sistema reattivo ha una funzione di valutazione implicita: «l'utente ha chiesto X → fai X bene». Un sistema proattivo no: è lui che genera l'intenzione. telos è il componente che stabilisce quale intenzione ha senso prima che diventi una proposta all'utente, senza chiedergli di valutare tutto. In si arricchisce di un nuovo telos — coltivare gli strumenti — che non riguarda le proposte spontanee ma il rifiuto silenzioso di una richiesta diretta: una zona finora non coperta.

Cosa è

Cosa non è

2. Leggi vs telos: due grammatiche distinte

La distinzione non è stilistica: è categoriale. Leggi e telos abitano due assi ortogonali della vita di Metnos.

LEGGI cosa NON fare mai grammatica del divieto vincolo binario, hard rito di modifica esplicito precedenza assoluta si rispettano sempre SOUL.md (4 Leggi) perimetro, non-nocività, obbedienza, tracciabilità TELOS verso cosa tendere grammatica della tendenza segnale soft, graduato scritti dall'utente pesati, bilanciati ci si approssima TELOS.md (3-7 fini) tempo, ordine, puntualità, protezione, discrezione, parsimonia, …
Figura 1 — Leggi e telos occupano due registri linguistici diversi: la grammatica del divieto vs la grammatica della tendenza. Sono complementari, non alternative.
AspettoLeggi (constitution)Telos (questo doc)
Linguaggio"non fare X""avvicina Y"
Meccanismohard constraint — deny immediatosoft signal — valutazione pesata
Proprietario della scritturaMetnos + utente, con rito (Merkle)utente, con rito più leggero (versionato)
Precedenzaassolutasotto le Leggi, dopo la Policy, prima dell'utente
Quando intervienesu ogni azione (preflight costituzionale)su proposte spontanee, e in casi specifici (cap. 5) anche su richieste esplicite
Costo di violazionehard abort, audit law3_trace_gapla proposta non arriva all'utente; oppure il fallimento è tracciato

3. TELOS.md — il file

Vive nel workspace come sesto file canonico, già presente come scaffold in workspace/TELOS.md dal 27/4. Formato markdown leggibile a mano. Loader Python (telos_loader.py, vedi cap. 7) wired in produzione il (fase 4 chiusa): TELOS.md è iniettato nel prompt di sistema del planner via render_planner_block(lang), con hot-reload mtime-based. Set canonico ridotto a 6 telos dal (, vedi nota in fondo a questo capitolo). Gli altri cinque file canonici del workspace (IDENTITY.md, USER.md, MEMORY.md, AGENTS.md, SOUL.md) sono pure presenti come scaffold.

# I miei fini ultimi (,

## t.tempo — Liberare il mio tempo dalle incombenze ripetitive
peso: 0.25
soglia_attivazione: 0.30
note: se qualcosa mi libera almeno 30 minuti/settimana e posso fidarmi,
 considera di proporlo.

## t.ordine — Mantenere l'ordine dei miei dati digitali
peso: 0.15
soglia_attivazione: 0.40
note: preferisco piccoli riassetti incrementali ai grandi riordini.

## t.puntualita — Non farmi perdere scadenze importanti
peso: 0.20
soglia_attivazione: 0.25
note: una scadenza è "importante" se riguarda lavoro, salute, famiglia,
 o se io l'ho segnata esplicitamente come tale.

## t.protezione — Proteggere la privacy mia e di chi mi è vicino
peso: 0.20
soglia_attivazione: 0.20
note: sotto questa soglia sono paranoico apposta. Meglio un falso allarme
 che un'indiscrezione.

## t.discrezione — Sorprendermi utilmente ma non interrompermi
peso: 0.10
soglia_attivazione: 0.50
note: non interrompermi in orario di riunione, di sonno, di cena. Accumula
 e proponi al digest serale.

## t.parsimonia — Non spendere (in API, servizi, tempo di calcolo) più di quanto serve
peso: 0.10
soglia_attivazione: 0.35
note: scegli sempre l'opzione più economica che raggiunge la qualità
 necessaria.

Campi obbligatori per telos

CampoTipoSignificato
id (dall'header ##)str — t.<slug>Identificativo stabile. Usato dal TrustStore per tracciare fitness per-telos.
Frasestr — una rigaIl fine in forma naturale. Letta dall'LLM per la stima fit.
pesofloat ∈ [0,1]Quanto pesa questo telos rispetto agli altri. Somma dei pesi = 1.0 (normalizzata se non lo è).
soglia_attivazionefloat ∈ [0,1]Il fit su questo telos deve superare la soglia perché il contributo venga conteggiato. Evita di sommare rumore.
notestr — multilineaContesto per l'LLM: edge case, criteri di giudizio, eccezioni. Letto nel prompt di valutazione.
Numero di telos. Tra 3 (minimo utile) e 7 (limite di carico cognitivo). Oltre 7, il rischio è telos ridondanti che si cancellano a vicenda. La configurazione corrente ha 6 elementi. Se emerge una nuova dimensione, meglio rivedere quelle esistenti che aggiungerne.

4. La funzione di allineamento

Formula (,

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

Con:

La formula corrente (2 · top + 0.5 · rest) garantisce che uno specialista perfetto su un telos pesante batta un tuttofare medio. Il Giudice teleologico (LLM Qwen 3.6 35B-A3B locale) discrimina per-telos con distribuzione bimodale; il α boost espande la dinamica del termine dominante e γ valorizza le proposte multi-telos.

Come si stimano i fiti

Non da contatori hardcoded. Vengono stimati da un LLM con spiegazione testuale. La stima è delegata al Vaglio — fase 2 (Giudice teleologico), per una ragione strutturale: un LLM tende a valutare in modo conforme i propri output (self-enhancement bias documentato, Zheng et al. 2023). Il Giudice del Vaglio gira su contesto separato dal proponente, prompt separato, possibilmente provider separato. La AlignmentEngine di questo doc non fa la stima: compone lo scalare finale con i fit che il Vaglio le consegna.

Allineamento ≠ punteggio R

Disambiguazione. L'expected_alignment di questo doc e il punteggio R in synt §6 sono due metriche distinte: Una proposta passa entrambi i filtri: synt produce qualcosa di buono (R ≥ soglia), il Vaglio teleologico decide se vale la pena consegnarlo (expected_alignment ≥ θ). Sono ortogonali: un'ottima proposta in un momento sbagliato resta muta.

Threshold di pubblicazione e dashboard di triage

Le proposte vengono ordinate per expected_alignment e sottoposte all'utente via dashboard /admin/proposals/telos (wired). Per ogni proposta la UI mostra:

Le decisioni sono persistite in ~/.local/share/metnos/telos_decisions.jsonl (append-only, LWW per prop_id = timestamp). Lo stato «stage» non è terminale: la proposta resta nella lista pending finché non è accept/reject. Le proposte scartate silenziosamente (sotto soglia) finiscono in un journal interno ispezionabile:

// workspace/.audit/telos_rejected.jsonl
{"proposal_id": "ap_...", "kind": "homogenize_filenames",
 "expected_alignment": 0.08, "breakdown": {...},
 "reason": "bother_cost troppo alto (4 proposte già oggi)",
 "at": "2026-04-25T19:42:00Z"}

Default θ per la dashboard: 0.30 (quartile basso, override via query param min_alignment). Cutoff empirici su 481 proposte: > 0.50 = 3 proposte top (0.6%); > 0.45 = 23 (5%, soglia review); > 0.40 = 88 (18%, top decile).

5. La clausola anti-rinuncia e la clausola di stop

La semantica anti-rinuncia (esaurire la cascata synt prima di rispondere «non posso») è attiva nel runtime come policy deterministica, non come telos pesato. Garantisce che il sistema tenti la cascata (comporre, generare, fondere) prima di emettere un fallimento.

5.1 La clausola di stop

Stop esplicito disattiva il telos. Se l'utente dice «lascia perdere», «non importa», «ho cambiato idea» o equivalenti, il telos di non-rinuncia tace immediatamente. La cascata di synt si interrompe sul prossimo punto sicuro, lo stato passa a cancelled_by_user (non abandoned: c'è differenza), e il pattern non si ritenta automaticamente.

Senza la clausola di stop, il telos sarebbe paternalismo: «tu mi hai chiesto X, io insisto a cercarlo anche se tu non vuoi più». Lo stop rende la non-rinuncia coraggio e non testardaggine (per usare le parole della microprogettazione di synt). Lo stop è sempre udibile: l'LLM che gestisce il turno ha nel prompt un riconoscitore esplicito di formule di interruzione.

5.2 Soglie di abbandono

Il telos di non-rinuncia non significa retry illimitato. Le soglie di abbandono restano valide e sono fissate in synt (cap. 8.3):

Esaurita la cascata entro queste soglie, il fallimento è lecito. Il telos di non-rinuncia non chiede di superarle: chiede di non fermarsi prima.

6. Bother budget e invocazioni programmate

L'utente ha una capacità finita di valutare proposte. Più ne arrivano in una finestra, meno attenzione dà a ciascuna. Per questo, la funzione di allineamento include bother_cost che cresce con la frequenza recente di proposte pubblicate. La novità di è la separazione fra proposte ad-hoc e invocazioni programmate dello scheduler (il builtin descritto in executor.html cap. 10).

6.1 Modello base (proposte ad-hoc)

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

Dove k(Δt) è un kernel esponenziale decrescente: una proposta pubblicata 1 minuto fa contribuisce molto, una di 8 ore fa quasi nulla.

6.2 Invocazioni programmate dallo scheduler

Quando una proposta viene accettata insieme a un ritmo (per esempio «ok, fammi questo riassunto ogni mattina alle 8»), il consenso copre l'intero ritmo, non solo la prima esecuzione. Da quel momento in poi le invocazioni successive non sono nuove proposte spontanee: sono firing dello scheduler builtin, già pre-approvati. Il bother budget delle ad-hoc non si applica.

Tipo di pubblicazioneConta sul bother budget?Modulazione
Proposta ad-hoc spontanea Sì, pieno Modello base sopra. Telegram immediato ≤ 3/giorno, ≤ 1/ora.
Invocazione di scheduler nel ritmo concordato No, quota separata Una sola spesa di attenzione per firing programmato. Se il firing cade in finestra protetta, si rinvia al prossimo slot non-protetto.
Invocazione di scheduler fuori dal ritmo concordato Sì, parziale (50%) Se la schedule fa firing in un momento atipico (es. modifica recente del ritmo, evento eccezionale), pesa metà di una proposta ad-hoc.
Risposta a richiesta esplicita No L'utente sta già aspettando. Nessun bother.

6.3 Budget giornaliero default

CanaleDefault ad-hocDefault invocazioni programmate
Digest seralefino a 10 proposte raggruppateincluso (1 digest, illimitato)
Telegram (immediato)max 3/giorno, max 1/oraschedule attive ≤ 2/giorno per canale
CLI interattivamax 2/sessionescheduling on-demand
Finestre protette00 (rinvio al prossimo slot non-protetto)
Tutto al digest serale, di default. Le proposte ad-hoc vengono accumulate e raggruppate per un singolo momento dedicato. Solo le proposte con urgency ≥ 1.5 e expected_alignment molto alto vanno in tempo reale. Le routine in finestra vanno al loro slot programmato, indipendentemente dal digest.

7. Apprendimento dai silenzi

Tre tipi di feedback aggiornano i pesi effettivi dei telos — non i pesi dichiarati in TELOS.md, che restano la ground truth revisionabile dall'utente. Il TrustStore si estende con un asse telos_fitness: dict[telos_id, EMA].

SegnaleForzaEffetto sui telos legati
Accept esplicito+1.0EMA sale. Peso effettivo cresce moderatamente.
Accept con modifica+0.5EMA sale un po'. Segnala che il telos era giusto, il piano no.
Rifiuto esplicito−1.0EMA scende. Il telos è meno importante di quanto dichiarato.
Rifiuto con «mai più»−2.0EMA scende molto. L'effect_class entra nella never-list del telos.
Stop esplicito (cap. 5.1)−0.7EMA dei telos coinvolti scende: l'utente ha ridotto la voglia di insistere su quel filone.
Silenzio 48h−0.3Segnale debole ma presente.
Vista ma non decisa−0.1Effetto quasi nullo.
peso_effettivoi = peso_dichiaratoi · ( 0.5 + 0.5 · EMAi )

Il peso effettivo oscilla fra il 50% e il 150% del dichiarato. Non lo annulla mai (per evitare oblio catastrofico di un telos), non lo raddoppia mai (per rispettare l'intenzione dell'utente).

Trasparenza dell'apprendimento. Una volta al mese, Metnos propone all'utente: «ho notato che nelle ultime settimane le tue proposte accettate sono prevalentemente legate a ordine e puntualità, mentre parsimonia viene spesso ignorata. Vuoi che aggiorni i pesi dichiarati, o lascio così?». L'utente decide se promuovere il peso effettivo a dichiarato. L'apprendimento silenzioso non si nasconde: si rende visibile.

8. Anti-paternalismo e clausola di stop

Questa è la trappola più insidiosa del design. Un sistema di telos applicato senza discernimento diventa paternalista. Senza la distinzione che segue, il telos di non-rinuncia di cap. 5 sarebbe la manifestazione più estrema di questo rischio.

Clausola anti-paternalismo (riformulata ). I telos valutano ciò che Metnos sta per fare per l'utente, non ciò che l'utente fa. Eccezione esplicita: il telos di non-rinuncia (cap. 5) si applica al comportamento di synt durante l'evasione di una richiesta, ma solo finché l'utente non attiva la clausola di stop.

Operativamente, la funzione di allineamento non si applica mai a:

Si applica a:

Questa clausola va riflessa anche nella constitution come sotto-legge: la Costituzione è il livello che impedisce i casi limite (es. tentativi di sintesi che richiederebbero capability forbidden).

8.1 Riconoscimento dello stop

Lo stop dell'utente non è solo «lascia perdere». La pipeline LLM ha nel prompt un riconoscitore di formule equivalenti, in italiano e inglese:

Lo stop ambiguo (es. «hmm, vediamo dopo») attiva una conferma esplicita: «vuoi che mi fermi sul tentativo X?». Meglio chiedere una volta in più che testardare un tentativo non voluto.

9. Contratto Python

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 # "Liberare il mio tempo dalle incombenze ripetitive"
 weight_declared: float # [0,1], somma normalizzata
 activation_threshold: float # [0,1]
 notes: str # contesto per l'LLM
 is_non_retreat: bool = False # reserved, currently unused

@dataclass(frozen=True)
class FitEstimate:
 telos_id: str
 fit: float # [0,1]
 why: str # spiegazione testuale (per 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:
 """Emesso quando l'utente attiva la clausola di stop."""
 request_id: str # request_id di synt da fermare
 target_intent: str # cosa fermare
 raw_phrase: str # parole esatte dell'utente (audit)
 at: datetime

class TelosStore(Protocol):
 """Legge TELOS.md ed espone i telos correnti."""
 def current(self) -> list[Telos]:...
 def get(self, telos_id: str) -> Telos | None:...
 def version(self) -> str:... # hash corrente

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

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

class StopRecognizer(Protocol):
 """Riconosce la clausola di stop nelle parole dell'utente."""
 async def detect(self, user_text: str, current_intent: str | None) -> StopSignal | None:
 """Ritorna StopSignal se la frase è uno stop chiaro;
 None se non lo è; pone una conferma se ambiguo."""...

class TelosFeedback(Protocol):
 """Aggiorna gli EMA per-telos dai segnali dell'utente."""
 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:...

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

10. Rito di revisione

TELOS.md non è tecnicamente costituzionale (le Leggi sì) ma merita comunque un rito leggero:

  1. Scrittura manuale: l'utente modifica TELOS.md con un editor.
  2. Validazione: Metnos rilegge, ri-verifica formato, normalizza i pesi.
  3. Recap: Metnos risponde con un confronto «ecco cosa cambia rispetto alla versione precedente: peso parsimonia +0.05, aggiunto t.convivialita, ecc.».
  4. Firma: HMAC-SHA256 con chiave dedicata (distinta da quella costituzionale).
  5. Versione: il nuovo file include previous_hash del precedente; il vecchio finisce in .audit/telos/. Merkle leggera.
  6. Reset soft dell'EMA: i telos rinominati o rimossi perdono il loro EMA; i nuovi partono da 0. I telos con solo cambio di peso conservano l'EMA.
Differenza con la costituzione. SOUL.md richiede approvazione di Metnos + utente (sono regole condivise di sicurezza). TELOS.md richiede solo l'utente (sono suoi fini ultimi). Ma entrambi sono versionati e firmati: l'audit dei telos nel tempo è prezioso quanto quello delle Leggi.

11. Alternative considerate

AlternativaEsitoMotivo
Nessun TELOS esplicito, solo feedback implicito scartata Cold start impossibile: senza telos dichiarati, le prime 50 proposte sono casuali. L'utente le rifiuta tutte, l'EMA collassa, il sistema entra in silenzio.
Telos di non-rinuncia come Legge 4 della Costituzione scartata Rompe la grammatica delle Leggi (divieti negativi). Il telos è una spinta positiva, vive qui. Vedi Architettura cap. 11.
Reward function appresa da dataset scartata Non abbiamo dataset. Una funzione appresa è opaca: l'utente non sa cosa Metnos sta ottimizzando.
Goal graph gerarchico rimandata Telos annidati aumentano la potenza espressiva ma rompono la scrivibilità manuale. 3-7 telos piatti coprono il 90% dei casi.
Soglia singola θ globale (no per-telos) parziale Adottato come θ finale, ma combinato con soglie per-telos (activation_threshold) per impedire che rumore basso su molti telos si sommi.
Apprendimento online (RL continuo) scartata Rischio di reward hacking, opaco all'utente. EMA dai segnali espliciti basta.
Stop implicito (timeout) scartata L'utente potrebbe essere distratto, non disinteressato. Lo stop deve essere esplicito o confermato.

12. Test di conformità

CasoVerifica
TELOS.md assenteLa funzione di allineamento rifiuta ogni proposta spontanea con reason="no_telos_declared". Metnos chiede all'utente di compilare il file.
Telos con pesi non normalizzatiSomma rinormalizzata a 1.0 al caricamento. Warning in log. Non è errore.
Fit = 0 su tutti i telosexpected_alignment ≤ 0 − bother_cost < θ: reject.
Fit alto solo su un telos sotto-sogliaIl contributo viene messo a 0 dal gate. Reject salvo che un altro telos contribuisca.
Proposta a ridosso di una finestra protettaDefer al digest serale, non pubblicazione immediata.
Stesso tipo di proposta 3 volte rifiutata con «mai più»L'effect_class entra in telos_neverlist: le successive vengono auto-reject senza chiamata LLM.
Azione richiesta esplicitamente che viola un telos «classico» (es. spesa alta con telos parsimonia)La funzione di allineamento non viene invocata. Anti-paternalismo (cap. 8).
Richiesta che il pool non sa faresynt entra in cascata. Il telos di non-rinuncia è attivo. Se la cascata fallisce, l'esito è abandoned motivato (non cancelled).
Utente attiva clausola di stop a metà cascataStato passa a cancelled_by_user. EMA dei telos coinvolti scende di 0.7. Il pattern non si ritenta entro 24 h.
Stop ambiguo («hmm vediamo»)Metnos chiede conferma: «vuoi che mi fermi su X?». Non interrompe d'iniziativa.
Firing di scheduler in finestra protettaDifferito al prossimo slot non-protetto. Non pubblicato immediatamente, non scartato.
Firing di scheduler fuori dal ritmo concordatoPesa 50% del bother di una proposta ad-hoc.
Revisione di TELOS.md con un telos rimossoIl nuovo file valido, il vecchio in .audit/telos/. EMA del telos rimosso scartata. Audit record con diff.
10 proposte ad-hoc in 1 ora via TelegramBother_cost cresce esponenzialmente; dalla 4° in poi reject (defer_to_digest) anche con expected_alignment alto.
Disambiguazione R vs expected_alignmentUna proposta synt con R = 0.85 ma expected_alignment = 0.10 non viene pubblicata: la qualità non basta, il momento è sbagliato.

13. Domande aperte

  1. Stop «ricorrente». Se l'utente ferma N volte di fila lo stesso pattern, il sistema dovrebbe disabilitare la clausola anti-rinuncia per quel filone? Oppure restare al rifiuto puntuale? Aperta; default conservativo: rifiuto puntuale.
  2. Soglie di scheduling. Quando le schedule attive in un canale diventano «troppe»? Default tentativo: max 2/giorno per canale, max 1 schedule viva contemporaneamente per stesso topic. Da calibrare.
  3. Telos legati a effect_class. Un telos può bloccare un'intera classe di effetto, non solo singole proposte. Il meccanismo della telos_neverlist oggi opera sull'effect_class; possibile estensione futura: legare effect_class a più telos contemporaneamente. Aperta.
  4. Multi-utente. Quando Metnos avrà più sender pairati, i telos sono per-utente, condivisi, o un misto? Probabilmente per-utente con un set condiviso minimo (sicurezza, perimetro). Da decidere.

14. Le 10 lenti laterali

Le lenti laterali (runtime/telos_lenses/) sono i generatori creativi che producono proposte introspettive per servire i telos. Architettura modulare (cap. 9): ogni lente è un modulo Python con 3 elementi (NAME, OPERATORS tupla, funzione build_prompt(ctx, operator)) e si registra in __init__.py. Il loop LLM + parse JSON + paternalism guard + GBNF wiring è centralizzato in _base.run_lens. Toggle individuale per lente: METNOS_TELOS_LENS_<NAME>=1.

Stato al v8: 10 lenti in produzione ( final). Le 2 nuove dell'iterazione corrente (counterfactual, constitutional) sono ispirate a referenze 2022–2023. La lens compression (Schmidhuber 2010) e' stata implementata ma scartata dopo bench v8 per fallimento convergenza: anche col prompt restretto il modello locale non riusciva a proporre super-verbi vocab-compliant (violava l'eccezione §2.2 su entries). Bench convergenza con Qwen 3.6 35B-A3B + GBNF: 10/10 lenti accettate convergono al primo tentativo, 0 paternalismo, 0 invalid naming, 0 qualifier-object mismatch.

Lente Cosa fa Referenza
scamper7 operatori brainstorming (Substitute / Combine / Adapt / Modify / Put to other use / Eliminate / Reverse) sui top-N executor del catalog.Eberle 1971; Osborn 1953 (Applied Imagination)
oulipoVincoli temporanei deliberati che Metnos auto-impone (no API frontier, no executor X per N giorni) per esplorare path alternativi locali.Queneau & Le Lionnais 1960 (Ouvroir de Littérature Potentielle)
inverse_rlInfera telos NON dichiarati osservando cluster di turni soddisfatti (proposed_action inizia con PROPOSED_TELOS:).Russell 1998 (Learning agents for uncertain environments, IRL)
endgame_bookPrecompute pattern di scadenze noti (fatture, scadenze, certificati) come cascate scheduler v2 deterministiche.Thompson 1986 (chess endgame tablebases, KQKR)
analogy_transferTrasferisce una strategia di successo da un dominio Metnos (credentials Fernet, signatures hash) a un dominio strutturalmente simile.Hofstadter 1979 (GEB); Mitchell 2001 (Analogy-making as Perception)
boden_transformationalTrasforma il contratto (signature args / schema / ritorno) di un executor invece dei suoi default. Cambia lo spazio di possibilità.Boden 1990 (The Creative Mind: Myths & Mechanisms)
pattern_languageEstrae micro-pattern componibili dal mnestoma (es. ispeziona-poi-agisci, verify-after-mutate) come ricette astratte con placeholder.Alexander 1977 (A Pattern Language); Gamma et al. 1994 (Design Patterns)
generative_designPer un brief composto (es. design scheduler notturno), genera 2−3 candidati Pareto-ottimali con trade-off espliciti su più telos.Bentley 1999 (Evolutionary Design); Krish 2011 (Generative Design Method)
counterfactualSpeculare di inverse_rl: estrae proposte da turni INSODDISFATTI (lunghi, retry, error). Propone l'executor mancante che avrebbe risolto in 1−2 step.Shinn et al. 2023 (Reflexion: Language Agents with Verbal RL, NeurIPS)
constitutionalPer ogni executor sensibile (filesystem mutante, outbound, credenziali) identifica modi di fallimento non ovvi e propone DEFENSE (layer di sicurezza, default conservativo).Bai et al. 2022 (Constitutional AI: Harmlessness from AI Feedback, Anthropic)

Le 11 lenti sono tutte LLM-driven al loro core (creatività richiesta) ma il GATING delle proposte e' deterministico (§7.9): anti-paternalismo via regex, naming compliance via Naming Authority (cap. 9), qualifier-object compatibility (R4) via mappa in vocab.py. Una proposta che viola un vincolo del Naming Authority NON puo' essere emessa: la grammar GBNF la blocca a tempo di generazione.

Catalogo & routine notturna

Tutte le lenti partecipano al loop notturno (scheduler v2 daily@03:30, integrazione pending) e producono proposte che vanno al Vaglio. Lenti che propongono CONCETTI (telos, vincoli, pattern astratti) hanno new_op_name=null: oulipo, inverse_rl, pattern_language. Lenti naming-aware (le restanti 8) possono proporre nuovi nomi 2-4 livelli (R0..R4).

15. Riferimenti

Riferimenti interni

Riferimenti letterari e tecnici


Continua a leggere

canonico
synt
La cascata che il telos di non-rinuncia onora. Punteggio R disambiguato da expected_alignment.
canonico
executor
Gli artefatti che synt produce e che i telos valutano nel momento della pubblicazione.
livello 1
Architettura, cap. 11
Telos e Vaglio nel quadro d'insieme.
indice
Microprogettazione
Tutti i doc.

Metnos — telos microprogettazione
Senza telos, la proattività è rumore.