{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "L'agent (daemon et ses paquets)",
  "feed_url": "https://kami.bot/changelog/agent.json",
  "items": [
    {
      "id": "agent/2026-09-08#1",
      "title": "L'outil recall_recent_changes lit changelog.json standardisé",
      "content_text": "L'outil recall_recent_changes lit désormais le journal publié par le client @kami/changelog au réglage changelog.url (scope agent), et renvoie une réponse unique avec un en-tête de fraîcheur (journal courant, périmé ou illisible). Aucun détail interne (sha, chemin, fournisseur) ne fuite ; le skill self-changes est réécrit pour lire cet en-tête et les six catégories de la norme.",
      "date_published": "2026-09-08T01:47:00.000Z",
      "date_modified": "2026-09-08T03:35:35.552Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "changed",
        "scope": "agent",
        "window": "2026-09-08",
        "first_at": "2026-09-08T01:47:00.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs",
          "(repo)"
        ],
        "continues_from": "agent/2026-09-08#1"
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-07#8",
      "title": "Un suivi de visage coupé ne garde plus le mauvais nom",
      "content_text": "La continuité d'un suivi de visage est désormais mesurée à chaque rafraîchissement par similarité cosinus ; deux doutes consécutifs cassent le suivi et rien n'est appris tant qu'il y a doute. Un visage douteux qui ne correspond à personne d'autre garde son nom connu pendant douze doutes avant de basculer en identité provisoire.",
      "date_published": "2026-09-07T20:00:23.000Z",
      "date_modified": "2026-09-08T00:31:36.264Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-07",
        "first_at": "2026-09-07T19:12:21.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-07#7",
      "title": "Une voix peut s'apprendre pendant la conversation",
      "content_text": "Le daemon regroupe les fenêtres candidates en séries et apprend une nouvelle ancre de voix en cours de conversation, la majorité persistant et une minorité déchue étant retirée. Quand une voix apparaît sous deux visages, la composante dominante l'emporte, pondérée par son rang.",
      "date_published": "2026-09-07T16:32:19.000Z",
      "date_modified": "2026-09-08T00:31:36.264Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-07",
        "first_at": "2026-09-07T16:32:19.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/repository-docs",
          "@kami/speaker-attribution"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-07#6",
      "title": "La décision de locuteur se prend fenêtre par fenêtre",
      "content_text": "Le réducteur décide désormais aussi par fenêtres de parole ouverte de 1,5 s toutes les 0,5 s, sans jamais apprendre de ces fenêtres. La règle 5' laisse gagner la voix acceptée face au visage sur une fenêtre, et le seuil SNR du tap ne rejette plus les énoncés couverts par du fond musical.",
      "date_published": "2026-09-07T12:37:23.000Z",
      "date_modified": "2026-09-08T00:31:36.264Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "changed",
        "scope": "agent",
        "window": "2026-09-07",
        "first_at": "2026-09-07T12:37:23.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/repository-docs",
          "@kami/speaker-attribution"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-07#5",
      "title": "Le serveur vérifie lui-même qui parle, audite le client",
      "content_text": "Le daemon peut demander au client une salve de recadrages de visage à 10 fps et les scorer contre l'audio du tap pour lever le plafond client et conditionner l'apprentissage, ou recevoir des images postées directement sans navigateur et lire seul qui parle. Chaque client est audité : un détecteur qui se contredit ou reste muet est distrusted et ses lectures n'atteignent plus le réducteur.",
      "date_published": "2026-09-07T06:25:36.000Z",
      "date_modified": "2026-09-08T00:31:36.264Z",
      "tags": [
        "@kami/daemon",
        "@kami/agent-protocol",
        "@kami/voice-client",
        "@kami/voice-server"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-07",
        "first_at": "2026-09-07T00:54:01.000Z",
        "packages": [
          "@kami/daemon",
          "@kami/agent-protocol",
          "@kami/voice-client",
          "@kami/voice-server"
        ],
        "packages_outside": [
          "@kami/repository-docs",
          "(repo)",
          "@kami/web",
          "@kami/speaker-attribution"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-07#4",
      "title": "Nouvelle page Identity dans la console et son API",
      "content_text": "La console gagne une page Identity listant qui est reconnu par visage ou par voix, dans quel store, avec quel consentement, ainsi que les clés de partage. Oublier un visage fonctionne désormais comme oublier une voix.",
      "date_published": "2026-09-07T02:15:41.000Z",
      "date_modified": "2026-09-08T00:31:36.264Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-07",
        "first_at": "2026-09-07T02:15:41.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs",
          "@kami/web",
          "(repo)"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-07#3",
      "title": "Les ancres de visage et de voix se partagent entre agents",
      "content_text": "Le partage des ancres d'identité entre agents devient déclarable dans la console : des lecteurs par ensemble, un champ learntBy sur chaque correspondance, et l'oubli d'une ancre qui se propage à tout l'ensemble partagé.",
      "date_published": "2026-09-06T23:49:44.000Z",
      "date_modified": "2026-09-08T00:31:36.264Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-07",
        "first_at": "2026-09-06T23:49:44.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-07#2",
      "title": "Le prompt de l'agent connaît qui parle et la salle",
      "content_text": "Chaque énoncé vocal transcrit porte désormais un expéditeur attribué (entité connue, inconnu transitoire, ou sinon la personne de la session) qui devient l'auteur ou le nom de la ligne. Quand plusieurs personnes sont présentes, un bloc « The room » remplace le bloc caméra dans le prompt, avec présents, locuteur courant et question en attente.",
      "date_published": "2026-09-06T22:40:13.000Z",
      "date_modified": "2026-09-08T00:31:36.264Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-07",
        "first_at": "2026-09-06T22:40:13.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-07#1",
      "title": "L'attribution du locuteur relie caméra, lecture client et voix",
      "content_text": "Le port P4a fait entrer les images de la caméra liée à la conversation, les lectures de parole du navigateur et les énoncés du tap dans un réducteur pur qui décide qui parle. Chaque décision sort vers le journal et la scène de la session, et vers le store d'identité seulement si l'interrupteur voice.speaker.learn est activé (toujours désactivé par défaut).",
      "date_published": "2026-09-06T22:17:31.000Z",
      "date_modified": "2026-09-08T00:31:36.264Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-07",
        "first_at": "2026-09-06T22:17:31.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": "agent/2026-09-06#8"
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-06#8",
      "title": "Brique de reconnaissance du locuteur vocal construite par étapes, encore désactivée",
      "content_text": "Un tap sur le micro décodé (Silero VAD + CAM++) produit des empreintes vocales par énoncé dans un sous-processus ; un nouveau store voice_embeddings (v146), miroir des ancres visage, gère le consentement, l'enrôlement et une commande d'oubli. Les seuils d'appariement sont calibrés sur un jeu proxy, un modèle LR-ASD est exporté en ONNX pour le navigateur, et une brique côté client synchronise visage et voix par session ; l'ensemble reste inactif derrière voice.speaker.enabled.",
      "date_published": "2026-09-06T21:38:01.000Z",
      "date_modified": "2026-09-08T00:30:46.947Z",
      "tags": [
        "@kami/daemon",
        "@kami/agent-protocol",
        "@kami/voice-client",
        "@kami/voice-server"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-06",
        "first_at": "2026-09-06T19:54:37.000Z",
        "packages": [
          "@kami/daemon",
          "@kami/agent-protocol",
          "@kami/voice-client",
          "@kami/voice-server"
        ],
        "packages_outside": [
          "@kami/repository-docs",
          "(repo)",
          "@kami/speaker-attribution",
          "@kami/web"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-06#7",
      "title": "La voix sait ce que la caméra voit en temps réel",
      "content_text": "collectContext lit désormais le registre de suivi des caméras liées et l'assembleur de prompt ajoute un bloc « Camera » listant les personnes reconnues avec leur score, le nombre de visages inconnus, ou l'absence de visage. Quand la personne de la conversation est inconnue et qu'un seul visage reconnu est présent, ce bloc le propose comme locuteur probable, sans jamais l'affirmer comme acquis.",
      "date_published": "2026-09-06T07:26:56.000Z",
      "date_modified": "2026-09-08T00:30:46.947Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-06",
        "first_at": "2026-09-06T07:26:56.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-06#6",
      "title": "Correction de la chaîne d'identité : qui parle est reconnu partout",
      "content_text": "La connexion au portail avec la clé maîtresse remplaçait la personne reconnue par l'entité fantôme « Operator » et échouait avec une erreur 400 en production ; POST /sessions accepte désormais inheritSession pour conserver la personne reconnue et utilise l'agent par défaut du démon. Le résolveur vocal câble enfin le vrai nom d'affichage de la personne, et le prompt système indique explicitement qu'il connaît l'entité au lieu de dire « invité ».",
      "date_published": "2026-09-06T03:27:14.000Z",
      "date_modified": "2026-09-08T00:30:46.947Z",
      "tags": [
        "@kami/daemon",
        "@kami/identity-client"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-06",
        "first_at": "2026-09-06T03:27:14.000Z",
        "packages": [
          "@kami/daemon",
          "@kami/identity-client"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/repository-docs",
          "@kami/web"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-06#5",
      "title": "Un webhook relaie les alertes de la flotte vers Telegram",
      "content_text": "POST /webhook/ops-alert/<token> reçoit les alertes compatibles Slack de RunnerYard (budget épuisé, plafond de capacité, retrait bloqué) et les relaie sur le chat Telegram configuré via l'agent obs.alert_agent_id. Le jeton est comparé en temps constant et lu par l'adaptateur d'environnement, jamais par la porte des réglages.",
      "date_published": "2026-09-06T01:04:41.000Z",
      "date_modified": "2026-09-08T00:30:46.947Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-06",
        "first_at": "2026-09-06T01:04:41.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-06#4",
      "title": "La réponse cite le message auquel elle répond, plus l'ancien",
      "content_text": "Un agent répondant dans un groupe à quelqu'un qui avait lui-même cité un message se citait auparavant lui-même, faute de distinguer l'ID du message répondu de celui du message entrant. autoQuoteTarget() cible désormais toujours le message entrant reçu en réponse, jamais le message que l'humain avait cité, sauf en message privé.",
      "date_published": "2026-09-05T23:23:24.000Z",
      "date_modified": "2026-09-08T00:30:46.947Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-06",
        "first_at": "2026-09-05T23:23:24.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-06#3",
      "title": "Une vue unique du grand livre des coûts, par agent ou globale",
      "content_text": "buildLedgerView alimente à la fois /admin/costs (vue complète) et le nouveau GET /agents/{id}/costs, réservé au créateur de l'agent via la porte agent.billing:read, avec le même format (total, répartition, ligne par type, part non tarifée). Le composant web CostLedger partagé affiche désormais toutes les catégories de coûts, pas seulement le LLM, sur /my/costs et /portal/costs.",
      "date_published": "2026-09-05T22:46:27.000Z",
      "date_modified": "2026-09-08T00:30:46.947Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-06",
        "first_at": "2026-09-05T22:46:27.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/repository-docs",
          "@kami/web"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-06#2",
      "title": "Le grand livre des coûts inclut la synthèse et la reconnaissance vocale",
      "content_text": "recordSpeechCost inscrit désormais une ligne de coût en minutes pour la synthèse (TTS) et la reconnaissance (STT) vocales, tarifée par les grilles voice.tts.price_grid et voice.stt.price_grid, ou enregistrée sans prix si la durée n'est pas mesurée. Quatre points sont couverts : la voix sans session, la session micro chaînée, la tâche voice_gen et les messages vocaux entrants.",
      "date_published": "2026-09-05T22:32:43.000Z",
      "date_modified": "2026-09-08T00:30:46.947Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-06",
        "first_at": "2026-09-05T22:32:43.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-06#1",
      "title": "Migration du scope de discussion corrige les réglages perdus",
      "content_text": "migrateChatScope oubliait la table chat_audience_filter supprimée en v145 et ne réassignait pas les réglages (filtre d'audience, dérogations show/scene) d'un salon lors de la fusion en supergroupe ; ces réglages suivent désormais la ré-affectation d'ID, l'ancienne ligne cédant à la nouvelle. Le test de redémarrage applique aussi les pragmas fichier du démon pour éviter les dépassements de temps sur CI.",
      "date_published": "2026-09-05T22:02:03.000Z",
      "date_modified": "2026-09-08T00:30:46.947Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-06",
        "first_at": "2026-09-05T22:02:03.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-05#16",
      "title": "Le dialogue des comptes connectés affiche des comptes, pas des alias",
      "content_text": "@kami/identity-client introduit le modèle Account : un numéro WhatsApp et son @lid forment une seule ligne, le self-bind web est masqué, un compte lié par l'opérateur ou porté par un agent est verrouillé, et la déconnexion se fait par l'id durable du compte entier.",
      "date_published": "2026-09-05T21:57:56.000Z",
      "date_modified": "2026-09-08T00:29:46.327Z",
      "tags": [
        "@kami/identity-client"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-05",
        "first_at": "2026-09-05T21:57:56.000Z",
        "packages": [
          "@kami/identity-client"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/web"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-05#15",
      "title": "Réglages de conversation : audience et catégories Discord par la porte",
      "content_text": "chat.audience_filter et chat.discord.excluded_categories deviennent des réglages de portée conversation dans la porte, avec migration v145 des anciennes tables ; un nouvel onglet Settings apparaît sur /portal/threads/<id>.",
      "date_published": "2026-09-05T21:34:25.000Z",
      "date_modified": "2026-09-08T00:29:46.327Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-05",
        "first_at": "2026-09-05T21:34:25.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/repository-docs",
          "@kami/web"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-05#14",
      "title": "Console : vue d'ensemble, autorisation admin unique, stockage unifié",
      "content_text": "Nouvelle page /portal/home (santé, connexions par agent/plateforme, boucles avec Run now, dépense 24h, erreurs, agenda, flags actifs) ; les dix-neuf routes admin brutes passent par une même autorisation ownerOnly, un flag désactivé répond 403 en nommant sa clé, storage.* devient une famille unique. Les pages HTML /admin/dashboard et /admin/whatsapp-setup disparaissent sans redirection, /<agent>/configure remplace /admin/<agent> et /threads est retiré sans redirection.",
      "date_published": "2026-09-05T21:27:06.000Z",
      "date_modified": "2026-09-08T00:29:46.327Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "changed",
        "scope": "agent",
        "window": "2026-09-05",
        "first_at": "2026-09-05T14:27:20.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/repository-docs",
          "@kami/web"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-05#13",
      "title": "Machines, plateformes, monde, jeux, vision par la porte des réglages",
      "content_text": "Le pilote de la machine, les catégories monde/jeux/vision/observabilité et le mode de revue sortante (désormais en carte JSON, l'ancienne chaîne restant acceptée) passent tous par la porte des réglages.",
      "date_published": "2026-09-05T20:41:47.000Z",
      "date_modified": "2026-09-08T00:29:46.327Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "changed",
        "scope": "agent",
        "window": "2026-09-05",
        "first_at": "2026-09-05T20:41:47.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/repository-docs",
          "@kami/web"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-05#12",
      "title": "Une cinquantaine d'indicateurs chauds pilotés par la porte",
      "content_text": "Les indicateurs de scène, show, vie intérieure, dépense, opérations, X et email deviennent modifiables en direct via la porte des réglages, qui honore config.ts pour l'environnement de chaque clé.",
      "date_published": "2026-09-05T19:43:43.000Z",
      "date_modified": "2026-09-08T00:29:46.327Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "changed",
        "scope": "agent",
        "window": "2026-09-05",
        "first_at": "2026-09-05T19:43:43.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-05#11",
      "title": "Vue console de l'agent : voix, capacités, style, avatar en overlay",
      "content_text": "getAgentById superpose désormais des réglages propres à chaque agent (voix, capacités, profil créatif, style, avatar) issus de la porte des réglages ; image.style_prompt et image.avatar_url n'ont plus besoin d'alias d'environnement nominatifs.",
      "date_published": "2026-09-05T19:03:12.000Z",
      "date_modified": "2026-09-08T00:29:46.327Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-05",
        "first_at": "2026-09-05T19:03:12.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-05#17",
      "title": "Le démarrage échoue proprement, réglages busy_timeout/WAL affinés",
      "content_text": "Une exception non rattrapée avant que le serveur n'écoute fait désormais exit(1) au lieu de bloquer silencieusement la chaîne de boot (le health-gate avait laissé un déploiement invalide écraser une base déjà migrée). busy_timeout=5000 est posé à chaque ouverture de base ; forcer le mode WAL à chaque ouverture a été retiré après avoir ralenti 20x les tests, Litestream maintenant déjà la production en WAL.",
      "date_published": "2026-09-05T18:13:14.000Z",
      "date_modified": "2026-09-08T00:29:46.327Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-05",
        "first_at": "2026-09-05T17:25:56.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-05#6",
      "title": "Réparation du graphe d'identité pilotée par l'audit, en direct",
      "content_text": "Nouvel endpoint POST /admin/identity/repair (dry run ou apply) qui fusionne, re-clé ou purge les entités selon les phases identifiées par l'audit, de façon rejouable et idempotente. Affiné ensuite pour purger un alias malformé sans historique et re-rattacher un auteur disparu via la présence d'un agent ou l'alias de ses propres messages.",
      "date_published": "2026-09-05T17:51:52.000Z",
      "date_modified": "2026-09-08T00:29:46.327Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-05",
        "first_at": "2026-09-05T11:51:59.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-05#7",
      "title": "Les écritures d'identité en direct cessent de fabriquer de faux alias",
      "content_text": "Heartbeat, adaptateur web, enregistrement X, agent-send et la perception entre pairs minaient des identités parasites (par exemple l'id Telegram d'un agent recréé sous web) ; ils lisent désormais l'id canonique via BotInfo/getMe, et un garde-fou journalise toute écriture non conforme une fois par appelant.",
      "date_published": "2026-09-05T17:03:53.000Z",
      "date_modified": "2026-09-08T00:29:46.327Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-05",
        "first_at": "2026-09-05T14:26:42.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-05#10",
      "title": "Registre unifié des coûts (cost_events) et page Coûts par type",
      "content_text": "Une ligne par acte facturable (LLM, computer, image, vidéo, X) avec prix prouvé ou priced=0 explicite. spend_limits est fondu dans la porte des réglages puis supprimé avec /admin/spend-limits, remplacé par /admin/costs?kind= et une page /portal/costs filtrable par type.",
      "date_published": "2026-09-05T16:50:24.000Z",
      "date_modified": "2026-09-08T00:29:46.327Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-05",
        "first_at": "2026-09-05T16:50:24.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/repository-docs",
          "@kami/web"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-05#9",
      "title": "Images, vidéo, rôles LLM et TTS lisent la porte des réglages",
      "content_text": "Neuf clés de config historiques sont retirées ; le flag de scène, les identifiants de voix TTS, le budget vidéo et les réglages de chemins sont désormais lus en direct via la porte des réglages plutôt que figés au démarrage.",
      "date_published": "2026-09-05T15:26:55.000Z",
      "date_modified": "2026-09-08T00:29:46.327Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "changed",
        "scope": "agent",
        "window": "2026-09-05",
        "first_at": "2026-09-05T15:26:55.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs",
          "(repo)"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-05#8",
      "title": "Porte des réglages : un registre, une table, une lecture unique",
      "content_text": "Nouvelle porte unifiée pour les 293 paramètres de plateforme (auparavant lus via env, constantes et code des agents maison), avec précédence chat > agent > global > env historique > défaut, souscription/écriture live et confirmation des clés dangereuses. Dix-sept boucles périodiques s'arment désormais sur cette porte.",
      "date_published": "2026-09-05T13:30:25.000Z",
      "date_modified": "2026-09-08T00:29:46.327Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-05",
        "first_at": "2026-09-05T13:30:25.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-05#5",
      "title": "Alias tracés (bound_by), comptes unifiés, portes fermées",
      "content_text": "Chaque alias enregistre désormais comment il a été lié (bound_by) ; un numéro WhatsApp et son @lid forment UN seul compte, /me retourne des accounts et DELETE /me/accounts détache le tout de façon atomique. Les routes de messages résolvent l'émetteur vers un id canonique avant écriture, et le trafic de test est marqué synthétique et purgeable.",
      "date_published": "2026-09-05T11:00:00.000Z",
      "date_modified": "2026-09-08T00:29:46.327Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-05",
        "first_at": "2026-09-05T11:00:00.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-05#4",
      "title": "Audit en lecture seule du graphe d'identité (contrat IG-1)",
      "content_text": "Nouveau contrat et audit read-only qui inspecte la base et remonte des anomalies du graphe (ids mal filés, self-aliases, phantoms de master key, comptes WhatsApp dupliqués) avec un CLI dédié et un code de sortie bloquant.",
      "date_published": "2026-09-05T10:19:08.000Z",
      "date_modified": "2026-09-08T00:29:46.327Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-05",
        "first_at": "2026-09-05T10:19:08.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-05#2",
      "title": "Suivi réel de la livraison des emails, webhook et réconciliateur",
      "content_text": "Un mail accepté n'est plus considéré comme livré : une montre de livraison suit son sort, un refus remonte à l'owner et un registre est exposé au prompt. La livraison se réconcilie désormais par une passe périodique (plus de timers dans l'outil d'envoi), le webhook de la boîte mail pousse les verdicts (delivered/bounced/failed/...), et chaque boîte mail en production, y compris celle de l'agent maison, est bien abonnée.",
      "date_published": "2026-09-05T04:13:40.000Z",
      "date_modified": "2026-09-08T00:29:46.327Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-05",
        "first_at": "2026-09-05T01:30:59.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-05#3",
      "title": "@kami/identity-client : SDK unifié de reconnaissance d'identité",
      "content_text": "Nouveau paquet consolidant en un seul endroit la logique côté client de reconnaissance (web, mobile, voix) autour de cinq verbes : wire, storage, link, platforms, react. voice-client et l'ancien identity-client deviennent des portes de compatibilité qui ré-exportent le paquet.",
      "date_published": "2026-09-05T03:09:53.000Z",
      "date_modified": "2026-09-08T00:29:46.327Z",
      "tags": [
        "@kami/identity-client",
        "@kami/voice-client"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-05",
        "first_at": "2026-09-05T03:09:53.000Z",
        "packages": [
          "@kami/identity-client",
          "@kami/voice-client"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/repository-docs",
          "@kami/vibeworld",
          "@kami/world-server",
          "@kami/web"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-05#1",
      "title": "Dialogue Connect corrigé pour les pages sans agent",
      "content_text": "Sur /me, le dialogue Connect n'est plus restreint à l'agent par défaut de la session web : il propose les cibles de toute agent (agentId null envoyé), signale l'agent sur chaque tuile quand plusieurs sont présents, et n'affiche plus \"Sign out\" à un navigateur anonyme.",
      "date_published": "2026-09-04T22:58:14.000Z",
      "date_modified": "2026-09-08T00:29:46.327Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-05",
        "first_at": "2026-09-04T22:58:14.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs",
          "@kami/web"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-04#14",
      "title": "Le web génère son propre code de liaison de compte",
      "content_text": "Le site web peut désormais créer un code de liaison et proposer un bouton « Connecter » par plateforme, pré-remplissant /link CODE côté bot; la confirmation en deux temps du bot reste inchangée. L'outil initiate_account_link pointe désormais vers ce bouton avec les vraies plateformes de l'agent au lieu d'un handle codé en dur.",
      "date_published": "2026-09-04T20:34:41.000Z",
      "date_modified": "2026-09-08T00:27:51.029Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-04",
        "first_at": "2026-09-04T20:34:41.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/repository-docs",
          "@kami/web"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-04#13",
      "title": "La confiance d'un visage suivi ne retombe plus à zéro",
      "content_text": "Un visage suivi sans recalcul d'embedding affichait une similarité à 0 alors que le nom restait correct. La dernière similarité mesurée est désormais conservée et rafraîchie sur les images avec embedding.",
      "date_published": "2026-09-04T13:48:47.000Z",
      "date_modified": "2026-09-08T00:27:51.029Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-04",
        "first_at": "2026-09-04T13:48:47.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs",
          "@kami/face-recognition"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-04#12",
      "title": "L'agent perçoit une présence physique et peut la questionner",
      "content_text": "Les visages vus par le corps de l'agent deviennent une présence dans la scène de l'appel, notifiée via le port de perception. De nouveaux outils who_is_here, introduce_person et verify_claim permettent à l'agent de nommer qui est présent, d'introduire un inconnu et de vérifier une identité revendiquée à partir des données.",
      "date_published": "2026-09-04T12:46:32.000Z",
      "date_modified": "2026-09-08T00:27:51.029Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-04",
        "first_at": "2026-09-04T12:46:32.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-04#11",
      "title": "Sessions de suivi facial exposées via /admin/vision",
      "content_text": "Un dispositif externe (caméra, téléphone, robot) peut désormais ouvrir une session de suivi HTTP pour un agent, envoyer des images et recevoir les identités reconnues, sans jamais transmettre d'embeddings ni de recadrages bruts. Fonctionnalité réservée à l'opérateur et masquée derrière un indicateur.",
      "date_published": "2026-09-04T12:33:13.000Z",
      "date_modified": "2026-09-08T00:27:51.029Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-04",
        "first_at": "2026-09-04T12:33:13.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-04#10",
      "title": "Suivi de visages en direct comme session du robot",
      "content_text": "Un nouveau worker fait tourner la boucle de suivi (détection, filtrage qualité, suivi spatial, identités provisoires) sur une session amorcée avec les personnes connues de l'agent; un inconnu ne rejoint le graphe que lorsqu'il est présenté.",
      "date_published": "2026-09-04T11:26:13.000Z",
      "date_modified": "2026-09-08T00:27:51.029Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-04",
        "first_at": "2026-09-04T11:26:13.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-04#9",
      "title": "Chaque ancre de visage naît avec sa photo recadrée",
      "content_text": "Le worker de vision découpe désormais un recadrage 112x112 du visage détecté, stocké comme média confidentiel lié à l'ancre en base, permettant de revoir et recalculer chaque visage appris.",
      "date_published": "2026-09-04T11:08:39.000Z",
      "date_modified": "2026-09-08T00:27:51.029Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-04",
        "first_at": "2026-09-04T11:08:39.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-04#8",
      "title": "Les visages reconnus renforcent automatiquement leur mémoire",
      "content_text": "Une reconnaissance à haute confiance ajoute une nouvelle ancre « observée » pour la personne, sous garde de qualité, de diversité et de plafond, sans jamais faire de purger les ancres déclarées. Une reconnaissance de confiance moyenne est signalée comme une supposition à confirmer, sans rien apprendre automatiquement.",
      "date_published": "2026-09-04T10:52:12.000Z",
      "date_modified": "2026-09-08T00:27:51.029Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-04",
        "first_at": "2026-09-04T10:52:12.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-04#7",
      "title": "identify_people répond à n'importe quelle question spatiale",
      "content_text": "L'outil rapporte désormais la position de chaque visage sur une grille 3x3 et ses coordonnées, en plus de gauche/droite, permettant de répondre à des questions comme « et celui en haut ? ».",
      "date_published": "2026-09-04T09:34:19.000Z",
      "date_modified": "2026-09-08T00:27:51.029Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-04",
        "first_at": "2026-09-04T09:34:19.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-04#6",
      "title": "Fusion : adoption du meilleur nom + couverture code-auth étendue",
      "content_text": "Le survivant d'une fusion d'entités adopte désormais le nom le plus lisible disponible (jamais un simple numéro) au lieu de garder un nom numérique alors qu'un nom réel existait sur un alias. La couverture du garde-fou de fusion est étendue aux colonnes du flux d'authentification par code, y compris les deux côtés des liens en attente.",
      "date_published": "2026-09-04T02:07:55.000Z",
      "date_modified": "2026-09-08T00:27:51.029Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-04",
        "first_at": "2026-09-04T02:07:55.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-04#5",
      "title": "La fusion d'entités migre toutes les colonnes liées à une personne",
      "content_text": "mergeEntities migre désormais aussi les préférences visuelles, embeddings de visage, attributs, sessions, jetons de lien, agenda et propriété d'agent lors d'une fusion, au lieu d'énumérer les tables à la main. Une migration répare les fusions passées et un garde-fou fait échouer les tests si une future colonne personne n'est pas classée.",
      "date_published": "2026-09-04T01:17:47.000Z",
      "date_modified": "2026-09-08T00:27:51.029Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-04",
        "first_at": "2026-09-04T01:17:47.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-04#4",
      "title": "Le backfill apprend les visages déjà connus du graphe",
      "content_text": "Un passage borné (au démarrage puis quotidien) apprend les photos de profil des membres des salons d'un agent selon le même filtre qualité que les autres apprentissages, puis apprend aussi les anciennes déclarations de visage antérieures au mécanisme d'apprentissage automatique. Les visages déjà appris ou déjà refusés ne sont pas retraités inutilement.",
      "date_published": "2026-09-04T00:33:43.000Z",
      "date_modified": "2026-09-08T00:27:51.029Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-04",
        "first_at": "2026-09-03T23:57:56.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-04#3",
      "title": "Vérification silencieuse des visages sur les images générées",
      "content_text": "Après chaque image_gen référençant des personnes, chaque visage rendu est comparé au visage de référence et le score est journalisé, sans jamais bloquer ni retarder l'envoi. Le seuil est calibré pour mesurer, la décision de bloquer viendra plus tard.",
      "date_published": "2026-09-03T23:46:47.000Z",
      "date_modified": "2026-09-08T00:27:51.029Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-04",
        "first_at": "2026-09-03T23:46:47.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-04#2",
      "title": "Correctifs de déploiement pour faire tourner la reconnaissance faciale",
      "content_text": "Le worker de vision plantait au démarrage: le paquet face-recognition manquait dans le contexte de build (sparse-checkout incomplet) puis l'image alpine/musl ne supportait pas les binaires glibc d'onnxruntime. Le runner passe à debian slim et le build échoue désormais si un lien d'espace de travail est cassé.",
      "date_published": "2026-09-03T23:17:29.000Z",
      "date_modified": "2026-09-08T00:27:51.029Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-04",
        "first_at": "2026-09-03T23:00:04.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-04#1",
      "title": "identify_people nomme les personnes sur une photo, sans jamais inventer",
      "content_text": "Le nouvel outil identify_people répond par visage: personne reconnue avec son handle et sa confiance, ou refus honnête si inconnue. Une personne connue par ailleurs mais absente du salon est rapportée comme un inconnu, jamais démasquée.",
      "date_published": "2026-09-03T22:41:59.000Z",
      "date_modified": "2026-09-08T00:27:51.029Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-04",
        "first_at": "2026-09-03T22:41:59.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-03#29",
      "title": "Reconnaissance faciale entre dans le graphe d'entités, en sourdine",
      "content_text": "Une nouvelle capacité de reconnaissance faciale est intégrée au daemon derrière le flag FACE_RECOGNITION: un cache d'embeddings par visage (migration v137), un worker de vision détaché à la demande, et un couplage avec set_person_visual / set_my_visual pour apprendre un visage lors du pinning d'une photo. La mémoire des visages est isolée par agent, sans mutualisation pour l'instant.",
      "date_published": "2026-09-03T21:48:07.000Z",
      "date_modified": "2026-09-08T00:26:51.599Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-03",
        "first_at": "2026-09-03T21:48:07.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/repository-docs",
          "@kami/face-recognition"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-03#28",
      "title": "Le niveau unrestricted génère avec Qwen Image 3",
      "content_text": "Le niveau de contenu unrestricted utilise désormais Qwen Image 3 via la file fal comme modèle par défaut, avec un coût mesuré au banc. Un statut 4xx de la file fal interrompt désormais l'attente immédiatement.",
      "date_published": "2026-09-03T20:51:37.000Z",
      "date_modified": "2026-09-08T00:26:51.599Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "changed",
        "scope": "agent",
        "window": "2026-09-03",
        "first_at": "2026-09-03T20:51:37.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-03#27",
      "title": "Les doublons WhatsApp lid/téléphone se fusionnent automatiquement",
      "content_text": "Le worker WhatsApp apprend désormais la correspondance lid-téléphone et fusionne les deux entités d'une même personne, ou lie l'alias si seule l'entité lid existe, sans jamais fusionner par simple ressemblance de nom. Un rattrapage borné traite les alias lid orphelins à chaque reconnexion, corrigeant la racine de l'incident des identités dédoublées.",
      "date_published": "2026-09-03T20:17:47.000Z",
      "date_modified": "2026-09-08T00:26:51.599Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-03",
        "first_at": "2026-09-03T20:17:47.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-03#26",
      "title": "/rating: le niveau de contenu se règle par commande admin",
      "content_text": "Le niveau de contenu appartient désormais au salon (chats.content_rating), réglable par la commande admin /rating plutôt que par variable d'environnement, avec une page de réglages web équivalente. Chaque niveau a un modèle d'image par défaut mesuré au banc, remplaçable par override.",
      "date_published": "2026-09-03T18:09:01.000Z",
      "date_modified": "2026-09-08T00:26:51.599Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-03",
        "first_at": "2026-09-03T18:09:01.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/repository-docs",
          "@kami/web"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-03#25",
      "title": "Niveau de contenu safe/mature/unrestricted selon le salon",
      "content_text": "Un nouveau réglage de contenu (safe par défaut, mature, unrestricted) est résolu par salon puis par agent et injecté dans le prompt avec les limites dures de chaque niveau; le modèle d'image applique les paramètres de sécurité correspondants. Un banc de 10 modèles d'image mesure qui respecte réellement chaque niveau.",
      "date_published": "2026-09-03T17:36:06.000Z",
      "date_modified": "2026-09-08T00:26:51.599Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-03",
        "first_at": "2026-09-03T17:36:06.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-03#24",
      "title": "Les identités WhatsApp dédoublées ne cassent plus les images",
      "content_text": "La résolution des sujets pour image_gen/video_gen déduplique désormais par nom affiché, empêchant qu'une même personne dédoublée en deux identités WhatsApp fasse tomber son propre nom dans les noms interdits à peindre. Les annotations [img #hash] insérées en ligne dans le texte sont aussi retirées mécaniquement.",
      "date_published": "2026-09-03T14:05:51.000Z",
      "date_modified": "2026-09-08T00:26:51.599Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-03",
        "first_at": "2026-09-03T14:05:51.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-03#23",
      "title": "Le niveau de confidentialité d'un média est lu à la sortie",
      "content_text": "Un média marqué SECRET ne peut plus jamais être re-posté, même vers son propre demandeur; une note vocale confidentielle d'une personne ne part que vers sa conversation d'origine ou sa propre DM. La route GET /media/:key refuse désormais un média SECRET en 404 plutôt que de le servir.",
      "date_published": "2026-09-03T13:35:23.000Z",
      "date_modified": "2026-09-08T00:26:51.599Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-03",
        "first_at": "2026-09-03T13:35:23.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-03#22",
      "title": "Le bloc DM du prompt applique la règle de divulgation",
      "content_text": "Les récapitulatifs de groupes cités en DM sont désormais réservés aux participants du groupe concerné, et les notes du speaker appliquent la même décision plutôt qu'une règle locale, owner n'étant plus considéré comme membre.",
      "date_published": "2026-09-03T12:56:23.000Z",
      "date_modified": "2026-09-08T00:26:51.599Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-03",
        "first_at": "2026-09-03T12:56:23.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-03#21",
      "title": "Les lectures d'un autre salon ne voyagent que vers une DM",
      "content_text": "Un contenu appartenant à un autre salon, obtenu via search_messages, get_memory, recall, list_group_members, get_group_info, introspect ou catch_me_up, ne peut désormais atteindre que la DM du membre prouvé du salon d'origine, jamais un autre groupe.",
      "date_published": "2026-09-03T12:25:33.000Z",
      "date_modified": "2026-09-08T00:26:51.599Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-03",
        "first_at": "2026-09-03T12:25:33.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-03#20",
      "title": "L'historique du prompt passe par la règle de divulgation",
      "content_text": "Le lecteur principal de l'historique, consulté à chaque tour, applique désormais la même décision de divulgation que le reste, notamment vers la timeline X où seuls les posts nés publics survivent. Les memos d'agent, mal étiquetés confidentiels en DM, sont recorrigés en CONTEXT_BOUND.",
      "date_published": "2026-09-03T11:54:11.000Z",
      "date_modified": "2026-09-08T00:26:51.599Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-03",
        "first_at": "2026-09-03T11:54:11.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-03#19",
      "title": "Un crash du worker Baileys nomme sa cause réelle",
      "content_text": "Le worker WhatsApp garde désormais la fin de sa sortie d'erreur et en extrait la ligne de cause, portée dans le statut failed, l'alerte DM à l'opérateur et l'événement envoyé au tracker d'erreurs, au lieu du seul message générique \"Too many crashes\".",
      "date_published": "2026-09-03T11:37:16.000Z",
      "date_modified": "2026-09-08T00:26:51.599Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "changed",
        "scope": "agent",
        "window": "2026-09-03",
        "first_at": "2026-09-03T11:37:16.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-03#18",
      "title": "Un attribut se confirme automatiquement par observation",
      "content_text": "Un email déclaré devient confirmé dès que l'entité l'a déjà utilisé ailleurs, ou dès qu'elle réutilise ensuite ce canal, sans écrivain manuel requis. La confirmation ne traverse jamais deux entités différentes: un alias porté par une autre entité est traité comme signal de fusion, pas de confirmation.",
      "date_published": "2026-09-03T11:37:12.000Z",
      "date_modified": "2026-09-08T00:26:51.599Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-03",
        "first_at": "2026-09-03T11:37:12.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-03#17",
      "title": "Le message de bienvenue et la fiche passent par le broker",
      "content_text": "Les notes cross-chat confidentielles de la personne qui invite ne sont plus citées en groupe, seulement en DM avec elle, le signal de familiarité restant visible. daveNotes est renommé agentNotes et les quatre sections de notes de get_user_info passent désormais par la même décision de divulgation.",
      "date_published": "2026-09-03T11:24:26.000Z",
      "date_modified": "2026-09-08T00:26:51.599Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-03",
        "first_at": "2026-09-03T11:24:26.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-03#16",
      "title": "Le suivi d'erreurs passe derrière un adaptateur, tempêtes contenues",
      "content_text": "Sentry est désormais isolé derrière une interface ErrorTracker interchangeable (sentry ou aucun), chargée à la demande, avec un pont depuis le logger. Une tempête d'exceptions à l'arrêt est désormais bornée: le puits console se retire au premier échec d'écriture et le tracker plafonne les événements par empreinte et par minute.",
      "date_published": "2026-09-03T11:16:50.000Z",
      "date_modified": "2026-09-08T00:26:51.599Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "changed",
        "scope": "agent",
        "window": "2026-09-03",
        "first_at": "2026-09-03T11:16:50.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-03#15",
      "title": "WhatsApp remarche: modules du worker copiés au build",
      "content_text": "Le Dockerfile ne copiait qu'un seul fichier du worker Baileys, laissant ses imports relatifs absents de l'image - la plateforme WhatsApp était en panne depuis 18h malgré un /health vert. Une garde statique au build refuse désormais l'image si un module de worker manque.",
      "date_published": "2026-09-03T11:03:24.000Z",
      "date_modified": "2026-09-08T00:26:51.599Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-03",
        "first_at": "2026-09-03T11:03:24.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-03#14",
      "title": "recall ne fuite plus le dossier global d'une personne",
      "content_text": "recall passait outre la règle de divulgation et servait le dossier confidentiel global d'une personne dans n'importe quel salon. Il applique désormais la même décision que le reste: le dossier global d'Alice ne sort qu'en DM avec Alice.",
      "date_published": "2026-09-03T10:54:14.000Z",
      "date_modified": "2026-09-08T00:26:51.599Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-03",
        "first_at": "2026-09-03T10:54:14.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-03#13",
      "title": "send_email résout le destinataire par la fiche, jamais composé",
      "content_text": "resolveEntityChannel résout un canal de contact (email, téléphone) depuis les alias observés puis les attributs confirmés ou déclarés, hors de la fenêtre de contexte du modèle - l'identifiant n'est jamais récité par l'agent. send_email refuse une adresse en clair inconnue du graphe sauf confirmation explicite qu'elle vient d'être dictée dans la conversation.",
      "date_published": "2026-09-03T10:38:52.000Z",
      "date_modified": "2026-09-08T00:26:51.599Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-03",
        "first_at": "2026-09-03T10:38:52.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-03#12",
      "title": "set_person_visual épingle une photo comme visage d'une personne",
      "content_text": "Un nouvel outil associe une photo du chat au visage d'une personne sous la même autorité à trois cercles que save_person_attribute, sans exiger la propriété de l'image. Les générations d'images et vidéos consomment immédiatement cette photo épinglée via resolveSubjectDetailed.",
      "date_published": "2026-09-03T10:21:09.000Z",
      "date_modified": "2026-09-08T00:26:51.599Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-03",
        "first_at": "2026-09-03T10:21:09.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-03#11",
      "title": "Nouvelle fiche personne unifiée avec attributs sourcés",
      "content_text": "get_user_info devient la fiche unique d'une entité: alias observés, attributs déclarés avec provenance complète (source, déclarant, date, confidentialité), chacun jugé par la règle de divulgation avant d'apparaître. save_person_attribute applique une autorité à trois cercles (soi, admin du lieu, owner).",
      "date_published": "2026-09-03T10:08:23.000Z",
      "date_modified": "2026-09-08T00:26:51.599Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-03",
        "first_at": "2026-09-03T10:08:23.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-03#10",
      "title": "Les photos de profil sont résolues par plateforme",
      "content_text": "L'ingestion des avatars WhatsApp est implémentée (elle renvoyait toujours null), et la résolution du visuel d'un chat privilégie désormais la photo de la plateforme du chat avant une photo globale venue d'une autre plateforme. video_gen et avatar_gen tracent aussi les noms non résolus pour éviter d'inventer un visage.",
      "date_published": "2026-09-03T09:11:11.000Z",
      "date_modified": "2026-09-08T00:26:51.599Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-03",
        "first_at": "2026-09-03T09:11:11.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-03#8",
      "title": "/machine affiche l'adresse stable en premier",
      "content_text": "La commande /machine met désormais en avant l'adresse stable kami.bot/<agent>/computer avant le lien signé temporaire, et la réponse est enregistrée dans l'historique des messages comme tout autre tour.",
      "date_published": "2026-09-03T07:28:21.000Z",
      "date_modified": "2026-09-08T00:26:51.599Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-03",
        "first_at": "2026-09-03T07:28:21.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-03#9",
      "title": "Un email est rapporté ACCEPTÉ, jamais reçu",
      "content_text": "Le reçu d'envoi d'email indique désormais que le fournisseur a accepté l'envoi, sans jamais affirmer qu'il a été reçu par le destinataire - un rebond peut survenir après ce succès apparent. La description de l'outil impose de copier l'adresse depuis la conversation, la mémoire ou la fiche, jamais de la composer.",
      "date_published": "2026-09-03T07:28:21.000Z",
      "date_modified": "2026-09-08T00:26:51.599Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-03",
        "first_at": "2026-09-03T07:28:21.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-03#7",
      "title": "Une panne d'authentification email alerte l'opérateur en DM",
      "content_text": "Un échec 401/403 sur l'envoi d'email bascule désormais le statut en needs_auth et déclenche une alerte DM au créateur, avec re-alerte horaire tant que le statut reste mauvais. Une rotation de clé suivie d'un redémarrage du daemon réinitialise ce statut.",
      "date_published": "2026-09-03T06:55:41.000Z",
      "date_modified": "2026-09-08T00:26:51.599Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-03",
        "first_at": "2026-09-03T06:55:41.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-03#6",
      "title": "Les lignes de pure notation et messages vidés ne partent plus",
      "content_text": "Une ligne composée uniquement d'une annotation entre crochets (ex. [video #hash delivered]) est désormais supprimée du texte envoyé, sans toucher au texte environnant. Un message entièrement vidé par ce nettoyage n'envoie plus aucune bulle sur aucun des trois canaux de sortie.",
      "date_published": "2026-09-03T01:08:43.000Z",
      "date_modified": "2026-09-08T00:26:51.599Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-03",
        "first_at": "2026-09-03T01:08:43.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-03#5",
      "title": "Un refus bad_params se corrige en silence, sans se raconter",
      "content_text": "Quand un spawn est refusé pour paramètres invalides, l'agent corrige désormais lui-même les paramètres et relance immédiatement, sans réciter l'erreur ni les noms de paramètres en chat. Le garde \"ne pas relancer\" reste réservé aux refus de quota, budget ou cycle.",
      "date_published": "2026-09-03T00:39:53.000Z",
      "date_modified": "2026-09-08T00:26:51.599Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-03",
        "first_at": "2026-09-03T00:39:53.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-03#4",
      "title": "video_gen compose d'abord une image d'ouverture unique",
      "content_text": "Avec des sujets, video_gen compose désormais une image fixe (firstFramePrompt, obligatoire) via le modèle image puis anime la vidéo à partir de cette image, le modèle image gérant mieux l'identité des personnages que le modèle vidéo. L'image est mécaniquement enveloppée pour rester un plan photographique unique, corrigeant un échec réel où un collage à plusieurs panneaux cassait l'identité du personnage.",
      "date_published": "2026-09-03T00:20:18.000Z",
      "date_modified": "2026-09-08T00:26:51.599Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-03",
        "first_at": "2026-09-02T23:56:12.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-03#3",
      "title": "Les médias naissent avec leur salon d'origine",
      "content_text": "Chaque média porte désormais son chat_id dès l'ingestion, et le résultat des outils affiche le nom court natif #hash au lieu de l'UUID complet. my:last et la référence par préfixe #hash résolvent désormais correctement les artefacts nés d'une exécution machine, tout en restant invisibles depuis un autre salon.",
      "date_published": "2026-09-02T23:34:13.000Z",
      "date_modified": "2026-09-08T00:26:51.599Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-03",
        "first_at": "2026-09-02T23:34:13.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-03#1",
      "title": "analyze_media télécharge désormais les URLs directes",
      "content_text": "analyze_media accepte maintenant des URLs http(s) directes (ex. lien CDN Discord), avec le même garde-fou anti-SSRF que fetch_page et une détection du type par en-tête puis par extension. Auparavant l'agent inventait des refus (CORS, expiration, 422) faute de pouvoir ingérer un lien.",
      "date_published": "2026-09-02T22:41:14.000Z",
      "date_modified": "2026-09-08T00:26:51.599Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-03",
        "first_at": "2026-09-02T22:41:14.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-03#2",
      "title": "Les handles internes de média ne s'affichent plus en chat",
      "content_text": "La règle de prose empêche désormais l'agent de réciter des identifiants internes de médias (#hash) aux humains, notation illisible et non cliquable. Ces handles restent légitimes dans les paramètres d'outils comme media_forward.",
      "date_published": "2026-09-02T22:41:14.000Z",
      "date_modified": "2026-09-08T00:26:51.599Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-03",
        "first_at": "2026-09-02T22:41:14.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-02#29",
      "title": "L'agent récite son adresse et ses coordonnées sans les inventer",
      "content_text": "Le prompt système inclut désormais une section \"## Your computer's address\" nommant l'adresse stable de la machine, pour éviter que l'agent fabrique une URL plausible quand la question est posée à froid. L'audit étendu couvre aussi la ligne Web de \"Where I am\", le nom de la machine, les liens d'entrée des apps publiées et le rappel de ne jamais citer le spend de mémoire.",
      "date_published": "2026-09-02T21:57:29.000Z",
      "date_modified": "2026-09-08T00:24:31.066Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-02",
        "first_at": "2026-09-02T21:27:06.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-02#28",
      "title": "Liste unique des types de tâches pour le prompt et l'éval",
      "content_text": "Le daemon expose désormais une seule énumération des task-kinds (kinds/all.ts), consommée par le boot, le serveur d'éval et les deux harnais live. Corrige les spawns d'outils avec des paramètres inventés, causés par des harnais qui ne recevaient aucun task-kind.",
      "date_published": "2026-09-02T20:31:30.000Z",
      "date_modified": "2026-09-08T00:24:31.066Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-02",
        "first_at": "2026-09-02T20:31:30.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-02#27",
      "title": "Adresse stable kami.bot/<agent>/computer pour l'ordinateur de l'agent",
      "content_text": "Chaque agent obtient une adresse publique qui ne meurt jamais, listant ses machines et les liens durables de ses apps publiées, sans écran ni fichiers ni identifiants. Cette adresse devient directement la page machine en mode public, et l'agent la connaît désormais lui-même: elle est proposée comme repère durable dans les résultats d'outil, la description d'outil et /machine.",
      "date_published": "2026-09-02T19:10:43.000Z",
      "date_modified": "2026-09-08T00:24:31.066Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-02",
        "first_at": "2026-09-02T18:04:17.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs",
          "@kami/web"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-02#26",
      "title": "Les liens d'écran distinguent session courte et partage volontaire",
      "content_text": "Les liens de session (frame/stream/relais) expirent désormais en 15 minutes au lieu d'un jour, sans gêne pour le panel qui se réarme automatiquement. Le bouton de partage utilise un registre distinct à 24h, pensé pour une URL collée dans un lecteur externe.",
      "date_published": "2026-09-02T17:12:11.000Z",
      "date_modified": "2026-09-08T00:24:31.066Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "changed",
        "scope": "agent",
        "window": "2026-09-02",
        "first_at": "2026-09-02T17:12:11.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/web"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-02#25",
      "title": "Le tarif de haiku était sous-facturé de 20%, corrigé",
      "content_text": "Chaque appel à haiku-4.5 depuis le changement de modèle était compté 20% trop bas; corrigé, avec ajout des tarifs manquants de sonnet-5 et opus-5.",
      "date_published": "2026-09-02T17:01:28.000Z",
      "date_modified": "2026-09-08T00:24:31.066Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-02",
        "first_at": "2026-09-02T17:01:28.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-02#23",
      "title": "L'API REST se charge après le démarrage du serveur",
      "content_text": "La surface API (Hono, routes, zod/openapi) ne pèse plus sur le chemin de boot; /api répond un 503 honnête avec Retry-After pendant les 1 à 2 secondes de son chargement différé. Les webhooks Telegram ne sont pas concernés par ce délai.",
      "date_published": "2026-09-02T16:32:34.000Z",
      "date_modified": "2026-09-08T00:24:31.066Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "changed",
        "scope": "agent",
        "window": "2026-09-02",
        "first_at": "2026-09-02T16:32:34.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-02#24",
      "title": "Le tarif d'un modèle suit désormais son nom automatiquement",
      "content_text": "Le suffixe #effort:x est ignoré pour la tarification, les modèles Claude datés résolvent automatiquement le tarif de leur famille, et les modèles OpenRouter se tarifient depuis leur catalogue public mis en cache 24h. Un modèle non résolu garde un avertissement visible et un repli au tarif sonnet plutôt qu'une dérive silencieuse.",
      "date_published": "2026-09-02T15:39:21.000Z",
      "date_modified": "2026-09-08T00:24:31.066Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-02",
        "first_at": "2026-09-02T15:39:21.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-02#22",
      "title": "Une box recyclée retrouve automatiquement son écran",
      "content_text": "L'installation du gardien relance désormais aussi l'affichage persistant (Xvfb) au même titre que le son, au lieu de ne le documenter que dans le manuel. L'opération est idempotente et sans risque pour un écran déjà actif.",
      "date_published": "2026-09-02T14:04:36.000Z",
      "date_modified": "2026-09-08T00:24:31.066Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-02",
        "first_at": "2026-09-02T14:04:36.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-02#21",
      "title": "Les sous-systèmes lourds se chargent à la demande, entrée à 2,5 Mo",
      "content_text": "pdfjs, discord et baileys quittent le chemin de démarrage et deviennent des chunks chargés à la demande, faisant chuter le bundle d'entrée de 15 à 2,5 Mo. Un chunk manquant ou cassé est désormais détecté à la construction de l'image et en CI.",
      "date_published": "2026-09-02T13:49:02.000Z",
      "date_modified": "2026-09-08T00:24:31.066Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "changed",
        "scope": "agent",
        "window": "2026-09-02",
        "first_at": "2026-09-02T13:49:02.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-02#20",
      "title": "search_messages et recall retrouvent enfin les vieux messages",
      "content_text": "Un bug empêchait de retrouver des faits situés au-delà de la fenêtre récente d'un chat; corrigé à l'occasion de la mise en place de scénarios d'évaluation long-contexte.",
      "date_published": "2026-09-02T13:34:27.000Z",
      "date_modified": "2026-09-08T00:24:31.066Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-02",
        "first_at": "2026-09-02T13:34:27.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-02#19",
      "title": "Bun reste en 1.3.11, arrêt raccourci à 3 secondes",
      "content_text": "Bun 1.4.0 évalue le bundle 30 à 40% plus lentement que 1.3.11 sur la machine réelle; la version reste donc figée. Le kill_timeout du déploiement passe de 5 à 3 secondes, aligné sur l'arrêt forcé.",
      "date_published": "2026-09-02T12:59:35.000Z",
      "date_modified": "2026-09-08T00:24:31.066Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "changed",
        "scope": "agent",
        "window": "2026-09-02",
        "first_at": "2026-09-02T12:59:35.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-02#18",
      "title": "Les suites vidéo ne partent plus d'une frame noire",
      "content_text": "Quand la dernière frame d'un clip est (quasi) uniforme (noir, blanc, carton de couleur), l'extraction remonte dans le clip pour trouver une vraie dernière frame avant de générer la suite. Actif par défaut, avec un repli honnête si aucune frame valide n'est trouvée.",
      "date_published": "2026-09-02T12:46:46.000Z",
      "date_modified": "2026-09-08T00:24:31.066Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-02",
        "first_at": "2026-09-02T12:46:46.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-02#17",
      "title": "/health répond dès la première seconde via un relais léger",
      "content_text": "Un petit processus auxiliaire répond immédiatement sur /health pendant que le vrai serveur démarre, permettant au proxy Fly de router plus tôt; il s'efface dès que le vrai serveur écoute. La disponibilité réelle continue d'être validée par /health/ready.",
      "date_published": "2026-09-02T12:30:24.000Z",
      "date_modified": "2026-09-08T00:24:31.066Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "changed",
        "scope": "agent",
        "window": "2026-09-02",
        "first_at": "2026-09-02T12:30:24.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-02#16",
      "title": "Un registre du travail en cours évite les tâches refaites en double",
      "content_text": "L'agent voit désormais dans son prompt les tâches déjà en cours d'exécution (nature, référence, statut, âge) au lieu de ne rien voir et de les relancer par erreur pendant qu'un humain parle. La consigne associée interdit de relancer ou réannoncer un travail déjà visible.",
      "date_published": "2026-09-02T12:24:02.000Z",
      "date_modified": "2026-09-08T00:24:31.066Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-02",
        "first_at": "2026-09-02T12:24:02.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-02#15",
      "title": "L'arrêt du serveur est borné à 3s, les migrations ont leur repère",
      "content_text": "L'arrêt ferme désormais de force les connexions longues (SSE/WS) avec un minuteur de secours de 3 secondes plutôt que d'attendre indéfiniment. Les migrations de base de données obtiennent leur propre marqueur de boot pour identifier une migration lourde dès son premier passage.",
      "date_published": "2026-09-02T12:20:52.000Z",
      "date_modified": "2026-09-08T00:24:31.066Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "changed",
        "scope": "agent",
        "window": "2026-09-02",
        "first_at": "2026-09-02T12:20:52.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-02#14",
      "title": "Le budget de démarrage devient un contrat surveillé",
      "content_text": "Chaque étape de boot rapporte désormais sa mémoire, une étape de plus de 5 secondes est journalisée en alerte, et un dépassement de 45 secondes déclenche une alerte opérationnelle dès le premier déploiement. Le bundle est aussi minifié davantage sans perdre la lisibilité des traces de pile.",
      "date_published": "2026-09-02T12:10:37.000Z",
      "date_modified": "2026-09-08T00:24:31.066Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "changed",
        "scope": "agent",
        "window": "2026-09-02",
        "first_at": "2026-09-02T12:10:37.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-02#13",
      "title": "Un tour, un message: l'ack fusionne avec le texte",
      "content_text": "Quand le modèle écrit la même phrase dans le texte de réponse et dans l'ack d'un spawn, les deux n'envoient plus deux messages identiques à quelques millisecondes d'écart. L'ack redondant est supprimé et un ack nouveau voyage désormais dans le même message que le texte.",
      "date_published": "2026-09-02T12:04:48.000Z",
      "date_modified": "2026-09-08T00:24:31.066Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-02",
        "first_at": "2026-09-02T12:04:48.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-02#12",
      "title": "Le graphe de modules est transpilé une fois, à la construction de l'image",
      "content_text": "Chaque démarrage retranspilait 2554 modules, ce qui coûtait 9,4 secondes; c'est désormais fait une seule fois au build de l'image Docker. Le temps de boot chute nettement selon les mesures locales.",
      "date_published": "2026-09-02T11:56:10.000Z",
      "date_modified": "2026-09-08T00:24:31.066Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "changed",
        "scope": "agent",
        "window": "2026-09-02",
        "first_at": "2026-09-02T11:56:10.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-02#9",
      "title": "Les runs ouverts sont retrouvés par index SQL, plus par scan JS",
      "content_text": "La détection des tâches ouvertes relisait et reparsait en JavaScript la charge utile de chaque événement, coûtant environ 13 secondes par passage et un pic mémoire au boot. Un index partiel SQL et une requête couvrante répondent désormais en quelques centaines de millisecondes, sans lecture disque à froid.",
      "date_published": "2026-09-02T10:17:01.000Z",
      "date_modified": "2026-09-08T00:24:31.066Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "changed",
        "scope": "agent",
        "window": "2026-09-02",
        "first_at": "2026-09-02T09:49:42.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-02#11",
      "title": "Les erreurs racontées en chat ne citent plus les fournisseurs",
      "content_text": "Le modèle reçoit désormais une ligne par catégorie d'erreur (panne, timeout, saturation, config, contenu refusé) avec la cause humaine extraite, jamais le nom du provider ni sa stack technique. Un renvoi vers la référence de tâche garde la vérité complète disponible ailleurs.",
      "date_published": "2026-09-02T09:49:12.000Z",
      "date_modified": "2026-09-08T00:24:31.066Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "changed",
        "scope": "agent",
        "window": "2026-09-02",
        "first_at": "2026-09-02T09:49:12.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-02#10",
      "title": "La vidéo par référence bascule sur image-to-video en cas de panne",
      "content_text": "Quand l'endpoint reference-to-video répond un 504 précis, une seule tentative de repli en image-to-video est faite avec la première image de référence, et l'échec double remonte les deux statuts. Un 504 sans le marqueur précis ne déclenche pas ce repli.",
      "date_published": "2026-09-02T09:33:36.000Z",
      "date_modified": "2026-09-08T00:24:31.066Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-02",
        "first_at": "2026-09-02T09:33:36.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-02#8",
      "title": "Vérification santé du proxy accélérée, garde-fou OOM au boot",
      "content_text": "L'intervalle de vérification santé du proxy Fly passe de 15 à 3 secondes, réduisant le temps mort avant qu'un déploiement devienne joignable. Un espace swap protège la machine contre le pic mémoire du premier boot après une optimisation récente.",
      "date_published": "2026-09-02T09:30:37.000Z",
      "date_modified": "2026-09-08T00:24:31.066Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "changed",
        "scope": "agent",
        "window": "2026-09-02",
        "first_at": "2026-09-02T09:30:37.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-02#7",
      "title": "La réconciliation des jobs ne bloque plus /health au démarrage",
      "content_text": "La récupération des tâches interrompues tournait 37 secondes avant que le serveur ne réponde; elle s'exécute désormais en arrière-plan pendant que le serveur démarre, sans changer les garanties de sécurité de la reprise.",
      "date_published": "2026-09-02T09:17:54.000Z",
      "date_modified": "2026-09-08T00:24:31.066Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "changed",
        "scope": "agent",
        "window": "2026-09-02",
        "first_at": "2026-09-02T09:17:54.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-02#5",
      "title": "Fini le port spécial: publier n'importe quel port libre",
      "content_text": "Le manuel de la machine n'impose plus un port unique attendu; n'importe quel port libre peut être publié, et kami-app list fait foi de l'assignation réelle.",
      "date_published": "2026-09-02T08:57:14.000Z",
      "date_modified": "2026-09-08T00:24:31.066Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "changed",
        "scope": "agent",
        "window": "2026-09-02",
        "first_at": "2026-09-02T08:57:14.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-02#6",
      "title": "Vérification automatique et gratuite à chaque démarrage d'app",
      "content_text": "kami-app publish/start/restart vérifie désormais lui-même le résultat (process vivant, port en écoute, exceptions dans le log, clic HTTP) et imprime la première erreur dans le résultat de la commande, sans coût de raisonnement supplémentaire.",
      "date_published": "2026-09-02T08:57:14.000Z",
      "date_modified": "2026-09-08T00:24:31.066Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-02",
        "first_at": "2026-09-02T08:57:14.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-02#4",
      "title": "Les apps publiées deviennent des liens publics durables",
      "content_text": "Publier une app expose désormais directement son port au public, sans passer par la porte visiteur, avec un lien qui n'expire jamais. Trois trous du premier jour ont été corrigés: une box injoignable ne perd plus ses routes d'app, l'entrée publique répare le bail expiré de l'app demandée, et l'agent poste le lien durable kami.bot plutôt que le hostname brut.",
      "date_published": "2026-09-02T08:29:17.000Z",
      "date_modified": "2026-09-08T00:24:31.066Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-02",
        "first_at": "2026-09-02T08:14:29.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-02#3",
      "title": "La ligne de lien machine ne s'affiche plus qu'une fois par semaine",
      "content_text": "La fenêtre d'apparition de la ligne machine est désormais persistée en base (7 jours) au lieu de vivre en mémoire, où elle était remise à zéro à chaque déploiement. Elle ne s'affiche plus non plus sur un message qui contient déjà un lien machine ou app.",
      "date_published": "2026-09-01T23:44:00.000Z",
      "date_modified": "2026-09-08T00:24:31.066Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-02",
        "first_at": "2026-09-01T23:44:00.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-02#2",
      "title": "La limite du flux d'écran suit la progression, plus la durée",
      "content_text": "Le plafond fixe de 55 secondes coupait les flux HLS suivis normalement toutes les 70 secondes environ. Il ne coupe désormais que les connexions fantômes qui ne lisent plus, un flux réellement consommé pouvant vivre aussi longtemps que son socket.",
      "date_published": "2026-09-01T23:13:37.000Z",
      "date_modified": "2026-09-08T00:24:31.066Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-02",
        "first_at": "2026-09-01T23:13:37.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-02#1",
      "title": "Le flux h264 ne reste plus silencieux au démarrage",
      "content_text": "Le gardien maintient une horloge audio active (un parec permanent sur le monitor) pour empêcher l'encodeur h264 de démarrer sans jamais écrire d'en-tête. La réponse HTTP attend désormais le premier octet réel avant de répondre 200, avec un retry puis un vrai 502 en cas d'échec.",
      "date_published": "2026-09-01T22:25:02.000Z",
      "date_modified": "2026-09-08T00:24:31.066Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-02",
        "first_at": "2026-09-01T22:25:02.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-01#32",
      "title": "Le flux h264 devient chunked, plus de blocage proxy",
      "content_text": "Le flux vidéo/mp4 déclare désormais Transfer-Encoding: chunked au lieu d'une réponse close-delimited qu'un proxy strict pouvait bufferiser indéfiniment ; MJPEG reste inchangé.",
      "date_published": "2026-09-01T21:40:17.000Z",
      "date_modified": "2026-09-08T00:22:03.083Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-01",
        "first_at": "2026-09-01T21:40:17.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-01#31",
      "title": "Protocole, description et lien partagé pour chaque app",
      "content_text": "La liste des apps ne montre plus que ce qu'une audience peut ouvrir (HTTP) ou ce que l'agent a explicitement déclaré ; un port TCP brut non déclaré disparaît de la liste. Le manifeste gagne --desc, affiché sur la page, et la surface de partage de l'agent liste désormais chaque app publiée avec son propre lien, déplacée dans un module sans cycle d'import pour rester importable par l'évaluation.",
      "date_published": "2026-09-01T20:56:25.000Z",
      "date_modified": "2026-09-08T00:22:03.083Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-01",
        "first_at": "2026-09-01T20:44:02.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs",
          "@kami/web"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-01#30",
      "title": "Verbe d'activation: publier une app par son port",
      "content_text": "POST /machines/:ref/apps/publish/:port permet de promouvoir une app détectée en app publiée : le titre et le manifeste sont dérivés du process écoutant, et l'URL suit au prochain rafraîchissement. Chaque ligne de la liste explique désormais pourquoi une app n'a pas encore de lien.",
      "date_published": "2026-09-01T20:14:58.000Z",
      "date_modified": "2026-09-08T00:22:03.083Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-01",
        "first_at": "2026-09-01T20:14:58.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs",
          "@kami/web"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-01#29",
      "title": "Le keepalive entretient aussi les baux de route des apps",
      "content_text": "Le keepalive (10 min) réinjecte désormais les slugs d'apps tenues dans ensureAppRoutes pour rafraîchir et réparer le credential D6, sans jamais créer de nouvelle route.",
      "date_published": "2026-09-01T19:16:12.000Z",
      "date_modified": "2026-09-08T00:22:03.083Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "changed",
        "scope": "agent",
        "window": "2026-09-01",
        "first_at": "2026-09-01T19:16:12.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-01#28",
      "title": "Les routes d'app portent aussi le credential D6",
      "content_text": "Sous DOMANI_UPSTREAM_AUTH, une route d'app sans le Bearer d'origine servait la page de connexion du fournisseur ; le credential est désormais posé à la création et réparé pour les routes tenues sans credential après un redémarrage.",
      "date_published": "2026-09-01T19:08:30.000Z",
      "date_modified": "2026-09-08T00:22:03.083Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-01",
        "first_at": "2026-09-01T19:08:30.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-01#27",
      "title": "Un hostname par app publiée (F18)",
      "content_text": "Chaque app déclarée en cours d'exécution reçoit désormais <machine-label>--<slug>.kami.build ; le gardien démultiplexe par Host, et les routes par app sont créées, rafraîchies et abandonnées selon le même cycle que les routes machine.",
      "date_published": "2026-09-01T18:55:24.000Z",
      "date_modified": "2026-09-08T00:22:03.083Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-01",
        "first_at": "2026-09-01T18:55:24.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-01#26",
      "title": "Section Apps de la page machine: lignes cliquables, vignettes",
      "content_text": "La liste des apps devient une vraie Section avec chevron et compteur, chaque ligne cliquable ouvrant l'URL publique, chaque app affichant une vignette (icône fournie ou glyphe généré déterministe). L'historique 'précédemment servi' passe derrière un bouton Show/Hide.",
      "date_published": "2026-09-01T18:14:20.000Z",
      "date_modified": "2026-09-08T00:22:03.083Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-01",
        "first_at": "2026-09-01T18:14:20.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/web"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-01#25",
      "title": "Credential d'origine ferme la box (D6)",
      "content_text": "Quand DOMANI_UPSTREAM_AUTH est actif, le runner pose un Authorization Bearer sur la route et garde la box en état 'sprite' plutôt que 'public' ; en cas de refus domani, la box reste publique comme avant.",
      "date_published": "2026-09-01T18:12:20.000Z",
      "date_modified": "2026-09-08T00:22:03.083Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-01",
        "first_at": "2026-09-01T18:12:20.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-01#24",
      "title": "Le test du belt ne signale plus un faux rouge",
      "content_text": "Le rung d'évaluation (8) est corrigé pour juger ce que le gardien promet réellement (vérification par appel direct), et le runner se re-arme par rotation de secret plutôt que par suppression/recréation.",
      "date_published": "2026-09-01T18:03:27.000Z",
      "date_modified": "2026-09-08T00:22:03.083Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-01",
        "first_at": "2026-09-01T18:03:27.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-01#23",
      "title": "Le daemon retient les routes machine après redémarrage",
      "content_text": "Les routes machine sont désormais mémorisées (machine_routes) et re-affirmées au boot, corrigeant le cas où la première page après un déploiement répondait 'pas de route' alors qu'elle vivait encore côté domani.",
      "date_published": "2026-09-01T17:16:16.000Z",
      "date_modified": "2026-09-08T00:22:03.083Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-01",
        "first_at": "2026-09-01T17:16:16.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-01#22",
      "title": "Verbes opérateur sur les apps: start/stop/restart/list",
      "content_text": "POST /machines/:ref/apps/:slug/start|stop|restart, protégés par la porte opérateur, passent par kami-app sur la box. GET /machines/:ref/apps est exposé sous signature machine ; la page web n'a pas encore de boutons pour ces verbes.",
      "date_published": "2026-09-01T16:08:02.000Z",
      "date_modified": "2026-09-08T00:22:03.083Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-01",
        "first_at": "2026-09-01T16:08:02.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-01#21",
      "title": "Le relais tire le flux vidéo à la demande",
      "content_text": "Le cycle de vie du broadcast (start/stop côté box) est retiré : MediaMTX tire désormais le flux h264 depuis le daemon via /relay-pull/<token>, ce qui maintient la box éveillée et rend le démarrage/arrêt automatique au premier et dernier spectateur. GET /broadcast annonce désormais des URLs de visionnage à la demande.",
      "date_published": "2026-09-01T16:04:34.000Z",
      "date_modified": "2026-09-08T00:22:03.083Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "changed",
        "scope": "agent",
        "window": "2026-09-01",
        "first_at": "2026-09-01T16:04:34.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-01#20",
      "title": "La carte de lien nomme la machine, sa salle et ses apps",
      "content_text": "La carte partagée d'une machine (og:image pour Telegram et autres) affiche désormais son nom lisible, l'agent, la salle et les apps vues en écoute, au lieu d'un libellé générique.",
      "date_published": "2026-09-01T15:56:38.000Z",
      "date_modified": "2026-09-08T00:22:03.083Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-01",
        "first_at": "2026-09-01T15:56:38.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs",
          "@kami/web"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-01#19",
      "title": "kami-app : superviseur qui fait survivre les apps aux reboots",
      "content_text": "Un script kami-app (publish, start, stop, restart, remove, list, reconcile) gère l'état désiré des apps sur disque persistant. Un superviseur relance les apps manquantes à intervalle régulier et affiche honnêtement une app publiée dont le processus est mort.",
      "date_published": "2026-09-01T15:45:00.000Z",
      "date_modified": "2026-09-08T00:22:03.083Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-01",
        "first_at": "2026-09-01T15:45:00.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs",
          "@kami/web"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-01#18",
      "title": "Noms de machine lisibles (ex: d-amber-fox-river.kami.build)",
      "content_text": "Les hostnames de machine passent d'un identifiant illisible en base64 à trois mots déterministes tirés d'une banque de 420 mots. Les anciens liens meurent avec leur bail de 24 h.",
      "date_published": "2026-09-01T15:23:20.000Z",
      "date_modified": "2026-09-08T00:22:03.083Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "changed",
        "scope": "agent",
        "window": "2026-09-01",
        "first_at": "2026-09-01T15:23:20.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-01#17",
      "title": "Mémoire des apps de la machine (première/dernière vue)",
      "content_text": "Une nouvelle table enregistre par app la première et dernière fois vue, sa commande, son titre et son langage, permettant à une box recyclée de connaître son passé. La page machine affiche désormais un historique des apps qui ne tournent plus.",
      "date_published": "2026-09-01T15:11:17.000Z",
      "date_modified": "2026-09-08T00:22:03.083Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-01",
        "first_at": "2026-09-01T15:11:17.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs",
          "@kami/web"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-01#16",
      "title": "Relais de diffusion RTSP/HLS/WebRTC avec authentification",
      "content_text": "Le daemon expose un relais de diffusion (encodage unique H264/AAC pour HLS et Opus pour WebRTC), avec démarrage/arrêt réservés à l'opérateur et lecture protégée par un lien signé propre à chaque machine. Un pousseur superviseur relance l'encodage en cas de coupure et devient enfant du gardien pour survivre au gel des processus détachés.",
      "date_published": "2026-09-01T15:11:14.000Z",
      "date_modified": "2026-09-08T00:22:03.083Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-01",
        "first_at": "2026-09-01T13:56:27.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-01#15",
      "title": "Une machine qui tient une route reste publique, lien d'app fiable",
      "content_text": "Un lien partagé pouvait retomber sur l'authentification du fournisseur car l'exposition publique était réinitialisée à chaque run. Une machine qui détient toujours sa route reste désormais publique, et le lien d'app affiché dans le chat provient de la même source de vérité que la carte d'app.",
      "date_published": "2026-09-01T13:43:02.000Z",
      "date_modified": "2026-09-08T00:22:03.083Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-01",
        "first_at": "2026-09-01T13:43:02.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs",
          "@kami/web"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-01#11",
      "title": "Le flux d'écran de la machine porte désormais le son",
      "content_text": "Le flux vidéo de la box gagne une piste audio (sink virtuel + mux AAC dans le gardien), silencieuse seulement si aucune sortie audio n'est disponible. Un bug qui suspendait le sink et coupait le son au silence a été corrigé, et le nombre de spectateurs simultanés est passé de 2 à 4.",
      "date_published": "2026-09-01T12:46:31.000Z",
      "date_modified": "2026-09-08T00:22:03.083Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-01",
        "first_at": "2026-09-01T11:22:12.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-01#14",
      "title": "La navigation web de l'agent devient visible dans le flux machine",
      "content_text": "Le navigateur de l'outil browse s'ouvre désormais en mode affiché sur l'écran diffusé (:99), au lieu de tourner en headless dans le vide. La sécurité (contexte déconnecté, quarantaine) reste inchangée ; seul l'emplacement des pixels change.",
      "date_published": "2026-09-01T12:34:31.000Z",
      "date_modified": "2026-09-08T00:22:03.083Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "changed",
        "scope": "agent",
        "window": "2026-09-01",
        "first_at": "2026-09-01T12:34:31.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-01#13",
      "title": "Le handshake de version du gardien évite le code obsolète",
      "content_text": "L'installation du gardien vérifiait le fichier sur disque plutôt que le processus réellement lancé, laissant tourner du code périmé après mise à jour. Elle compare désormais le hash du processus en cours d'exécution et le redémarre s'il diffère.",
      "date_published": "2026-09-01T12:28:35.000Z",
      "date_modified": "2026-09-08T00:22:03.083Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-01",
        "first_at": "2026-09-01T12:28:35.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-01#12",
      "title": "Effort de raisonnement réglable par modèle, tool_choice dégradé si besoin",
      "content_text": "Un suffixe d'effort (low/medium/high/none) peut désormais être ajouté à un identifiant de modèle et traverse toute la pile jusqu'au fournisseur. Le tool_choice « required » se dégrade automatiquement vers « auto » quand la grammaire contrainte explose avec la surface de tools actuelle.",
      "date_published": "2026-09-01T11:36:15.000Z",
      "date_modified": "2026-09-08T00:22:03.083Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "changed",
        "scope": "agent",
        "window": "2026-09-01",
        "first_at": "2026-09-01T11:36:15.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-01#3",
      "title": "Diffusion vidéo à 30 images/seconde, verrou domani corrigé",
      "content_text": "Le codec, et non la machine, limitait le flux à ~1 im/s ; il encode désormais réellement à 30 fps en h264. Un verrou domani mal conçu bloquait toutefois ce flux direct en le confondant avec une absence d'autorisation ; il vérifie désormais la signature seulement si elle est présente.",
      "date_published": "2026-09-01T10:17:47.000Z",
      "date_modified": "2026-09-08T00:22:03.083Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "changed",
        "scope": "agent",
        "window": "2026-09-01",
        "first_at": "2026-08-31T23:48:33.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs",
          "@kami/web"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-01#10",
      "title": "Livraison silencieuse, dédoublonnage et ligne machine nommée",
      "content_text": "Une livraison pure (media_forward réussi) ne consomme plus de tour de parole et n'est plus envoyée deux fois pour le même fichier. La ligne d'état machine nomme désormais la commande du run en cours plutôt qu'un bandeau générique.",
      "date_published": "2026-09-01T09:57:07.000Z",
      "date_modified": "2026-09-08T00:22:03.083Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-01",
        "first_at": "2026-09-01T09:57:07.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-01#9",
      "title": "Repli MJPEG quand le gardien est indisponible",
      "content_text": "Quand le gardien ne répond pas, /screen.stream ne renvoie plus une 404 mais un flux MJPEG construit par le daemon à partir des mêmes captures que les images fixes, jouable dans OBS/VLC. Les images de ce repli sont désormais du JPEG léger via scrot plutôt que du PNG lourd.",
      "date_published": "2026-09-01T09:36:27.000Z",
      "date_modified": "2026-09-08T00:22:03.083Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-01",
        "first_at": "2026-09-01T09:22:14.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-01#8",
      "title": "Un message privé distingue enfin les deux agents concernés",
      "content_text": "Les DM entre un même humain et plusieurs agents partageaient auparavant une seule salle sur telegram/whatsapp/email, causant contexte mélangé, fausse co-présence et doubles réponses. Une migration re-cle les DM existants par agent.",
      "date_published": "2026-09-01T08:32:31.000Z",
      "date_modified": "2026-09-08T00:22:03.083Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-01",
        "first_at": "2026-09-01T08:32:31.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-01#7",
      "title": "Le lien public d'écran ne peut plus exposer l'hôte du fournisseur",
      "content_text": "Le bouton « copier l'URL du flux » renvoyait un lien qui redirigeait vers la page de connexion du fournisseur (Sprites). L'URL publique est désormais construite uniquement à partir du domaine maîtrisé et n'est publiée que si l'edge sert réellement le flux.",
      "date_published": "2026-09-01T08:05:08.000Z",
      "date_modified": "2026-09-08T00:22:03.083Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "security",
        "scope": "agent",
        "window": "2026-09-01",
        "first_at": "2026-09-01T08:05:08.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-01#6",
      "title": "Metadata Open Graph dédiée à chaque objet partageable d'une machine",
      "content_text": "Chaque objet partageable d'une machine (écran, app) obtient désormais sa propre métadonnée Open Graph optimisée, au lieu d'une carte générique.",
      "date_published": "2026-09-01T06:25:37.000Z",
      "date_modified": "2026-09-08T00:22:03.083Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-01",
        "first_at": "2026-09-01T06:25:37.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/web"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-01#4",
      "title": "Le courtier de routes domani gagne un vocabulaire réel",
      "content_text": "Le broker de routes utilise désormais le vocabulaire réel de l'activation, capture le secret et dispose d'un exécuteur dédié (runner). Un état intermédiaire du binding hostname est désormais traité comme réessayable plutôt que comme un refus, et la réponse domani, auparavant enveloppée sans être décodée, ne perd plus l'identifiant ni le secret.",
      "date_published": "2026-09-01T02:54:11.000Z",
      "date_modified": "2026-09-08T00:22:03.083Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-09-01",
        "first_at": "2026-09-01T01:39:10.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-01#5",
      "title": "Le volet écran servi depuis la base publique, sans le daemon",
      "content_text": "Le flux d'écran passe par la base publique, le daemon sortant du chemin de données. Deux défauts visibles uniquement en production (inversion d'exposition, survie de la ceinture) ont été corrigés dans la foulée.",
      "date_published": "2026-09-01T02:32:10.000Z",
      "date_modified": "2026-09-08T00:22:03.083Z",
      "tags": [
        "@kami/daemon",
        "@kami/agent-computer"
      ],
      "_changelog": {
        "kind": "changed",
        "scope": "agent",
        "window": "2026-09-01",
        "first_at": "2026-09-01T02:06:14.000Z",
        "packages": [
          "@kami/daemon",
          "@kami/agent-computer"
        ],
        "packages_outside": [
          "@kami/repository-docs",
          "@kami/web"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-01#2",
      "title": "Le gardien s'installe dès qu'on touche la machine",
      "content_text": "L'installation du gardien ne dépend plus de l'attente d'un run : elle démarre au premier contact avec la machine. Un bug qui lisait la plateforme comme identifiant de chat rendait cette invocation inopérante ; corrigé.",
      "date_published": "2026-08-31T23:13:32.000Z",
      "date_modified": "2026-09-08T00:22:03.083Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "changed",
        "scope": "agent",
        "window": "2026-09-01",
        "first_at": "2026-08-31T22:59:43.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-09-01#1",
      "title": "Le gardien F16 devient le serveur d'écran de la box",
      "content_text": "Le gardien qui protège la machine sert désormais directement le flux vidéo de son écran, posant les bases du direct plutôt que de simples captures statiques.",
      "date_published": "2026-08-31T22:36:25.000Z",
      "date_modified": "2026-09-08T00:22:03.083Z",
      "tags": [
        "@kami/daemon",
        "@kami/agent-computer"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-09-01",
        "first_at": "2026-08-31T22:36:25.000Z",
        "packages": [
          "@kami/daemon",
          "@kami/agent-computer"
        ],
        "packages_outside": [
          "@kami/repository-docs",
          "@kami/web"
        ],
        "continues_from": "agent/2026-08-31#24"
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-08-31#26",
      "title": "Volet écran : WebP et canvas au lieu de PNG et img",
      "content_text": "Le volet écran de la page machine utilise désormais des images WebP (dix fois plus légères que PNG) affichées sur un canvas au lieu d'une balise img.",
      "date_published": "2026-08-31T21:48:36.000Z",
      "date_modified": "2026-09-08T00:19:49.953Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "changed",
        "scope": "agent",
        "window": "2026-08-31",
        "first_at": "2026-08-31T21:48:36.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs",
          "@kami/web"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-08-31#25",
      "title": "Clignotement du volet écran corrigé",
      "content_text": "Le volet écran de la page machine clignotait à cause d'une clé React incorrecte, mesurée et corrigée dans un navigateur.",
      "date_published": "2026-08-31T21:31:55.000Z",
      "date_modified": "2026-09-08T00:19:49.953Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-08-31",
        "first_at": "2026-08-31T21:31:55.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/repository-docs",
          "@kami/web"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-08-31#24",
      "title": "Volet écran de la page machine",
      "content_text": "La page machine affiche désormais un volet écran (vue en direct), avec correction du port du manuel hérité de F16.",
      "date_published": "2026-08-31T20:45:01.000Z",
      "date_modified": "2026-09-08T00:19:49.953Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-08-31",
        "first_at": "2026-08-31T20:45:01.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/repository-docs",
          "@kami/web"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-08-31#23",
      "title": "Couche daemon de l'app machine (F16) : broker de routes et porte visiteur",
      "content_text": "Ajout de la couche daemon de l'application de la machine : broker de routes vers domani, porte visiteur, script de garde, carte App et manuel, avec sonde de disponibilité domani.",
      "date_published": "2026-08-31T20:24:23.000Z",
      "date_modified": "2026-09-08T00:19:49.953Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-08-31",
        "first_at": "2026-08-31T20:24:23.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs",
          "@kami/web"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-08-31#22",
      "title": "Un spawn refusé (quota, cooldown, budget) est narré à l'agent",
      "content_text": "Quand un spawn de tâche vidéo est refusé (quota atteint, cooldown, budget dépassé, boucle de rétries, paramètres invalides), l'agent reçoit désormais un item d'inbox expliquant la cause au lieu de laisser l'ack de départ sans suite visible.",
      "date_published": "2026-08-31T18:49:42.000Z",
      "date_modified": "2026-09-08T00:19:49.953Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-08-31",
        "first_at": "2026-08-31T18:49:42.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-08-31#21",
      "title": "Un artefact d'une tâche du même chat reste adressable même non livré",
      "content_text": "Un média prêt en stockage mais jamais livré (échec de dispatch) est désormais adressable via sa tâche d'origine dans le même chat, et un dispatch mort déclenche un message d'échec nommant le handle du média plutôt que de laisser l'agent croire qu'il n'existe pas.",
      "date_published": "2026-08-31T17:27:33.000Z",
      "date_modified": "2026-09-08T00:19:49.953Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-08-31",
        "first_at": "2026-08-31T17:27:33.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-08-31#20",
      "title": "Repli multipart Telegram pour les fichiers volumineux",
      "content_text": "Quand l'envoi de média par URL est refusé par Telegram (fichier trop gros pour ce mode), l'adaptateur télécharge désormais les octets et les renvoie en multipart, jusqu'à 50 Mo, réglant les épisodes vidéo qui n'atteignaient jamais le chat.",
      "date_published": "2026-08-31T16:55:04.000Z",
      "date_modified": "2026-09-08T00:19:49.953Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-08-31",
        "first_at": "2026-08-31T16:55:04.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-08-31#19",
      "title": "Budget de tokens des skills always-inline : dépassement dégradé, pas fatal",
      "content_text": "Un dépassement du budget de tokens des skills toujours-inline faisait échouer chaque tour LLM en production. Un correctif d'urgence a réduit la taille du skill vidéo, puis un correctif permanent rétrograde désormais les plus gros skills au lieu de lever une erreur, et la garde CI mesure tous les skills always-inline quel que soit l'environnement.",
      "date_published": "2026-08-31T16:33:05.000Z",
      "date_modified": "2026-09-08T00:19:49.953Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-08-31",
        "first_at": "2026-08-31T16:17:28.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-08-31#27",
      "title": "Volet run visible, refus qui guide, règle des clés (F3+F4+F7)",
      "content_text": "Le volet run de la machine affiche désormais la commande exécutée, pas seulement son issue. Le refus d'un appel guide désormais la personne vers le bon topic et la tague au lieu de s'excuser, et la règle des clés est explicitée comme une règle formelle.",
      "date_published": "2026-08-31T15:57:39.000Z",
      "date_modified": "2026-09-08T00:19:49.953Z",
      "tags": [
        "@kami/daemon",
        "@kami/agent-computer"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-08-31",
        "first_at": "2026-08-31T15:57:39.000Z",
        "packages": [
          "@kami/daemon",
          "@kami/agent-computer"
        ],
        "packages_outside": [
          "@kami/repository-docs",
          "@kami/web",
          "(repo)"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-08-31#18",
      "title": "video_episode devient l'unique voie d'assemblage d'un épisode",
      "content_text": "Le kind et le skill précisent désormais explicitement que l'assemblage d'un épisode passe uniquement par video_episode, jamais par ffmpeg manuel sur la machine ; le temps d'attente suit le ré-encodage réel.",
      "date_published": "2026-08-31T15:56:49.000Z",
      "date_modified": "2026-09-08T00:19:49.953Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-08-31",
        "first_at": "2026-08-31T15:56:49.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-08-31#17",
      "title": "Épisode vidéo sous le plafond de taille, en-tête suit la durée héritée",
      "content_text": "Les épisodes vidéo assemblés sont désormais ré-encodés automatiquement sous le plafond de stockage (45 Mo) au lieu d'échouer silencieusement. L'en-tête du brief suit la durée réellement héritée sur une suite, et une promesse de durée finale n'est plus affichée si aucun spawn n'a réellement eu lieu.",
      "date_published": "2026-08-31T14:40:47.000Z",
      "date_modified": "2026-09-08T00:19:49.953Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-08-31",
        "first_at": "2026-08-31T14:40:47.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-08-31#16",
      "title": "Une mention ne peut viser qu'une personne déjà vue",
      "content_text": "L'agent ne peut plus mentionner un utilisateur dont l'identifiant n'a pas été montré dans la fenêtre de conversation visible, empêchant qu'un identifiant halluciné par plausibilité corresponde par hasard à un membre inactif du groupe.",
      "date_published": "2026-08-31T13:51:08.000Z",
      "date_modified": "2026-09-08T00:19:49.953Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-08-31",
        "first_at": "2026-08-31T13:51:08.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-08-31#15",
      "title": "Les acks vidéo affichent la durée du système, la citation porte le handle",
      "content_text": "Le message d'accusé de réception d'une vidéo est désormais corrigé automatiquement par la durée calculée par le système au lieu du chiffre écrit par le modèle. Citer un média dans une réponse porte désormais son handle réel, réglant les cas où l'agent perdait la référence de la vidéo citée.",
      "date_published": "2026-08-31T13:40:26.000Z",
      "date_modified": "2026-09-08T00:19:49.953Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-08-31",
        "first_at": "2026-08-31T13:40:26.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-08-31#14",
      "title": "Latence vidéo calibrée par modèle plutôt qu'un chiffre en dur",
      "content_text": "L'estimation d'attente pour une vidéo est désormais calculée à partir d'un modèle calibré (famille × résolution × secondes, ajusté sur l'historique réel), remplaçant les mentions figées « ~3 min » dans les skills et les acks.",
      "date_published": "2026-08-31T12:54:16.000Z",
      "date_modified": "2026-09-08T00:19:49.953Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "changed",
        "scope": "agent",
        "window": "2026-08-31",
        "first_at": "2026-08-31T12:54:16.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-08-31#13",
      "title": "Suite vidéo : durée/résolution transmises comme faits, brief racine hérité",
      "content_text": "La durée, la résolution et le cadrage réellement livrés d'un clip voyagent désormais comme des nombres lus sur la tâche plutôt que via le texte du prompt précédent, qui pouvait mentir. Le brief du premier clip d'une chaîne (racine) est propagé à tous les chapitres suivants, garantissant la continuité du monde.",
      "date_published": "2026-08-31T12:19:20.000Z",
      "date_modified": "2026-09-08T00:19:49.953Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "changed",
        "scope": "agent",
        "window": "2026-08-31",
        "first_at": "2026-08-31T12:19:20.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/repository-docs",
          "@kami/video-eval"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-08-31#12",
      "title": "Un seul email par instruction, avec preuve de livraison",
      "content_text": "Une même instruction pouvait produire plusieurs emails envoyés au même destinataire suite à des acquiescements ambigus. Un second envoi à la même adresse dans les 5 minutes est désormais refusé et renvoie le reçu du premier envoi (sujet, date) au lieu d'en créer un nouveau.",
      "date_published": "2026-08-31T12:14:48.000Z",
      "date_modified": "2026-09-08T00:19:49.953Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-08-31",
        "first_at": "2026-08-31T12:14:48.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-08-31#11",
      "title": "Identité du build fiable, nouvelle route /version",
      "content_text": "L'identité du code déployé est désormais gravée dans l'image (KAMI_BUILD_SHA via le Dockerfile) plutôt que dépendante du secret DEPLOY_SHA, qui pouvait rester périmé après un déploiement manuel. Une nouvelle route GET /version expose les deux marqueurs et signale tout désaccord.",
      "date_published": "2026-08-31T12:14:05.000Z",
      "date_modified": "2026-09-08T00:19:49.953Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-08-31",
        "first_at": "2026-08-31T12:14:05.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-08-31#10",
      "title": "Un refus d'appel ne peut plus être lu comme une rétractation",
      "content_text": "Un refus de send_email ou read_inbox pour un appel donné ne signifie plus rien sur les envois passés : le message de refus est désormais borné à l'appel en cours, empêchant l'agent de rétracter à tort une livraison antérieure réelle.",
      "date_published": "2026-08-31T11:26:37.000Z",
      "date_modified": "2026-09-08T00:19:49.953Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-08-31",
        "first_at": "2026-08-31T11:26:37.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-08-31#9",
      "title": "Le mandat d'un tour distingué de sa présence",
      "content_text": "Une tâche programmée exécutée au nom de l'owner était refusée par les portes owner-only car son identité de présence était « system ». Le mandat (requested_by) est désormais relu séparément de la présence pour autoriser correctement les tâches légitimes de l'owner.",
      "date_published": "2026-08-31T10:15:48.000Z",
      "date_modified": "2026-09-08T00:19:49.953Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-08-31",
        "first_at": "2026-08-31T10:15:48.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-08-31#8",
      "title": "Les petites images de référence sont agrandies, plus refusées",
      "content_text": "Une image de référence sous 256x256 pixels (avatar Telegram/Discord typique) faisait échouer toute la génération vidéo depuis le passage à H3 Max. Elle est désormais agrandie au minimum requis au lieu d'être rejetée.",
      "date_published": "2026-08-31T10:00:56.000Z",
      "date_modified": "2026-09-08T00:19:49.953Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-08-31",
        "first_at": "2026-08-31T10:00:56.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-08-31#7",
      "title": "parseStart respecte enfin le fuseau horaire demandé",
      "content_text": "parseStart ignorait le paramètre de fuseau horaire dans sept branches sur huit et calculait l'heure dans le fuseau du serveur (UTC), causant des décalages de 1 à 3 heures pour les tâches programmées à une heure relative. Le calcul utilise désormais l'heure murale dans le fuseau visé.",
      "date_published": "2026-08-31T09:37:09.000Z",
      "date_modified": "2026-09-08T00:19:49.953Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "fixed",
        "scope": "agent",
        "window": "2026-08-31",
        "first_at": "2026-08-31T09:37:09.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-08-31#6",
      "title": "Nouvel outil send_email, autorisation owner relue à chaque envoi",
      "content_text": "Un nouvel outil send_email permet à l'agent d'initier un email (envoi immédiat, sans file d'attente), réservé à l'owner. L'autorisation est re-lue à chaque déclenchement, y compris pour les tâches récurrentes, afin qu'un tiers ne puisse pas programmer un envoi en se faisant passer pour l'owner.",
      "date_published": "2026-08-31T03:09:10.000Z",
      "date_modified": "2026-09-08T00:19:49.953Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-08-31",
        "first_at": "2026-08-31T03:09:10.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-08-31#5",
      "title": "Réduction des couches Docker du daemon (82 → 22)",
      "content_text": "Le Dockerfile du daemon regroupe désormais ses copies de fichiers avec COPY --parents, réduisant les couches COPY de 82 à 22, ce qui corrige les déploiements tués à 15 minutes faute de budget CI.",
      "date_published": "2026-08-31T02:59:27.000Z",
      "date_modified": "2026-09-08T00:19:49.953Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "changed",
        "scope": "agent",
        "window": "2026-08-31",
        "first_at": "2026-08-31T02:59:27.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-08-31#4",
      "title": "Vidéo : 480p par défaut, et suite de vidéo (continueFrom)",
      "content_text": "La résolution par défaut des vidéos passe à 480p (plus rapide et moins chère que le 768p du modèle) sauf demande explicite d'un rendu à garder ou publier. Une nouvelle chaîne « continueFrom » permet de désigner une vidéo ou image précédente pour en générer la suite, avec extraction de la dernière frame et report du prompt d'origine.",
      "date_published": "2026-08-31T01:44:33.000Z",
      "date_modified": "2026-09-08T00:19:49.953Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "changed",
        "scope": "agent",
        "window": "2026-08-31",
        "first_at": "2026-08-31T01:44:33.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-08-31#3",
      "title": "Le tour qui suit un run porte le verdict LU (F9)",
      "content_text": "Après l'exécution d'un run sur la machine, le tour suivant affiche désormais le verdict LU au lieu de rester sur un état d'attente.",
      "date_published": "2026-08-30T23:50:06.000Z",
      "date_modified": "2026-09-08T00:19:49.953Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "changed",
        "scope": "agent",
        "window": "2026-08-31",
        "first_at": "2026-08-30T23:50:06.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-08-31#2",
      "title": "MiniMax H3 Max, nouveau défaut vidéo, 15 s au lieu de 5",
      "content_text": "La génération vidéo passe par défaut à MiniMax H3 Max : un clip de 15 secondes coûte 1,20 $ au lieu de 4,54 $, la durée par défaut passe de 5 à 15 s, et l'agent peut désormais référencer la première/dernière frame produite. Le fournisseur fal-seedance reste disponible pour la haute résolution.",
      "date_published": "2026-08-30T23:30:25.000Z",
      "date_modified": "2026-09-08T00:19:49.953Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "changed",
        "scope": "agent",
        "window": "2026-08-31",
        "first_at": "2026-08-30T23:30:25.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "(repo)",
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    },
    {
      "id": "agent/2026-08-31#1",
      "title": "Le refus nomme sa cause aux humains (F2)",
      "content_text": "Quand le run échoue ou est refusé sur la machine, le message rendu aux humains nomme mécaniquement la cause du refus plutôt que de rester muet.",
      "date_published": "2026-08-30T22:05:22.000Z",
      "date_modified": "2026-09-08T00:19:49.953Z",
      "tags": [
        "@kami/daemon"
      ],
      "_changelog": {
        "kind": "added",
        "scope": "agent",
        "window": "2026-08-31",
        "first_at": "2026-08-30T22:05:22.000Z",
        "packages": [
          "@kami/daemon"
        ],
        "packages_outside": [
          "@kami/repository-docs"
        ],
        "continues_from": null
      },
      "url": "https://kami.bot",
      "language": "fr"
    }
  ],
  "home_page_url": "https://kami.bot",
  "description": "The agent runtime: the daemon HTTP/WS server, its tools, prompts, voice, memory, identity, and the platform packages it is built from. The reader is the agent itself or its operator, asking what changed in how the agent behaves.",
  "language": "fr"
}
