← Indice documentazione Microprogettazione › telos

myclaw

telos — fini ultimi, funzione di allineamento, bother budget
v1.0 — 22 aprile 2026
Componente fondante delle famiglie proattive.
Origine: Prospettive estese §2F.

Indice

  1. Scopo e confini
  2. Il concetto: leggi vs telos
  3. TELOS.md — il file
  4. La funzione di allineamento
  5. Bother budget — il costo di disturbare
  6. Apprendimento dai silenzi
  7. Anti-paternalismo: myc si giudica, non giudica
  8. Contratto Python
  9. Rito di revisione
  10. Alternative considerate
  11. Test di conformità
  12. Provenienza e riferimenti

1. Scopo e confini

Un agente reattivo ha una funzione di valutazione implicita: "l'utente ha chiesto X → fai X bene". Un agente proattivo no: è lui che genera l'intenzione. telos è il componente che stabilisce quale intenzione ha senso prima che diventi una proposta all'utente, senza chiedere all'utente di valutare tutto.

Cos'è

Cosa non è

2. Il concetto: leggi vs telos

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

LEGGI cosa NON fare mai negative riguardano la sicurezza scritte da myc con l'utente precedenza assoluta si rispettano SOUL.md (4 Leggi) perimetro, non-nocività, obbedienza, tracciabilità TELOS verso cosa tendere positivi riguardano l'utilità scritti dall'utente pesati, bilanciati ci si approssima TELOS.md (3-7 fini) tempo, ordine, puntualità, protezione, discrezione, …
Figura 1 — Leggi e telos occupano due registri linguistici diversi: la grammatica del divieto vs la grammatica della tendenza. Sono complementari, non alternative.

In termini operativi:

AspettoLeggi (constitution)Telos (questo doc)
Linguaggio"non fare X""avvicina Y"
Meccanismohard constraint — deny immediatosoft signal — valutazione pesata
Proprietario della scritturamyc + 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, policy §3 Check 0)solo sulle proposte spontanee di myc (ActionProposal)
Costo di violazionehard abort, audit law3_trace_gapla proposta non arriva all'utente, fine

3. TELOS.md — il file

Vive nel workspace come sesto file canonico (cfr. workspace.html, da estendere). Formato markdown con front-matter YAML. Poche righe.

---
telos_version: 1.0
written_at: 2026-04-22T18:00:00+02:00
written_by: roberto
previous_hash: genesis
signature: <HMAC-SHA256, chiave separata dalla costituzionale>
---

# I miei fini ultimi

## t.tempo — Liberare il mio tempo dalle incombenze ripetitive
peso: 0.25
soglia_attivazione: 0.3
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.4
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.2
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.5
note: non farmi notifiche 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 di chi li scrive). Oltre 7, il rischio è telos ridondanti che si cancellano a vicenda. Se emergono nuove dimensioni, meglio rivedere quelle esistenti che aggiungerne.

4. La funzione di allineamento

Formula

expected_alignment = ( ∑i pesoi · gate(fiti, sogliai) ) · urgency · confidence − bother_cost

Con:

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

Il prompt del Giudice (definito in vaglio §5) è un system-block cacheabile:

Sei il valutatore di allineamento ai telos dell'utente.

TELOS DELL'UTENTE:
{body of TELOS.md, note incluse}

PROPOSTA DA VALUTARE:
{kind: "homogenize_filenames", scope: "~/Documenti/lavoro/",
 impact: "347 file, 2h risparmio stimato/mese",
 rationale: "4 convenzioni diverse rilevate nello scan",
 plan: [...],
 reversibility: "reversible"}

Per ogni telos, stima fit ∈ [0,1] e spiega in una frase perché.
Stima anche confidence ∈ [0,1] (quanto sei sicuro della tua stima,
considerando dati disponibili vs speculazione).
Rispondi in JSON:
  {"t.tempo": {"fit": 0.6, "why": "..."},
   "t.ordine": {"fit": 0.85, "why": "..."},
   ...
   "confidence": 0.7,
   "overall_why": "..."}

Il tier LLM usato è local-fast per proposte a basso costo, con escalation a frontier se la proposta è grossa (impact > 100 record o effect_class irreversibile). Coordinato con policy §6 cost tiering.

Threshold di pubblicazione

Se expected_alignment < θ, la proposta non viene mostrata all'utente. θ è un parametro di config con default 0.15.

Le proposte scartate finiscono in un journal interno:

// 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-22T19:42:00Z"}

L'utente può ispezionare questo journal per verificare che myc non stia sopprimendo cose buone ("digest settimanale: 47 proposte scartate, ecco le 5 al margine").

ActionProposal da reflection / indexer LLM estima fit per ogni telos + confidence tier local-fast Funzione allineamento Σ pesᵢ · gate(fitᵢ, sogliaᵢ) × urgency − bother_cost ≥ θ vai all'inbox < θ journal "rejected" utente vede digest / inbox utente no (ispezionabile)
Figura 2 — Ciclo di vita di una ActionProposal attraverso la funzione di allineamento. La via bassa non è un buco nero: è ispezionabile.

5. Bother budget — il costo di disturbare

L'utente ha una capacità finita di valutare proposte. Più proposte gli arrivano in una finestra, meno attenzione dà a ciascuna. Dopo N proposte ignorate, inizia a ignorare il canale.

Per questo, la funzione di allineamento include bother_cost che cresce con la frequenza recente di proposte pubblicate.

Modello

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.

Budget giornaliero default

CanaleDefaultRazionale
Digest seralefino a 10 proposte raggruppateHa un posto dedicato, l'utente lo apre con intenzione. Basso bother.
Telegram (immediato)max 3 proposte / giorno, max 1 / oraInterrompe. Reserved a urgenza vera o altissimo allineamento.
CLI interattivamax 2 proposte / sessioneL'utente è concentrato su altro nel terminale.
Finestre protette0 proposteOrari di sonno (23-7), riunioni rilevate, calendario "concentrazione".
Tutto al digest serale, di default. Le proposte vengono accumulate e raggruppate per un singolo momento dedicato. Solo proposte con urgency ≥ 1.5 e expected_alignment molto alto vanno in tempo reale. Questo è il telos t.discrezione applicato al canale stesso.

6. 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). Il TrustStore definito in rl_offline si estende con un asse telos_fitness: dict[telos_id, EMA].

SegnaleForzaEffetto sui telos legati
Accept esplicito+1.0EMA sale. Peso effettivo del telos coinvolto cresce moderatamente.
Accept con modifica+0.5EMA sale un po'. Segnala che il telos era giusto, il piano no.
Rifiuto esplicito−1.0EMA scende. Segnala che il telos è meno importante per l'utente di quanto dichiarato.
Rifiuto con "mai più"−2.0EMA scende molto. L'intera effect_class finisce nella never-list del telos.
Silenzio 48h−0.3Segnale debole ma presente: la proposta non era abbastanza rilevante da essere guardata.
Vista ma non decisa−0.1Forse confusa, forse non il momento giusto. Effetto quasi nullo.

Peso effettivo vs peso dichiarato

peso_effettivoi = peso_dichiaratoi · ( 0.5 + 0.5 · EMAi )

Il peso effettivo oscilla tra 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).

DECISIONE v1 (trasparenza dell'apprendimento). Una volta al mese, myc 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.

7. Anti-paternalismo: myc si giudica, non giudica

Questa è la trappola più insidiosa del design. Un sistema di telos applicato senza discernimento diventa paternalista: "il tuo telos è parsimonia, quindi ti dico che stai spendendo troppo". Non è quello che vogliamo.

Clausola anti-paternalismo. I telos valutano ciò che myc sta per fare per l'utente, non ciò che l'utente fa. Se il telos è "parsimonia", myc lo applica alle proprie scelte (scegliere il tier LLM più economico, non proporre l'indicizzazione di 50 GB di foto se basta un sottoinsieme), non alle scelte dell'utente (non commenta gli acquisti, non critica il tempo speso a leggere).

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

Si applica solo a:

Questa clausola va riflessa anche in constitution.html come sotto-legge (vedi Prospettive estese §4).

8. 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 da incombenze ripetitive"
    weight_declared: float        # [0,1], somma normalizzata
    activation_threshold: float   # [0,1]
    notes: str                    # contesto per l'LLM

@dataclass(frozen=True)
class FitEstimate:
    telos_id: str
    fit: float                    # [0,1]
    why: str                      # spiegazione testuale (usata negli audit)

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

class TelosStore(Protocol):
    """Legge TELOS.md e 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 (LLM), compone expected_alignment,
        applica bother_cost dal BotherBudget, decide publish/reject/defer.
        """
        ...

class BotherBudget(Protocol):
    def current_cost(self, channel: str, at: datetime) -> float: ...
    def record_published(self, channel: str, proposal_id: UUID) -> None: ...
    def in_protected_window(self, at: datetime) -> bool: ...

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_silence_48h(self, proposal_id: UUID) -> None: ...
    async def on_viewed_undecided(self, proposal_id: UUID) -> None: ...

Errori sollevabili

EccezioneQuando
TelosFileMalformedTELOS.md non parsabile o pesi che non sommano a un numero ragionevole dopo normalizzazione.
TelosSignatureInvalidLa firma non verifica. Il gateway rifiuta di usare i telos — non di partire: fallback è "nessun telos, la funzione di allineamento ritorna sempre reject per proposte spontanee". Conservativo.
TelosFitEstimationFailedL'LLM non ha ritornato JSON valido dopo 2 retry. La proposta viene reject-ata con reason estimation_failed.
BotherBudgetExhaustedNon un'eccezione "di errore": normale decisione di defer/reject quando il canale è saturo.

9. 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: myc rilegge, ri-verifica formato, normalizza i pesi.
  3. Recap: myc 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 myc + 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.

10. Alternative considerate

AlternativaStatoMotivo
Nessun TELOS esplicito, solo feedback implicito scartato Il 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 e non ne esce.
Reward function appresa da dataset scartato Non abbiamo dataset. Non ne avremo mai abbastanza per un utente singolo. Inoltre una funzione appresa è opaca — l'utente non sa cosa myc sta ottimizzando.
Goal graph gerarchico rimandato Telos annidati (obiettivo → sottobiettivo → …) aumentano la potenza espressiva ma rompono la scrivibilità manuale. 3-7 telos piatti coprono il 90% dei casi. Il goal graph si valuterà se e quando emergerà un limite.
Soglia singola θ globale (no per-telos) parziale Adottato come θ finale, ma combinato con soglie per-telos (activation_threshold). Le soglie per-telos impediscono che rumore basso su molti telos si sommi a un numero alto.
Apprendimento online (RL continuo) scartato Rischio di reward hacking, opaco all'utente, non allineato con la filosofia offline di rl_offline. EMA dai segnali espliciti è sufficiente.

11. Test di conformità

CasoVerifica
TELOS.md assenteLa funzione di allineamento rifiuta ogni proposta spontanea con reason="no_telos_declared". myc chiede all'utente di compilare il file.
Telos con pesoi 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ù"Effect class della proposta entra in telos_neverlist: le successive vengono auto-reject senza chiamata LLM.
Azione richiesta esplicitamente dall'utente viola un telos (es. spesa alta con telos "parsimonia")La funzione di allineamento non viene invocata. La clausola anti-paternalismo è il test.
Revisione di TELOS.md con un telos rimossoIl nuovo file valido, il vecchio finisce in .audit/telos/. EMA del telos rimosso scartata. Audit record con diff.
10 proposte in 1 ora via TelegramBother_cost cresce esponenzialmente; dalla 4ª in poi reject (defer_to_digest) anche con expected_alignment alto.

12. Provenienza e riferimenti

Traccia del processo decisionale. Questo componente è emerso il 22 aprile 2026 da una domanda precisa di Roberto durante la revisione della visione estesa:
"Come fa myc a capire se un servizio possibile e pensato da lui ha un senso, senza disturbare ogni volta l'utente con infinite proposte o richieste di attivazione? Ci vuole una sorta di linea guida, la definizione di fini ultimi su cui allineare e valutare le azioni."
La risposta ha preso forma in tre sessioni ravvicinate: (1) l'identificazione di telos come concetto aristotelico adatto, (2) la distinzione categoriale Leggi/Telos che ha sbloccato il design (fondante), (3) l'articolazione dei tre livelli di allineamento (file, funzione, EMA). La clausola anti-paternalismo è stata aggiunta come contromisura esplicita al rischio di moralismo che emerge inevitabilmente quando un sistema valuta azioni sulla base di fini ultimi.

Riferimenti interni

Riferimenti letterari


Continua a leggere

estensione · 20 min
Prospettive estese v1
Il doc di visione da cui questo componente discende. §2F introduce i telos.
microprogettazione
memory
La reflection (§6) è la fonte di ActionProposal che i telos valutano.
microprogettazione
constitution
Le 4 Leggi. I telos sono il loro complemento positivo.
microprogettazione
← Indice componenti
Tutti i doc di Livello 2.

myclaw — telos v1.0 — 22 aprile 2026
Fondante per le famiglie proattive. Senza telos, la proattività è rumore.