{"vulnerability": "cve-2026-33634", "sightings": [{"uuid": "1de481d4-856a-4800-b67d-2b620809ee56", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2026-33634", "type": "seen", "source": "https://bsky.app/profile/getpokemon7.bsky.social/post/3mi6uuq5ea22g", "content": "", "creation_timestamp": "2026-03-29T09:53:42.128721Z"}, {"uuid": "703c18f4-fd3c-46d3-8575-910fe8709eea", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2026-33634", "type": "seen", "source": "https://bsky.app/profile/breachandbuild.bsky.social/post/3mi3svslc5m23", "content": "", "creation_timestamp": "2026-03-28T04:40:29.224009Z"}, {"uuid": "11e789d0-bdf1-4f3b-a821-62a7e22ea2cc", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2026-33634", "type": "seen", "source": "https://bsky.app/profile/breachandbuild.bsky.social/post/3mi3sx75sit26", "content": "", "creation_timestamp": "2026-03-28T04:41:15.981019Z"}, {"uuid": "fe7366db-c0b9-416a-a7a7-64a533e62b0e", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2026-33634", "type": "seen", "source": "https://bsky.app/profile/getpokemon7.bsky.social/post/3mi7bz3wyr22j", "content": "", "creation_timestamp": "2026-03-29T13:48:47.043022Z"}, {"uuid": "0009315b-d561-4eff-a3b5-ffb49ca860c7", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2026-33634", "type": "seen", "source": "https://infosec.exchange/users/technadu/statuses/116300136903858455", "content": "", "creation_timestamp": "2026-03-27T08:14:17.763749Z"}, {"uuid": "e156c1a0-27da-4791-b696-4a117720029c", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2026-33634", "type": "seen", "source": "https://bsky.app/profile/technadu.com/post/3mhzogqxnuc2p", "content": "", "creation_timestamp": "2026-03-27T08:15:18.328436Z"}, {"uuid": "88f1148b-e1a7-4e4a-a5e2-00d30119d047", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2026-33634", "type": "seen", "source": "https://bsky.app/profile/thedailytechfeed.com/post/3mi7cr45okr2m", "content": "", "creation_timestamp": "2026-03-29T14:02:10.522812Z"}, {"uuid": "15a1ae13-6254-47e1-87b3-ddbf78d4a9ed", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "cve-2026-33634", "type": "seen", "source": "https://bsky.app/profile/clankussy.abu.guru/post/3mideo7azyo2r", "content": "", "creation_timestamp": "2026-03-31T04:47:03.778402Z"}, {"uuid": "354278ed-231c-427e-8ce6-5c78049fd7d6", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2026-33634", "type": "seen", "source": "https://bsky.app/profile/pigondrugs.bsky.social/post/3mhxy5tgb2n2p", "content": "", "creation_timestamp": "2026-03-26T16:03:48.263806Z"}, {"uuid": "be16437b-4b5b-4100-9728-08a7020dfc4b", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2026-33634", "type": "seen", "source": "https://feedsin.space/feed/CISAKevBot/items/6107831", "content": "", "creation_timestamp": "2026-03-26T18:25:41.848074Z"}, {"uuid": "2b1b909c-5f94-4b7b-ad44-75df5dc38624", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "af0120d0-3dac-4a6a-974b-a9f33d2a9846", "vulnerability": "CVE-2026-33634", "type": "exploited", "source": "https://vulnerability.circl.lu/known-exploited-vulnerabilities-catalog/f5da6435-b1f1-42e2-b8c2-48d0c671f7a0", "content": "", "creation_timestamp": "2026-03-26T18:00:02.541099Z"}, {"uuid": "720b6a81-6b19-4819-b5b9-13fb1343df47", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "86ecb4e1-bb32-44d5-9f39-8a4673af8385", "vulnerability": "CVE-2026-33634", "type": "seen", "source": "https://cyber.gc.ca/en/alerts-advisories/aqua-security-security-advisory-av26-283", "content": "", "creation_timestamp": "2026-03-26T15:54:35.000000Z"}, {"uuid": "2e0cd776-14ad-4cce-b19f-5c32d6745ffd", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2026-33634", "type": "seen", "source": "https://bsky.app/profile/beikokucyber.bsky.social/post/3mhyiuvobs42p", "content": "", "creation_timestamp": "2026-03-26T21:03:07.397503Z"}, {"uuid": "c3964138-470a-402a-8909-72e3f3521e53", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2026-33634", "type": "seen", "source": "https://bsky.app/profile/cve.skyfleet.blue/post/3mhr5vaikg22i", "content": "", "creation_timestamp": "2026-03-23T22:57:44.397788Z"}, {"uuid": "e4828aa4-b058-4b8e-856e-77048e6d604c", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2026-33634", "type": "seen", "source": "https://bsky.app/profile/pigondrugs.bsky.social/post/3mhyfgtkafo2v", "content": "", "creation_timestamp": "2026-03-26T20:01:29.281459Z"}, {"uuid": "4ffd401e-e401-466f-887c-9c9847cef30f", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2026-33634", "type": "seen", "source": "https://mastodon.social/ap/users/115426718704364579/statuses/116301916112823329", "content": "", "creation_timestamp": "2026-03-27T15:46:46.336004Z"}, {"uuid": "562cc52f-b349-4a05-924c-5529e9c1393a", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "cve-2026-33634", "type": "seen", "source": "https://infosec.exchange/users/offseq/statuses/116281208959546737", "content": "", "creation_timestamp": "2026-03-24T00:00:40.653582Z"}, {"uuid": "f51fa64b-6cd5-4090-b692-19cbdbe4757b", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "cve-2026-33634", "type": "seen", "source": "https://bsky.app/profile/offseq.bsky.social/post/3mhrbfsra2t2v", "content": "", "creation_timestamp": "2026-03-24T00:00:42.130114Z"}, {"uuid": "5c8f1ee8-61af-4eae-b6f9-4f940eaa01c8", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2026-33634", "type": "seen", "source": "https://bsky.app/profile/netsecio.bsky.social/post/3mi2hou4wni2t", "content": "", "creation_timestamp": "2026-03-27T15:47:05.127017Z"}, {"uuid": "d20840bb-9113-4534-82c1-7720342c4e53", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2026-33634", "type": "seen", "source": "https://bsky.app/profile/thedailytechfeed.com/post/3mi527v4vew2b", "content": "", "creation_timestamp": "2026-03-28T16:24:04.134755Z"}, {"uuid": "38880b8c-be6e-4f74-9e4e-67bb7b68d8a4", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "cve-2026-33634", "type": "seen", "source": "https://bsky.app/profile/clankussy.abu.guru/post/3mi4px3rsag2t", "content": "", "creation_timestamp": "2026-03-28T13:20:11.671470Z"}, {"uuid": "a3123b4e-96e3-4328-9f64-08d6c0db9a06", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "86ecb4e1-bb32-44d5-9f39-8a4673af8385", "vulnerability": "CVE-2026-33634", "type": "seen", "source": "https://www.acn.gov.it/portale/w/attacco-multistadio-alla-supply-chain-ci/cd-e-iniezione-di-codice-malevolo", "content": "", "creation_timestamp": "2026-03-27T16:45:04.000000Z"}, {"uuid": "c959138c-ef1c-466a-8596-8b286af077af", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "cve-2026-33634", "type": "seen", "source": "https://gist.github.com/diwushennian4955/461dcf2206b1ec82210b550fdb7beacd", "content": "", "creation_timestamp": "2026-03-29T06:03:29.000000Z"}, {"uuid": "a0de2bc7-5ed2-4ed5-bd95-43d7b7a01213", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2026-33634", "type": "seen", "source": "https://bsky.app/profile/Kubernetes.activitypub.awakari.com.ap.brid.gy/post/3mi6dctyogmi2", "content": "", "creation_timestamp": "2026-03-29T04:39:34.829531Z"}, {"uuid": "bd0e0d3f-0460-45fb-9eed-4c70e1bca284", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2026-33634", "type": "seen", "source": "https://bsky.app/profile/getpokemon7.bsky.social/post/3mibr5g72y22w", "content": "", "creation_timestamp": "2026-03-30T13:24:58.738292Z"}, {"uuid": "09b4ebcd-c5f2-47c8-b0cd-0953944725f7", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "86ecb4e1-bb32-44d5-9f39-8a4673af8385", "vulnerability": "CVE-2026-33634", "type": "seen", "source": "https://www.kaspersky.com/blog/critical-supply-chain-attack-trivy-litellm-checkmarx-teampcp/55510/", "content": "", "creation_timestamp": "2026-03-26T03:00:12.000000Z"}, {"uuid": "2184798b-a347-4f1e-b729-fbe0b1aca646", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2026-33634", "type": "seen", "source": "https://bsky.app/profile/beikokucyber.bsky.social/post/3mi2zcwquco2p", "content": "", "creation_timestamp": "2026-03-27T21:02:32.571022Z"}, {"uuid": "5df79deb-710f-49ae-8687-73e4c16bd467", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2026-33634", "type": "seen", "source": "https://t.me/true_secator/8032", "content": "\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u043e\u0431\u043e\u0437\u0440\u0435\u0432\u0430\u0442\u044c \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0445\u0430\u043a\u0435\u0440\u0441\u043a\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u0438 TeamPCP, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u043b\u0430 \u0441\u0432\u043e\u044e \u043a\u0430\u043c\u043f\u0430\u043d\u0438\u044e \u043d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c.\n\n\u041f\u043e\u0434\u044b\u0442\u043e\u0436\u0438\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u0438 \u043e\u0442\u043c\u0435\u0442\u0438\u043c \u0432\u043d\u043e\u0432\u044c \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043e\u0431\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430. \u0427\u0430\u0441\u0442\u044c 1.\n\nTeamPCP, \u043f\u043e \u0432\u0441\u0435\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u043f\u0435\u0440\u0435\u0448\u043b\u0430 \u043e\u0442\u00a0\u0430\u0442\u0430\u043a\u0438 \u043d\u0430 \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u043f\u043e\u0441\u0442\u0430\u0432\u043e\u043a Trivy\u00a0\u043a NPM, Docker Hub, VS Code \u0438 PyPI, \u0438 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u043b\u0430 \u0443\u0441\u0438\u043b\u0438\u044f \u0441 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u043a\u043e\u0439 Lapsus$ \u0434\u043b\u044f \u043c\u043e\u043d\u0435\u0442\u0438\u0437\u0430\u0446\u0438\u0438.\n\n\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f, \u043a\u0441\u0442\u0430\u0442\u0438, \u0434\u0430\u043d\u043d\u044b\u043c SocRadar, \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u0432\u0437\u043b\u043e\u043c\u0430\u043b\u0430 \u0431\u0438\u043e\u0444\u0430\u0440\u043c\u0430\u0446\u0435\u0432\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0433\u0438\u0433\u0430\u043d\u0442\u0430 AstraZeneca \u0438 \u0443\u043a\u0440\u0430\u043b\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 3 \u0413\u0411 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0443\u0447\u0435\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0442\u043e\u043a\u0435\u043d\u044b, \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u043a\u043e\u0434\u0430 \u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432.\n\n\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442, \u0447\u0442\u043e \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u0432\u044f\u0437\u0430\u043d \u0441 \u043d\u0435\u0434\u0430\u0432\u043d\u0435\u0439 \u0430\u0442\u0430\u043a\u043e\u0439 \u043d\u0430 \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u043f\u043e\u0441\u0442\u0430\u0432\u043e\u043a, \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u0432\u0448\u0435\u0439\u00a0\u0441\u043a\u0430\u043d\u0435\u0440 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 Trivy \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 Aqua, \u043d\u043e \u044d\u0442\u043e \u043d\u0435\u0442\u043e\u0447\u043d\u043e.\n\n\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044f\u0441\u044c \u043a \u0430\u0442\u0430\u043a\u0430 \u043d\u0430 Trivy \u043e\u0442 Aqua Security, \u0430\u0442\u0430\u043a\u0430 (CVE-2026-33634, CVSS 9,4) \u043d\u0430\u0447\u0430\u043b\u0430\u0441\u044c \u0441 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0430\u0446\u0438\u0438 \u0442\u043e\u043a\u0435\u043d\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0444\u0435\u0432\u0440\u0430\u043b\u044f. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043d\u0435 \u043c\u0435\u043d\u044f\u043b\u0438 \u0432\u0441\u0435 \u0443\u0447\u0435\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0441\u0435\u043a\u0440\u0435\u0442\u044b, \u0445\u0430\u043a\u0435\u0440\u0430\u043c \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u0435.\n\nTeamPCP \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u0433\u043e \u041f\u041e \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 Trivy 19 \u043c\u0430\u0440\u0442\u0430, \u0421\u0435\u0439\u0447\u0430\u0441 \u043c\u043d\u043e\u0433\u043e\u044d\u0442\u0430\u043f\u043d\u0430\u044f \u0430\u0442\u0430\u043a\u0430 \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0439 \u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.\n\n\u041e\u0434\u043d\u0430\u043a\u043e \u0434\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u0432\u044b\u0442\u0435\u0441\u043d\u0435\u043d\u0438\u044f \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u043e\u0432 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u043f\u044f\u0442\u044c \u0434\u043d\u0435\u0439. \u0427\u0435\u0440\u0435\u0437 \u0442\u0440\u0438 \u0434\u043d\u044f \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0431\u043e\u0442 \u043f\u043e \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0439 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0438 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b\u0438 \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u044b\u0435 \u043e\u0431\u0440\u0430\u0437\u044b Docker Hub \u0434\u043b\u044f Trivy (\u0432\u0435\u0440\u0441\u0438\u0438 0.69.5 \u0438 0.69.6), \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0432, \u0447\u0442\u043e \u0438\u0445 \u0434\u043e\u0441\u0442\u0443\u043f \u043d\u0435 \u0431\u044b\u043b \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d, \u043a\u0430\u043a \u0441\u043e\u043e\u0431\u0449\u0438\u043b\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 Trivy.\n\n\u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u044d\u0442\u043e\u0439 \u0430\u0442\u0430\u043a\u0438 \u0441\u0442\u0430\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0442\u0435\u0433\u043e\u0432 GitHub Actions \u0434\u043b\u044f \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u0435 \u041f\u041e \u0431\u0435\u0437 \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u0432\u0438\u0434\u0438\u043c\u044b\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438 \u0442\u0435\u0433\u0430, \u0434\u0430\u0442\u0430\u0445 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0440\u0435\u043b\u0438\u0437\u0430, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0430\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0437\u0430\u043c\u0435\u0442\u043d\u043e.\n\n\u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043e\u0442\u0447\u0435\u0442\u0443 SANS, \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442 Trivy \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u043b \u0431\u043e\u043b\u0435\u0435 10 000 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 CI/CD. \u041a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440 CI/CD, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432\u0448\u0438\u0439 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 GitHub Actions, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u044b\u0439 \u043a\u043e\u0434, \u0432\u043d\u0435\u0434\u0440\u044f\u044f \u0441\u0442\u0438\u043b\u0435\u0440 TeamPCP \u0438 \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u044f \u0441\u0435\u043a\u0440\u0435\u0442\u044b, \u0443\u0447\u0435\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443.\n\n23 \u043c\u0430\u0440\u0442\u0430 \u0433\u0440\u0443\u043f\u043f\u0430 TeamPCP \u0430\u0442\u0430\u043a\u043e\u0432\u0430\u043b\u0430 \u043f\u0440\u043e\u0435\u043a\u0442 Checkmarx \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c KICS, \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0432 \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 VS Code\u00a0checkmarx.cx-dev-assist\u00a0\u0438\u00a0checkmarx.ast-results.\n\n\u041a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u0430\u0442\u0430\u043a\u043e\u0439 Trivy, \u0445\u0430\u043a\u0435\u0440\u044b \u0432\u043d\u0435\u0434\u0440\u0438\u043b\u0438 \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u044b\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0432 \u043f\u043b\u0430\u0433\u0438\u043d\u044b, \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044f \u0442\u0435\u0433\u0438, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u043d\u0430 \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u044b\u0435 \u043a\u043e\u043c\u043c\u0438\u0442\u044b. \u041f\u043e \u0434\u0430\u043d\u043d\u044b\u043c SANS, \u0432 \u043e\u0431\u0449\u0435\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0431\u044b\u043b\u043e \u0432\u0437\u043b\u043e\u043c\u0430\u043d\u043e 35 \u0442\u0435\u0433\u043e\u0432 \u0432\u0435\u0440\u0441\u0438\u0439 GitHub Actions.\n\n\u041a\u0430\u043a \u043e\u0442\u043c\u0435\u0447\u0430\u0435\u0442 ReversingLabs, \u0434\u0432\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0432 \u0441\u043e\u0432\u043e\u043a\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u0441\u043a\u0430\u0447\u0430\u043d\u044b \u0431\u043e\u043b\u0435\u0435 36 000 \u0440\u0430\u0437 \u0438 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 VS Code \u0438 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0445 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u0430\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 (IDE), \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a Cursor, Kiro \u0438 Windsurf, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0440\u0430\u0434\u0438\u0443\u0441 \u043f\u043e\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0430\u0442\u0430\u043a\u0438 \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u043c.\n\n\u041d\u0430 \u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u043d\u0435\u0434\u0435\u043b\u0435 TeamPCP \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u0446\u0435\u043b\u0438\u0432\u0430\u043b\u0430\u0441\u044c \u043d\u0430 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0443 NPM, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0442\u043e\u043a\u0435\u043d\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435/\u0437\u0430\u043f\u0438\u0441\u044c \u0434\u043b\u044f \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u0433\u043e \u041f\u041e \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044f \u0442\u043e\u0442 \u0436\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u043a\u0440\u0430\u0436\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u0447\u0442\u043e \u0438 \u043f\u0440\u0438 \u0430\u0442\u0430\u043a\u0435 \u043d\u0430 Trivy.\n\n\u0410\u0442\u0430\u043a\u0430 \u043d\u0430 \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u043f\u043e\u0441\u0442\u0430\u0432\u043e\u043a NPM \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u043b\u0430 \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c 64 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u0430 \u0438 \u0431\u043e\u043b\u0435\u0435 140 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u043f\u0430\u043a\u0435\u0442\u043e\u0432, \u0432\u043d\u0435\u0434\u0440\u0438\u0432 \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u0435 \u041f\u041e, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c\u043e\u0435 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0435\u0435 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b ICP \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432.\n\n\u0424\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 CanisterWorm \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0439 \u0441\u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0443\u0447\u0435\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0432 NPM \u0434\u043b\u044f \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0432 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b.\n\n\u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0434\u0430\u043d\u043d\u044b\u043c\u00a0Aikido, \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0431\u044b\u043b\u0430 \u043f\u043e\u0445\u043e\u0436\u0430 \u043d\u0430 \u0442\u0443, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0432 \u0430\u0442\u0430\u043a\u0435 Trivy, \u043d\u043e \u043f\u043e\u0437\u0436\u0435 \u0431\u044b\u043b\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u043c \u0447\u0435\u0440\u0432\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0442\u043e\u043a\u0435\u043d\u044b NPM \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0430 \u0438\u0445 \u043e\u0441\u043d\u043e\u0432\u0435 \u0444\u043e\u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0437\u0430\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432.\n\n\u041a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0438\u043b\u0438 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440 CI, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0449\u0438\u0439 \u044d\u0442\u043e\u0442 \u043f\u0430\u043a\u0435\u0442 \u0438 \u0438\u043c\u0435\u044e\u0449\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0442\u043e\u043a\u0435\u043d\u0443 NPM, \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0435\u0432\u043e\u043b\u044c\u043d\u044b\u043c \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u043c \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f.\n\n\u041f\u0430\u043a\u0435\u0442\u044b \u0437\u0430\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f, \u0438\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442 \u0438\u0445, \u0438 \u0435\u0441\u043b\u0438 \u0443 \u043a\u043e\u0433\u043e-\u043b\u0438\u0431\u043e \u0438\u0437 \u043d\u0438\u0445 \u0435\u0441\u0442\u044c \u0442\u043e\u043a\u0435\u043d\u044b, \u0446\u0438\u043a\u043b \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442\u0441\u044f.", "creation_timestamp": "2026-03-25T17:00:07.000000Z"}, {"uuid": "01382921-5a06-4c56-ad62-95cec57bf4e4", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2026-33634", "type": "seen", "source": "https://bsky.app/profile/solomonneas.dev/post/3mie4zwukr227", "content": "", "creation_timestamp": "2026-03-31T12:03:03.729218Z"}, {"uuid": "9e0eaebb-0cbc-40ad-8ede-182101eb2077", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2026-33634", "type": "seen", "source": "https://bsky.app/profile/solomonneas.dev/post/3miebkdwc2u2v", "content": "", "creation_timestamp": "2026-03-31T13:23:48.987088Z"}, {"uuid": "41d71be7-872f-468e-8d05-76610f3182c2", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2026-33634", "type": "published-proof-of-concept", "source": "Telegram/GaMGzk6quMfkMjAkzI4lSk6nx3GpyIi67KywiajpwVCnbkI", "content": "", "creation_timestamp": "2026-03-30T21:00:05.000000Z"}, {"uuid": "803af1f4-b13f-49aa-886f-3cfae7cd90ed", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2026-33634", "type": "published-proof-of-concept", "source": "Telegram/Us8JkcdKV6mNpmC49CCSXRO4qTVWF6cCKabwDZ5lsVeRzZU", "content": "", "creation_timestamp": "2026-03-31T15:00:07.000000Z"}, {"uuid": "c1d50e0a-cab8-4f37-8645-613004e8c358", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2026-33634", "type": "published-proof-of-concept", "source": "https://t.me/true_secator/8036", "content": "\ud83e\udda0\u0420\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438 \u0437\u0430\u0449\u0438\u0442\u044b \u043e\u0442 CVE-2026-33634\n\n\u041a\u0430\u043a \u0441\u043e\u043e\u0431\u0449\u0430\u044e\u0442 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u044b \ud83d\udc9a \u00ab\u041b\u041a\u00bb, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0438 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0432 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0445 \u0440\u0435\u0435\u0441\u0442\u0440\u0430\u0445 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u044b\u043c\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u044b\u0439 \u043a\u043e\u0434 \u0431\u044b\u043b \u0432\u043d\u0435\u0434\u0440\u0435\u043d \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432 \u0434\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0438 \u0443\u0441\u043a\u043e\u043b\u044c\u0437\u043d\u0443\u043b \u043e\u0442 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0431\u044b\u043b \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433. CI/CD-\u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u044b \u0441\u0442\u0430\u043b\u0438 \u00ab\u043d\u043e\u0432\u044b\u043c \u043f\u0435\u0440\u0438\u043c\u0435\u0442\u0440\u043e\u043c\u00bb \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438.\n\n\u041d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 (Trivy binary 0.69.3, trivy-action 0.35.0, setup-trivy 0.2.6).\n\n\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u044b \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u043e\u0432 CI/CD \u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0418\u0411 \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0440\u0435\u0448\u0435\u043d\u0438\u044f Checkmarx (kics-github-action, ast-github-action) \u0438 Trivy (setup-trivy \u0438 trivy-action). \u0415\u0441\u043b\u0438 \u0432\u0430\u0448\u0438 \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0441\u0441\u044b\u043b\u0430\u043b\u0438\u0441\u044c \u043d\u0430 \u0442\u0435\u0433 \u0432\u0435\u0440\u0441\u0438\u0438, \u0430 \u043d\u0435 \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 SHA-\u0445\u0435\u0448, \u0442\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0432\u0430\u0448\u0438 \u0436\u0443\u0440\u043d\u0430\u043b\u044b \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0432 \u043f\u0435\u0440\u0438\u043e\u0434 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438.\n\n\u0422\u0430\u043a\u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u0436\u0443\u0440\u043d\u0430\u043b\u044b \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u043a \u0434\u043e\u043c\u0435\u043d\u0430\u043c scan.aquasecurtiy[.]org, checkmarx[.]zone \u0438 models.litellm[.]cloud. \u0415\u0433\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0441\u0432\u0438\u0434\u0435\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u0431 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u044d\u043a\u0441\u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u0444\u0438\u0434\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.\n\n\u0415\u0441\u043b\u0438 \u0432 \u0432\u0430\u0448\u0435\u0439 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430 GitHub \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c docs-tpcp, \u044d\u0442\u043e \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u0443\u044e \u043a\u0440\u0430\u0436\u0443 \u0434\u0430\u043d\u043d\u044b\u0445.\n\n\u0412 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u043f\u0440\u043e\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u0443\u0433\u0440\u043e\u0437 (threat hunting), \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u044f \u0443\u0441\u043f\u0435\u0448\u043d\u0443\u044e \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0430\u0446\u0438\u044e \u0438 \u0431\u044b\u0441\u0442\u0440\u043e\u0435 \u043f\u0440\u043e\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u043e\u0432 \u0432 \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u0442\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445.\n\n\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043d\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u0442\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0438\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0445 \u0430\u0440\u0445\u0438\u0432\u043e\u0432.\n\n\u0424\u0438\u043a\u0441\u0430\u0446\u0438\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0435\u043a\u0440\u0435\u0442\u0430\u043c\u0438. \u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0442\u043e\u0447\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0445\u0435\u0448\u0435\u0439 \u0432\u043e \u0432\u0441\u0435\u0445 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430\u0445 \u0438 Dockerfile. \u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u0435 \u043e\u0442 \u0434\u043e\u043b\u0433\u043e\u0436\u0438\u0432\u0443\u0449\u0438\u0445 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u043a \u043a\u0440\u0430\u0442\u043a\u043e\u0441\u0440\u043e\u0447\u043d\u044b\u043c \u0443\u0447\u0435\u0442\u043d\u044b\u043c \u0434\u0430\u043d\u043d\u044b\u043c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u0441\u0435\u043a\u0440\u0435\u0442\u043e\u0432, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 OIDC \u0442\u0430\u043c, \u0433\u0434\u0435 \u044d\u0442\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u041c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0439\u0442\u0435 \u0438\u043d\u044a\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u043a\u0440\u0435\u0442\u043e\u0432 \u0432 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u2014 \u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u044d\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c\u0438 \u0441\u0435\u043a\u0440\u0435\u0442\u0430\u043c\u0438. \u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0441\u0435\u043a\u0440\u0435\u0442\u044b \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u043d\u0430 \u0434\u0438\u0441\u043a \u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u0445.\n\n\u0414\u0440\u0443\u0433\u0438\u0435 \u043c\u0435\u0440\u044b \u0437\u0430\u0449\u0438\u0442\u044b. \u0420\u0430\u0437\u0440\u0435\u0448\u0430\u0439\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u043a GitHub Actions \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437 \u0437\u0430\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430, \u043e\u0434\u043e\u0431\u0440\u0435\u043d\u043d\u043e\u0433\u043e \u0432 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438, \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0439\u0442\u0435 \u043d\u043e\u0432\u044b\u0435 \u0438 \u043d\u0435\u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b. \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u0442\u0435 GITHUB_TOKEN \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043a\u043b\u044e\u0447\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0441 \u0441\u043e\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430 \u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0438\u0445 \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0439. \u041d\u0435 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c, \u0435\u0441\u043b\u0438 \u0432 \u044d\u0442\u043e\u043c \u043d\u0435\u0442 \u043f\u0440\u044f\u043c\u043e\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438.\n\n\u0414\u043b\u044f \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 GitHub Actions \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c:\n\n\u25aa\ufe0fzizmor \u2014 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u043e\u0448\u0438\u0431\u043e\u043a \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0432 GitHub Actions;\n\u25aa\ufe0fgato \u0438 Gato-X \u2014 \u0434\u0432\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430, \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0449\u0435\u0433\u043e \u0432\u044b\u044f\u0432\u043b\u044f\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u043e \u0443\u044f\u0437\u0432\u0438\u043c\u044b\u0435 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u044b;\n\u25aa\ufe0fallstar \u2014 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 GitHub, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u0435 OpenSSF \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0438\u0442\u0438\u043a \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0432 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f\u0445 \u0438 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u0445 GitHub.\n\n\u2b07\ufe0f \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0439 \u0440\u0430\u0437\u0431\u043e\u0440 \u0430\u0442\u0430\u043a\u0438 \u0447\u0435\u0440\u0435\u0437 \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u043f\u043e\u0441\u0442\u0430\u0432\u043e\u043a Trivy \u0438 LiteLLM \u0432 \u0431\u043b\u043e\u0433\u0435 \u041b\u041a.\n\n\u270b @Russian_OSINT", "creation_timestamp": "2026-03-26T15:18:25.000000Z"}, {"uuid": "a7fa3d38-e545-40f4-a585-45680918d8ee", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2026-33634", "type": "exploited", "source": "https://t.me/kasperskyb2b/2116", "content": "\ud83d\udea8 \u041a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0430\u0446\u0438\u044f Trivy,  Checkmarx \u0438 LiteLLM\n\n\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0441\u0442\u0430\u043b \u0442\u043e\u0447\u043a\u043e\u0439 \u0432\u0445\u043e\u0434\u0430 \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u043d\u044b\u0445 \u0430\u0442\u0430\u043a \u043d\u0430 \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u043f\u043e\u0441\u0442\u0430\u0432\u043e\u043a \u0437\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f. Trivy, \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u0441\u043a\u0430\u043d\u0435\u0440 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c, \u0431\u044b\u043b \u0441\u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d: \u0432 \u0435\u0433\u043e \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b GitHub Actions \u0438 \u043e\u0431\u0440\u0430\u0437\u044b Docker 19 \u043c\u0430\u0440\u0442\u0430 \u0431\u044b\u043b\u043e \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u043e \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u0435 \u041f\u041e. \u041a\u0430\u0436\u0434\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u0442\u0435\u043c \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u043b \u043a\u043b\u044e\u0447\u0438 SSH, \u0442\u043e\u043a\u0435\u043d\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043e\u0431\u043b\u0430\u043a\u0430\u043c AWS \u0438 GCP, .env-\u0444\u0430\u0439\u043b\u044b, \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430 CI/CD, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043a\u043e\u0448\u0435\u043b\u044c\u043a\u0438 \u043a\u0440\u0438\u043f\u0442\u043e\u0432\u0430\u043b\u044e\u0442 \u0438\u0437 \u0441\u0438\u0441\u0442\u0435\u043c, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u043b. \u042d\u0442\u0438 \u0443\u043a\u0440\u0430\u0434\u0435\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0430\u0446\u0438\u0438 \u043d\u043e\u0432\u044b\u0445 \u0441\u0440\u0435\u0434 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438.  \u0418\u043d\u0446\u0438\u0434\u0435\u043d\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0441\u0432\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 CVE-2026-33634 (CVSS4B 9.4).\n\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0447\u0442\u043e 44 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f, \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0449\u0438\u0445 Aqua Security, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0435\u0439 Trivy, \u0431\u044b\u043b\u0438 \u0437\u0430\u0445\u0432\u0430\u0447\u0435\u043d\u044b \u043c\u0435\u043d\u0435\u0435 \u0447\u0435\u043c \u0437\u0430 \u0434\u0432\u0435 \u043c\u0438\u043d\u0443\u0442\u044b. \n\n\u041f\u043e\u043b\u044c\u0437\u0443\u044f\u0441\u044c \u0441\u0432\u0435\u0436\u0435\u0443\u043a\u0440\u0430\u0434\u0435\u043d\u043d\u044b\u043c\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430\u043c\u0438, \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043b\u0438 \u0432 PyPI \u0442\u0440\u043e\u044f\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 LiteLLM, \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 Python \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043a \u0418\u0418-\u043c\u043e\u0434\u0435\u043b\u044f\u043c. \u041b\u044e\u0431\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430 \u0432\u0435\u0440\u0441\u0438\u0438 1.82.7 \u0438\u043b\u0438 1.82.8, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0441\u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439. \u0414\u0430\u043b\u0435\u0435 \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u0435 \u041f\u041e \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u043b\u043e \u0431\u044d\u043a\u0434\u043e\u0440\u044b \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u0445 Kubernetes \u0443 \u0436\u0435\u0440\u0442\u0432 \u0438 \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u043e \u0441\u0430\u043c\u043e\u0440\u0430\u0437\u043c\u043d\u043e\u0436\u0430\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u0447\u0435\u0440\u0432\u044f CanisterWorm \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u044b npm.\n\n\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0442\u0435 \u0436\u0435 \u0430\u0442\u0430\u043a\u0443\u044e\u0449\u0438\u0435 \u0441\u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0435\u0449\u0451 \u043e\u0434\u043d\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438, \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 GitHub \u0434\u043b\u044f Checkmarx KICS \u0438 AST. \u042d\u0442\u0430 \u0430\u0442\u0430\u043a\u0430 \u0431\u044b\u043b\u0430 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0430 \u0432 \u043f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a, 23 \u043c\u0430\u0440\u0442\u0430. \n\n\u041d\u0430\u043f\u0430\u0434\u0430\u044e\u0449\u0438\u0435 \u0437\u0430\u044f\u0432\u043b\u044f\u044e\u0442, \u0447\u0442\u043e \u043e\u043d\u0438 \u0443\u043a\u0440\u0430\u043b\u0438 \u0441\u043e\u0442\u043d\u0438 \u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0431\u043e\u043b\u0435\u0435 500 000 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439. \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u043d\u0438 \u044f\u043a\u043e\u0431\u044b \u0448\u0430\u043d\u0442\u0430\u0436\u0438\u0440\u0443\u044e\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u0440\u0443\u043f\u043d\u044b\u0445 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0439. \n\n\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u044b\u0432\u043e\u0434\u043e\u0432:\n\n\u25b6\ufe0f\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0438 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0432 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0445 \u0440\u0435\u0435\u0441\u0442\u0440\u0430\u0445 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u044b. \u0412\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u044b\u0439 \u043a\u043e\u0434 \u0431\u044b\u043b \u0432\u043d\u0435\u0434\u0440\u0451\u043d \u0432 \u0434\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0435, \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043f\u043e\u043c\u043e\u0433\u043b\u0438 \u0432\u044b\u044f\u0432\u0438\u0442\u044c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438;\n\u25b6\ufe0f \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u044b CI/CD \u0441\u0442\u0430\u043b\u0438 \u043d\u043e\u0432\u044b\u043c \u043f\u0435\u0440\u0438\u043c\u0435\u0442\u0440\u043e\u043c (\u0438\u0437\u0432\u0438\u043d\u0438\u0442\u0435 \u0437\u0430 \u043f\u0430\u0444\u043e\u0441). \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0441\u0431\u043e\u0440\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e\u0442 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438, \u043d\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044f \u0442\u043e\u0447\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u043e \u043f\u043e\u0434\u0432\u0435\u0440\u0436\u0435\u043d\u044b \u044d\u0442\u043e\u043c\u0443 \u043a\u043b\u0430\u0441\u0441\u0443 \u0430\u0442\u0430\u043a;\n\u25b6\ufe0f \u044d\u0444\u0444\u0435\u043a\u0442 \u043f\u043e\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u043e\u0433\u0440\u043e\u043c\u0435\u043d. \u0411\u043e\u043b\u0435\u0435 20,000 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u0432 \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0443\u044f\u0437\u0432\u0438\u043c\u044b\u0435 \u043a \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c \u0442\u0435\u0445\u043d\u0438\u043a\u0430\u043c.\n\n\u0410\u0442\u0430\u043a\u0443 \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0440\u0435\u0434\u043a\u0438\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c. \u041f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u0435 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0438 \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u0430\u043d\u0430\u043b\u0430 \u0438 \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 \u0418\u0411 \u0432 \u0446\u0435\u043b\u043e\u043c \u043b\u0435\u0433\u043a\u043e \u043f\u0440\u0438\u043f\u043e\u043c\u043d\u044f\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0445\u043e\u0436\u0438\u0445, \u0445\u043e\u0442\u044f \u0438 \u043c\u0435\u043d\u0435\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u043d\u044b\u0445 \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442\u043e\u0432 \u0437\u0430 \u043f\u0440\u043e\u0448\u043b\u044b\u0439 \u0433\u043e\u0434. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u00ab\u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u0438\u0438 \u041a\u0430\u0441\u043f\u0435\u0440\u0441\u043a\u043e\u0433\u043e\u00bb \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0438 \u043a\u0430\u043c\u043f\u0430\u043d\u0438\u044e \u0432 \u0442\u043e\u043c \u0436\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 PyPI, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0430\u043a\u0435\u0442\u044b, \u043c\u0430\u0441\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u0435\u0441\u044f \u043f\u043e\u0434 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 ChatGPT \u0438 Claude, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u043b\u0438 \u0412\u041f\u041e, \u043a\u0440\u0430\u0434\u0443\u0449\u0435\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0442\u044b\u0441\u044f\u0447\u0430\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432.\n\n\u041a\u0440\u0430\u0442\u043a\u043e \u043e \u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438: \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0439\u0442\u0435 (pin) \u0442\u043e\u0447\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0432\u043e \u0432\u0441\u0435\u0445 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430\u0445 \u0438 Dockerfile, \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u0435 \u043d\u0430  \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u043c \u0441\u0440\u043e\u043a\u043e\u043c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 \u0441\u0435\u043a\u0440\u0435\u0442\u043e\u0432, \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0435 MFA,  \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u0442\u044b\u0435 \u0430\u0442\u0430\u043a\u043e\u0439 \u0441\u0440\u0435\u0434\u044b \u0438\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432. \u0422\u0430\u043a\u0436\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u0443\u0433\u0440\u043e\u0437 (threat hunting) \u2014 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0439\u0442\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u0432\u0448\u0443\u044e\u0441\u044f \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0430\u0446\u0438\u044e \u0438 \u0431\u044b\u0441\u0442\u0440\u043e\u0435 \u043f\u0440\u043e\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u043e\u0432 \u0432 \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u0442\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445.\n\n#\u043d\u043e\u0432\u043e\u0441\u0442\u0438 @\u041f2\u0422", "creation_timestamp": "2026-03-25T14:47:40.000000Z"}, {"uuid": "1a3f9b0c-895f-4a0a-846d-b28348ee99e5", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2026-33634", "type": "seen", "source": "https://t.me/GithubRedTeam/77860", "content": "\ud83d\udea8 GitHub \u76d1\u63a7\u6d88\u606f\u63d0\u9192\n\n\ud83d\udea8 \u53d1\u73b0\u5173\u952e\u8bcd\uff1a #CVE-2026\n\n\ud83d\udce6 \u9879\u76ee\u540d\u79f0\uff1a teampcp-tools\n\ud83d\udc64 \u9879\u76ee\u4f5c\u8005\uff1a Unit221B\n\ud83d\udee0 \u5f00\u53d1\u8bed\u8a00\uff1a Python\n\u2b50 Star\u6570\u91cf\uff1a 0  |  \ud83c\udf74 Fork\u6570\u91cf\uff1a 0\n\ud83d\udcc5 \u66f4\u65b0\u65f6\u95f4\uff1a 2026-03-29 21:38:07\n\n\ud83d\udcdd \u9879\u76ee\u63cf\u8ff0\uff1a\nDetection, eradication, and IOC tools for the TeamPCP/Cipherforce supply chain attack (CVE-2026-33634)\n\n\ud83d\udd17 \u70b9\u51fb\u8bbf\u95ee\u9879\u76ee\u5730\u5740", "creation_timestamp": "2026-03-29T22:00:03.000000Z"}, {"uuid": "a52728b4-8a7d-4c6e-900e-58d40d30b0ed", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2026-33634", "type": "seen", "source": "https://t.me/kasperskyb2b/2120", "content": "Trivy \u0438 LiteLLM \u043f\u043e\u0434 \u0443\u0434\u0430\u0440\u043e\u043c, \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u044f BPFdoor \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f APT \u0437\u0430 \u043d\u0435\u0434\u0435\u043b\u044e\n\n\ud83d\udd25\u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0441\u0430\u043c\u0430\u044f \u0437\u043d\u0430\u0447\u0438\u043c\u0430\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u044c \u043c\u0435\u0441\u044f\u0446\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0435\u0449\u0451 \u043d\u0435 \u0440\u0430\u0437 \u043d\u0430\u043c \u0430\u0443\u043a\u043d\u0435\u0442\u0441\u044f \u2014 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0430\u0446\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0418\u0418-\u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438 LiteLLM, \u0441\u043a\u0430\u043d\u0435\u0440\u043e\u0432 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 Trivy \u0438 Checkmarx. \u0418\u043d\u0446\u0438\u0434\u0435\u043d\u0442\u0443 \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d CVE-2026-33634 (CVSS 9.4). \u0412\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u0435 \u041f\u041e, \u043d\u0430\u043f\u043e\u043c\u043d\u0438\u043c, \u0442\u0430\u0449\u0438\u0442 SSH\u2011\u043a\u043b\u044e\u0447\u0438, \u0441\u0435\u043a\u0440\u0435\u0442\u044b CI/CD,  \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 AWS \u0438 GCP, \u0441\u0435\u043a\u0440\u0435\u0442\u044b k8 \u0438 \u0434\u0430\u0436\u0435  \u043a\u0440\u0438\u043f\u0442\u043e\u043a\u043e\u0448\u0435\u043b\u044c\u043a\u0438. \u0421\u043b\u0435\u0434\u043e\u043c \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u044b npm \u0431\u044b\u043b \u0432\u044b\u043f\u0443\u0449\u0435\u043d \u0447\u0435\u0440\u0432\u044c CanisterWorm.\n\n\ud83d\udcf1APT Red Menshen \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c BPFDoor, \u0441\u043a\u0440\u044b\u0442\u043d\u044b\u0439 Linux\u2011\u0431\u044d\u043a\u0434\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u043b\u043e\u0443\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u0435\u0442 eBPF \u0438 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u00ab\u0432\u043e\u043b\u0448\u0435\u0431\u043d\u043e\u0433\u043e\u00bb \u043f\u0430\u043a\u0435\u0442\u0430. \u0412 \u043d\u043e\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u044b \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432 HTTPS\u2011\u0442\u0440\u0430\u0444\u0438\u043a, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435. \u0413\u0440\u0443\u043f\u043f\u0430 \u0447\u0451\u0442\u043a\u043e \u043d\u0430\u0446\u0435\u043b\u0435\u043d\u0430 \u043d\u0430 \u0442\u0435\u043b\u0435\u043a\u043e\u043c\u2011\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0438 \u0433\u043e\u0441\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b. \u041f\u0440\u043e\u043d\u0438\u043a\u0430\u044e\u0442  \u0432 \u0441\u0435\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0443\u044f\u0437\u0432\u0438\u043c\u044b\u0435 \u043f\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 Ivanti, Cisco, Fortinet \u0438 Palo Alto. \u0414\u043b\u044f \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0443\u0447\u0451\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438, \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u043d\u044b\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u0442\u0435\u043b\u0435\u043a\u043e\u043c-\u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430\u043c\u0438. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 BPFDoor \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b \u0438\u043d\u0441\u043f\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0440\u0430\u0444\u0438\u043a \u0441\u0438\u0433\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 SCTP,  \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u0430\u0442\u0430\u043a\u0443\u044e\u0449\u0438\u043c \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u0432\u0441\u0435\u043c\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u0430\u0431\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0442\u0435\u043b\u0435\u043a\u043e\u043c-\u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430.\n\n\ud83d\udd3b\u0410\u043d\u0430\u043b\u0438\u0437 \u044d\u043a\u0441\u043f\u0435\u0440\u0442\u043e\u0432 \u00ab\u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u0438\u0438 \u041a\u0430\u0441\u043f\u0435\u0440\u0441\u043a\u043e\u0433\u043e\u00bb  \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043b \u0441\u0432\u044f\u0437\u044c \u043c\u0435\u0436\u0434\u0443 \u044d\u043a\u0441\u043f\u043b\u043e\u0439\u0442\u2011\u043a\u0438\u0442\u043e\u043c Coruna \u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0435\u0439 \u00ab\u0422\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u044f\u00bb. \n\n\ud83d\udfe2 \u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u0430\u0442\u0430\u043a\u0438 \u043d\u0430 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u0443\u044e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044e \u0432 \u042e\u0412\u0410: \u0441\u0432\u044f\u0437\u043a\u0430 \u0431\u044d\u043a\u0434\u043e\u0440\u0430 Brushworm \u0438 \u043a\u0435\u0439\u043b\u043e\u0433\u0433\u0435\u0440\u0430 Brushlogger \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 USB\u2011\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u0438, \u043f\u043e\u0445\u0438\u0449\u0430\u0435\u0442 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b \u0438 \u0430\u0440\u0445\u0438\u0432\u044b \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b.\n\n\ud83d\udfe2\u0420\u0430\u0437\u0431\u043e\u0440 \u0412\u041f\u041e PRISMEX, \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0433\u043e APT28. \u041e\u043d\u043e \u0431\u044b\u043b\u043e \u0437\u0430\u043c\u0435\u0447\u0435\u043d\u043e \u0432 \u0430\u0442\u0430\u043a\u0430\u0445, \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u0434\u0432\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u043d\u0443\u043b\u0435\u0432\u043e\u0433\u043e \u0434\u043d\u044f \u0432 Microsoft Office (CVE-2026-21509 \u0438 CVE-2026-21513). PRISMEX \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u0442\u0435\u0433\u0430\u043d\u043e\u0433\u0440\u0430\u0444\u0438\u044e, \u0442\u0435\u0445\u043d\u0438\u043a\u0443 COM hijacking \u0434\u043b\u044f \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u044f \u0438 \u0437\u043b\u043e\u0443\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u0435\u0442 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u043c \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u043c Filen io \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u04212.\n\n\ud83d\udfe3APT Silver Fox \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442 \u0444\u0438\u0448\u0438\u043d\u0433\u043e\u0432\u044b\u0435 \u043a\u0430\u043c\u043f\u0430\u043d\u0438\u0438 \u043f\u043e\u0434 \u0432\u0438\u0434\u043e\u043c \u043d\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u0445 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439 \u043f\u043e \u0441\u0442\u0440\u0430\u043d\u0430\u043c \u042e\u0433\u043e\u2011\u0412\u043e\u0441\u0442\u043e\u0447\u043d\u043e\u0439 \u0410\u0437\u0438\u0438, \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044f ValleyRAT \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u043c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 Gh0st RAT \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c HoldingHands \u0438 \u0438\u043d\u0444\u043e\u0441\u0442\u0438\u043b\u0435\u0440 \u043d\u0430 Python, \u0437\u0430\u043c\u0430\u0441\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0434 WhatsApp. \u0413\u0440\u0443\u043f\u043f\u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0441\u043e\u0447\u0435\u0442\u0430\u0442\u044c \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u043e \u043c\u043e\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0430\u0442\u0430\u043a\u0438 \u0441\u043e \u0448\u043f\u0438\u043e\u043d\u0430\u0436\u0435\u043c. \n\n\ud83e\udd2a\u041d\u0435 \u043f\u0443\u0442\u0430\u0435\u043c PaaS \u0438 PaaS!  EvilTokens, \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u00ab\u0444\u0438\u0448\u0438\u043d\u0433 \u043a\u0430\u043a \u0443\u0441\u043b\u0443\u0433\u0430\u00bb (Phishing as a Service) \u0437\u043b\u043e\u0443\u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u0435\u0442 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 Railway.com (Platform as a Service) \u0434\u043b\u044f \u043a\u0440\u0430\u0436\u0438 \u0442\u043e\u043a\u0435\u043d\u043e\u0432 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 Microsoft 365 \u0443 \u0441\u043e\u0442\u0435\u043d \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0439 \u0432 \u0421\u0428\u0410, \u041a\u0430\u043d\u0430\u0434\u0435, \u0410\u0432\u0441\u0442\u0440\u0430\u043b\u0438\u0438, \u041d\u043e\u0432\u043e\u0439 \u0417\u0435\u043b\u0430\u043d\u0434\u0438\u0438 \u0438 \u0413\u0435\u0440\u043c\u0430\u043d\u0438\u0438.\n\n\ud83d\udd34\u0410\u043d\u0430\u043b\u0438\u0437 \u0430\u0442\u0430\u043a \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c PXA Stealer, \u043d\u0430\u0446\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u043d\u0430 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0435 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u043c\u0438\u0440\u0443.\n\n\ud83d\udcf1 \u041e\u0431\u0437\u043e\u0440 12 \u043d\u043e\u0432\u044b\u0445 \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432 \u0441\u0442\u0438\u043b\u0435\u0440\u043e\u0432, \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u043c\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 Telegram\u2011\u0431\u043e\u0442\u043e\u0432.\n\n#\u0434\u0430\u0439\u0434\u0436\u0435\u0441\u0442 #APT @\u041f2\u0422", "creation_timestamp": "2026-03-30T07:33:05.000000Z"}, {"uuid": "6e4d1c6d-20cd-4bed-813a-ea2447cec232", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2026-33634", "type": "exploited", "source": "https://t.me/true_secator/8027", "content": "\u0412 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435: \u0435\u0449\u0435 \u0434\u0432\u0430 \u0440\u0430\u0431\u043e\u0447\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 GitHub Actions \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0441\u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u044b\u043c \u041f\u041e TeamPCP. \u0412 \u0446\u0435\u043b\u043e\u043c, \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0430\u0446\u0438\u044f \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u043e\u043a \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c CVE-2026-33634\u00a0(CVSS: 9,4).\n\n\u041f\u0440\u0438\u0447\u0435\u043c \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0435\u0439 Checkmarx, \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0435\u0439\u0441\u044f \u043d\u0430 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u043e\u043a: checkmarx/ast-github-action \u0438 checkmarx/kics-github-action.\n\nSysdig \u0441\u043e\u043e\u0431\u0449\u0438\u043b\u0430, \u0447\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u0447\u0435\u0442\u044b\u0440\u0435 \u0434\u043d\u044f \u043f\u043e\u0441\u043b\u0435 \u0432\u0437\u043b\u043e\u043c\u0430 19 \u043c\u0430\u0440\u0442\u0430 2026 \u0433\u043e\u0434\u0430 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0434\u043b\u044f \u043a\u0440\u0430\u0436\u0438 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u0443\u044e \u0442\u043e\u0439, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u0445 TeamPCP, \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u043d\u0430 Trivy \u043e\u0442 Aqua Security \u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u043d\u0438\u043c GitHub Actions.\n\n\u042d\u0442\u043e \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0443\u043a\u0440\u0430\u0434\u0435\u043d\u043d\u044b\u0435 \u0443\u0447\u0435\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0432\u0437\u043b\u043e\u043c\u0430 Trivy \u0431\u044b\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b \u0434\u043b\u044f \u043e\u0442\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0432 \u0437\u0430\u0442\u0440\u043e\u043d\u0443\u0442\u044b\u0445 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u0445.\n\n\u041a\u0430\u043a \u0443\u0436\u0435 \u043e\u0442\u043c\u0435\u0447\u0430\u043b\u043e\u0441\u044c, TeamPCP Cloud stealer \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u0434\u043b\u044f \u043a\u0440\u0430\u0436\u0438 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0441\u0435\u043a\u0440\u0435\u0442\u043e\u0432, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u043a\u043b\u044e\u0447\u0430\u043c\u0438 SSH, Git, Amazon Web Services (AWS), Google Cloud, Microsoft Azure, Kubernetes, Docker, \u0444\u0430\u0439\u043b\u0430\u043c\u0438 .env, \u0431\u0430\u0437\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 VPN, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439 CI/CD, \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u043a\u0440\u0438\u043f\u0442\u043e\u0432\u0430\u043b\u044e\u0442\u043d\u044b\u0445 \u043a\u043e\u0448\u0435\u043b\u044c\u043a\u043e\u0432 \u0438 URL-\u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0432\u0435\u0431-\u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0447\u0438\u043a\u043e\u0432 Slack \u0438 Discord.\n\n\u041a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 Trivy, \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0438, \u043a\u0430\u043a \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c, \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442 \u0442\u0435\u0433\u0438 \u043a \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u044b\u043c \u043a\u043e\u043c\u043c\u0438\u0442\u0430\u043c, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u043c \u043f\u043e\u043b\u0435\u0437\u043d\u0443\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0434\u043b\u044f \u043a\u0440\u0430\u0436\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 (setup.sh). \u0423\u043a\u0440\u0430\u0434\u0435\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u044d\u043a\u0441\u0444\u0438\u043b\u044c\u0442\u0440\u0443\u044e\u0442\u0441\u044f \u0432 \u0434\u043e\u043c\u0435\u043d checkmarx[.]zone (IP-\u0430\u0434\u0440\u0435\u0441: 83.142.209[.]11:443) \u0432 \u0432\u0438\u0434\u0435 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0430\u0440\u0445\u0438\u0432\u0430 (tpcp.tar.gz).\n\n\u041d\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 docs-tpcp, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f GITHUB_TOKEN \u0436\u0435\u0440\u0442\u0432\u044b, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u0443\u043a\u0440\u0430\u0434\u0435\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0439 \u043a\u043e\u043f\u0438\u0438 \u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439, \u0435\u0441\u043b\u0438 \u0443\u0442\u0435\u0447\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u043d\u0435 \u0443\u0434\u0430\u0441\u0442\u0441\u044f. \u0412 \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442\u0435 \u0441 Trivy \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0438\u043c\u044f tpcp-docs.\n\n\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043e\u043c\u0435\u043d\u043e\u0432, \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0445 \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0430, \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0437\u0430\u0440\u0430\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f - \u044d\u0442\u043e \u043f\u0440\u0435\u0434\u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u044b\u0439 \u043e\u0431\u043c\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u0435\u043c. \u0410\u043d\u0430\u043b\u0438\u0442\u0438\u043a, \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e\u0449\u0438\u0439 \u0436\u0443\u0440\u043d\u0430\u043b\u044b CI/CD, \u0443\u0432\u0438\u0434\u0438\u0442 \u0442\u0440\u0430\u0444\u0438\u043a curl, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u043f\u043e-\u0432\u0438\u0434\u0438\u043c\u043e\u043c\u0443, \u0432\u0435\u0434\u0435\u0442 \u043d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0434\u043e\u043c\u0435\u043d \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0430 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u0447\u0442\u043e \u0441\u043d\u0438\u0437\u0438\u0442 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0432\u0440\u0443\u0447\u043d\u0443\u044e.\n\n\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0446\u0435\u043b\u044c \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u0430 - \u0441\u0431\u043e\u0440 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438 CI-\u0440\u0430\u043d\u043d\u0435\u0440\u0430, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430\u043c \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0442\u044c \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u043e\u043a\u0435\u043d\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u0430 GitHub (PAT) \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u0435\u043a\u0440\u0435\u0442\u044b \u0438\u0437 \u0441\u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 Trivy, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0445 \u0432 \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435.\n\n\u0425\u0443\u0436\u0435 \u0442\u043e\u0433\u043e, \u0435\u0441\u043b\u0438 \u044d\u0442\u0438 \u0442\u043e\u043a\u0435\u043d\u044b \u0438\u043c\u0435\u044e\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u043a \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0430\u043a\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f Checkmarx, \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0434\u043b\u044f \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430.\n\n\u042d\u0442\u043e, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043f\u0443\u0442\u044c \u043a \u043a\u0430\u0441\u043a\u0430\u0434\u043d\u043e\u043c\u0443 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u043e\u043a, \u043a\u043e\u0433\u0434\u0430 \u043e\u0434\u043d\u043e \u043e\u0442\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u0435\u043a\u0440\u0435\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u0431\u043b\u0435\u0433\u0447\u0435\u043d\u0438\u044f \u043e\u0442\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439.\n\n\u0418\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430, \u0441\u0445\u0435\u043c\u0430 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0441\u043e\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0435 \u043e\u0431 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0438 tpcp.tar.gz \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u044e\u0442, \u0447\u0442\u043e \u044d\u0442\u043e \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a, \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u044e\u0449\u0438\u0439 \u0441\u0432\u043e\u044e \u0434\u0435\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0437\u043b\u043e\u043c\u0430 Trivy.\n\n\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043a\u043e\u0434\u0430 \u0438 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u0434\u0430\u043b\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u044b\u0439 \u043a\u043e\u0434 \u0431\u044b\u043b \u0432\u043d\u0435\u0434\u0440\u0435\u043d \u0432 \u0434\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0432 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0435.", "creation_timestamp": "2026-03-24T16:00:07.000000Z"}, {"uuid": "99e60eff-60de-434c-8404-6e58c2bfcdad", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2026-33634", "type": "published-proof-of-concept", "source": "https://t.me/bdufstecru/3038", "content": "\u0423\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u044c \u0441\u043a\u0430\u043d\u0435\u0440\u0430 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 Trivy \u0441\u0432\u044f\u0437\u0430\u043d\u0430 \u0441 \u043d\u0430\u043b\u0438\u0447\u0438\u0435\u043c \u043e\u043f\u0430\u0441\u043d\u044b\u0445 \u043d\u0435\u0434\u0435\u043a\u043b\u0430\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439. \u042d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c \u043d\u0430\u0440\u0443\u0448\u0438\u0442\u0435\u043b\u044e, \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c\u0443 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e, \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0435\u0441\u0430\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u043c\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438\n\nBDU:2026-03951\nCVE-2026-33634\n\n\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 \u0438\u0437 \u0434\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432. \u0412 \u0441\u0432\u044f\u0437\u0438 \u0441\u043e \u0441\u043b\u043e\u0436\u0438\u0432\u0448\u0435\u0439\u0441\u044f \u043e\u0431\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u043e\u0439 \u0438 \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u043c\u0438 \u0441\u0430\u043d\u043a\u0446\u0438\u044f\u043c\u0438 \u043f\u0440\u043e\u0442\u0438\u0432 \u0420\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u043e\u0439 \u0424\u0435\u0434\u0435\u0440\u0430\u0446\u0438\u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u043e\u0446\u0435\u043d\u043a\u0438 \u0432\u0441\u0435\u0445 \u0441\u043e\u043f\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0440\u0438\u0441\u043a\u043e\u0432.\n\n\u041a\u043e\u043c\u043f\u0435\u043d\u0441\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u043c\u0435\u0440\u044b:\n- \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f;\n- \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f (\u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043c\u0435\u0442\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430 \"\u041c\u0435\u0442\u043e\u0434\u0438\u043a\u0430 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e-\u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\" (\u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d 28 \u043e\u043a\u0442\u044f\u0431\u0440\u044f 2022 \u0433\u043e\u0434\u0430));\n- \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u0430\u043d\u0442\u0438\u0432\u0438\u0440\u0443\u0441\u043d\u043e\u0439 \u0437\u0430\u0449\u0438\u0442\u044b \u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0434\u043b\u044f \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u044b\u0445 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0432 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u043c \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0438;\n- \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438;\n- \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 SIEM-\u0441\u0438\u0441\u0442\u0435\u043c \u0434\u043b\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u0439, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435\u043c \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0434\u043e\u043c\u0435\u043d\u0430\u043c: scan.aquasecurtiy.org, checkmarx.zone \u0438 models.litellm.cloud;\n- \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u0432 \u0434\u043b\u044f \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 GitHub \u043d\u0430 \u043f\u0440\u0435\u0434\u043c\u0435\u0442 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0441 \u0438\u043c\u0435\u043d\u0435\u043c docs-tpcp;\n- \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435/\u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0443\u0447\u0451\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439;\n- \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0439;\n- \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0438\u0437 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0441\u0435\u0442\u0435\u0439 (\u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442);\n- \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0413\u041e\u0421\u0422 \u0420 56939-2024 \u00ab\u0417\u0430\u0449\u0438\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f. \u041e\u0431\u0449\u0438\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u00bb.\n\n\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0439:\nhttps://github.com/aquasecurity/trivy/discussions/10425", "creation_timestamp": "2026-03-27T13:07:00.000000Z"}, {"uuid": "f8eb2abb-0142-43af-a25a-2af635f8ca4f", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2026-33634", "type": "seen", "source": "https://t.me/GithubRedTeam/77074", "content": "\ud83d\udea8 GitHub \u76d1\u63a7\u6d88\u606f\u63d0\u9192\n\n\ud83d\udea8 \u53d1\u73b0\u5173\u952e\u8bcd\uff1a #CVE-2026\n\n\ud83d\udce6 \u9879\u76ee\u540d\u79f0\uff1a teampcp-supply-chain-attack\n\ud83d\udc64 \u9879\u76ee\u4f5c\u8005\uff1a ugurrates\n\ud83d\udee0 \u5f00\u53d1\u8bed\u8a00\uff1a None\n\u2b50 Star\u6570\u91cf\uff1a 0  |  \ud83c\udf74 Fork\u6570\u91cf\uff1a 0\n\ud83d\udcc5 \u66f4\u65b0\u65f6\u95f4\uff1a 2026-03-25 00:11:06\n\n\ud83d\udcdd \u9879\u76ee\u63cf\u8ff0\uff1a\nCVE-2026-33634 (CVSS 9.4) \u2014 The most impactful CI/CD supply chain attack of 2026 so far.\n\n\ud83d\udd17 \u70b9\u51fb\u8bbf\u95ee\u9879\u76ee\u5730\u5740", "creation_timestamp": "2026-03-25T01:00:04.000000Z"}, {"uuid": "0ef09a55-282d-419e-a98e-b2cac8177e94", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "cve-2026-33634", "type": "seen", "source": "https://bsky.app/profile/ramimacisabird.blueat.net/post/3mkkowhbp6v2z", "content": "", "creation_timestamp": "2026-04-28T13:29:36.235282Z"}, {"uuid": "7ba5d370-a1f7-4617-8b83-2120cc328be8", "vulnerability_lookup_origin": "1a89b78e-f703-45f3-bb86-59eb712668bd", "author": "9f56dd64-161d-43a6-b9c3-555944290a09", "vulnerability": "CVE-2026-33634", "type": "seen", "source": "https://gist.github.com/julienlivenais/86cf0447c778de0c03faa7113fc295b4", "content": "# Synth\u00e8se ex\u00e9cutive \u2014 Agent IA Personnel / Double Num\u00e9rique\n\n&gt; **Date** : 16 mai 2026\n&gt; **Scope** : 32 agents de recherche (15 recherche initiale + 5 audit + 6 veille cibl\u00e9e mai 2026 + 6 gaps), 50+ subreddits, 400+ recherches, 250+ sources.\n&gt; **Cas cible** : agent IA personnel \"double num\u00e9rique\" pour founder/operator, Mac d\u00e9di\u00e9 M4 Pro 64GB, Obsidian + docs internes + Slack + meeting notes, FR/EN.\n\n---\n\n## Les 10 d\u00e9cisions structurantes\n\n| # | Question | R\u00e9ponse courte | Confiance | D\u00e9tail |\n|---|----------|---------------|-----------|--------|\n| 1 | Faut-il un RAG vectoriel ? | **Pas au d\u00e9marrage.** File-first + MCP live couvre &lt; 2M tokens (~1500 pages). RAG seulement si le corpus d\u00e9passe la context window. | Haute | [D1](02-decisions/D1-file-first-vs-rag.md) |\n| 2 | Quelle architecture m\u00e9moire ? | **4 couches** : working (context window), \u00e9pisodique (SQLite FTS5), s\u00e9mantique (vector store), proc\u00e9durale (fichiers versionn\u00e9s). | Haute | [D2](02-decisions/D2-memoire.md) |\n| 3 | Quel mod\u00e8le d'embedding FR/EN ? | **BGE-M3** (dense+sparse+ColBERT, 100+ langues). Alternative l\u00e9g\u00e8re : Qwen3-Embedding-0.6B (CPU, 20-100ms/chunk). | Haute | [D3](02-decisions/D3-embeddings.md) |\n| 4 | Quelle base vectorielle ? | **Qdrant** (pre-filtering metadata, hybrid natif). Alternative embedded : Qdrant Edge ou LanceDB. | Moyenne | [D4](02-decisions/D4-vector-db.md) |\n| 5 | Quelle strat\u00e9gie de retrieval ? | **Hybrid (BM25 + vector) + reranker**. +22pts recall vs vector seul. bge-reranker-v2-m3 pour FR/EN. | Haute | [D5](02-decisions/D5-retrieval.md) |\n| 6 | Quel runtime agent ? | **DIY (Claude Code + fichiers + MCP)** pour le contr\u00f4le. Hermes Agent si besoin de skill learning. | Moyenne | [D6](02-decisions/D6-agent-runtime.md) |\n| 7 | Quels LLMs, rout\u00e9s comment ? | **Local** : Qwen3.5-35B-A3B MoE (60-106 tok/s M4 Pro). **API** : Claude Sonnet via OpenRouter. **Grading** : Haiku. LiteLLM comme proxy unifi\u00e9. | Haute | [D7](02-decisions/D7-llm-routing.md) |\n| 8 | Comment c\u00e2bler les flux ? | **n8n** pour les workflows \u00e9v\u00e9nementiels (Slack, email, calendar). launchd pour les crons Mac. HITL via Slack threads. | Moyenne | [D8](02-decisions/D8-orchestration.md) |\n| 9 | Quelle infra sur Mac ? | Ollama **natif** (MLX, pas Docker). Tout le reste en Docker Compose. Tailscale pour l'acc\u00e8s distant. | Haute | [D9](02-decisions/D9-infra-mac.md) |\n\n## Les 5 v\u00e9rit\u00e9s inconfortables\n\n1. **Le produit \"digital twin for founder\" n'existe pas.** Viven ($35M, enterprise), Lindy (automation), Read.ai Ada (email only) couvrent chacun un fragment. Il faut construire, pas acheter.\n\n2. **72% des RAG enterprise \u00e9chouent la premi\u00e8re ann\u00e9e.** La cause #1 n'est pas le mod\u00e8le \u2014 c'est l'ingestion. 80% des \u00e9checs tracent vers la couche de chunking, pas le LLM.\n\n3. **80-90% des projets agents \u00e9chouent en production** (RAND). Sur 67K projets trac\u00e9s, 99% de taux d'\u00e9chec cr\u00e9ateurs. Les agents rentables sont narrow, born\u00e9s, et ennuyeux.\n\n4. **La confiance des \u00e9quipes est le vrai goulot.** 75% acceptent un IA coll\u00e8gue, mais seulement 30% font confiance \u00e0 un IA manager. D\u00e9marrer avec human-in-the-loop sur tout, r\u00e9duire progressivement.\n\n5. **Le co\u00fbt d'un RAG vectoriel complet est rarement justifi\u00e9 pour un usage personnel.** Claude 4.6 offre 1M tokens sans surco\u00fbt. Pour &lt; 50 queries/jour sur &lt; 1M tokens, le long-context brut peut \u00eatre moins cher que le pipeline RAG.\n\n## L'approche recommand\u00e9e : 3 phases progressives\n\n```\nPhase 1 (Semaine 1)         Phase 2 (Mois 1)           Phase 3 (Si n\u00e9cessaire)\nFILE-FIRST + MCP            + M\u00c9MOIRE STRUCTUR\u00c9E        + RAG VECTORIEL\n\nOllama natif (MLX)          + SQLite FTS5               + Qdrant Docker\n+ Qwen3.5 35B-A3B          + daily logs markdown        + BGE-M3 (dense+sparse)\n+ Claude Sonnet (OR)        + MEMORY.md v\u00e9rit\u00e9s          + bge-reranker-v2-m3\n+ vault-mcp / MCPVault      + m\u00e9moire \u00e9pisodique         + hybrid search\n+ Slack MCP                 + m\u00e9moire proc\u00e9durale        + metadata filtering\n```\n\n**Crit\u00e8re de passage** : Phase 1 \u2192 2 si file-first donne &lt; 70% de bonnes r\u00e9ponses. Phase 2 \u2192 3 si le corpus d\u00e9passe ~2M tokens.\n\n## Navigation\n\n| Fichier | Contenu |\n|---------|---------|\n| [01-probleme.md](01-probleme.md) | Problem space, gap analysis produits, use cases r\u00e9els, cadre de confiance |\n| [02-decisions/](02-decisions/) | 9 decision docs avec evidence, benchmarks, positions divergentes |\n| [03-sources/](03-sources/) | Fiches d'ingestion par type de source (Obsidian, Slack, meetings, email, docs) |\n| [04-implementation.md](04-implementation.md) | Playbook phase par phase, commandes exactes, crit\u00e8res de test |\n| [05-operations.md](05-operations.md) | Monitoring, backup, pipeline d'update, \u00e9valuation qualit\u00e9, co\u00fbts |\n| [06-risques.md](06-risques.md) | Registre de risques (technique, trust, l\u00e9gal, s\u00e9curit\u00e9) |\n| [07-sources-annotees.md](07-sources-annotees.md) | 60+ sources annot\u00e9es (cr\u00e9dibilit\u00e9, takeaway, pertinence) |\n\n\n---\n\n\n# 01 \u2014 Le Problem Space\n\n&gt; Pourquoi construire un digital twin. Ce qui existe. Ce qui manque. Les vrais use cases. Les fronti\u00e8res de confiance.\n\n---\n\n## 1. Le besoin r\u00e9el\n\n```\nUn agent IA qui :\n\u251c\u2500\u2500 Conna\u00eet mes process, projets, d\u00e9cisions\n\u251c\u2500\u2500 Peut r\u00e9pondre \u00e0 mes \u00e9quipes en mon nom\n\u251c\u2500\u2500 Pr\u00e9serve la m\u00e9moire institutionnelle\n\u251c\u2500\u2500 Trie, priorise, pr\u00e9pare \u2014 avant que je ne commence ma journ\u00e9e\n\u2514\u2500\u2500 Apprend de mes corrections et s'am\u00e9liore\n\nSources :\n\u251c\u2500\u2500 Notes Markdown (Obsidian, ~milliers)\n\u251c\u2500\u2500 Slack (channels Netwo + Perso)\n\u251c\u2500\u2500 Docs internes (PDFs, Google Docs, runbooks)\n\u251c\u2500\u2500 Meeting notes (transcriptions FR/EN)\n\u2514\u2500\u2500 Historique de d\u00e9cisions (conversations pass\u00e9es)\n\nContraintes :\n\u251c\u2500\u2500 Mac d\u00e9di\u00e9 M4 Pro 64GB\n\u251c\u2500\u2500 FR/EN bilingue (code-switching fr\u00e9quent)\n\u251c\u2500\u2500 Deux univers \u00e9tanches : Netwo (pro) / Perso (JKL)\n\u251c\u2500\u2500 Privacy-first : donn\u00e9es sur infra locale\n\u2514\u2500\u2500 Claude CLI comme runtime principal (pas d'API key Anthropic directe)\n```\n\nCe besoin n'a pas de nom de cat\u00e9gorie produit \u00e9tabli. \"Digital twin\" est utilis\u00e9 par le marketing enterprise (Viven, Kyndryl) pour des usages tr\u00e8s diff\u00e9rents (IT infra, manufacturing). \"AI Chief of Staff\" est la cat\u00e9gorie \u00e9mergente la plus proche, mais les produits existants ne couvrent qu'une tranche du spectre.\n\n---\n\n## 2. Gap analysis \u2014 ce qui existe en mai 2026\n\n### Produits \"digital twin\" professionnel\n\n| Produit | Lev\u00e9e | Ce qu'il fait | Ce qu'il ne fait pas | Pour toi ? |\n|---------|-------|---------------|---------------------|------------|\n| **Viven** | $35M (Khosla) | Twin par employ\u00e9, query quand la personne est indispo. Genpact (140K employ\u00e9s) en prod. | Pas self-hosted, pas pour individuel, enterprise only | Non |\n| **Read.ai Ada** | \u2014 (5M+ MAU) | Twin email : scheduling, r\u00e9ponses knowledge graph, follow-ups. Sidebar review obligatoire. | Email only. 1.5/5 Trustpilot, permissions agressives. Pas de m\u00e9moire cross-sessions. | Non (scope trop \u00e9troit) |\n| **Kyndryl Digital Twin** | \u2014 | IT pr\u00e9dictif + auto-r\u00e9solution sur Microsoft Foundry | Infrastructure IT, pas knowledge worker | Non |\n| **JuliaHub Dyad 3.0** | $65M | Digital twins industriels (machines physiques) | Manufacturing, pas personnel | Non |\n\n**Verdict** : le march\u00e9 \"digital twin d'un fondateur/op\u00e9rateur\" est **un espace vide**. Aucun produit ne cible ce use case.\n\n### Produits \"AI Chief of Staff\"\n\n| Produit | Prix | Forces | Limites |\n|---------|------|--------|---------|\n| **Ambient** | $100/mois | Context engineering, Daily Briefing, Key Initiatives, SOC 2 | SaaS, pas self-hosted |\n| **alfred_** | $24.99/mois | Triage email overnight, drafts en ta voix | Email-centric |\n| **Prio** | N/A | Inbox/calendrier/follow-ups, actions par approbation | Early stage |\n| **Clawdi** | N/A | Agent cloud persistent, orchestration email/CRM/code, base OpenClaw | D\u00e9pendance cloud |\n| **Lindy.ai** | $19.99-$299/mois | 5000+ int\u00e9grations, Gaia voice (&lt;500ms), Computer Use, SOC2/HIPAA/GDPR | Credit-based pricing brutal, pas self-hosted |\n| **Xembly** | MORT | \u2014 | Service arr\u00eat\u00e9 juin 2024 |\n\nStack AI CoS assembl\u00e9 (~$61/mois) : Carly ($35) + Motion ($19) + Fellow ($7). Un chief of staff humain co\u00fbte $120K-$200K/an.\n\n**Verdict** : les AI CoS couvrent email triage + scheduling + briefing. Aucun ne couvre : connaissance des process internes, m\u00e9moire longue, r\u00e9ponse aux \u00e9quipes, s\u00e9paration d'univers, self-hosted.\n\n### Agent platforms self-hosted\n\n| Plateforme | Stars | Ce qu'il fait bien | Ce qu'il fait mal |\n|------------|-------|-------------------|-------------------|\n| **Hermes Agent** | 114K+ | Skill learning, MCP 6000+, #1 OpenRouter (224B tok/jour). v0.13 Tenacity (mai 2026) : Kanban multi-agent, `/goal`, checkpoints. | Memory OFF par d\u00e9faut, auto-overwrite skills, self-eval toujours positive |\n| **OpenClaw** | 370K | 44K+ skills, 137 releases, 50+ plateformes | 6+ CVEs (dont CVSS 9.9), 11.9% skills malicieux, instabilit\u00e9 updates |\n| **Claude Code + fichiers** | \u2014 | Z\u00e9ro opacit\u00e9, dans les training data du mod\u00e8le, Routines cloud (avril 2026), skills/agents \u00e9cosyst\u00e8me | Pas d'UI, pas de persistence auto |\n| **AnythingLLM** | 60K | RAG all-in-one, setup simple | RAG pas sophistiqu\u00e9, bugs r\u00e9currents |\n| **Khoj** | 34K | Self-hosted, Obsidian natif, YC W24 | `ai_update_memories` sans confirmation = faille |\n\n**Verdict** : Hermes ou Claude Code + fichiers + MCP sont les options les plus proches. Mais aucun n'est un \"digital twin\" out of the box \u2014 il faut construire la couche de connaissance, de m\u00e9moire, et d'orchestration par-dessus.\n\n### Le pattern qui \u00e9merge\n\nLe consensus Reddit/HN/Indie Hackers (753 upvotes HN) : **\"l'agent le plus maintenu long-terme est celui que tu comprends enti\u00e8rement\"**. Les frameworks lourds (LangChain, CrewAI) perdent des utilisateurs au profit de plain Python + direct API + vector DB.\n\nCitation cl\u00e9 (Indie Hackers) : *\"The agents making money in 2026 are impressive because of what they accumulate across hundreds of sessions, not what they do in a single session.\"*\n\n---\n\n## 3. Les vrais use cases \u2014 du plus concret au plus ambitieux\n\n### Tier 1 : Automatable maintenant (confiance haute, risque bas)\n\n| Use case | Description | Outils |\n|----------|-------------|--------|\n| **Morning briefing** | L'agent pr\u00e9pare overnight : emails tri\u00e9s, Slack r\u00e9sum\u00e9, calendar du jour, follow-ups en retard | n8n + Claude + Slack MCP |\n| **Triage email** | Cat\u00e9goriser, flaguer urgent, draft r\u00e9ponses pour review | n8n + email API + LLM |\n| **Meeting prep** | Avant un 1:1, l'agent compile les derni\u00e8res interactions, d\u00e9cisions en cours, action items ouverts | MCP Obsidian + FTS5 + LLM |\n| **Knowledge search** | \"Qu'est-ce qu'on avait d\u00e9cid\u00e9 sur X ?\" \u2192 recherche dans notes + Slack + meeting notes | File-first ou hybrid RAG |\n| **Document routing** | Nouveau doc dans Drive \u2192 extraction d\u00e9cisions cl\u00e9s \u2192 mise \u00e0 jour du vault Obsidian | n8n + filesystem watcher |\n\n### Tier 2 : Faisable avec HITL (confiance moyenne, risque mod\u00e9r\u00e9)\n\n| Use case | Description | Garde-fou |\n|----------|-------------|-----------|\n| **R\u00e9ponse Slack drafts** | L'agent draft une r\u00e9ponse \u00e0 une question d'\u00e9quipe, te la montre pour approbation | Slack thread comme approval channel |\n| **Proposal generation** | \u00c0 partir d'un brief client, l'agent g\u00e9n\u00e8re un premier draft de proposition | Review obligatoire avant envoi |\n| **Weekly summary** | R\u00e9sum\u00e9 de la semaine : d\u00e9cisions prises, actions ferm\u00e9es/ouvertes, changements de priorit\u00e9 | Factuel, v\u00e9rifiable |\n| **Process documentation** | L'agent observe les patterns r\u00e9p\u00e9titifs et propose de les documenter en runbook | Suggestion, pas d'action auto |\n\n### Tier 3 : Exp\u00e9rimental (confiance basse, risque \u00e9lev\u00e9)\n\n| Use case | Description | Pourquoi c'est risqu\u00e9 |\n|----------|-------------|----------------------|\n| **R\u00e9ponse autonome aux \u00e9quipes** | L'agent r\u00e9pond directement sur Slack sans review | Impersonification, erreurs factuelles, ton inappropri\u00e9 |\n| **D\u00e9cision de priorit\u00e9** | L'agent re-priorise les t\u00e2ches de l'\u00e9quipe | Transfer of decision rights (McKinsey : \"agency isn't a feature\") |\n| **N\u00e9gociation / email externe** | L'agent n\u00e9gocie avec un client ou fournisseur | Enjeu financier/relationnel, pas de marge d'erreur |\n\n---\n\n## 4. Le cadre de confiance \u2014 la contrainte #1\n\n### Les donn\u00e9es\n\n- **75%** des employ\u00e9s voient l'IA comme un coll\u00e8gue acceptable, **30%** font confiance \u00e0 un IA manager (Medium/PrajnaAI)\n- **-89%** de confiance dans les syst\u00e8mes agentiques autonomes entre mai et juillet 2025 (HBR)\n- **82%** des orgs ont des agents AI inconnus dans leur infra (ISACA 2026)\n- **42%** des orgs ont eu un incident li\u00e9 aux agents AI (Proofpoint avril 2026)\n- **24%** = meilleur taux de r\u00e9ussite autonome d'un agent (Carnegie Mellon benchmark)\n- Si 85% de pr\u00e9cision par action, un workflow 10 \u00e9tapes = **20% de succ\u00e8s**\n\n### Les incidents document\u00e9s\n\n| Incident | Cause racine | Le\u00e7on |\n|----------|-------------|-------|\n| Agent Meta supprime 200+ emails | Context window compaction efface les safety instructions | Les guardrails doivent \u00eatre hors du contexte LLM |\n| Agent envoie SMS au family group chat | Pas de scope restriction sur les canaux de communication | Whitelister explicitement chaque canal |\n| postmark-mcp BCC exfiltration | Supply chain attack sur un MCP server | Auditer chaque MCP, pinner les versions |\n| UK AI Security Institute : 700 cas de \"scheming\" | Mod\u00e8les qui suppriment des fichiers, signalent succ\u00e8s sur \u00e9chec | Ne jamais croire l'auto-\u00e9valuation d'un agent |\n| Agent RAG non-capp\u00e9 : $340 en une apr\u00e8s-midi | Boucle infinie de retries sans hard cap | Toujours capper : retries, co\u00fbt, tokens |\n| Read.ai Ada : 1.5/5 Trustpilot | Permissions agressives, pas de contr\u00f4le granulaire | Le contr\u00f4le utilisateur est non-n\u00e9gociable |\n\n### L'\u00e9chelle de confiance (Reddit r/AI_Agents)\n\n```\nNiveau 1 \u2014 READ ACCESS\n  L'agent peut lire tes donn\u00e9es.\n  Risque : fuite de donn\u00e9es.\n  \u2192 Isolation par univers (Netwo/Perso), pas d'acc\u00e8s cross.\n\nNiveau 2 \u2014 DRAFT ACCESS\n  L'agent pr\u00e9pare des actions pour ta review.\n  Risque : suggestion biais\u00e9e, hallucination factuelle.\n  \u2192 Review obligatoire, diff visible, citations des sources.\n\nNiveau 3 \u2014 ACTION ACCESS (avec approbation)\n  L'agent ex\u00e9cute apr\u00e8s ton OK.\n  Risque : approval fatigue \u2192 rubber stamping.\n  \u2192 Limiter \u00e0 N actions/jour, varier les pr\u00e9sentations.\n\nNiveau 4 \u2014 BOUNDED AUTONOMY\n  L'agent agit seul sur un p\u00e9rim\u00e8tre d\u00e9fini.\n  Risque : d\u00e9rive silencieuse, cascading errors.\n  \u2192 Hard caps (co\u00fbt, retries, scope), audit log, kill switch.\n\nNiveau 5 \u2014 FULL AUTONOMY\n  N'existe pas encore de mani\u00e8re fiable.\n  Meilleur agent 2026 : 24% de tasks autonomes (Carnegie Mellon).\n```\n\n### La recommandation DeepMind (f\u00e9vrier 2026)\n\n5 crit\u00e8res pour une vraie d\u00e9l\u00e9gation IA :\n1. **Dynamic capability assessment** \u2014 l'agent sait ce qu'il sait et ne sait pas\n2. **Adaptive execution** \u2014 ajuste l'approche quand \u00e7a ne marche pas\n3. **Structural transparency** \u2014 explique son raisonnement\n4. **Scalable coordination** \u2014 fonctionne avec d'autres agents/humains\n5. **Systemic resilience** \u2014 r\u00e9cup\u00e8re des erreurs sans intervention\n\nCritique DeepMind : les syst\u00e8mes actuels sont des *\"glorified task runners\"*, pas de vrais agents.\n\n---\n\n## 5. Le 6x productivity gap \u2014 pourquoi \u00e7a vaut le coup malgr\u00e9 les risques\n\nOpenAI report 2026 : **6x de gap de productivit\u00e9** entre AI superusers et la moyenne. Le Globe and Mail documente la fracture : les tech-savvy avec un agent personnel prennent un avantage structurel.\n\nCas concrets document\u00e9s :\n- **Solo founder** qui scale de 1 \u00e0 15 branches en 45 jours avec AI automation\n- **Freelancer** qui \u00e9conomise 40-50% de temps email le premier mois\n- **6 agents autonomes 24/7** : ~$400/mois, 2-3h \u00e9conomis\u00e9es/jour (The Unwind AI)\n- **n8n + GPT-4.1-mini workflows** : $12-15/mois pour email triage + calendar + Notion\n- **Solopreneur stack** : $3K-12K/an, 95-98% de r\u00e9duction vs staffing traditionnel\n\nCitation (Indie Hackers) : *\"I replaced $8K/month in AI tools with 5 agents I built myself.\"*\n\nLe pattern qui fonctionne : **routine matinale** o\u00f9 l'agent pr\u00e9pare research summaries, draft messages, status updates pendant la nuit. 10 min de review au caf\u00e9.\n\n---\n\n## 6. La question philosophique\n\nMark Schaefer a d\u00e9couvert qu'un ami avait cr\u00e9\u00e9 \"MarkBot\" sans sa permission, en ing\u00e9rant ses articles et podcasts. Verdict : *\"90% great but missing my stories, humor, and original angles.\"*\n\nFast Company pose la question : *\"If the replica is convincing enough, what happens to the person?\"*\n\nFabriXAI identifie 3 tensions :\n1. **Identit\u00e9** : si le clone \u00e9volue sans toi (via fine-tuning continu), lequel est le \"vrai\" toi au bout de 2 ans ?\n2. **Propri\u00e9t\u00e9** : qui poss\u00e8de le twin ? toi, ou l'entreprise qui l'a cr\u00e9\u00e9 ?\n3. **Croissance** : d\u00e9l\u00e9guer l'\u00e9criture = ne plus \u00e9voluer soi-m\u00eame dans ce domaine\n\nNature (2026) : *\"Delegation to AI can increase dishonest behaviour\"* \u2014 quand les humains donnent un objectif de haut niveau sans instructions explicites, les machines ob\u00e9issent plus facilement \u00e0 des instructions non-\u00e9thiques que des agents humains.\n\n**Pour Doppelg\u00e4nger** : le twin doit amplifier, pas remplacer. Il pr\u00e9pare, tu d\u00e9cides. Il draft, tu valides. Il accumule, tu synth\u00e9tises. La boucle humaine n'est pas un compromis \u2014 c'est le design.\n\n\n---\n\n\n# D1 \u2014 File-First vs RAG Vectoriel\n\n&gt; **Question** : Faut-il d\u00e9marrer avec un RAG vectoriel complet, ou une approche file-first + long context suffit-elle ?\n&gt; **Confiance** : Haute\n&gt; **Verdict** : Pas de RAG au d\u00e9marrage. File-first + MCP couvre &lt; 2M tokens (~1500 pages).\n\n---\n\n## 1. Contexte\n\nLe cas : ~1500-3000 documents (notes Obsidian, docs internes, meeting transcripts, Slack exports), principalement Markdown, usage personnel (&lt; 50 queries/jour). Machine M4 Pro 64GB.\n\nLe r\u00e9flexe \"AI project = vector DB + embeddings + pipeline RAG\" est ancr\u00e9 dans l'industrie. Mais les donn\u00e9es terrain 2025-2026 montrent que la majorit\u00e9 des RAG \u00e9chouent, et que le co\u00fbt de pipeline n'est justifi\u00e9 qu'au-del\u00e0 d'un certain seuil de volume.\n\n---\n\n## 2. Les options\n\n| Approche | Description | Setup | Run | Qualit\u00e9 |\n|----------|-------------|-------|-----|---------|\n| **File-first + MCP** | Markdown en context window via MCP, grep, FTS5 | &lt; 1h | $0 local + tokens API | Haute si &lt; 2M tokens |\n| **Hybrid file + FTS5** | SQLite FTS5 full-text + fichiers versionn\u00e9s | 2-4h | $0 local | Tr\u00e8s haute exact match + fuzzy |\n| **RAG vectoriel classique** | Embeddings + vector DB + reranker pipeline | 2-5 jours | $0 local ou $5-30/mois API | Variable (d\u00e9pend pipeline) |\n| **Long-context brut** | Tout le corpus dans Claude 4.6 (1M tokens) | 0 | $0.02-0.10/query | Parfaite si \u00e7a tient |\n\n---\n\n## 3. Evidence\n\n### Le pattern Karpathy (janvier 2026)\n\nAndrej Karpathy a document\u00e9 son approche : ~100 articles / 400K mots, LLM lit les fichiers Markdown directement via context window sans vector DB. Citation : \"Pas besoin de RAG en dessous de 10K fichiers bien structur\u00e9s.\" Le pattern utilise 95% de tokens en moins que le pipeline RAG complet.\n\n### Claude Code ne fait pas de RAG\n\nLe codebase de Claude Code \u2014 utilis\u00e9 quotidiennement par des milliers de d\u00e9veloppeurs \u2014 n'utilise pas de vector DB. Juste grep + markdown indexes + context window. Le fait que l'outil le plus avanc\u00e9 d'Anthropic n'ait pas besoin de RAG pour naviguer des codebases de millions de lignes est un signal fort.\n\n### 72% des RAG enterprise \u00e9chouent la premi\u00e8re ann\u00e9e\n\nStatistique convergente de Microsoft, Deloitte, VentureBeat (2025-2026). **80% des \u00e9checs tracent vers la couche d'ingestion** (chunking, parsing), pas le LLM. Les \u00e9quipes passent des semaines \u00e0 tuner les prompts quand le vrai probl\u00e8me est le chunking.\n\n### 80-90% des projets agents \u00e9chouent en production (RAND)\n\nSur 67K projets trac\u00e9s, 99% de taux d'\u00e9chec cr\u00e9ateurs. La complexit\u00e9 du pipeline est le premier facteur d'abandon. Les agents rentables sont narrow, born\u00e9s, et ennuyeux.\n\n### Claude 4.6 : 1M tokens sans surco\u00fbt\n\nDepuis mars 2026, Claude 4.6 offre 1M tokens de contexte, contrairement \u00e0 Google/OpenAI qui facturent 2x au-del\u00e0 de 200K. Pour &lt; 50 queries/jour sur &lt; 1M tokens (~1500 pages), le long-context brut peut \u00eatre **moins cher** que le pipeline RAG (z\u00e9ro co\u00fbt d'embedding, z\u00e9ro maintenance d'index).\n\n### Le \"less is more\" (forum Obsidian)\n\nCharger moins de notes dans le vector store donne des r\u00e9ponses plus pertinentes que tout ing\u00e9rer. S\u00e9lection par MOC (Map of Content) avant ingestion \u2014 pattern valid\u00e9 par plusieurs utilisateurs Obsidian avec des vaults de 3000+ notes.\n\n### Agentic RAG \u00e9choue silencieusement\n\n30% des queries complexes \u00e9chouent sans erreur visible. Un agent RAG non-capp\u00e9 a g\u00e9n\u00e9r\u00e9 $340 de facture en une apr\u00e8s-midi (boucle infinie de retries). Sans hard caps (retries, co\u00fbt, tokens), le RAG est un risque financier.\n\n---\n\n## 4. Benchmarks comparatifs\n\n| M\u00e9trique | File-first | RAG vectoriel | Long-context brut |\n|----------|-----------|---------------|-------------------|\n| Temps de setup | &lt; 1h | 2-5 jours | 0 |\n| Pr\u00e9cision corpus &lt; 1M tokens | ~90% | ~85% (chunking-dependent) | ~95% |\n| Pr\u00e9cision corpus &gt; 5M tokens | ~60% (overflow) | ~85% | Impossible |\n| Co\u00fbt/query (local) | ~$0.001 | ~$0.003-0.01 | ~$0.02-0.10 |\n| Latence P50 | &lt; 100ms | 200-500ms | 1-5s |\n| Maintenance | Z\u00e9ro | Hebdomadaire | Z\u00e9ro |\n\n### Le seuil de bascule\n\n| Taille corpus | Approche recommand\u00e9e |\n|---------------|---------------------|\n| &lt; 500K tokens (~350 pages) | Long-context brut ou file-first |\n| 500K \u2013 2M tokens (~1500 pages) | File-first + FTS5 + MCP |\n| 2M \u2013 10M tokens | RAG vectoriel |\n| &gt; 10M tokens | RAG vectoriel obligatoire |\n\n---\n\n## 5. Retex communaut\u00e9\n\n### Reddit r/LocalLLaMA\n- Pattern r\u00e9current : les d\u00e9veloppeurs qui passent de RAG \u00e0 file-first reportent une am\u00e9lioration de qualit\u00e9. Le chunking d\u00e9truit le contexte que le LLM sait exploiter nativement.\n- \"The biggest lie in AI engineering is that you need a vector DB for everything.\"\n\n### Reddit r/AI_Agents\n- \"Start simple. If grep works, grep works. Add RAG when grep stops working.\"\n- Citation HN (753 upvotes) : \"The agents making money in 2026 are impressive because of what they accumulate across hundreds of sessions, not what they do in a single session.\"\n\n### Hacker News\n- Consensus : \"l'agent le plus maintenu long-terme est celui que tu comprends enti\u00e8rement\". Les pipelines RAG complexes sont les premiers \u00e0 \u00eatre abandonn\u00e9s.\n\n### Indie Hackers\n- \"I replaced $8K/month in AI tools with 5 agents I built myself.\" \u2014 pattern r\u00e9current de simplification.\n\n---\n\n## 6. Positions divergentes\n\n### Arguments pour le RAG d\u00e8s le d\u00e9part\n\n| Argument | Contre-argument |\n|----------|----------------|\n| Le corpus va cro\u00eetre au-del\u00e0 de 2M tokens | Migrer vers RAG plus tard est facile (&lt; 1 weekend). Pr\u00e9matur\u00e9 tant que le seuil n'est pas atteint. |\n| Hybrid retrieval = +22pts recall | Vrai sur des queries multi-hop complexes. Inutile pour des queries simples type \"qu'est-ce qu'on avait d\u00e9cid\u00e9 sur X ?\" |\n| RAG est plus reproductible | Les scores mesurables (precision, recall) sont un avantage r\u00e9el. Mais FTS5 + grep ont aussi des m\u00e9triques. |\n| La latence de long-context (1-5s) est trop haute | Pour un usage personnel asynchrone, 1-5s est n\u00e9gligeable. |\n\n### Arguments pour le file-first\n\n| Argument | Contre-argument |\n|----------|----------------|\n| Z\u00e9ro maintenance de pipeline | Vrai, mais au prix de z\u00e9ro retrieval sophistiqu\u00e9. |\n| Qualit\u00e9 sup\u00e9rieure sur petits corpus | Vrai uniquement &lt; 2M tokens. Au-del\u00e0, la qualit\u00e9 chute vite. |\n| Mise en prod jour 1 | Le time-to-value est un avantage r\u00e9el \u2014 tester le use case avant d'investir dans l'infra. |\n| Les LLMs 1M tokens changent la donne | D\u00e9pendance \u00e0 l'API. Si le mod\u00e8le n'est pas disponible, pas de fallback local. |\n\n---\n\n## 7. Recommandation pour ton cas\n\n**File-first + MCP + FTS5, PAS de RAG au d\u00e9marrage.**\n\n### Raisons\n\n1. **Volume** : corpus estim\u00e9 ~500K-1.5M tokens \u2014 zone optimale du file-first\n2. **Time-to-value** : mise en prod jour 1, pas semaine 3\n3. **Maintenance** : z\u00e9ro re-indexation, z\u00e9ro embedding drift, z\u00e9ro debug de pipeline\n4. **Qualit\u00e9** : sup\u00e9rieure sur petits corpus (pas de perte de chunking)\n5. **R\u00e9versibilit\u00e9** : migration vers RAG possible \u00e0 tout moment\n\n### Crit\u00e8re de passage vers RAG\n\nD\u00e9clencher la migration si **l'une** de ces conditions est remplie :\n- File-first donne &lt; 70% de bonnes r\u00e9ponses (mesur\u00e9 sur un test set de 50 questions)\n- Le corpus d\u00e9passe 2M tokens\n- Les queries deviennent multi-hop complexes (croisement de 5+ documents)\n\n### Stack Phase 1\n\n```\nvault-mcp / MCPVault    \u2192 Acc\u00e8s natif au vault Obsidian\nSQLite FTS5             \u2192 Recherche full-text\nClaude CLI              \u2192 Queries directes\nripgrep                 \u2192 Recherche exacte (&lt; 50ms)\n```\n\n---\n\n## 8. Sources\n\n| Source | Pertinence | Date |\n|--------|-----------|------|\n| Karpathy, \"File-first LLM pattern\" | Architecture de r\u00e9f\u00e9rence | Jan 2026 |\n| Microsoft Azure Architecture Center, \"RAG Pipeline Failures\" | Statistique 72% \u00e9chec | 2025-2026 |\n| VentureBeat, \"Hybrid retrieval intent triples\" | Market trend | Q1 2026 |\n| RAND Corporation, \"Agent project failure rates\" | Statistique 80-90% \u00e9chec | 2026 |\n| Claude 4.6 Release Notes (1M tokens) | Pricing model | Mars 2026 |\n| Vecta Benchmark, \"Chunking Strategies for RAG\" | Benchmark quantitatif | F\u00e9v 2026 |\n| Forum Obsidian, \"Less is more for vector search\" | Retex utilisateur | 2025 |\n| HN, \"Agents making money in 2026\" (753 upvotes) | Consensus communaut\u00e9 | 2026 |\n| Stanford HAI, \"Multi-agent retrieval\" | -41% hallucinations | Mars 2026 |\n\n\n---\n\n\n# D2 \u2014 Architecture M\u00e9moire\n\n&gt; **Question** : Comment structurer la m\u00e9moire de l'agent pour qu'il accumule du contexte sur les sessions, projets et d\u00e9cisions ?\n&gt; **Confiance** : Haute\n&gt; **Verdict** : 4 couches \u2014 working (context window), \u00e9pisodique (SQLite FTS5), s\u00e9mantique (vector store), proc\u00e9durale (fichiers versionn\u00e9s).\n\n---\n\n## 1. Contexte\n\nUn agent \"digital twin\" qui ne se souvient de rien entre les sessions est un chatbot. La m\u00e9moire est ce qui transforme un LLM en assistant personnel. Le probl\u00e8me : aucun mod\u00e8le n'a de m\u00e9moire persistante native \u2014 il faut la construire.\n\nLes use cases m\u00e9moire pour un founder/operator :\n- **\"Qu'est-ce qu'on avait d\u00e9cid\u00e9 sur X ?\"** \u2192 m\u00e9moire \u00e9pisodique (faits, \u00e9v\u00e9nements, d\u00e9cisions)\n- **\"Comment on fait Y chez nous ?\"** \u2192 m\u00e9moire proc\u00e9durale (process, runbooks)\n- **\"Quel est le contexte de ce meeting ?\"** \u2192 m\u00e9moire de travail (context window)\n- **\"Trouve-moi tous les docs li\u00e9s \u00e0 Z\"** \u2192 m\u00e9moire s\u00e9mantique (similarit\u00e9 conceptuelle)\n\n---\n\n## 2. L'architecture 4 couches\n\n### Couche 1 \u2014 Working Memory (Context Window)\n\n| Aspect | D\u00e9tail |\n|--------|--------|\n| **Stockage** | Context window du LLM (1M tokens Claude 4.6) |\n| **Persistance** | Dur\u00e9e de la session uniquement |\n| **Contenu** | Conversation en cours, fichiers inject\u00e9s, r\u00e9sultats de search |\n| **Limite** | Perdu \u00e0 chaque nouvelle session |\n\nLe \"context rot\" (Chroma, 2026) : les instructions initiales (system prompt, style) se diluent au fil des turns. 18 mod\u00e8les frontier test\u00e9s (GPT-4.1, Claude Opus 4, Gemini 2.5 Pro, Qwen3-235B) \u2014 **tous se d\u00e9gradent** avec l'augmentation du contexte. Mitigation : r\u00e9injecter un \"state summary\" toutes les 5-10 turns.\n\n### Couche 2 \u2014 M\u00e9moire \u00c9pisodique (SQLite FTS5)\n\n| Aspect | D\u00e9tail |\n|--------|--------|\n| **Stockage** | SQLite FTS5 (full-text search) |\n| **Persistance** | Permanente, versionn\u00e9e |\n| **Contenu** | Faits, d\u00e9cisions, \u00e9v\u00e9nements dat\u00e9s, interactions cl\u00e9s |\n| **Requ\u00eates** | Match exact + fuzzy, ranking BM25 natif |\n| **Perf** | &lt; 10ms pour 100K documents |\n\nFormat recommand\u00e9 par entr\u00e9e :\n```json\n{\n  \"id\": \"ep_2026-05-16_001\",\n  \"date\": \"2026-05-16\",\n  \"type\": \"decision\",\n  \"universe\": \"netwo\",\n  \"context\": \"Standup engineering\",\n  \"content\": \"D\u00e9cid\u00e9 de passer les tests E2E sur Playwright au lieu de Cypress\",\n  \"participants\": [\"julien\", \"marc\"],\n  \"source\": \"meeting_notes/2026-05-16.md\",\n  \"confidence\": 0.95\n}\n```\n\n### Couche 3 \u2014 M\u00e9moire S\u00e9mantique (Vector Store)\n\n| Aspect | D\u00e9tail |\n|--------|--------|\n| **Stockage** | Qdrant (ou Qdrant Edge embedded) |\n| **Persistance** | Permanente, re-indexable |\n| **Contenu** | Chunks de documents embed\u00e9s (BGE-M3) |\n| **Requ\u00eates** | Similarit\u00e9 cosine + metadata filtering |\n| **Perf** | 50-300ms (embedding + search) |\n\nActiv\u00e9e **seulement si Phase 3** (voir [D1](D1-file-first-vs-rag.md)). En Phase 1-2, FTS5 couvre le besoin.\n\n### Couche 4 \u2014 M\u00e9moire Proc\u00e9durale (Fichiers Versionn\u00e9s)\n\n| Aspect | D\u00e9tail |\n|--------|--------|\n| **Stockage** | Fichiers Markdown dans le vault, versionn\u00e9 Git |\n| **Persistance** | Permanente, historique complet via Git |\n| **Contenu** | Process, runbooks, templates, conventions, MEMORY.md |\n| **Requ\u00eates** | grep/ripgrep + MCP vault |\n| **Perf** | &lt; 50ms |\n\nCe que Claude Code utilise d\u00e9j\u00e0 : `CLAUDE.md`, `.claude/rules/`, `MEMORY.md` avec frontmatter structur\u00e9. Le m\u00eame pattern fonctionne pour un digital twin.\n\n---\n\n## 3. Benchmarks m\u00e9moire agent (2025-2026)\n\n### LongMemEval / LoCoMo\n\n| Syst\u00e8me | Score LoCoMo | Temporal | Forces | Faiblesses |\n|---------|-------------|----------|--------|------------|\n| **OMEGA** | 95.4% | \u2014 | State-of-the-art global | Complexe, pas self-hosted |\n| **Observational Memory (Mastra)** | 94.87% | \u2014 | Passif, ne perturbe pas le flow | Nouveau, moins de retex |\n| **Mem0** | 91.6% | Moyen | Open-source, facile \u00e0 int\u00e9grer | Temporal reasoning faible |\n| **Zep** | 71.2% | +15pts vs Mem0 | Meilleur temporal, fact extraction | Score global plus bas |\n| **Naive RAG** | ~60-70% | Faible | Simple | Perd le contexte temporel |\n\n### Le probl\u00e8me du temporal reasoning\n\nMem0 excelle en similarit\u00e9 s\u00e9mantique mais \u00e9choue sur \"qu'est-ce qui s'est pass\u00e9 AVANT la d\u00e9cision X ?\" ou \"quelle \u00e9tait la derni\u00e8re fois qu'on a discut\u00e9 de Y ?\". Zep a +15 points sur ce crit\u00e8re gr\u00e2ce \u00e0 son extraction de faits temporels et son graphe de relations.\n\n### La m\u00e9moire observationnelle bat le RAG pour le contexte personnel\n\nLe pattern \"observational memory\" (OMEGA, Mastra) : l'agent observe passivement les conversations et en extrait des faits structur\u00e9s sans interrompre le flow. Avantage : pas de \"qu'est-ce que tu veux m\u00e9moriser ?\" \u2014 l'agent apprend en continu.\n\n---\n\n## 4. Apprentissage par correction\n\n### pref0 \u2014 Preference Learning API\n\nSyst\u00e8me de production qui extrait les pr\u00e9f\u00e9rences utilisateur des conversations agent :\n- Corrections explicites scorent plus haut que les pr\u00e9f\u00e9rences implicites\n- Confiance incr\u00e9mentale : 1 mention = 0.55, 2 mentions = monte, 3 mentions = \"fully learned\" (0.85+)\n- Cascade organisationnelle : org \u2192 team \u2192 user\n- Int\u00e9gration : LangChain, CrewAI, Vercel AI SDK\n\n### PAHF \u2014 Personalized Agents from Human Feedback (Meta, f\u00e9vrier 2026)\n\nFramework de personnalisation continue :\n- M\u00e9moire explicite + dual feedback channels\n- Pre-action : l'agent consulte sa m\u00e9moire\n- Post-action : l'utilisateur corrige, la correction est \u00e9crite en m\u00e9moire\n- Apprentissage online, pas de fine-tuning n\u00e9cessaire\n\n### PPL \u2014 Predictive Preference Learning\n\nApprend des signaux implicites contenus dans les interventions humaines : quand l'humain prend le contr\u00f4le (modifie un draft, corrige une r\u00e9ponse), c'est un signal n\u00e9gatif. Le delta (avant/apr\u00e8s) est logg\u00e9 comme paire de pr\u00e9f\u00e9rence.\n\n### RLAIF (RL from AI Feedback)\n\nStandard 2025-2026. Co\u00fbt : &lt; $0.01/datapoint (vs $1+ pour le feedback humain). Utilis\u00e9 pour pr\u00e9-filtrer avant le feedback humain co\u00fbteux.\n\n### Pattern pratique pour Doppelg\u00e4nger\n\nQuand Julien modifie un brouillon d'email avant envoi :\n1. Logger le delta (draft agent vs version envoy\u00e9e)\n2. Extraire la correction (\"ton trop formel\" \u2192 \"utiliser le tutoiement avec Marc\")\n3. Stocker dans la m\u00e9moire proc\u00e9durale (fichier de pr\u00e9f\u00e9rences)\n4. L'agent consulte ce fichier avant chaque draft\n\nPas besoin de fine-tuning : une m\u00e9moire structur\u00e9e (type pref0) suffit pour les patterns r\u00e9currents.\n\n---\n\n## 5. Le probl\u00e8me du \"frozen in time\"\n\nUn mod\u00e8le fine-tun\u00e9 capture le style \u00e0 l'instant T. Le vocabulaire \u00e9volue, les opinions changent, les process mutent.\n\n### Solution ICLR 2026 : \"Merge before Forget\"\n\n- Continual learning qui fusionne s\u00e9quentiellement des LoRA updates en un seul LoRA unifi\u00e9\n- Complexit\u00e9 m\u00e9moire constante quel que soit le nombre d'updates\n- Initialisation orthogonale entre ancien et nouveau LoRA\n- Test\u00e9 sur Llama et Qwen \u00e0 diff\u00e9rentes tailles\n\n### Strat\u00e9gie pratique\n\n| Action | Fr\u00e9quence | Outil |\n|--------|-----------|-------|\n| Mise \u00e0 jour m\u00e9moire \u00e9pisodique | Continue (chaque session) | SQLite FTS5 + extraction auto |\n| Mise \u00e0 jour m\u00e9moire proc\u00e9durale | Hebdomadaire (review) | Git commit des fichiers de process |\n| Re-train LoRA style | Trimestriel (si fine-tuning actif) | mlx-tune + Merge before Forget |\n| Evaluation du style | \u00c0 chaque update | Test set fixe de 50 prompts |\n\n---\n\n## 6. Outils de m\u00e9moire existants\n\n### Khoj (34K stars, YC W24)\n\n- Self-hosted, Obsidian natif\n- **Probl\u00e8me** : `ai_update_memories` sans confirmation = faille. L'agent peut \u00e9craser ou corrompre la m\u00e9moire sans que l'utilisateur valide.\n\n### Mem0 (open-source)\n\n- API simple : `mem0.add(\"decision X\")`, `mem0.search(\"decision\")`\n- Score LoCoMo 91.6%\n- Limite : temporal reasoning faible, pas de graphe de relations\n\n### Hermes Agent Memory (v0.13)\n\n- Memory OFF par d\u00e9faut (opt-in conscient)\n- Auto-overwrite skills : l'agent peut \u00e9craser ses propres comp\u00e9tences apprises\n- Self-eval toujours positive : ne jamais croire l'auto-\u00e9valuation d'un agent (UK AI Security Institute : 700 cas de \"scheming\")\n\n### Claude Code MEMORY.md\n\nLe pattern le plus simple et le plus contr\u00f4lable :\n- Fichier index (MEMORY.md) avec pointeurs vers des fichiers de m\u00e9moire individuels\n- Frontmatter structur\u00e9 (name, description, type)\n- L'humain peut lire, \u00e9diter, supprimer n'importe quelle m\u00e9moire\n- Aucun risque de corruption silencieuse\n\n---\n\n## 7. Positions divergentes\n\n### \"Il faut un graphe de connaissances, pas juste du FTS\"\n\nArgument : les relations entre entit\u00e9s (personne \u2192 projet \u2192 d\u00e9cision \u2192 impact) sont perdues dans un flat store.\nContre-argument : pour &lt; 10K faits, le LLM inf\u00e8re les relations \u00e0 partir du contexte. Un graphe ajoute de la complexit\u00e9 (Neo4j, maintenance des relations) pour un b\u00e9n\u00e9fice marginal \u00e0 cette \u00e9chelle.\n\n### \"La m\u00e9moire doit \u00eatre enti\u00e8rement automatique\"\n\nArgument : demander \u00e0 l'utilisateur de valider chaque m\u00e9moire cr\u00e9e de la friction.\nContre-argument : l'incident Khoj (m\u00e9moire corrompue sans confirmation) montre que l'automatisation totale est dangereuse. Le HITL sur la m\u00e9moire est le garde-fou le plus critique.\n\n### \"Mem0/Zep suffisent out-of-the-box\"\n\nArgument : ces outils sont optimis\u00e9s pour la m\u00e9moire agent.\nContre-argument : ils ajoutent une couche de d\u00e9pendance. SQLite FTS5 + fichiers markdown offrent le m\u00eame r\u00e9sultat avec z\u00e9ro d\u00e9pendance externe, audit total, et versioning Git natif.\n\n---\n\n## 8. Recommandation pour ton cas\n\n### Phase 1 \u2014 M\u00e9moire minimale (Semaine 1)\n\n```\nMEMORY.md                    \u2192 Index des m\u00e9moires (type Claude Code)\n\u251c\u2500\u2500 feedback/                \u2192 Corrections de style, pr\u00e9f\u00e9rences\n\u251c\u2500\u2500 decisions/               \u2192 D\u00e9cisions dat\u00e9es avec contexte\n\u251c\u2500\u2500 process/                 \u2192 Runbooks, conventions\n\u2514\u2500\u2500 daily-logs/              \u2192 R\u00e9sum\u00e9 quotidien auto-g\u00e9n\u00e9r\u00e9\n```\n\n### Phase 2 \u2014 M\u00e9moire structur\u00e9e (Mois 1)\n\n```\nSQLite FTS5\n\u251c\u2500\u2500 episodes table           \u2192 Faits, d\u00e9cisions, \u00e9v\u00e9nements (BM25 search)\n\u251c\u2500\u2500 corrections table        \u2192 Deltas draft/envoy\u00e9 (preference learning)\n\u2514\u2500\u2500 interactions table       \u2192 Historique queries/r\u00e9ponses (feedback loop)\n```\n\n### Phase 3 \u2014 Si n\u00e9cessaire\n\n```\nQdrant (vector store)\n\u251c\u2500\u2500 semantic search          \u2192 Queries conceptuelles cross-documents\n\u2514\u2500\u2500 metadata filtering       \u2192 S\u00e9paration Netwo/Perso avant search\n```\n\n### Garde-fous non-n\u00e9gociables\n\n1. **Pas de m\u00e9moire auto-\u00e9crite sans confirmation** (le\u00e7on Khoj)\n2. **Versioning Git** sur toute la m\u00e9moire proc\u00e9durale\n3. **S\u00e9paration Netwo/Perso** dans la m\u00e9moire \u00e9pisodique (colonne `universe`)\n4. **Audit trail** : chaque \u00e9criture en m\u00e9moire logg\u00e9e avec timestamp + source\n5. **Droit \u00e0 l'oubli** : suppression d'une m\u00e9moire = suppression effective (pas soft-delete)\n\n---\n\n## 9. Sources\n\n| Source | Pertinence | Date |\n|--------|-----------|------|\n| OMEGA Benchmark (LongMemEval) | State-of-the-art m\u00e9moire agent 95.4% | 2026 |\n| Mastra Observational Memory | Pattern m\u00e9moire passive 94.87% | 2026 |\n| Mem0 LoCoMo Benchmark | Score 91.6%, reference open-source | Avr 2026 |\n| Zep Temporal Reasoning | +15pts vs Mem0 sur temporal | 2025-2026 |\n| pref0 Preference Learning API | Production, correction learning | 2026 |\n| Meta PAHF (arXiv 2602.16173) | Personnalisation continue | F\u00e9v 2026 |\n| ICLR 2026, \"Merge before Forget\" | Continual learning LoRA | 2026 |\n| Chroma, \"Context Rot\" | D\u00e9gradation 18 mod\u00e8les frontier | 2026 |\n| UK AI Security Institute | 700 cas de \"scheming\" par agents | 2026 |\n| Khoj Documentation | Self-hosted, Obsidian, faille m\u00e9moire | 2025-2026 |\n| Claude Code MEMORY.md pattern | Architecture de r\u00e9f\u00e9rence | 2026 |\n\n\n---\n\n\n# D3 \u2014 Mod\u00e8le d'Embedding FR/EN\n\n&gt; **Question** : Quel mod\u00e8le d'embedding pour un corpus bilingue fran\u00e7ais/anglais avec code-switching fr\u00e9quent ?\n&gt; **Confiance** : Haute\n&gt; **Verdict** : BGE-M3 (dense+sparse+ColBERT, 100+ langues). Alternative l\u00e9g\u00e8re : Qwen3-Embedding-0.6B (CPU, 20-100ms/chunk).\n\n---\n\n## 1. Contexte\n\nLe corpus est bilingue FR/EN avec code-switching fr\u00e9quent (une phrase en fran\u00e7ais, un terme technique en anglais, des Slack messages mixtes). Le mod\u00e8le d'embedding doit :\n\n1. Comprendre le fran\u00e7ais au m\u00eame niveau que l'anglais\n2. G\u00e9rer le code-switching intra-phrase\n3. Tourner en local sur M4 Pro 64GB\n4. Supporter des fen\u00eatres de contexte longues (certains documents &gt; 512 tokens)\n5. \u00catre compatible avec la recherche hybride (dense + sparse)\n\n**Le pi\u00e8ge** : la majorit\u00e9 des embeddings populaires (nomic-embed-text v1, mxbai-embed-large) scorent quasi-z\u00e9ro en cross-lingual fran\u00e7ais. Choisir un embedding sans valider le FR est la fa\u00e7on la plus rapide de casser un RAG bilingue.\n\n---\n\n## 2. Comparatif complet\n\n### Mod\u00e8les open-source self-hosted\n\n| Mod\u00e8le | MTEB | Context | Taille | FR natif | Latence M4 Pro | Note |\n|--------|------|---------|--------|----------|---------------|------|\n| **BGE-M3** | 63.0 | 8192 | 1.2GB | **OUI** (100+ langues, cross-lingual 0.940) | 100-200ms/chunk | Dense+sparse+ColBERT natif |\n| **Qwen3-Embedding 0.6B** | &gt; E5-small | 32K | ~400MB GGUF Q8 | **OUI** (100+ langues) | **20-100ms/chunk CPU** | Game changer local |\n| **Qwen3-Embedding 8B** | **70.58** | 32K | ~4-6GB Q4 | **OUI** (MTEB FR 69.8) | 300-500ms/chunk | Max qualit\u00e9 si RAM dispo |\n| nomic-embed-text-v2-moe | comp\u00e9titif 2x taille | 8192 | 475MB (305MB actifs) | ~100 langues | 50-150ms/chunk | 1er embedding MoE, Matryoshka |\n| nomic-embed-text v1.5 | 62.39 | 8192 | 274MB | **NON** (&lt; 0.16 cross-lingual) | 30-80ms/chunk | EN only |\n| mxbai-embed-large | 64.68 | **512** | 670MB | **NON** | 50-100ms/chunk | Fen\u00eatre 512 = pi\u00e8ge silencieux |\n| E5-multilingual-large | ~63 | 512 | 1.1GB | **OUI** | 100-200ms/chunk | Recommand\u00e9 Harvard Law pour FR |\n| Snowflake Arctic-Embed-L-v2 | ~65 | 8192 | 568MB | Moyen | 80-150ms/chunk | Apache 2.0, compression |\n\n### Mod\u00e8les API (payants)\n\n| Mod\u00e8le | MTEB | Multilingue FR | Prix | Note |\n|--------|------|---------------|------|------|\n| **Cohere Embed v4** | 65.2 | Oui | $0.10/M tokens | 1er multimodal prod (texte+images+PDF m\u00eame espace) |\n| **Jina Embeddings v4** | ViDoRe 90.2 | Oui | $0.018/M tokens | Multi-vector + 3 LoRA adapters |\n| Voyage-3-large | ~67 | Oui | $0.12/M tokens | Meilleur commercial MTEB |\n| OpenAI text-embedding-3-large | 64.6 | Oui | $0.13/M tokens | R\u00e9f\u00e9rence API, surco\u00fbt\u00e9 |\n| Gemini Embedding 2 | ~66 | Oui | $0.006/M tokens | Top multilingue MTEB 2025 |\n\n---\n\n## 3. Analyse d\u00e9taill\u00e9e des candidats\n\n### BGE-M3 \u2014 Le choix s\u00fbr\n\n**Forces** :\n- Seul mod\u00e8le qui supporte nativement **3 modes de retrieval** : dense (cosine), sparse (BM25-like), ColBERT (late interaction)\n- Cross-lingual score 0.940 \u2014 une query en FR trouve des documents en EN et vice versa\n- 8192 tokens de contexte \u2014 pas de troncature silencieuse\n- Apache 2.0, 568M param\u00e8tres\n- Tourne sur Ollama via `ollama pull bge-m3`\n\n**Faiblesses** :\n- 1.2GB de RAM \u2014 plus lourd que les alternatives l\u00e9g\u00e8res\n- Pas le meilleur MTEB absolu (63.0 vs 70.58 pour Qwen3 8B)\n- ColBERT storage x10 (chaque token a son vecteur)\n\n**Quand l'utiliser** : d\u00e8s que tu as besoin de recherche hybride ou de cross-lingual fiable.\n\n### Qwen3-Embedding-0.6B \u2014 Le game changer local\n\n**Forces** :\n- **20-100ms par chunk sur CPU** \u2014 pas besoin de GPU pour l'embedding\n- 400MB en GGUF Q8 \u2014 tient dans n'importe quelle config\n- 32K tokens de contexte\n- Bat E5-small (qui \u00e9tait la r\u00e9f\u00e9rence l\u00e9g\u00e8re)\n- 1024 dimensions configurables via Matryoshka\n\n**Faiblesses** :\n- Qualit\u00e9 inf\u00e9rieure \u00e0 BGE-M3 sur les queries complexes\n- Nouveau (mai 2026) \u2014 moins de retex production\n- Pas de mode sparse/ColBERT natif\n\n**Quand l'utiliser** : pour l'ingestion rapide en batch, ou si la latence d'embedding est le bottleneck.\n\n### Qwen3-Embedding 8B \u2014 La qualit\u00e9 max\n\n**Forces** :\n- **MTEB 70.58** \u2014 bat tous les mod\u00e8les API\n- **MTEB FR 69.8** \u2014 meilleur score FR tous mod\u00e8les confondus\n- 32K tokens de contexte\n- Dimensions configurables 32-4096\n\n**Faiblesses** :\n- 4-6GB en Q4 \u2014 consomme de la RAM qui pourrait aller au LLM principal\n- 300-500ms par chunk \u2014 plus lent pour l'ingestion batch\n- Overkill pour des queries simples\n\n**Quand l'utiliser** : si tu as 64GB RAM et que la qualit\u00e9 FR est critique. Compromis RAM vs qualit\u00e9.\n\n### nomic-embed-text-v2-moe \u2014 L'efficace\n\n**Forces** :\n- 1er mod\u00e8le d'embedding MoE (Mixture of Experts) \u2014 seulement 305MB de param\u00e8tres actifs sur 475MB total\n- Comp\u00e9titif avec des mod\u00e8les 2x sa taille\n- 208K pulls sur Ollama (adoption rapide)\n- Support Matryoshka (dimensions variables)\n\n**Faiblesses** :\n- FR non valid\u00e9 sp\u00e9cifiquement (contrairement \u00e0 BGE-M3)\n- Pas de mode sparse natif\n- Risque de d\u00e9gradation cross-lingual non document\u00e9\n\n**Quand l'utiliser** : si BGE-M3 est trop lourd et que le corpus est majoritairement EN.\n\n---\n\n## 4. Les pi\u00e8ges document\u00e9s\n\n### Le pi\u00e8ge mxbai (fen\u00eatre 512)\n\nmxbai-embed-large a un contexte de **512 tokens uniquement**. Tout chunk au-del\u00e0 est **silencieusement tronqu\u00e9** \u2014 pas d'erreur, pas de warning. Les d\u00e9veloppeurs d\u00e9couvrent la troncature apr\u00e8s des semaines de r\u00e9sultats m\u00e9diocres.\n\n### Le pi\u00e8ge nomic v1 (pas de FR)\n\nnomic-embed-text v1.5 score &lt; 0.16 en cross-lingual \u2014 quasi-z\u00e9ro. Une query en fran\u00e7ais ne trouvera rien dans des documents en anglais. Plusieurs threads Reddit documentent ce probl\u00e8me. **Ne pas utiliser pour du contenu fran\u00e7ais.**\n\n### Le pi\u00e8ge MTEB (pas pr\u00e9dictif)\n\nMTEB est un benchmark synth\u00e9tique. Il ne pr\u00e9dit pas les performances sur vos donn\u00e9es. Toujours benchmarker sur vos propres paires query/document. Un mod\u00e8le \u00e0 63 MTEB peut battre un mod\u00e8le \u00e0 67 sur votre corpus sp\u00e9cifique.\n\n### Le size bias\n\nLes textes plus longs produisent des scores cosine plus \u00e9lev\u00e9s ind\u00e9pendamment de la pertinence. Les seuils de cosine similarity absolus ne sont pas fiables \u2014 utiliser le ranking relatif, pas le score absolu.\n\n### Le fine-tuning qui change tout\n\nBGE-base fine-tun\u00e9 sur 6.3K paires = **+38% NDCG@10**. 3 minutes de training sur GPU consumer. Sur un corpus sp\u00e9cialis\u00e9 stable (vocabulaire m\u00e9tier r\u00e9current), le fine-tuning de l'embedding a plus d'impact que le changement de mod\u00e8le.\n\n---\n\n## 5. Retex communaut\u00e9\n\n### Reddit r/LocalLLaMA\n- \"BGE-M3 is the only embedding that doesn't suck for non-English\" \u2014 consensus large\n- \"Qwen3-Embedding-0.6B is criminally underrated. 20ms per chunk on CPU.\"\n- D\u00e9bat actif sur nomic v2 MoE vs BGE-M3 pour le multilingual\n\n### Reddit r/RAG\n- \"I wasted 2 weeks debugging my RAG before realizing mxbai was truncating my chunks at 512 tokens\"\n- \"Embedding model matters less than you think once you have a reranker. The reranker compensates for ~80% of embedding quality differences.\"\n- Pattern Vectara (NAACL 2025) : le chunking influence la qualit\u00e9 autant que le choix d'embedding (25 configurations x 48 mod\u00e8les test\u00e9s)\n\n### Harvard Law School\n- RAG pour le droit fran\u00e7ais avec `multilingual-e5-large`\n- Les queries en anglais performent mieux que les queries en fran\u00e7ais, m\u00eame sur des documents en fran\u00e7ais\n- Les experts juridiques identifient les erreurs, les novices les acceptent\n\n---\n\n## 6. Positions divergentes\n\n### \"Utiliser un mod\u00e8le API est plus simple\"\n\nArgument : Cohere Embed v4 ou Voyage-3-large offrent une qualit\u00e9 sup\u00e9rieure sans g\u00e9rer l'infra.\nContre-argument : chaque embedding passe par le r\u00e9seau (latence + co\u00fbt + privacy). Pour un corpus personnel sensible, l'embedding local est non-n\u00e9gociable.\n\n### \"Le fine-tuning de l'embedding est inutile\"\n\nArgument : les mod\u00e8les pr\u00e9-entra\u00een\u00e9s sont assez bons.\nContre-argument : +38% NDCG@10 avec 6.3K paires, 3 min de training. Le ROI est massif sur un vocabulaire m\u00e9tier stable.\n\n### \"Prendre le plus gros mod\u00e8le possible\"\n\nArgument : Qwen3-Embedding 8B bat tout le monde.\nContre-argument : l'embedding est appel\u00e9 \u00e0 chaque query + chaque ingestion. Un mod\u00e8le 10x plus lent pour +7% de qualit\u00e9 est rarement justifi\u00e9. Le reranker compense.\n\n---\n\n## 7. Recommandation pour ton cas\n\n### Configuration recommand\u00e9e\n\n```\nEmbedding principal : BGE-M3 via Ollama\n\u251c\u2500\u2500 Dense vectors (1024 dims)  \u2192 similarit\u00e9 s\u00e9mantique\n\u251c\u2500\u2500 Sparse vectors             \u2192 match de termes exacts (BM25-like)\n\u2514\u2500\u2500 ColBERT (optionnel)        \u2192 late interaction pour queries complexes\n\nEmbedding l\u00e9ger : Qwen3-Embedding-0.6B en GGUF Q8\n\u2514\u2500\u2500 Ingestion batch rapide (20-100ms/chunk CPU)\n```\n\n### Workflow\n\n1. **Ingestion batch** : Qwen3-Embedding-0.6B (rapide, CPU)\n2. **Query-time** : BGE-M3 (qualit\u00e9, hybrid search)\n3. **Reranker** : bge-reranker-v2-m3 (voir [D5](D5-retrieval.md))\n\n### Pourquoi pas Qwen3-Embedding 8B ?\n\n64GB RAM partag\u00e9s avec le LLM principal (Qwen3.5 35B-A3B qui utilise ~25-35GB). L'embedding 8B en Q4 ajoute 4-6GB. C'est viable mais r\u00e9duit la marge pour le context window et le multitasking. BGE-M3 (1.2GB) est un meilleur compromis.\n\n### Migration path\n\nSi BGE-M3 ne donne pas satisfaction sur le FR :\n1. Tester Qwen3-Embedding 8B (meilleur MTEB FR = 69.8)\n2. Fine-tuner BGE-M3 sur 1K-5K paires de ton corpus (+38% potentiel)\n3. En dernier recours : Cohere Embed v4 via API (multimodal, texte+PDF)\n\n---\n\n## 8. Sources\n\n| Source | Pertinence | Date |\n|--------|-----------|------|\n| Morph Ollama Benchmarks | Comparatif latence/qualit\u00e9 | 2026 |\n| MTEB Leaderboard | Scores de r\u00e9f\u00e9rence embeddings | Continu |\n| BGE-M3 Paper (BAAI) | Architecture dense+sparse+ColBERT | 2024 |\n| Qwen3-Embedding Release | 0.6B et 8B, scores FR | Mai 2026 |\n| nomic-embed-text-v2-moe | 1er MoE embedding | 2026 |\n| Cohere Embed v4 | 1er multimodal production | 2026 |\n| Jina Embeddings v4 | Multi-vector + LoRA adapters | 2026 |\n| Vectara NAACL 2025 | Chunking influence = embedding choice | 2025 |\n| Harvard Law School, RAG droit fran\u00e7ais | Cross-lingual FR/EN study | 2025 |\n| Chroma Context Rot | D\u00e9gradation 18 mod\u00e8les sur contexte long | 2026 |\n| Fine-tuning BGE-base, +38% NDCG@10 | Impact fine-tuning embedding | 2025 |\n\n\n---\n\n\n# D4 \u2014 Base Vectorielle\n\n&gt; **Question** : Quelle base vectorielle pour le stockage et la recherche s\u00e9mantique ?\n&gt; **Confiance** : Moyenne (d\u00e9pend de la Phase \u2014 pas n\u00e9cessaire en Phase 1)\n&gt; **Verdict** : Qdrant (pre-filtering metadata, hybrid natif). Alternative embedded : Qdrant Edge ou LanceDB.\n\n---\n\n## 1. Contexte\n\nLa base vectorielle n'est pertinente qu'\u00e0 partir de la **Phase 3** (voir [D1](D1-file-first-vs-rag.md)). En Phase 1-2, SQLite FTS5 couvre le besoin de recherche. Ce document pr\u00e9pare le choix pour le passage en Phase 3.\n\nCrit\u00e8res de s\u00e9lection :\n- **Pre-filtering metadata** : s\u00e9parer univers Netwo/Perso AVANT la vector search (pas post-filtering)\n- **Hybrid search natif** : dense + sparse dans la m\u00eame query\n- **Self-hosted** : Docker ou embedded, pas de SaaS\n- **RAM &lt; 2GB idle** : le Mac h\u00e9berge aussi le LLM principal\n- **Maintenance minimale** : un fondateur n'a pas le temps d'op\u00e9rer un cluster\n\n---\n\n## 2. Comparatif complet\n\n| DB | Stars | Cas d'usage | RAM idle | Filtering | Hybrid | Maintenance | Licence |\n|----|-------|-------------|----------|-----------|--------|-------------|---------|\n| **Qdrant** | 24K+ | Production, filtres metadata complexes | ~400MB | **Pre-filtering** | Natif | Docker simple | Apache 2.0 |\n| **LanceDB** | 12K+ | Embarqu\u00e9 local, l\u00e9ger | 4MB idle, 150MB query | Post-filtering | Via DuckDB | Aucune (in-process) | Apache 2.0 |\n| **pgvector** | 15K+ | D\u00e9j\u00e0 sur PostgreSQL | Variable (PG) | SQL WHERE | Via extensions | Standard PG | PostgreSQL |\n| **Chroma** | 18K+ | Prototypage | Variable | Post-filtering | Non natif | Aucune | Apache 2.0 |\n| **Qdrant Edge** | \u2014 | Embedded in-process | ~100MB | Pre-filtering | Natif | Aucune | Private beta |\n| **SQLite-vec** | 5K+ | Ultra-l\u00e9ger | &lt; 50MB | SQL WHERE | Non | Aucune | MIT |\n| **Milvus Lite** | 32K+ | Milvus en embedded | ~200MB | Pre-filtering | Natif | Aucune | Apache 2.0 |\n\n---\n\n## 3. Analyse d\u00e9taill\u00e9e\n\n### Qdrant \u2014 Le favori production\n\n**Benchmark M1 MacBook Pro** (5500 docs HotpotQA) :\n- Latence P50 : identique \u00e0 pgvector \u00e0 1ms pr\u00e8s\n- Recall : Qdrant 0.911 vs pgvector 0.900 (delta 1%)\n- Le vrai bottleneck = l'embedding (50-300ms), pas le vector store\n\n**Forces** :\n- **Pre-filtering** : les filtres metadata (univers, date, type, source) sont appliqu\u00e9s AVANT la vector search. Critique pour la s\u00e9paration Netwo/Perso \u2014 ne cherche que dans l'univers actif.\n- **Hybrid search natif** : dense + sparse dans la m\u00eame query, fusion score configurable\n- **Payload indexing** : index secondaires sur les metadata pour acc\u00e9l\u00e9rer les filtres\n- **Quantization** : scalar/binary quantization pour r\u00e9duire la RAM de 4-8x avec &lt; 1% de perte de recall\n- **Snapshots** : backup/restore en une commande\n- **API REST + gRPC** : int\u00e9gration simple avec n'importe quel langage\n\n**Faiblesses** :\n- Service Docker s\u00e9par\u00e9 (vs embedded)\n- 400MB de RAM idle \u2014 significatif sur une machine partag\u00e9e\n- Overkill pour &lt; 10K documents\n\n**Setup** :\n```bash\ndocker run -p 6333:6333 -v ./qdrant_storage:/qdrant/storage qdrant/qdrant\n```\n\n### Qdrant Edge \u2014 Le futur embedded\n\nAnnonc\u00e9 en private beta (avril-mai 2026) :\n- Version embedded in-process (type SQLite) \u2014 z\u00e9ro latence r\u00e9seau\n- M\u00eame format de stockage et API que le serveur\n- ~100MB de RAM, offline complet\n- Game changer pour les apps desktop\n\n**Quand c'est dispo** : remplace la combinaison \"Qdrant Docker + network calls\" par un import direct dans l'app. Surveiller la GA.\n\n### LanceDB \u2014 Le SQLite des vector DBs\n\n**Forces** :\n- **Zero-service** : in-process, pas de Docker, pas de daemon\n- 4MB idle \u2192 150MB en query \u2014 le plus l\u00e9ger\n- **LanceDB x DuckDB** (2026) : SQL retrieval natif \u2014 vector, full-text, hybrid search comme fonctions SQL. Joins avec data d'\u00e9val.\n- **1.5M IOPS** benchmark\u00e9 \u2014 compute-storage separation\n- Sync via Git/iCloud (format colonnaire sur fichiers)\n- Mindshare jan 2026 : LanceDB 4.6% vs Qdrant 4.3% \u2014 quasi \u00e0 \u00e9galit\u00e9\n\n**Faiblesses** :\n- Post-filtering (pas pre-filtering comme Qdrant) \u2014 moins efficace pour la s\u00e9paration univers\n- Hybrid search passe par DuckDB (setup suppl\u00e9mentaire)\n- \u00c9cosyst\u00e8me moins mature que Qdrant\n\n**Quand l'utiliser** : si tu veux z\u00e9ro service externe et que le pre-filtering n'est pas critique.\n\n### pgvector \u2014 Pour ceux qui ont d\u00e9j\u00e0 PostgreSQL\n\n**Forces** :\n- Z\u00e9ro ops suppl\u00e9mentaire si PostgreSQL est d\u00e9j\u00e0 dans le stack\n- SQL standard pour les filtres (WHERE clause)\n- pgvectorscale (Timescale) : 471 QPS vs 41 QPS pour Qdrant \u00e0 99% recall sur 50M vecteurs\n\n**Faiblesses** :\n- PostgreSQL en plus = ~500MB+ de RAM\n- Le benchmark pgvectorscale est irr\u00e9levant pour &lt; 100K docs\n- Pas de hybrid search natif (n\u00e9cessite pg_search ou extension tierce)\n- Post-filtering (WHERE apr\u00e8s vector search)\n\n**Quand l'utiliser** : si PostgreSQL fait d\u00e9j\u00e0 partie du stack. Pas la peine de l'ajouter juste pour les vectors.\n\n### Chroma \u2014 Prototypage uniquement\n\n- Rust rewrite (2025) : 4x plus rapide en writes/queries\n- **\"La plupart des projets RAG \u00e9chouent vers le 3\u00e8me mois en outgrowant ChromaDB\"** \u2014 migration vers Qdrant = \"un weekend de boulot\"\n- Post-filtering, pas de hybrid search natif\n- Convient pour un POC rapide, pas pour la dur\u00e9e\n\n---\n\n## 4. La question du pre-filtering vs post-filtering\n\n| Approche | Comment \u00e7a marche | Impact |\n|----------|-------------------|--------|\n| **Pre-filtering** (Qdrant) | Filtre metadata \u2192 puis vector search sur le sous-ensemble | Rapide, pr\u00e9cis, ne retourne que des r\u00e9sultats de l'univers cibl\u00e9 |\n| **Post-filtering** (Chroma, LanceDB) | Vector search sur tout \u2192 puis filtre les r\u00e9sultats | Peut retourner &lt; k r\u00e9sultats si beaucoup sont filtr\u00e9s, gaspille du compute |\n\nPour la s\u00e9paration Netwo/Perso, le pre-filtering est **critique** : on ne veut jamais qu'un chunk Perso apparaisse dans une recherche Netwo, m\u00eame bri\u00e8vement avant filtrage.\n\n---\n\n## 5. Retex communaut\u00e9\n\n### Reddit r/selfhosted\n- Qdrant = favori clair pour le self-hosted RAG\n- \"Qdrant Docker is set-and-forget. I've had it running for 6 months with zero maintenance.\"\n- Pattern r\u00e9current : start Chroma \u2192 outgrow \u2192 migrate Qdrant\n\n### Reddit r/LocalLLaMA\n- \"The vector DB is the least important part of the RAG stack. Spend your time on chunking and reranking.\"\n- \"LanceDB is underrated \u2014 zero ops, zero Docker, just import and use.\"\n- D\u00e9bat actif sur Qdrant Edge vs LanceDB pour les apps desktop\n\n### Reddit r/RAG\n- \"Pre-filtering is non-negotiable if you have multi-tenant data.\"\n- Break-even cloud : seulement \u00e0 ~60-80M queries/mois ou 100M+ vecteurs. Pour usage perso : self-hosted syst\u00e9matiquement.\n\n---\n\n## 6. Positions divergentes\n\n### \"LanceDB &gt; Qdrant pour un agent personnel\"\n\nArgument : z\u00e9ro service, z\u00e9ro Docker, sync fichiers, SQL natif.\nContre-argument : le pre-filtering est critique pour Netwo/Perso. LanceDB fait du post-filtering, ce qui est un compromis de s\u00e9curit\u00e9 sur la s\u00e9paration des donn\u00e9es.\n\n### \"pgvector suffit, pas besoin d'un vector DB d\u00e9di\u00e9\"\n\nArgument : une seule base pour tout (metadata + vectors).\nContre-argument : PostgreSQL consomme plus de RAM que Qdrant, et le hybrid search n\u00e9cessite des extensions tierces. Sur un Mac d\u00e9di\u00e9 \u00e0 l'inf\u00e9rence LLM, chaque GB de RAM compte.\n\n### \"Pas besoin de vector DB du tout (voir D1)\"\n\nArgument : FTS5 + grep couvre &lt; 2M tokens.\nContre-argument : vrai en Phase 1-2. Ce document pr\u00e9pare la Phase 3 si le corpus cro\u00eet.\n\n---\n\n## 7. Recommandation pour ton cas\n\n### Phase 1-2 : Pas de vector DB\n\nSQLite FTS5 suffit. Voir [D1](D1-file-first-vs-rag.md).\n\n### Phase 3 : Qdrant Docker\n\n```yaml\n# docker-compose.yml\nservices:\n  qdrant:\n    image: qdrant/qdrant:latest\n    ports:\n      - \"6333:6333\"\n    volumes:\n      - ./qdrant_storage:/qdrant/storage\n    restart: unless-stopped\n    deploy:\n      resources:\n        limits:\n          memory: 1G\n```\n\nAvec collections s\u00e9par\u00e9es ou metadata filtering :\n```\nCollection \"knowledge\"\n\u251c\u2500\u2500 metadata.universe = \"netwo\" | \"perso\"\n\u251c\u2500\u2500 metadata.source_type = \"obsidian\" | \"slack\" | \"meeting\" | \"email\"\n\u251c\u2500\u2500 metadata.date = \"2026-05-16\"\n\u2514\u2500\u2500 metadata.status = \"active\" | \"archived\"\n```\n\n### Si Qdrant Edge sort en GA\n\nMigrer vers Qdrant Edge (embedded, m\u00eame API, ~100MB RAM). Le format de stockage est compatible \u2014 migration transparente.\n\n### Alternative si Docker est un probl\u00e8me\n\nLanceDB in-process \u2014 accepter le compromis post-filtering (mitiger avec des collections s\u00e9par\u00e9es par univers).\n\n---\n\n## 8. Sources\n\n| Source | Pertinence | Date |\n|--------|-----------|------|\n| Qdrant vs pgvector benchmark M1 | Latence P50 identique, recall 0.911 vs 0.900 | 2025 |\n| LanceDB x DuckDB SQL retrieval | 1.5M IOPS, hybrid search SQL | 2026 |\n| Qdrant Edge announcement | Embedded in-process, private beta | 2026 |\n| pgvectorscale (Timescale) | 471 QPS vs 41 QPS \u00e0 99% recall sur 50M vecs | 2025 |\n| Chroma Rust rewrite | 4x perf improvement | 2025 |\n| Mindshare LanceDB vs Qdrant | 4.6% vs 4.3% (quasi-\u00e9galit\u00e9) | Jan 2026 |\n| r/selfhosted Qdrant retex | Consensus favori self-hosted | 2025-2026 |\n\n\n---\n\n\n# D5 \u2014 Strat\u00e9gie de Retrieval\n\n&gt; **Question** : Quelle strat\u00e9gie de retrieval pour maximiser la qualit\u00e9 des r\u00e9ponses ?\n&gt; **Confiance** : Haute\n&gt; **Verdict** : Hybrid (BM25 + vector) + reranker. +22pts recall vs vector seul. bge-reranker-v2-m3 pour FR/EN.\n\n---\n\n## 1. Contexte\n\nLe retrieval est la couche o\u00f9 la majorit\u00e9 des RAG \u00e9chouent \u2014 pas au niveau du LLM. 80% des \u00e9checs tracent vers l'ingestion et le retrieval. Ce document couvre la strat\u00e9gie de retrieval pour la Phase 3 (quand le RAG vectoriel est activ\u00e9), mais aussi les patterns FTS5 pour les Phases 1-2.\n\n---\n\n## 2. Les approches compar\u00e9es\n\n### Donn\u00e9es quantitatives (2025-2026)\n\n| Approche | Context Precision | Context Recall | Answer Relevancy |\n|----------|------------------|----------------|-----------------|\n| Dense vector seul | 0.61 | 0.74 | 0.78 |\n| BM25 seul (keyword) | 0.58 | 0.68 | 0.75 |\n| **Hybrid (alpha=0.5)** | 0.71 | 0.83 | 0.81 |\n| **Hybrid + Reranking** | 0.79 | 0.84 | 0.87 |\n\n**Le hybrid fait +22 points de recall** (72% \u2192 94% dans certains benchmarks).\n**Le reranker ajoute +17 points de precision** (61% \u2192 78%).\nLes deux sont compl\u00e9mentaires : le hybrid \u00e9largit le rappel, le reranker affine la pr\u00e9cision.\n\n### Le flow recommand\u00e9\n\n```\nQuery utilisateur\n    \u2193\nQuery expansion (optionnel, +8-12% recall)\n    \u2193\nHybrid Search (BM25 + vector, top-50)\n    \u2193\nReranker (bge-reranker-v2-m3, \u2192 top-5)\n    \u2193\nLLM (avec les 3-5 meilleurs chunks)\n```\n\n---\n\n## 3. Hybrid Search en d\u00e9tail\n\n### Comment \u00e7a marche\n\n| Composant | Ce qu'il capte | Ce qu'il rate |\n|-----------|---------------|---------------|\n| **BM25 (sparse)** | Termes exacts, noms propres, identifiants, acronymes | Synonymes, paraphrases, concepts abstraits |\n| **Vector (dense)** | Similarit\u00e9 s\u00e9mantique, concepts, paraphrases | Termes exacts, noms propres rares, code |\n| **Hybrid** | Les deux | Quasi rien (mais plus de compute) |\n\n### Le param\u00e8tre alpha\n\n```\nalpha = 0.0 \u2192 100% BM25 (keyword)\nalpha = 0.5 \u2192 50% BM25 + 50% vector (sweet spot)\nalpha = 1.0 \u2192 100% vector (dense)\n```\n\nVentureBeat Q1 2026 : l'intent hybrid retrieval a **tripl\u00e9 \u00e0 33.3%**, chaque vector DB standalone perd des parts de march\u00e9. Le hybrid est devenu le standard.\n\n### Impl\u00e9mentation\n\n**Qdrant natif** : supporte hybrid search via sparse + dense vectors dans la m\u00eame collection. Un seul appel API retourne les r\u00e9sultats fusionn\u00e9s.\n\n**SQLite FTS5 + vector store** : FTS5 pour le BM25, Qdrant pour le dense. Fusion des scores en application (Reciprocal Rank Fusion).\n\n**BGE-M3** : le seul mod\u00e8le d'embedding qui produit **les deux types de vecteurs** (dense + sparse) en un seul forward pass. Pas besoin de deux mod\u00e8les s\u00e9par\u00e9s.\n\n---\n\n## 4. Rerankers\n\n### Comparatif\n\n| Reranker | Latence | Multilingual FR | Licence | Note |\n|----------|---------|----------------|---------|------|\n| **bge-reranker-v2-m3** | 80-120ms GPU | **OUI** (100+ langues) | Apache 2.0 | #1 self-hosted multilingue |\n| zerank-1 (ZeroEntropy) | 60ms | Moyen | API | +28% vs baseline |\n| zerank-2 | 100-200ms | Bon | API payante | Bon sur queries complexes |\n| Jina Reranker v2 | 100-150ms | Oui | Apache 2.0 | Bon compromis |\n| Cohere Rerank 3.5 | 50-100ms | Oui | API | Le plus rapide, payant |\n| FlashRank | 20-50ms | Limit\u00e9 | MIT | Ultra-rapide, qualit\u00e9 moindre |\n\n### bge-reranker-v2-m3 \u2014 Le choix\n\n**Pourquoi** :\n- Apache 2.0, self-hosted\n- 100+ langues \u2014 critique pour FR/EN\n- ~80-120ms sur GPU Apple Silicon (Metal)\n- Produit par BAAI (m\u00eame \u00e9quipe que BGE-M3) \u2014 optimis\u00e9 pour travailler ensemble\n- Cross-encoder architecture \u2014 plus pr\u00e9cis que les bi-encoders pour le reranking\n\n**Comment** :\n```python\nfrom sentence_transformers import CrossEncoder\nreranker = CrossEncoder(\"BAAI/bge-reranker-v2-m3\")\nscores = reranker.predict([(query, doc) for doc in candidates])\ntop_docs = sorted(zip(scores, candidates), reverse=True)[:5]\n```\n\n### Le reranker compense les faiblesses de l'embedding\n\nDonn\u00e9e Reddit r/RAG : \"Embedding model matters less than you think once you have a reranker. The reranker compensates for ~80% of embedding quality differences.\" Investir dans un bon reranker est plus rentable que d'optimiser l'embedding \u00e0 l'infini.\n\n---\n\n## 5. Top-K optimal\n\n| \u00c9tape | K recommand\u00e9 | Raison |\n|-------|-------------|--------|\n| Retrieval initial (hybrid) | 50-100 | Cast large pour maximiser le recall |\n| Apr\u00e8s reranking | 5-20 | Pr\u00e9cision, \u00e9liminer le bruit |\n| Vers le LLM | 3-5 | Budget tokens, \u00e9viter le noise |\n\n**Le pi\u00e8ge du top-3 direct** : si tu retrieves seulement 3 chunks sans reranking, tu rates ~30% des chunks pertinents. Le retrieval large + reranking est toujours sup\u00e9rieur au retrieval \u00e9troit.\n\n---\n\n## 6. Metadata filtering\n\n### Pourquoi c'est critique\n\nEssentiel d\u00e8s &gt; 10K docs. Sans filtering, le vector search m\u00e9lange tous les univers, toutes les dates, tous les types de documents.\n\n### Pre-filtering vs post-filtering\n\n| Approche | Support | Impact |\n|----------|---------|--------|\n| **Pre-filtering** (Qdrant) | Filtre AVANT search | Rapide, garantit la s\u00e9paration |\n| Post-filtering (Chroma, LanceDB) | Filtre APR\u00c8S search | Peut retourner &lt; k r\u00e9sultats |\n\n### Filtres recommand\u00e9s\n\n```json\n{\n  \"must\": [\n    { \"key\": \"universe\", \"match\": { \"value\": \"netwo\" } },\n    { \"key\": \"status\", \"match\": { \"value\": \"active\" } }\n  ],\n  \"should\": [\n    { \"key\": \"source_type\", \"match\": { \"value\": \"meeting\" } }\n  ],\n  \"must_not\": [\n    { \"key\": \"status\", \"match\": { \"value\": \"deprecated\" } }\n  ]\n}\n```\n\n---\n\n## 7. Techniques avanc\u00e9es\n\n### Contextual Retrieval (Anthropic)\n\nPrepend le contexte du chunk avant l'embedding. Claim +67% retrieval quality. Le chunk \"Q3 revenue: $45M\" devient \"In the 2025 annual report, section Financial Results, Q3 revenue: $45M\". L'embedding capture le contexte, pas juste le contenu isol\u00e9.\n\n### Multi-agent retrieval (Stanford HAI, mars 2026)\n\nUn agent retrieve, un critique, un synth\u00e9tise. R\u00e9sultat : **-41% hallucinations** vs naive RAG. Co\u00fbt : 3-10x plus de tokens, 2-5x plus de latence. Justifi\u00e9 pour les queries critiques, pas pour le quotidien.\n\n### Late chunking\n\nEmbed tous les chunks en array \u2192 pr\u00e9serve les relations inter-chunks. +10-12% retrieval sur docs avec r\u00e9f\u00e9rences anaphoriques (\"il a d\u00e9cid\u00e9...\", \"comme mentionn\u00e9 plus haut\"). Support\u00e9 par BGE-M3 ColBERT mode.\n\n### Parent-document retrieval\n\nStandard de production : indexer petits chunks (300 tokens) pour la pr\u00e9cision, retourner le chunk parent (1000-1500 tokens) au LLM pour le contexte. Le LLM a besoin de contexte, pas juste du snippet pertinent.\n\n### Query expansion\n\nReformuler la query en 2-3 variantes \u2192 chercher chaque variante \u2192 fusionner. +8-12% recall sur des queries ambigu\u00ebs. Co\u00fbt : 2-3x tokens de query, mais n\u00e9gligeable vs les tokens de r\u00e9ponse.\n\n---\n\n## 8. L'\u00e9valuation RAG \u2014 le parent pauvre\n\n### Le probl\u00e8me\n\n- **70% des teams n'\u00e9valuent pas** syst\u00e9matiquement la qualit\u00e9 de retrieval\n- **RAGAS Faithfulness \u00e9choue \u00e0 produire un score dans 83.5% des cas** (FinanceBench)\n- Sans mesure, pas d'am\u00e9lioration \u2014 c'est comme d\u00e9ployer sans tests\n\n### M\u00e9triques minimales\n\n| M\u00e9trique | Ce qu'elle mesure | Cible |\n|----------|------------------|-------|\n| **Recall@k** | % de chunks pertinents dans les k retourn\u00e9s | &gt; 80% |\n| **NDCG@10** | Qualit\u00e9 du ranking des r\u00e9sultats | &gt; 0.70 |\n| **MRR** | Position moyenne du premier r\u00e9sultat pertinent | &gt; 0.80 |\n| **Answer relevancy** | Pertinence de la r\u00e9ponse finale | &gt; 0.85 |\n\n### Comment \u00e9valuer\n\n1. Cr\u00e9er un test set de 50 questions avec r\u00e9ponses attendues + chunks sources\n2. Ex\u00e9cuter le pipeline sur chaque question\n3. Mesurer recall@5, NDCG@10, answer relevancy\n4. It\u00e9rer sur le chunking/reranking/prompt\n\n---\n\n## 9. Retex communaut\u00e9\n\n### Reddit r/RAG\n- \"Hybrid search is the single biggest improvement you can make. Going from vector-only to hybrid was like turning on the lights.\"\n- \"72% of production RAG systems use hybrid search.\" (2025 survey)\n- \"The reranker is the secret weapon. It turns a mediocre retriever into a great one.\"\n\n### Reddit r/AI_Agents\n- \"89% des RAG enterprise sont d\u00e9ploy\u00e9s sans RBAC \u2014 un analyste junior peut acc\u00e9der \u00e0 des donn\u00e9es confidentielles via le chatbot.\" Permission-aware scoring obligatoire.\n- \"L'\u00e9valuation RAG est le parent pauvre \u2014 tout le monde mesure la qualit\u00e9 du LLM, personne ne mesure la qualit\u00e9 du retrieval.\"\n\n### Reddit r/LocalLLaMA\n- \"bge-reranker-v2-m3 is the best bang for buck in multilingual reranking. Nothing else comes close for self-hosted.\"\n\n---\n\n## 10. Recommandation pour ton cas\n\n### Phase 1-2 (file-first)\n\n```\nQuery \u2192 SQLite FTS5 (BM25 natif) \u2192 top-10 \u2192 Claude context window\n+ ripgrep pour exact match (&lt; 50ms)\n```\n\n### Phase 3 (RAG vectoriel)\n\n```\nQuery \u2192 BGE-M3 hybrid (dense + sparse) via Qdrant\n     \u2192 top-50 candidats\n     \u2192 bge-reranker-v2-m3 (80-120ms)\n     \u2192 top-5\n     \u2192 Claude avec metadata (source, date, univers)\n```\n\n### Metadata filtering obligatoire\n\n```\nToute query filtr\u00e9e par :\n\u251c\u2500\u2500 universe = netwo | perso (s\u00e9paration \u00e9tanche)\n\u251c\u2500\u2500 status = active (pas les docs archiv\u00e9s)\n\u2514\u2500\u2500 date &gt;= 6 mois (sauf demande explicite)\n```\n\n### Budget tokens\n\n- Retrieval initial 50 chunks \u00d7 300 tokens = 15K tokens (pas envoy\u00e9s au LLM)\n- Apr\u00e8s reranking 5 chunks \u00d7 1500 tokens (parent-doc) = 7.5K tokens au LLM\n- Total par query : ~10K tokens (embedding + reranking + LLM)\n\n---\n\n## 11. Sources\n\n| Source | Pertinence | Date |\n|--------|-----------|------|\n| Hybrid Search Production RAG (TowardsDS) | Benchmark precision/recall | 2025-2026 |\n| VentureBeat, hybrid intent triples to 33.3% | Market trend | Q1 2026 |\n| Stanford HAI, multi-agent retrieval | -41% hallucinations | Mars 2026 |\n| BAAI bge-reranker-v2-m3 | #1 multilingue self-hosted | 2025 |\n| Anthropic Contextual Retrieval | +67% retrieval quality (claim) | 2025 |\n| RAGAS FinanceBench | 83.5% failure rate Faithfulness | 2025 |\n| Vecta Benchmark chunking strategies | 25 configs \u00d7 48 mod\u00e8les | F\u00e9v 2026 |\n| Microsoft Azure, 89% RAG sans RBAC | S\u00e9curit\u00e9 retrieval | 2025 |\n| ZeroEntropy zerank-1 | +28% vs baseline | 2026 |\n\n\n---\n\n\n# D6 \u2014 Runtime Agent\n\n&gt; **Question** : Quel framework/runtime pour l'agent principal ?\n&gt; **Confiance** : Moyenne (le paysage \u00e9volue vite)\n&gt; **Verdict** : DIY (Claude Code + fichiers + MCP) pour le contr\u00f4le. Hermes Agent si besoin de skill learning.\n\n---\n\n## 1. Contexte\n\nLe \"runtime agent\" est le cerveau qui orchestre tout : recevoir les instructions, d\u00e9cider quoi faire, appeler les outils (MCP), g\u00e9rer la m\u00e9moire, et produire les sorties. Le choix du runtime d\u00e9termine :\n\n- Le niveau de contr\u00f4le sur le comportement de l'agent\n- La capacit\u00e9 \u00e0 debugger quand \u00e7a foire\n- La d\u00e9pendance \u00e0 un framework tiers\n- La facilit\u00e9 d'\u00e9volution et de maintenance\n\nLe consensus Reddit/HN/Indie Hackers (753 upvotes HN) : **\"l'agent le plus maintenu long-terme est celui que tu comprends enti\u00e8rement\"**. Les frameworks lourds (LangChain, CrewAI) perdent des utilisateurs au profit de plain code + direct API + vector DB.\n\n---\n\n## 2. Les options\n\n### Option A \u2014 DIY (Claude Code + fichiers + MCP)\n\n| Aspect | D\u00e9tail |\n|--------|--------|\n| **Architecture** | Claude CLI en subprocess, MCP servers pour les outils, fichiers pour la m\u00e9moire |\n| **Contr\u00f4le** | Total \u2014 chaque ligne est visible et modifiable |\n| **Opacit\u00e9** | Z\u00e9ro \u2014 le system prompt est un fichier texte, les MCP sont des process locaux |\n| **Maintenance** | Minimale \u2014 pas de framework \u00e0 mettre \u00e0 jour |\n| **Communaut\u00e9** | Claude Code est dans les training data du mod\u00e8le \u2014 le LLM le conna\u00eet intimement |\n| **Skill learning** | Manuel \u2014 il faut coder chaque nouvelle capacit\u00e9 |\n| **Multi-agent** | Via subprocess ou Agent SDK |\n\n**Forces** :\n- Z\u00e9ro opacit\u00e9 \u2014 tu vois exactement ce que l'agent fait et pourquoi\n- Claude Code est l'outil le plus test\u00e9 par Anthropic eux-m\u00eames\n- Routines cloud (avril 2026) : cron jobs manag\u00e9s, scheduled tasks\n- Agent SDK (TypeScript + Python) : m\u00eame moteur que l'interactif, en headless\n- Skills/agents \u00e9cosyst\u00e8me : composable sans framework lourd\n\n**Faiblesses** :\n- Pas d'UI de gestion (dashboard, monitoring)\n- Pas de skill learning automatique (chaque capacit\u00e9 est cod\u00e9e)\n- Pas de marketplace de skills pr\u00eats \u00e0 l'emploi\n\n### Option B \u2014 Hermes Agent (ex-Open Interpreter)\n\n| Aspect | D\u00e9tail |\n|--------|--------|\n| **Stars** | 114K+ |\n| **Version** | v0.13 \"Tenacity\" (mai 2026) |\n| **Features** | Skill learning, MCP 6000+, Kanban multi-agent, `/goal`, checkpoints |\n| **OpenRouter** | #1 avec 224B tokens/jour |\n| **Licence** | AGPL-3.0 |\n\n**Forces** :\n- **Skill learning** : l'agent apprend de nouvelles capacit\u00e9s automatiquement\n- **6000+ MCP servers** compatibles\n- **Kanban multi-agent** : orchestration visuelle de workflows complexes\n- `/goal` : agent qui d\u00e9compose un objectif en sous-t\u00e2ches et les ex\u00e9cute\n- **Checkpoints** : restauration d'\u00e9tat si l'agent d\u00e9rive\n\n**Faiblesses** :\n- Memory OFF par d\u00e9faut (opt-in conscient) \u2014 risque d'oubli si mal configur\u00e9\n- Auto-overwrite skills : l'agent peut \u00e9craser ses propres comp\u00e9tences apprises sans confirmation\n- Self-eval toujours positive : UK AI Security Institute a document\u00e9 700 cas de \"scheming\" \u2014 agents qui signalent succ\u00e8s sur \u00e9chec\n- AGPL-3.0 : contrainte de licence pour une utilisation commerciale\n- Complexit\u00e9 : le framework ajoute une couche d'abstraction entre toi et le LLM\n\n### Option C \u2014 OpenClaw (ex-Open WebUI)\n\n| Aspect | D\u00e9tail |\n|--------|--------|\n| **Stars** | 370K+ |\n| **Skills** | 44K+ skills, 137 releases, 50+ plateformes |\n| **OpenRouter** | 186B tokens/jour (apr\u00e8s Hermes) |\n| **S\u00e9curit\u00e9** | **6+ CVEs** dont CVSS 9.9, 11.9% skills malicieux |\n\n**Forces** :\n- UI web compl\u00e8te (chat, mod\u00e8les, skills, pipelines)\n- \u00c9cosyst\u00e8me massif de skills pr\u00eats \u00e0 l'emploi\n- Int\u00e9gration Ollama native\n\n**Faiblesses critiques** :\n- **6+ CVEs en 2025-2026**, dont un CVSS 9.9 (ex\u00e9cution de code \u00e0 distance)\n- **11.9% des skills sur ClawHub sont malicieux** (\u00e9tude ClawHavoc)\n- **1,184 packages malicieux identifi\u00e9s** sur ClawHub\n- Instabilit\u00e9 des updates \u2014 pattern r\u00e9current de r\u00e9gressions\n- Surface d'attaque massive (44K skills = 44K vecteurs potentiels)\n\n**Verdict** : **non recommand\u00e9** pour un agent personnel traitant des donn\u00e9es sensibles. Les risques de s\u00e9curit\u00e9 sont trop \u00e9lev\u00e9s.\n\n### Option D \u2014 Claude Code + Routines Cloud\n\n| Aspect | D\u00e9tail |\n|--------|--------|\n| **Architecture** | Claude CLI local + scheduled tasks sur infra Anthropic |\n| **Persistance** | Cloud (survit aux reboots, pas besoin de Mac allum\u00e9) |\n| **Acc\u00e8s** | Fresh git clone \u00e0 chaque run \u2014 pas d'acc\u00e8s fichiers locaux |\n| **Co\u00fbt** | Cr\u00e9dit \"Agent SDK\" s\u00e9par\u00e9 du quota interactif (\u00e0 partir du 15 juin 2026) |\n\n**Forces** :\n- Aucune infra \u00e0 g\u00e9rer \u2014 Anthropic g\u00e8re le cron\n- Survit aux reboots, coupures de courant, Mac en veille\n- Chaque run est isol\u00e9 (pas de state corrompu qui persiste)\n\n**Faiblesses** :\n- Fresh clone = pas d'acc\u00e8s aux fichiers locaux non-git\n- Pas d'acc\u00e8s aux MCP servers locaux (Slack MCP, Calendar MCP)\n- Co\u00fbt API suppl\u00e9mentaire\n\n### Option E \u2014 Autres\n\n| Plateforme | Stars | Verdict rapide |\n|------------|-------|---------------|\n| **AnythingLLM** | 60K | RAG all-in-one, setup simple. RAG pas sophistiqu\u00e9, bugs r\u00e9currents. OK pour POC. |\n| **Khoj** | 34K | Self-hosted, Obsidian natif, YC W24. `ai_update_memories` sans confirmation = faille critique. |\n| **LangChain/LangGraph** | 100K+ | Le plus populaire mais le plus verbeux. Perd des utilisateurs au profit du DIY. |\n| **CrewAI** | 25K+ | Multi-agent declaratif. Abstraction lourde, debug difficile. |\n| **Autogen** | 40K+ | Microsoft, multi-agent. Complexe, overkill pour un agent personnel. |\n\n---\n\n## 3. Retex communaut\u00e9\n\n### Reddit r/AI_Agents\n- \"I tried LangChain, CrewAI, Autogen. Ended up with plain Python + Claude API. 10x less code, 2x more reliable.\"\n- \"The agents making money in 2026 are impressive because of what they accumulate across hundreds of sessions, not what they do in a single session.\"\n- \"Frameworks add complexity. For a personal agent, you want to understand every line.\"\n\n### Reddit r/LocalLLaMA\n- Hermes v0.13 Tenacity : \"The Kanban multi-agent is genuinely useful. But memory being off by default caught me.\"\n- \"Open WebUI/OpenClaw has the best UI but the worst security. I wouldn't put sensitive data in it.\"\n- \"Claude Code + MCP is the sleeper pick. Zero framework overhead.\"\n\n### Hacker News\n- \"LangChain is the jQuery of AI \u2014 got people started, but everyone's moving to simpler alternatives.\"\n- Pattern : DIY avec plain Python/TypeScript + direct API + MCP \u2192 plus maintenable, plus compr\u00e9hensible.\n\n### Indie Hackers\n- \"I replaced $8K/month in AI tools with 5 agents I built myself.\"\n- \"The best agent is the one you can fix at 2am when it breaks.\"\n\n---\n\n## 4. S\u00e9curit\u00e9 MCP \u2014 le risque cach\u00e9\n\n### Les incidents document\u00e9s\n\n| Incident | Impact | Le\u00e7on |\n|----------|--------|-------|\n| **ClawHavoc** | 1,184 packages malicieux sur ClawHub | Auditer chaque MCP, ne pas installer depuis une marketplace |\n| **postmark-mcp BCC exfiltration** | Supply chain attack \u2014 BCC silencieux sur chaque email | Pinner les versions, auditer le code |\n| **6+ CVEs MCP (2025-2026)** | 492 serveurs expos\u00e9s sans auth, 36.7% vuln\u00e9rables au SSRF | Toujours derri\u00e8re auth + firewall |\n| **LiteLLM v1.82.7-1.82.8** | Malware supply chain (CVE-2026-33634) | Pinner les versions, v\u00e9rifier les checksums |\n\n### R\u00e8gles de s\u00e9curit\u00e9 MCP\n\n1. **Auditer le code source** de chaque MCP server avant installation\n2. **Pinner les versions** (pas de `latest`)\n3. **R\u00e9seau** : MCP servers sur localhost uniquement, jamais expos\u00e9s\n4. **Auth** : token sur chaque endpoint MCP\n5. **Scope minimal** : chaque MCP n'a acc\u00e8s qu'\u00e0 ce dont il a besoin\n6. **MCP Linux Foundation governance** (2026) : OAuth 2.1 en cours de standardisation\n\n---\n\n## 5. Positions divergentes\n\n### \"Un framework est n\u00e9cessaire pour le multi-agent\"\n\nArgument : LangGraph, CrewAI, Autogen facilitent l'orchestration multi-agent.\nContre-argument : pour un agent personnel, le multi-agent est rarement n\u00e9cessaire. Un seul agent avec des outils MCP suffit. Le multi-agent ajoute du compound error (85%^n).\n\n### \"Hermes est meilleur pour le skill learning\"\n\nArgument : l'agent apprend automatiquement de nouvelles capacit\u00e9s.\nContre-argument : le skill learning non-supervis\u00e9 est dangereux (auto-overwrite, self-eval positive). Mieux vaut coder les skills manuellement et les versionner avec Git.\n\n### \"L'UI est importante\"\n\nArgument : sans UI, l'agent est inaccessible aux non-d\u00e9veloppeurs.\nContre-argument : l'utilisateur cible est un fondateur tech-savvy. Le CLI + Slack comme interface suffit. L'UI viendra quand le core est stable (Doppelg\u00e4nger elle-m\u00eame).\n\n---\n\n## 6. Recommandation pour ton cas\n\n### Architecture recommand\u00e9e\n\n```\nClaude Code CLI (headless)\n\u251c\u2500\u2500 claude -p \"...\" --allowedTools \"Read,Edit,Bash\"\n\u251c\u2500\u2500 Agent SDK (TypeScript) pour les pipelines complexes\n\u251c\u2500\u2500 Routines Cloud pour les t\u00e2ches overnight\n\u2514\u2500\u2500 /loop sessions pour le monitoring actif\n\nMCP Servers (localhost)\n\u251c\u2500\u2500 Slack MCP (read/write/draft)\n\u251c\u2500\u2500 Apple Calendar MCP (EventKit)\n\u251c\u2500\u2500 Vault MCP (Obsidian natif)\n\u251c\u2500\u2500 Filesystem MCP (ingestion)\n\u2514\u2500\u2500 Custom MCPs au besoin\n\nM\u00e9moire (voir D2)\n\u251c\u2500\u2500 MEMORY.md + fichiers versionn\u00e9s\n\u251c\u2500\u2500 SQLite FTS5 (\u00e9pisodique)\n\u2514\u2500\u2500 Qdrant (Phase 3, s\u00e9mantique)\n\nOrchestration (voir D8)\n\u251c\u2500\u2500 n8n Docker (workflows \u00e9v\u00e9nementiels)\n\u251c\u2500\u2500 launchd (crons Mac natifs)\n\u2514\u2500\u2500 Slack #agent-approvals (HITL)\n```\n\n### Pourquoi pas Hermes Agent ?\n\nHermes est le #2 choix si le skill learning automatique devient critique. Mais pour d\u00e9marrer :\n1. Le skill learning non-supervis\u00e9 est un risque de s\u00e9curit\u00e9\n2. La m\u00e9moire OFF par d\u00e9faut est un pi\u00e8ge\n3. AGPL-3.0 est contraignant\n4. Claude Code offre le m\u00eame pouvoir avec plus de contr\u00f4le\n\n### Migration path\n\nSi Claude Code s'av\u00e8re trop limit\u00e9 (besoin de skill learning, UI, multi-agent complexe) :\n1. **Ajouter Hermes** comme runtime secondaire pour les t\u00e2ches exp\u00e9rimentales\n2. **Garder Claude Code** comme runtime principal pour les t\u00e2ches critiques\n3. **Ne jamais migrer vers OpenClaw** \u2014 les risques de s\u00e9curit\u00e9 sont r\u00e9dhibitoires\n\n---\n\n## 7. Sources\n\n| Source | Pertinence | Date |\n|--------|-----------|------|\n| Claude Code docs (headless, Agent SDK, Routines) | Architecture de r\u00e9f\u00e9rence | 2026 |\n| Hermes Agent v0.13 Tenacity | Skill learning, Kanban, checkpoints | Mai 2026 |\n| OpenClaw ClawHavoc | 1,184 packages malicieux, CVEs | 2025-2026 |\n| UK AI Security Institute | 700 cas de scheming agents | 2026 |\n| MCP Linux Foundation | OAuth 2.1, governance | 2026 |\n| LiteLLM CVE-2026-33634 | Supply chain attack | 2026 |\n| r/AI_Agents consensus | DIY &gt; frameworks pour agents perso | 2025-2026 |\n| Agent SDK billing (15 juin 2026) | Nouveau mod\u00e8le de facturation | 2026 |\n\n\n---\n\n\n# D7 \u2014 LLMs et Routing\n\n&gt; **Question** : Quels LLMs utiliser, et comment les router par type de t\u00e2che ?\n&gt; **Confiance** : Haute\n&gt; **Verdict** : Local Qwen3.5-35B-A3B MoE (60-106 tok/s M4 Pro) + API Claude Sonnet via OpenRouter + Haiku pour le grading. LiteLLM comme proxy unifi\u00e9.\n\n---\n\n## 1. Contexte\n\nUn seul LLM pour tout = surpayer. Les t\u00e2ches d'un agent personnel vont du triage email (trivial) \u00e0 la r\u00e9daction de proposition (complexe). Le routing multi-mod\u00e8le \u00e9conomise 40-85% des co\u00fbts en dirigeant chaque t\u00e2che vers le mod\u00e8le le moins cher qui la r\u00e9sout correctement.\n\nContraintes sp\u00e9cifiques :\n- **Pas de cl\u00e9 API Anthropic directe** \u2014 Claude CLI only (tool_use bloqu\u00e9 sur API directe, issue #278)\n- M4 Pro 64GB : budget RAM partag\u00e9 entre LLM principal, embedding, services\n- FR/EN bilingue avec code-switching\n- Latence acceptable : &lt; 5s pour le conversationnel, &lt; 30s pour les t\u00e2ches complexes\n\n---\n\n## 2. Le stack mod\u00e8les\n\n### Mod\u00e8les locaux (Ollama natif MLX)\n\n| Mod\u00e8le | Params (actifs) | Vitesse M4 Pro | RAM | Use case |\n|--------|----------------|---------------|-----|----------|\n| **Qwen3.5-35B-A3B** | 35B (3B actifs) | **60-106 tok/s** | ~25-35GB | Raisonnement, r\u00e9daction, analyse |\n| Qwen3-8B | 8B | ~45-80 tok/s | ~6-8GB | Classification, triage, r\u00e9sum\u00e9 court |\n| Qwen3-4B | 4B | ~100-150 tok/s | ~3-4GB | Extraction de donn\u00e9es, tagging |\n| Llama 3.2-3B | 3B | ~120-180 tok/s | ~2-3GB | T\u00e2ches triviales, formatting |\n| Phi-4-mini | 3.8B | ~90-130 tok/s | ~3GB | Code, logique simple |\n\n**Qwen3.5-35B-A3B = game changer** : architecture MoE (Mixture of Experts) avec seulement 3B param\u00e8tres actifs par token sur 35B total. Vitesse comparable \u00e0 un 8B, qualit\u00e9 d'un 35B. C'est le meilleur ratio qualit\u00e9/vitesse sur Apple Silicon en mai 2026.\n\n### Ollama 0.19 MLX Backend\n\nOllama 0.19 introduit le backend MLX natif (framework Apple) :\n- **+93% decode speed** vs le backend llama.cpp pr\u00e9c\u00e9dent\n- Utilisation optimale du Neural Engine et de l'Unified Memory\n- Pas de couche de traduction \u2014 le mod\u00e8le tourne directement sur Metal\n\n**Docker ne peut PAS acc\u00e9der au GPU Metal** \u2014 Ollama doit tourner en natif. 5-6x de perte de performance sinon.\n\n### Mod\u00e8les API (via OpenRouter)\n\n| Mod\u00e8le | Qualit\u00e9 | Co\u00fbt input/output | Use case |\n|--------|---------|-------------------|----------|\n| **Claude Sonnet 4.6** | Tr\u00e8s haute | ~$3/$15 par M tokens | R\u00e9daction, analyse complexe, conversations importantes |\n| Claude Haiku 4.5 | Bonne | ~$0.80/$4 par M tokens | Grading, \u00e9valuation, classification rapide |\n| GPT-4.1-mini | Bonne | ~$0.40/$1.60 par M tokens | R\u00e9sum\u00e9, extraction, t\u00e2ches bulk |\n| Gemini 2.5 Flash | Bonne | ~$0.15/$0.60 par M tokens | T\u00e2ches \u00e0 tr\u00e8s haut volume |\n| DeepSeek-V3 | Haute | ~$0.27/$1.10 par M tokens | Raisonnement, alternative \u00e0 Sonnet |\n\n**OpenRouter** : $40M lev\u00e9s, 623+ mod\u00e8les, 5.5% de frais. Proxy unifi\u00e9 pour acc\u00e9der \u00e0 tous les providers. Failover automatique si un provider est down.\n\n---\n\n## 3. Le routing par type de t\u00e2che\n\n### Matrice de routing\n\n| T\u00e2che | Mod\u00e8le | Raison |\n|-------|--------|--------|\n| **Triage email** | Qwen3-8B local | Rapide, gratuit, classification simple |\n| **R\u00e9sum\u00e9 Slack** | Qwen3.5-35B-A3B local | Bonne qualit\u00e9 FR, contexte long |\n| **Draft email** | Claude Sonnet (API) | Ton professionnel, nuances FR/EN |\n| **Meeting prep** | Qwen3.5-35B-A3B local + FTS5 | Recherche locale + synth\u00e8se |\n| **R\u00e9ponse Slack draft** | Claude Sonnet (API) | Ton important, visible par l'\u00e9quipe |\n| **Morning briefing** | Qwen3.5-35B-A3B local | Synth\u00e8se de donn\u00e9es locales |\n| **Proposal draft** | Claude Sonnet (API) | Qualit\u00e9 r\u00e9dactionnelle critique |\n| **Classification/tagging** | Qwen3-4B local | Ultra-rapide, pattern simple |\n| **\u00c9valuation qualit\u00e9** | Haiku 4.5 (API) | Grading ind\u00e9pendant du producteur |\n| **Code review** | Claude Sonnet (API) | Raisonnement complexe |\n\n### Logique de routing\n\n```\nIF task.requires_quality &gt;= HIGH:\n    \u2192 Claude Sonnet via OpenRouter\nELIF task.requires_quality &gt;= MEDIUM AND task.is_french:\n    \u2192 Qwen3.5-35B-A3B local (excellent FR)\nELIF task.requires_quality &gt;= MEDIUM:\n    \u2192 Qwen3-8B local\nELIF task.is_bulk OR task.is_classification:\n    \u2192 Qwen3-4B local ou GPT-4.1-mini API\nELSE:\n    \u2192 Qwen3-4B local\n```\n\n### LiteLLM comme proxy unifi\u00e9\n\n```python\n# litellm_config.yaml\nmodel_list:\n  - model_name: \"local/qwen35-35b\"\n    litellm_params:\n      model: \"ollama/qwen3.5:35b-a3b\"\n      api_base: \"http://localhost:11434\"\n  - model_name: \"api/claude-sonnet\"\n    litellm_params:\n      model: \"openrouter/anthropic/claude-sonnet-4.6\"\n      api_key: \"sk-or-...\"\n  - model_name: \"api/haiku\"\n    litellm_params:\n      model: \"openrouter/anthropic/claude-haiku-4.5\"\n      api_key: \"sk-or-...\"\n\nrouter_settings:\n  routing_strategy: \"cost-optimized\"\n  fallbacks:\n    - \"api/claude-sonnet\" \u2192 \"local/qwen35-35b\"\n    - \"local/qwen35-35b\" \u2192 \"api/claude-sonnet\"\n```\n\n**Avantage** : une seule API \u00e0 appeler. LiteLLM route vers le bon mod\u00e8le selon la config. Failover automatique si un mod\u00e8le est down.\n\n**Attention LiteLLM** : CVE-2026-33634 (malware supply chain sur v1.82.7-1.82.8). Toujours pinner la version et v\u00e9rifier les checksums.\n\n---\n\n## 4. Fine-tuning pour le style personnel\n\n### Quand le prompting suffit\n\n- Messages courts et format\u00e9s (emails, r\u00e9ponses Slack)\n- &lt; 100 exemples de style disponibles\n- Prototypage rapide\n- Budget = 0\n\n### Quand le fine-tuning ajoute de la valeur\n\n- Contenu long-form (articles, analyses, briefs)\n- Vocabulaire tr\u00e8s sp\u00e9cifique / franglais / jargon fondateur\n- Consistance sur des centaines de g\u00e9n\u00e9rations\n- Style \"implicite\" difficile \u00e0 d\u00e9crire dans un prompt\n\n### Approche LoRA sur M4 Pro\n\n| Aspect | D\u00e9tail |\n|--------|--------|\n| **Outil** | mlx-tune (natif Apple Silicon, ex-unsloth-mlx) |\n| **Dataset** | 200-500 paires Q&amp;A de tes \u00e9crits (quality &gt; quantity) |\n| **Config** | r=16, DoRA activ\u00e9, target_modules=\"all-linear\" (~0.5% des param\u00e8tres) |\n| **Temps** | ~2h pour 600 it\u00e9rations sur un 9B |\n| **Co\u00fbt** | $0 (local) |\n| **Qualit\u00e9** | LoRA r\u00e9cup\u00e8re ~90-95% du full fine-tune |\n\n### L'architecture hybride (consensus 2026)\n\n- **Fine-tuning = HOW** (ton ton, tes expressions, ta structure de pens\u00e9e)\n- **RAG = WHAT** (faits actuels, donn\u00e9es entreprise, contexte projet)\n- R\u00e8gle : \"Put volatile knowledge in retrieval, put stable behavior in fine-tuning\"\n\n### RAFT (UC Berkeley + Microsoft + Meta)\n\nRetrieval Augmented Fine-Tuning : entra\u00eene le mod\u00e8le \u00e0 op\u00e9rer en mode \"open-book\". Split 80/20 : 80% des exemples incluent le document oracle, 20% sans. Surpasse RAG seul et fine-tuning seul sur PubMed, HotpotQA, Gorilla.\n\n### Le probl\u00e8me du style drift\n\nChroma a test\u00e9 18 mod\u00e8les frontier : **tous se d\u00e9gradent** quand le contexte augmente. L'attention math\u00e9matique dilue les instructions de style initiales. Un mod\u00e8le fine-tun\u00e9 N'A PAS ce probl\u00e8me \u2014 le style est dans les poids, pas dans le contexte.\n\n### Alternatives locales fine-tuning\n\n| Outil | Avantage | Plateforme |\n|-------|----------|-----------|\n| **mlx-tune** | Natif Apple Silicon, SFT + DPO + GRPO | macOS |\n| **Unsloth** | 2x plus rapide, 60% moins de m\u00e9moire | Linux/CUDA |\n| **Axolotl** v0.29.0 | YAML-driven, LoRA/QLoRA/DPO/GRPO, Flash Attention | Linux/CUDA |\n\n### Voice cloning (output parl\u00e9)\n\n| Solution | Audio requis | Latence | FR natif | Self-hosted |\n|----------|-------------|---------|----------|-------------|\n| **Voxtral TTS** (Mistral) | 3s (zero-shot) | **90ms TTFA** | Oui | Oui (open-weight) |\n| **Coqui XTTS v2** | 6s / 5-10min fine-tune | Variable | 16 langues | Oui |\n| ElevenLabs | 30s | ~150ms | Oui | Non (licence perp\u00e9tuelle sur tes donn\u00e9es) |\n| **Piper** | Pr\u00e9-entra\u00een\u00e9 | **&lt; 50ms CPU** | Voix FR | Oui |\n\n---\n\n## 5. \u00c9conomie du routing\n\n### Estimation co\u00fbt mensuel\n\n| Profil | Local seul | API seule | Hybride (reco) |\n|--------|-----------|----------|---------------|\n| 20 queries/jour (casual) | $0 | ~$15/mois | ~$5/mois |\n| 50 queries/jour (actif) | $0 | ~$35/mois | ~$12/mois |\n| 100 queries/jour (intensif) | $0 | ~$70/mois | ~$20/mois |\n| \u00c9lectricit\u00e9 Mac | ~$5/mois | \u2014 | ~$5/mois |\n\nLe routing hybride \u00e9conomise **60-70%** vs API seule en envoyant les t\u00e2ches simples au local.\n\n### Le break-even local vs API\n\nPour un mod\u00e8le local 35B sur M4 Pro :\n- Co\u00fbt fixe : $0 (mat\u00e9riel d\u00e9j\u00e0 pay\u00e9) + ~$5/mois \u00e9lec\n- Si &gt; 15 queries/jour de qualit\u00e9 medium : le local est rentabilis\u00e9 vs API\n\n---\n\n## 6. Retex communaut\u00e9\n\n### Reddit r/LocalLLaMA\n- \"Qwen3.5-35B-A3B on M4 Pro 64GB is insane. 80+ tok/s for a 35B quality model.\"\n- \"The MoE architecture is the real breakthrough. 3B active params = 8B speed, 35B quality.\"\n- \"Ollama 0.19 MLX backend is a massive upgrade. My Mac Mini went from 40 tok/s to 75 tok/s on the same model.\"\n\n### Reddit r/AI_Agents\n- \"Multi-model routing saves 40-85% on costs. Using one model for everything is the #1 money mistake.\"\n- \"LiteLLM is the glue. One API, all models, automatic fallback.\"\n\n### Reddit r/selfhosted\n- \"My Mac Mini M4 Pro runs 24/7 serving Ollama. 15W idle, 30W under load. $5/month electricity.\"\n\n---\n\n## 7. Recommandation pour ton cas\n\n### Stack imm\u00e9diat\n\n```\nLocal (Ollama natif MLX)\n\u251c\u2500\u2500 Qwen3.5-35B-A3B    \u2192 T\u00e2ches FR/EN de qualit\u00e9 (60-106 tok/s)\n\u251c\u2500\u2500 Qwen3-8B            \u2192 Classification, triage rapide\n\u2514\u2500\u2500 Qwen3-4B            \u2192 Extraction, tagging bulk\n\nAPI (via OpenRouter \u2192 LiteLLM)\n\u251c\u2500\u2500 Claude Sonnet 4.6   \u2192 R\u00e9daction critique, conversations visibles\n\u251c\u2500\u2500 Claude Haiku 4.5    \u2192 Grading, \u00e9valuation ind\u00e9pendante\n\u2514\u2500\u2500 GPT-4.1-mini        \u2192 Fallback, t\u00e2ches bulk pas cher\n\nProxy\n\u2514\u2500\u2500 LiteLLM (version pinn\u00e9e) \u2192 Routing + failover + logging\n```\n\n### Fine-tuning (Phase 2+)\n\n1. Collecter 200-500 exemples de tes \u00e9crits (emails, Slack, notes)\n2. Formater en paires instruction/r\u00e9ponse\n3. LoRA sur Qwen3-8B via mlx-tune (~2h)\n4. \u00c9valuer sur 50 prompts de test\n5. Quarterly re-train avec nouveaux \u00e9crits\n\n### Garde-fous\n\n- **Hard caps** : max 3 retries par query, max $1 par query API\n- **Fallback chain** : Claude Sonnet \u2192 Qwen3.5 local \u2192 Haiku \u2192 erreur explicite\n- **Logging** : chaque call logg\u00e9 (mod\u00e8le, tokens, co\u00fbt, latence) via LiteLLM\n- **Jamais de fail silencieux** : si le mod\u00e8le est down, notification Slack\n\n---\n\n## 8. Sources\n\n| Source | Pertinence | Date |\n|--------|-----------|------|\n| Qwen3.5-35B-A3B release | MoE 60-106 tok/s M4 Pro | Mai 2026 |\n| Ollama 0.19 MLX backend | +93% decode speed | 2026 |\n| OpenRouter ($40M raised) | 623+ mod\u00e8les, 5.5% frais | 2026 |\n| LiteLLM proxy | Routing + failback + logging | 2026 |\n| LiteLLM CVE-2026-33634 | Supply chain malware | 2026 |\n| mlx-tune | LoRA natif Apple Silicon | 2026 |\n| Didier Lopes, fine-tune blog posts | +29.7% word overlap | 2025 |\n| Chroma, context rot 18 mod\u00e8les | Style drift documentation | 2026 |\n| RAFT (UC Berkeley) | RAG + fine-tuning hybride | 2024-2026 |\n| LLM Twin Course (Decoding ML) | Architecture compl\u00e8te &lt; $10 | 2026 |\n| Voxtral TTS (Mistral) | 90ms TTFA, FR natif, open-weight | 2026 |\n| EMNLP 2025 \"Catch Me If You Can\" | LLMs struggle with implicit style | 2025 |\n\n\n---\n\n\n# D8 \u2014 Orchestration et Workflows\n\n&gt; **Question** : Comment c\u00e2bler les flux \u00e9v\u00e9nementiels, les routines et le human-in-the-loop ?\n&gt; **Confiance** : Moyenne (d\u00e9pend de l'\u00e9cosyst\u00e8me n8n qui \u00e9volue vite)\n&gt; **Verdict** : n8n pour les workflows \u00e9v\u00e9nementiels (Slack, email, calendar). launchd pour les crons Mac. HITL via Slack threads.\n\n---\n\n## 1. Contexte\n\nL'orchestration connecte l'agent au monde r\u00e9el : quand un email arrive, quand un meeting approche, quand un fichier change. Sans orchestration, l'agent est passif \u2014 il faut lui demander explicitement tout. Avec, il travaille pendant que tu dors.\n\nTrois niveaux d'orchestration :\n1. **\u00c9v\u00e9nementiel** : r\u00e9agir \u00e0 des triggers (email, Slack mention, fichier ajout\u00e9)\n2. **Planifi\u00e9** : routines r\u00e9currentes (briefing matinal, triage hebdomadaire)\n3. **HITL** : proposer des actions, attendre l'approbation humaine\n\n---\n\n## 2. Event-Driven Patterns\n\n### Les 5 m\u00e9canismes de triggering\n\n| M\u00e9canisme | Latence | Complexit\u00e9 | Use case |\n|-----------|---------|-----------|----------|\n| **Webhooks** | &lt; 5s | Moyenne (endpoint public n\u00e9cessaire) | Slack, Gmail, GitHub, Stripe |\n| **Polling** | 15s-60s | Faible (cron/timer) | APIs sans webhooks |\n| **MCP SSE** | Temps r\u00e9el | Faible (MCP g\u00e8re la connexion) | Agent-to-tool persistent |\n| **Filesystem watcher** | &lt; 1s | Faible (`fswatch` macOS natif) | Nouveaux fichiers locaux |\n| **Cron/launchd** | N/A | Faible | Routines planifi\u00e9es |\n\n### n8n vs custom event loop\n\n| Crit\u00e8re | n8n self-hosted | Custom (Node.js/Python) |\n|---------|----------------|------------------------|\n| Int\u00e9grations | 400+ nodes natifs | \u00c0 c\u00e2bler soi-m\u00eame |\n| AI nodes | LangChain, Anthropic, Ollama natifs | Direct API |\n| UI | \u00c9diteur visuel de workflows | CLI/code |\n| Webhooks | Endpoint int\u00e9gr\u00e9 | \u00c0 exposer (ngrok/tunnel) |\n| Maintenance | Docker compose up | Tout \u00e0 g\u00e9rer |\n| Co\u00fbt | Gratuit (self-hosted) | Gratuit |\n\n**Verdict** : n8n pour tout ce qui est int\u00e9grations multi-services. Custom uniquement pour les cas non couverts par n8n.\n\n---\n\n## 3. Daily Briefing Pattern\n\n### Le workflow overnight\n\n```\n[22h-6h] Collecte\n\u251c\u2500\u2500 Gmail API (nouveaux emails)\n\u251c\u2500\u2500 Slack MCP (messages, mentions)\n\u251c\u2500\u2500 Google Calendar (agenda J+0)\n\u2514\u2500\u2500 RSS/webhooks (news, monitoring)\n           \u2193\n[6h] Processing\n\u251c\u2500\u2500 Claude classifie et r\u00e9sume\n\u251c\u2500\u2500 Extraction : urgences, actions, FYI\n\u2514\u2500\u2500 Draft r\u00e9ponses emails prioritaires\n           \u2193\n[7h] Delivery\n\u251c\u2500\u2500 Slack DM ou Canvas structur\u00e9\n\u251c\u2500\u2500 Ou note Obsidian/markdown\n\u2514\u2500\u2500 10 min de review au caf\u00e9\n```\n\n### Outils existants\n\n| Outil | Prix | Approche |\n|-------|------|----------|\n| **alfred_** | $25/mois | Triage overnight, drafts dans ta voix, Daily Brief \u00e0 7h |\n| **n8n template** | Gratuit | Gmail trigger 15min \u2192 classification Claude \u2192 Slack alert + Gmail draft |\n| **Custom local** | $0 | SQLite + Claude CLI + cron + markdown |\n\n### Configuration n8n concr\u00e8te\n\nTemplate existant : \"Triage Gmail + Claude + Slack\"\n- Gmail Trigger (15 min) \u2192 Claude \"Classify Email Intent\" \u2192 Switch (5 branches) \u2192 Slack alert (urgent) + Gmail Draft (needs reply) + Label (FYI/auto) + Trash (spam) + Google Sheets log\n\n**Temps processing** : ~2-5 min pour 50-100 emails + 20 canaux Slack avec Claude Sonnet.\n**Co\u00fbt** : ~$0.50-2/jour en tokens.\n\n---\n\n## 4. Slack Real-Time Integration\n\n### 3 approches\n\n| Approche | Latence | Setup | Recommand\u00e9 pour |\n|----------|---------|-------|-----------------|\n| **Slack MCP Server** | Polling | Faible (OAuth + MCP config) | Agent perso, lecture/\u00e9criture simple |\n| **Slack Events API** | ~1s (webhooks) | Moyenne (app Slack + endpoint public) | R\u00e9actions temps r\u00e9el, gros volume |\n| **Slack Socket Mode** | ~1s (WebSocket) | Moyenne (pas d'endpoint public) | Temps r\u00e9el sans infra publique |\n\n### Slack MCP \u2014 16 outils disponibles\n\n- `slack_read_channel` / `slack_read_thread` : historique messages\n- `slack_send_message` : envoi direct\n- `slack_send_message_draft` : sauvegarde en draft (**HITL**)\n- `slack_search_public` / `slack_search_public_and_private` : recherche\n- `slack_create_canvas` / `slack_update_canvas` : documents rich\n- `slack_search_users` / `slack_read_user_profile` : infos utilisateurs\n\n**Rate limits** : Tier 2 (20/min) recherche, Tier 3 (50/min) lecture, Tier 4 (100/min) profils.\n\n### Pattern HITL Slack\n\n```\n1. Agent lit les messages via slack_read_channel\n2. Agent pr\u00e9pare une r\u00e9ponse\n3. Agent poste via slack_send_message_draft (PAS d'envoi direct)\n4. Julien review le draft, \u00e9dite si besoin, envoie\n```\n\nAlternative : canal #agent-approvals avec le draft + boutons approve/reject.\n\n---\n\n## 5. Email Triage\n\n### Architecture\n\n```\nGmail API / IMAP polling (15 min)\n        \u2193\n  Fetch unread emails\n        \u2193\n  AI Classification (Claude/Qwen local)\n  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n  Urgent    NeedsReply  FYI     Automated   Spam\n  \u2193           \u2193          \u2193         \u2193          \u2193\n  Slack      Draft      Label    Label+      Trash\n  alert      reply      +read    archive\n```\n\n**Privacy** : n8n + Ollama local pour classifier sans envoyer les emails \u00e0 un service externe. Trade-off : qualit\u00e9 de classification inf\u00e9rieure vs Claude Sonnet.\n\n---\n\n## 6. Calendar-Aware Agent\n\n### Patterns\n\n| Pattern | Description | Trigger |\n|---------|-------------|---------|\n| **Don't disturb** | V\u00e9rifier calendar avant notification. Meeting en cours \u2192 queue. | Avant chaque notification |\n| **Pre-meeting briefing** | 15 min avant 1:1 : emails r\u00e9cents, docs partag\u00e9s, tickets ouverts | 15 min avant \u00e9v\u00e9nement |\n| **Post-meeting follow-up** | Reminder \"noter les actions\" apr\u00e8s fin d'\u00e9v\u00e9nement | Fin d'\u00e9v\u00e9nement |\n| **Morning \"Your Day\"** | Briefing matinal : calendar + tasks + emails | 7h quotidien |\n\n### Outils Mac\n\n| Outil | Type | Note |\n|-------|------|------|\n| **apple-calendar-mcp** | MCP (Node.js) | Lit/\u00e9crit Calendar.app |\n| **mcp-ical-swift** | MCP (Swift compil\u00e9) | Contourne TCC, EventKit natif |\n| **Google Calendar MCP** | MCP officiel | CRUD complet, scheduling intelligent |\n| **accli** | CLI Go | JSON output, agent-friendly |\n\n**Probl\u00e8me TCC** : macOS bloque l'acc\u00e8s Calendar pour les process headless. Solution : binaire Swift compil\u00e9 qui h\u00e9rite les permissions EventKit.\n\n---\n\n## 7. Scheduled Workflows\n\n### 3 niveaux de scheduling\n\n| Niveau | M\u00e9canisme | Persiste reboot | Machine requise | Acc\u00e8s local |\n|--------|-----------|----------------|-----------------|-------------|\n| **`/loop`** (session) | Cron in-session, 7j max | Non | Oui | Oui |\n| **Desktop scheduled tasks** | Persistant, UI | Oui | Oui (app ouverte) | Oui |\n| **Cloud Routines** | Anthropic cloud | Oui | Non | Non (fresh clone) |\n\n### Routines concr\u00e8tes\n\n| Routine | Schedule | Outil | Note |\n|---------|----------|-------|------|\n| Morning briefing | `0 6 * * *` | Cloud Routine ou launchd | Tourne pendant le sommeil |\n| Email triage | `*/15 * * * *` | n8n + Gmail trigger | Toutes les 15 min |\n| Knowledge update | `0 2 * * *` | Claude CLI cron | Indexation nightly |\n| Weekly summary | `0 18 * * 5` | Desktop scheduled task | Vendredi 18h |\n| Monthly report | `0 9 1 * *` | Cloud Routine | 1er du mois |\n\n### launchd vs cron sur Mac\n\n- **launchd** : natif macOS, survit reboots, g\u00e8re wake-from-sleep, plus fiable\n- **cron** : plus simple, universel, mais pas de wake ni retry\n- **Recommandation** : launchd pour les routines critiques, cron pour le dev/test\n\n### State management\n\nUn agent nightly ne doit pas re-traiter les m\u00eames donn\u00e9es. Solutions :\n- SQLite avec timestamps de dernier traitement\n- Fichier marker (`.last_processed`)\n- n8n qui track les items d\u00e9j\u00e0 process\u00e9s\n\n---\n\n## 8. Human-in-the-Loop\n\n### Framework de d\u00e9cision\n\n| Dimension | Question | Impact |\n|-----------|----------|--------|\n| **Irr\u00e9versibilit\u00e9** | L'action peut-elle \u00eatre annul\u00e9e ? | Email envoy\u00e9 = irr\u00e9versible \u2192 review obligatoire |\n| **Blast radius** | Combien de personnes affect\u00e9es ? | Post Slack public &gt; DM priv\u00e9 |\n| **Compliance** | Obligations l\u00e9gales ? | EU AI Act Art. 14 (ao\u00fbt 2026) |\n| **Confiance** | Score de confiance du mod\u00e8le | &gt; 90% auto, 60-90% caveats, &lt; 60% escalade |\n\n### Progressive Autonomy (donn\u00e9es Anthropic)\n\n\u00c9tude empirique sur millions d'interactions Claude Code :\n- Nouveaux utilisateurs : ~20% auto-approve\n- Apr\u00e8s 750 sessions : 40%+ auto-approve\n- La transition est **graduelle**, jamais binaire\n\n### 3 niveaux d'autonomie\n\n| Niveau | Quand | Comment |\n|--------|-------|---------|\n| **Shadow mode** | Phase 1 (d\u00e9marrage) | Agent propose, humain ex\u00e9cute. 100% review. |\n| **Supervised mode** | Phase 2 (apr\u00e8s ~200 interactions) | Agent ex\u00e9cute, humain notifi\u00e9. Timeout configurable. Actions high-risk restent en shadow. |\n| **Bounded autonomy** | Phase 3 (apr\u00e8s ~750 interactions) | Agent autonome sur patterns r\u00e9currents (confiance &gt; 0.85). Notification post-action. Escalade sur cas nouveaux. |\n\n### Pattern d'approbation Slack\n\n```\nAgent pr\u00e9pare action\n        \u2193\nPost dans #agent-approvals :\n  \"\ud83d\udccb Action propos\u00e9e : envoyer email \u00e0 Marc\n   \ud83d\udcdd Contenu : [draft]\n   \ud83c\udfaf Raison : follow-up meeting du 15/05\n   \u26a0\ufe0f Risque : LOW\n   \u2705 Approve  \u274c Reject\"\n        \u2193\nJulien clique r\u00e9action emoji\n        \u2193\nAgent ex\u00e9cute ou abandonne\n```\n\n### Garde-fous non-n\u00e9gociables\n\n1. **Actions irr\u00e9versibles = TOUJOURS approval humaine** (jamais d'auto-approve)\n2. **Scope des t\u00e2ches \u2264 3 \u00e9tapes** quand possible (61% success vs 20% \u00e0 10 \u00e9tapes)\n3. **Circuit breaker** : trip \u00e0 5 \u00e9checs, cooldown 60s, alerte &gt; 5% erreur\n4. **Fallback chain** : Claude \u2192 Ollama local. Notification Slack si primaire down.\n5. **Jamais de fail silencieux** : \"notify human\" = d\u00e9faut safe, pas \"do nothing\"\n\n---\n\n## 9. Cross-Tool Orchestration\n\n### Exemple concret : nouveau doc \u2192 extraction \u2192 Obsidian \u2192 Slack\n\n```\nGoogle Drive push notification (webhook)\n  \u2192 n8n Webhook Trigger (&lt; 5s)\n    \u2192 Google Drive node : download\n      \u2192 AI node (Claude) : extraction d\u00e9cisions, actions, owners\n        \u2192 Filesystem : write to Obsidian vault\n          \u2192 Slack node : post summary #decisions\n            \u2192 Google Sheets : log entry\n```\n\n### Filesystem watcher pipeline\n\n```\nfswatch ~/Downloads ~/Documents/Inbox\n  \u2192 Nouveau fichier d\u00e9tect\u00e9\n    \u2192 POST vers l'agent\n      \u2192 Classification LLM (PDF facture? Screenshot? Code?)\n        \u2192 Action auto (classer) ou notification (approbation)\n```\n\n---\n\n## 10. Recommandation pour ton cas\n\n### Architecture\n\n```\nn8n Docker (port 5678)\n\u251c\u2500\u2500 Webhooks : Slack, Gmail, Google Drive\n\u251c\u2500\u2500 AI nodes : Claude Sonnet, Ollama local\n\u251c\u2500\u2500 HITL : pause workflow \u2192 Slack notification \u2192 approve/reject\n\u2514\u2500\u2500 Logging : Google Sheets ou SQLite\n\nlaunchd (Mac natif)\n\u251c\u2500\u2500 Ollama server (always-on, KeepAlive)\n\u251c\u2500\u2500 Health checks (poll endpoints, notify si down)\n\u2514\u2500\u2500 Crons : nightly indexation, weekly summary\n\nClaude Code\n\u251c\u2500\u2500 Routines Cloud : morning briefing, monthly report\n\u251c\u2500\u2500 Desktop tasks : weekly summary\n\u2514\u2500\u2500 /loop : monitoring actif pendant la journ\u00e9e\n\nSlack #agent-approvals\n\u251c\u2500\u2500 Drafts email en attente\n\u251c\u2500\u2500 Actions pending review\n\u2514\u2500\u2500 Progressive autonomy tracking\n```\n\n### Phase d'adoption\n\n| Semaine | Ce qui tourne | HITL |\n|---------|--------------|------|\n| 1 | Morning briefing (read-only) | 100% review |\n| 2-3 | + Email triage + Slack r\u00e9sum\u00e9 | 100% review |\n| 4-8 | + Drafts email + meeting prep | Review s\u00e9lective (low-risk auto) |\n| 8+ | + R\u00e9ponses Slack routini\u00e8res | Bounded autonomy sur patterns valid\u00e9s |\n\n---\n\n## 11. Sources\n\n| Source | Pertinence | Date |\n|--------|-----------|------|\n| n8n Self-Host Docker Guide | Setup complet | 2026 |\n| n8n Template Gmail + Claude + Slack | Workflow email triage | 2026 |\n| alfred_ Daily Brief | Pattern overnight triage | 2026 |\n| Slack MCP Server docs | 16 outils, scopes OAuth | 2026 |\n| Apple Calendar MCP (EventKit) | Int\u00e9gration Mac native | 2026 |\n| Anthropic, Measuring Agent Autonomy | Data progressive autonomy | 2026 |\n| HITL AI Agents \u2014 Approvals &amp; Escalation | Framework production | 2026 |\n| Google ADK long-running agents | Pause/resume/context | Mai 2026 |\n| OWASP Agentic Top 10 | ASI08 cascading failures | 2026 |\n| Meta incident 200 emails | Context compaction supprime guardrails | 2026 |\n| Carnegie Mellon TheAgentCompany | 24% \u2192 34% autonomous success | 2026 |\n| FAILSAFE.md / FAILURE.md | Standards de graceful degradation | 2026 |\n\n\n---\n\n\n# D9 \u2014 Infrastructure Mac\n\n&gt; **Question** : Comment configurer le Mac d\u00e9di\u00e9 M4 Pro 64GB comme plateforme agent ?\n&gt; **Confiance** : Haute\n&gt; **Verdict** : Ollama natif (MLX, pas Docker). Tout le reste en Docker Compose. Tailscale pour l'acc\u00e8s distant.\n\n---\n\n## 1. Contexte\n\nLe Mac Mini M4 Pro 64GB est la machine d\u00e9di\u00e9e \u00e0 l'agent. Il doit \u00eatre :\n- **Always-on** : l'agent travaille pendant que tu dors\n- **Performant** : inf\u00e9rence LLM locale rapide (MLX/Metal)\n- **Accessible** : depuis n'importe o\u00f9 (Tailscale)\n- **R\u00e9silient** : auto-restart des services, monitoring, alertes\n- **Int\u00e9gr\u00e9** : first-class citizen macOS, pas juste un serveur Docker\n\n---\n\n## 2. La r\u00e8gle fondamentale : Ollama natif, pas Docker\n\n**Docker sur Mac ne peut PAS acc\u00e9der au GPU Metal.** Ollama dans Docker tourne en CPU uniquement \u2014 5-6x de perte de performance.\n\n| Configuration | Qwen3.5-35B-A3B tok/s | RAM utilis\u00e9e |\n|---------------|----------------------|-------------|\n| **Ollama natif (MLX)** | **60-106 tok/s** | ~25-35GB |\n| Ollama Docker (CPU) | ~10-15 tok/s | ~25-35GB + overhead Docker |\n\nIl n'y a pas de d\u00e9bat : Ollama tourne en natif, tout le reste peut aller dans Docker.\n\n---\n\n## 3. Architecture des services\n\n### Docker Compose (tout sauf Ollama)\n\n```yaml\nversion: \"3.8\"\nservices:\n  n8n:\n    image: n8nio/n8n:latest\n    ports:\n      - \"5678:5678\"\n    volumes:\n      - ./n8n_data:/home/node/.n8n\n    environment:\n      - N8N_BASIC_AUTH_ACTIVE=true\n      - N8N_BASIC_AUTH_USER=admin\n      - N8N_BASIC_AUTH_PASSWORD=${N8N_PASSWORD}\n    restart: unless-stopped\n\n  qdrant:\n    image: qdrant/qdrant:latest\n    ports:\n      - \"6333:6333\"\n    volumes:\n      - ./qdrant_storage:/qdrant/storage\n    restart: unless-stopped\n    deploy:\n      resources:\n        limits:\n          memory: 1G\n\n  litellm:\n    image: ghcr.io/berriai/litellm:main-v1.XX.X  # VERSION PINN\u00c9E\n    ports:\n      - \"4000:4000\"\n    volumes:\n      - ./litellm_config.yaml:/app/config.yaml\n    command: [\"--config\", \"/app/config.yaml\"]\n    restart: unless-stopped\n```\n\n### Ollama natif (launchd)\n\n```xml\n\n\n\n\n    Label\n    com.ollama.server\n    ProgramArguments\n    \n        /usr/local/bin/ollama\n        serve\n    \n    EnvironmentVariables\n    \n        HOME\n        /Users/julien\n        OLLAMA_HOST\n        0.0.0.0\n        OLLAMA_ORIGINS\n        *\n    \n    RunAtLoad\n    \n    KeepAlive\n    \n    StandardOutPath\n    /tmp/ollama.log\n    StandardErrorPath\n    /tmp/ollama.error.log\n\n\n```\n\n**Points critiques** :\n- `OLLAMA_HOST=0.0.0.0` : indispensable pour l'acc\u00e8s r\u00e9seau. Les apps GUI macOS N'h\u00e9ritent PAS des vars `.zshrc`.\n- `KeepAlive=true` : restart automatique en cas de crash\n- Emplacement : `~/Library/LaunchAgents/com.ollama.server.plist`\n- `launchctl setenv` est reset\u00e9 au reboot \u2014 toujours utiliser le plist\n\n---\n\n## 4. Budget RAM\n\n| Service | RAM estim\u00e9e | Note |\n|---------|------------|------|\n| **Qwen3.5-35B-A3B** | 25-35GB | Mod\u00e8le principal (Q4/Q5) |\n| **BGE-M3** (embedding) | 1.2GB | Charg\u00e9 on-demand par Ollama |\n| **Qdrant** | 400MB-1GB | D\u00e9pend du volume d'index |\n| **n8n** | 200-400MB | Workflows \u00e9v\u00e9nementiels |\n| **LiteLLM** | 100-200MB | Proxy l\u00e9ger |\n| **macOS + services** | 4-6GB | Syst\u00e8me, Docker daemon, etc. |\n| **Marge** | 15-25GB | Pour context window, multitasking |\n| **Total** | ~40-50GB / 64GB | Confortable |\n\nLe M4 Pro 64GB est **juste suffisant** pour un 35B + services. Un 70B n\u00e9cessiterait 128GB.\n\n---\n\n## 5. Acc\u00e8s distant \u2014 Tailscale\n\n### Setup\n\n```bash\nbrew install tailscale\nsudo tailscaled install-system-daemon\ntailscale up --ssh\n```\n\n### Tailscale Aperture (alpha)\n\nFeature de s\u00e9curit\u00e9 pour les APIs AI :\n- Obfusque les cl\u00e9s API AI derri\u00e8re le tailnet\n- Visibilit\u00e9 tokens par utilisateur\n- R\u00e9vocation instantan\u00e9e\n- Pattern : l'agent acc\u00e8de \u00e0 OpenRouter via Tailscale Aperture, pas directement\n\n### Acc\u00e8s depuis l'ext\u00e9rieur\n\n| M\u00e9thode | Latence | S\u00e9curit\u00e9 | Setup |\n|---------|---------|----------|-------|\n| **Tailscale SSH** | ~50-100ms | WireGuard (E2E chiffr\u00e9) | 5 min |\n| **Tailscale HTTPS** | ~50-100ms | TLS + Tailscale auth | 10 min |\n| VPN classique | Variable | Variable | 30+ min |\n| Port forwarding | ~20ms | Faible (expos\u00e9 internet) | Non recommand\u00e9 |\n\n---\n\n## 6. Int\u00e9gration macOS native\n\n### Invocation system-wide\n\n| Outil | Pattern | Latence |\n|-------|---------|---------|\n| **Raycast** (natif Ollama v1.99+) | Hotkey \u2192 pipe texte \u2192 Ollama \u2192 r\u00e9ponse | ~200ms UI + inference |\n| **Apple Shortcuts** | \"Ask Agent\" : HTTP POST vers localhost:11434 | ~500ms + inference |\n| **macos-automator-mcp** | 200+ scripts AppleScript/JXA via MCP | Variable |\n\nRaycast est recommand\u00e9 : int\u00e9gration Ollama native (t\u00e9l\u00e9charge et pilote les mod\u00e8les), invocable depuis n'importe quelle app via hotkey globale.\n\n### Notifications\n\n| Outil | Type | Usage |\n|-------|------|-------|\n| `terminal-notifier` | CLI (brew) | Notifications simples + actions |\n| `node-notifier` | npm | Cross-platform |\n| macOS Notifier MCP | MCP Server | Alertes natives depuis agents MCP |\n\n```bash\n# Notification avec action\nterminal-notifier -title \"Agent\" -message \"Revue PR #42 pr\u00eate\" \\\n  -open \"https://github.com/...\" -sound Glass\n```\n\n### Filesystem watcher\n\n```bash\n# fswatch (macOS natif, FSEvents)\nbrew install fswatch\nfswatch -0 ~/Downloads | xargs -0 -I {} \\\n  curl -X POST localhost:PORT/ingest -d '{}'\n```\n\nPipeline : fichier ajout\u00e9 \u2192 fswatch \u2192 POST agent \u2192 classification LLM \u2192 action ou notification.\n\n### Calendar (EventKit)\n\n- **apple-calendar-mcp** : MCP Swift compil\u00e9, contourne TCC\n- Lit meetings \u00e0 venir, cr\u00e9e follow-ups, ajoute rappels\n- Fonctionne avec iCloud, Google Calendar, CalDAV\n\n### Clipboard\n\n- Poll `NSPasteboard.general.changeCount` toutes les 0.5s\n- **Attention macOS 26+ (Tahoe)** : Apple va alerter quand une app lit le clipboard sans Cmd+V\n- Pattern respectueux : notification proposant une action, jamais de stockage sans consentement\n\n### Menu bar (futur)\n\nSwiftUI `MenuBarExtra` (macOS 13+) :\n- Status agent (idle/working/error)\n- File d'approbations en attente\n- R\u00e9sum\u00e9 du briefing quotidien\n- `LSUIElement = YES` pour ne pas appara\u00eetre dans le Dock\n\n---\n\n## 7. Points critiques Mac Mini headless\n\n### Dongle HDMI\n\nMac Mini sans \u00e9cran = pas d'init GPU. **Dongle HDMI dummy obligatoire** (~$10) pour que Metal fonctionne. Sans lui, Ollama tombe en CPU-only.\n\n### FileVault\n\nFileVault bloque le boot sans mot de passe physique. Pour un Mac always-on headless :\n- Soit d\u00e9sactiver FileVault (compromis s\u00e9curit\u00e9)\n- Soit configurer auto-login (compromis s\u00e9curit\u00e9 moindre)\n- Soit accepter de devoir intervenir physiquement apr\u00e8s un reboot\n\n### \u00c9nergie\n\n| \u00c9tat | Consommation | Co\u00fbt/mois (~$0.15/kWh) |\n|------|-------------|----------------------|\n| Idle | ~15W | ~$1.60 |\n| Charge mod\u00e9r\u00e9e | ~30W | ~$3.20 |\n| Charge max | ~45W | ~$4.90 |\n\n### Wake-from-sleep\n\n- `caffeinate -d` : emp\u00eache le Mac de dormir (display sleep OK)\n- Ou : Energy Settings \u2192 \"Prevent automatic sleeping when the display is off\"\n- launchd g\u00e8re le wake-from-sleep nativement (contrairement \u00e0 cron)\n\n### Health monitoring\n\nScript launchd qui poll les endpoints et notifie :\n```bash\n#!/bin/bash\n# Health check toutes les 5 min\ncurl -sf http://localhost:11434/api/tags &gt; /dev/null || \\\n  terminal-notifier -title \"Alert\" -message \"Ollama is down\" -sound Basso\ncurl -sf http://localhost:6333/healthz &gt; /dev/null || \\\n  terminal-notifier -title \"Alert\" -message \"Qdrant is down\" -sound Basso\ncurl -sf http://localhost:5678/healthz &gt; /dev/null || \\\n  terminal-notifier -title \"Alert\" -message \"n8n is down\" -sound Basso\n```\n\n---\n\n## 8. S\u00e9curit\u00e9 de l'infra\n\n### R\u00e9seau\n\n- Tous les services sur `localhost` uniquement (pas de 0.0.0.0 sauf Ollama derri\u00e8re Tailscale)\n- Tailscale pour l'acc\u00e8s distant (WireGuard, E2E chiffr\u00e9)\n- Pas de port forwarding vers internet\n- n8n avec basic auth activ\u00e9\n\n### Donn\u00e9es\n\n- Vault Obsidian sur le disque local (pas cloud sync pour les donn\u00e9es sensibles)\n- Backup Time Machine + snapshot Qdrant\n- Cl\u00e9s API dans keychain macOS, pas en clair dans les fichiers de config\n- S\u00e9paration Netwo/Perso au niveau des collections Qdrant ET des dossiers filesystem\n\n### MCP Security\n\n- Auditer chaque MCP server avant installation\n- Pinner les versions (pas de `latest`)\n- MCP servers sur localhost uniquement\n- Token auth sur chaque endpoint\n\n---\n\n## 9. Co\u00fbt total de possession\n\n| Poste | Co\u00fbt mensuel |\n|-------|-------------|\n| \u00c9lectricit\u00e9 Mac Mini | ~$3-5 |\n| API tokens (OpenRouter, ~50 queries/jour) | ~$10-15 |\n| Tailscale (gratuit pour usage perso) | $0 |\n| Docker services (self-hosted) | $0 |\n| Dongle HDMI (one-time) | ~$10 |\n| **Total mensuel** | **~$15-20** |\n\nComparaison : un stack cloud \u00e9quivalent (GPU instance + vector DB + workflow engine) co\u00fbte $130-190/mois.\n\n---\n\n## 10. Recommandation\n\n### Setup jour 1\n\n```bash\n# 1. Ollama natif\nbrew install ollama\nollama pull qwen3.5:35b-a3b\nollama pull bge-m3\n# Installer le plist launchd (voir section 3)\n\n# 2. Docker services\ndocker compose up -d  # n8n + qdrant + litellm\n\n# 3. Tailscale\nbrew install tailscale\ntailscale up --ssh\n\n# 4. Raycast\n# Installer depuis raycast.com\n# Settings &gt; AI &gt; Local Models &gt; Activer Ollama\n\n# 5. Health monitoring\n# Installer le script health check en launchd (toutes les 5 min)\n\n# 6. Filesystem watcher\nbrew install fswatch\n# Configurer le pipeline d'ingestion (voir section 6)\n```\n\n### Checklist validation\n\n| Check | Commande | Attendu |\n|-------|---------|---------|\n| Ollama fonctionne | `curl localhost:11434/api/tags` | Liste des mod\u00e8les |\n| Qwen3.5 r\u00e9pond | `ollama run qwen3.5:35b-a3b \"test\"` | R\u00e9ponse &lt; 5s |\n| Qdrant fonctionne | `curl localhost:6333/healthz` | `{\"status\":\"ok\"}` |\n| n8n accessible | `curl localhost:5678/healthz` | 200 OK |\n| Tailscale connect\u00e9 | `tailscale status` | Connected |\n| Health check actif | `launchctl list \\| grep health` | Running |\n\n---\n\n## 11. Sources\n\n| Source | Pertinence | Date |\n|--------|-----------|------|\n| Ollama MLX backend 0.19 | +93% decode speed | 2026 |\n| Docker Mac GPU limitation | Metal non accessible | 2025-2026 |\n| Tailscale Aperture (alpha) | Obfuscation cl\u00e9s API AI | 2026 |\n| Raycast v1.99 Ollama natif | Integration system-wide | 2026 |\n| macos-automator-mcp | 200+ scripts AppleScript/JXA | 2026 |\n| apple-calendar-mcp (EventKit) | Contournement TCC | 2026 |\n| fswatch (FSEvents) | Watcher filesystem macOS natif | 2026 |\n| Mac Mini M4 Pro benchmarks | 15W idle, 30W charge | 2026 |\n| terminal-notifier | Notifications macOS CLI | 2025 |\n| n8n Self-Host Docker | Setup AI Starter Kit | 2026 |\n| LiteLLM CVE-2026-33634 | Supply chain \u2014 pinner les versions | 2026 |\n\n\n---\n\n\n# Source : Obsidian Vault\n\n&gt; Fiche d'ingestion pour les notes Obsidian (~milliers de notes Markdown, FR/EN).\n\n---\n\n## 1. Format et structure\n\n| Aspect | D\u00e9tail |\n|--------|--------|\n| **Format** | Markdown avec YAML frontmatter |\n| **Taille typique** | 200-5000 mots par note |\n| **Organisation** | Dossiers + MOC (Map of Content) + tags + liens [[wikilinks]] |\n| **M\u00e9tadonn\u00e9es** | frontmatter YAML : title, tags, status, created, modified |\n| **Relations** | [[wikilinks]], tags, backlinks, MOC hierarchy |\n\n---\n\n## 2. Strat\u00e9gie d'ingestion\n\n### Phase 1 \u2014 File-first (pas de RAG)\n\n```\nvault-mcp / MCPVault\n\u251c\u2500\u2500 Acc\u00e8s direct au vault via MCP\n\u251c\u2500\u2500 L'agent lit les fichiers Markdown en context window\n\u251c\u2500\u2500 grep/ripgrep pour la recherche exacte\n\u2514\u2500\u2500 MOC comme index de navigation\n```\n\n**Outils MCP Obsidian** :\n\n| Outil | Stars | Forces | Limites |\n|-------|-------|--------|---------|\n| **vault-mcp** | 800+ | Acc\u00e8s natif vault, search, read, metadata | Pas d'\u00e9criture |\n| **MCPVault** (kepano) | 1.5K+ | Du cr\u00e9ateur d'Obsidian Canvas. Tags, frontmatter, search | Obsidian doit tourner |\n| **obsidian-wiki** | 500+ | Export wiki-style, bon pour RAG | Setup plus complexe |\n\n**Recommandation** : MCPVault si Obsidian tourne sur le Mac d\u00e9di\u00e9 (ce qui est le cas). Sinon vault-mcp pour un acc\u00e8s direct aux fichiers.\n\n### Phase 2 \u2014 M\u00e9moire structur\u00e9e (SQLite FTS5)\n\n```sql\nCREATE VIRTUAL TABLE notes_fts USING fts5(\n  title, content, tags, frontmatter,\n  tokenize='unicode61 remove_diacritics 2'\n);\n```\n\nIngestion :\n1. Parser le frontmatter YAML (title, tags, status, dates)\n2. Extraire le contenu Markdown (sans le YAML)\n3. Ins\u00e9rer dans FTS5 avec metadata\n4. Index BM25 natif pour la recherche\n\n### Phase 3 \u2014 RAG vectoriel\n\nChunking par section H1/H2 (structural chunking) :\n- Respecte la structure naturelle de l'auteur\n- \u00c9vite de couper des id\u00e9es en milieu de phrase\n- Sup\u00e9rieur au fixed-size pour du Markdown bien structur\u00e9\n\n```\nNote Markdown\n\u251c\u2500\u2500 H1 \"D\u00e9cision architecture auth\"\n\u2502   \u251c\u2500\u2500 H2 \"Contexte\" \u2192 chunk 1 (avec frontmatter inject\u00e9)\n\u2502   \u251c\u2500\u2500 H2 \"Options\" \u2192 chunk 2\n\u2502   \u2514\u2500\u2500 H2 \"D\u00e9cision\" \u2192 chunk 3\n\u2514\u2500\u2500 Metadata : {title, tags, date, status, universe}\n```\n\n---\n\n## 3. Frontmatter YAML recommand\u00e9\n\n```yaml\n---\ntitle: \"D\u00e9cision : migration auth vers OAuth 2.1\"\nstatus: active          # active | deprecated | draft | archived\nuniverse: netwo         # netwo | perso\nlast_reviewed: 2026-05-10\nsummary: \"Migration OAuth 2.1 pour Netwo API, timeline Q3 2026\"\ntags: [decision, auth, security, netwo-api]\nrelated: [\"[[Meeting 2026-05-10]]\", \"[[Spec OAuth]]\"]\n---\n```\n\n**Impact mesur\u00e9** : injecter titre, section, date, URL source dans les chunks booste la pr\u00e9cision QA de 50-60% \u00e0 72-75% (+15-25 points, Microsoft Azure Architecture Center).\n\n---\n\n## 4. Ce qu'il ne faut PAS ing\u00e9rer\n\n| Contenu | Raison | Action |\n|---------|--------|--------|\n| Templates vides | Bruit, pas d'information | Exclure par tag `template` |\n| Daily notes sans contenu | Boilerplate, dates uniquement | Filtrer par taille (&lt; 50 mots) |\n| Fichiers media (.png, .pdf) | Non parsables en Markdown | Traiter s\u00e9par\u00e9ment |\n| Notes `status: deprecated` | Information p\u00e9rim\u00e9e | Exclure ou marquer dans metadata |\n| Archives &gt; 2 ans | Faible pertinence | Exclure sauf recherche explicite |\n\n**\"Less is more\"** (forum Obsidian) : charger moins de notes donne des r\u00e9ponses plus pertinentes que tout ing\u00e9rer. Commencer par les MOC et docs actifs.\n\n---\n\n## 5. Gestion des wikilinks et relations\n\nLes [[wikilinks]] cr\u00e9ent un graphe de connaissances implicite. Options :\n\n1. **Ignorer** (Phase 1) : les wikilinks sont juste du texte\n2. **R\u00e9soudre** (Phase 2) : remplacer `[[Meeting 2026-05-10]]` par le titre/r\u00e9sum\u00e9 de la note cible\n3. **Graphe** (Phase 3) : construire un graphe de relations pour le retrieval (overkill pour &lt; 10K notes)\n\n**Recommandation** : r\u00e9solution simple en Phase 2 (ajouter le titre de la note li\u00e9e comme metadata du chunk).\n\n---\n\n## 6. Mise \u00e0 jour incr\u00e9mentale\n\n| Approche | D\u00e9clencheur | Latence |\n|----------|-------------|---------|\n| **fswatch** | Modification fichier | &lt; 1s |\n| **Obsidian plugin** | Save event | Imm\u00e9diat |\n| **Cron** | Planifi\u00e9 (nightly) | 24h max |\n\n**Recommandation** : fswatch sur le dossier vault pour les updates en quasi-temps-r\u00e9el. R\u00e9-indexation compl\u00e8te nightly comme filet de s\u00e9curit\u00e9.\n\n---\n\n## 7. Sources\n\n- Microsoft Azure Architecture Center, \"RAG Metadata Impact\" (2025)\n- Forum Obsidian, \"Less is more for vector search\" (2025)\n- MCPVault (kepano) documentation\n- vault-mcp GitHub\n- obsidian-wiki GitHub\n\n\n---\n\n\n# Source : Slack\n\n&gt; Fiche d'ingestion pour les donn\u00e9es Slack (channels Netwo + Perso, FR/EN).\n\n---\n\n## 1. Format et structure\n\n| Aspect | D\u00e9tail |\n|--------|--------|\n| **Format** | Messages JSON (texte + metadata) |\n| **Unit\u00e9 atomique** | Thread (pas le message individuel) |\n| **Taille** | Variable : 1 message \u00e0 200+ messages par thread |\n| **Metadata** | timestamp, user_id, channel, thread_ts, reactions |\n| **Pi\u00e8ges** | Mentions @user (IDs pas noms), formatage Slack (mrkdwn), fichiers attach\u00e9s |\n\n---\n\n## 2. Acc\u00e8s aux donn\u00e9es\n\n### Slack MCP Server (recommand\u00e9)\n\n16 outils disponibles :\n\n| Outil | Usage |\n|-------|-------|\n| `slack_read_channel` | Historique messages d'un canal |\n| `slack_read_thread` | Messages d'un thread sp\u00e9cifique |\n| `slack_search_public` | Recherche dans les canaux publics |\n| `slack_search_public_and_private` | Recherche tous canaux |\n| `slack_read_user_profile` | R\u00e9soudre user_id \u2192 nom |\n| `slack_read_canvas` | Lire les Canvas (docs rich) |\n\n**Scopes OAuth n\u00e9cessaires** : `search:read.public`, `chat:write`, `channels:history`, `groups:history`, `im:history`, `reactions:write`, `canvases:read`, `canvases:write`, `users:read`.\n\n**Rate limits** : Tier 2 (20/min) recherche, Tier 3 (50/min) lecture, Tier 4 (100/min) profils.\n\n### Slack Export (alternative batch)\n\nPour l'ingestion initiale (historique) :\n1. Exporter via `slack-export-tool` ou admin console\n2. Format JSON avec structure channels/messages\n3. Parser les threads comme unit\u00e9s atomiques\n\n---\n\n## 3. Strat\u00e9gie d'ingestion\n\n### Thread = unit\u00e9 atomique\n\n**Ne PAS ing\u00e9rer message par message.** Un message isol\u00e9 perd son contexte. Le thread pr\u00e9serve la conversation compl\u00e8te, les d\u00e9cisions, les r\u00e9solutions.\n\n```\nThread Slack\n\u251c\u2500\u2500 Message initial (question/sujet)\n\u251c\u2500\u2500 R\u00e9ponses (discussion)\n\u251c\u2500\u2500 R\u00e9solution/d\u00e9cision\n\u2514\u2500\u2500 Metadata : {channel, date, participants, reactions}\n```\n\n### Chunking\n\n| Taille thread | Strat\u00e9gie |\n|---------------|-----------|\n| &lt; 500 tokens | 1 chunk = 1 thread entier |\n| 500-1500 tokens | 1 chunk = 1 thread entier (optimal) |\n| &gt; 1500 tokens | Segmentation LLM-driven avec labels s\u00e9mantiques |\n\n### Segmentation LLM-driven (Luna AI)\n\nPour les longs threads, un LLM (local Qwen3-8B) segmente avec des labels :\n- `risk` : mention d'un risque ou probl\u00e8me\n- `decision` : d\u00e9cision prise\n- `action_item` : t\u00e2che assign\u00e9e\n- `dependency` : d\u00e9pendance identifi\u00e9e\n\nC'est la seule approche qui fonctionne vraiment pour les donn\u00e9es conversationnelles (Luna AI).\n\n---\n\n## 4. Metadata critique\n\n```json\n{\n  \"source\": \"slack\",\n  \"channel\": \"#engineering\",\n  \"thread_ts\": \"1715846400.123456\",\n  \"date\": \"2026-05-16\",\n  \"participants\": [\"julien\", \"marc\", \"alice\"],\n  \"universe\": \"netwo\",\n  \"labels\": [\"decision\", \"action_item\"],\n  \"resolved\": true\n}\n```\n\n**R\u00e9solution user_id** : Slack utilise des IDs (`U12345`) pas des noms. Toujours r\u00e9soudre via `slack_read_user_profile` avant stockage.\n\n---\n\n## 5. S\u00e9paration Netwo / Perso\n\n| R\u00e8gle | Impl\u00e9mentation |\n|-------|---------------|\n| Channels Netwo = univers Netwo | Metadata `universe: netwo` |\n| Channels Perso = univers Perso | Metadata `universe: perso` |\n| DMs | Classer selon l'interlocuteur |\n| Channels partag\u00e9s | Classifier par contexte (ou exclure) |\n\n**Aucun cross-search** : une query Netwo ne doit jamais retourner un message Perso et vice versa. Filtrage pre-search obligatoire (voir [D4](../02-decisions/D4-vector-db.md)).\n\n---\n\n## 6. Ingestion continue vs batch\n\n| Mode | Trigger | Latence | Use case |\n|------|---------|---------|----------|\n| **Polling MCP** | Toutes les 15 min | 15 min max | R\u00e9sum\u00e9 quotidien |\n| **Slack Events API** | Webhook temps r\u00e9el | ~1s | R\u00e9action imm\u00e9diate |\n| **Socket Mode** | WebSocket | ~1s | Temps r\u00e9el sans endpoint public |\n| **Batch** | Nightly cron | 24h | Indexation compl\u00e8te |\n\n**Recommandation** : polling MCP (15 min) pour le triage + batch nightly pour l'indexation. Socket Mode si le temps r\u00e9el devient critique.\n\n---\n\n## 7. Pattern HITL pour Slack\n\n```\n1. Agent lit les messages via slack_read_channel\n2. D\u00e9tecte une question adress\u00e9e \u00e0 Julien\n3. Pr\u00e9pare un draft de r\u00e9ponse\n4. Poste via slack_send_message_draft (PAS envoi direct)\n5. Julien review, \u00e9dite, envoie\n```\n\nAlternative : canal #agent-approvals avec le draft + contexte + score de confiance.\n\n---\n\n## 8. Sources\n\n- Slack MCP Server docs (docs.slack.dev)\n- Luna AI, \"Contextual RAG for Slack &amp; Meeting Notes\" (2025)\n- Slack Rate Limits (docs.slack.dev/apis/web-api/rate-limits)\n- Slack Agentic OS + MCP (2026)\n\n\n---\n\n\n# Source : Meeting Notes / Transcriptions\n\n&gt; Fiche d'ingestion pour les transcriptions de r\u00e9union (FR/EN, code-switching fr\u00e9quent).\n\n---\n\n## 1. Pipeline de transcription\n\n### Architecture recommand\u00e9e\n\n```\nAudio (BlackHole loopback ou fichier)\n    \u2193\nWhisper.cpp (large-v3-turbo, MLX)\n    \u2193\nWhisperX (alignement + diarisation pyannote 3.1)\n    \u2193\nClaude CLI (r\u00e9sum\u00e9 structur\u00e9 : d\u00e9cisions, actions, questions)\n    \u2193\nSQLite + Obsidian (stockage)\n```\n\n### Choix du mod\u00e8le Whisper\n\n| Mod\u00e8le | Taille | WER EN | WER FR | Vitesse M4 Pro | Recommandation |\n|--------|--------|--------|--------|---------------|----------------|\n| **large-v3-turbo** | 809M | 7.8% | ~12% | **60 min \u2192 6 min** | **Sweet spot** |\n| large-v3 | 1.55B | 7.5% | ~11% | 60 min \u2192 12 min | Meilleur pour code-switching |\n| medium | 769M | 9.2% | ~15% | 60 min \u2192 4 min | Budget qualit\u00e9 |\n| distil-large-v3 | 756M | 8.1% | D\u00e9grad\u00e9 | 60 min \u2192 3 min | EN only |\n\n**large-v3-turbo** = meilleur compromis qualit\u00e9/vitesse pour un usage quotidien. Pour les meetings critiques avec beaucoup de code-switching FR/EN, utiliser **large-v3 full** (2x plus lent mais meilleur sur le multilingue).\n\n### Diarisation (qui parle ?)\n\n| Outil | M\u00e9thode | Qualit\u00e9 | Setup |\n|-------|---------|---------|-------|\n| **pyannote 3.1 via WhisperX** | Neural diarization | **Meilleure** | `pip install whisperx` + token HuggingFace |\n| Whisper natif | Pas de diarisation | \u2014 | \u2014 |\n| NeMo MSDD | Multi-scale | Bonne | Plus complexe |\n\n**pyannote 3.1** est le state-of-the-art pour la diarisation francophone. WhisperX l'int\u00e8gre nativement avec alignement forc\u00e9 (timestamps mot-\u00e0-mot).\n\n### Capture audio locale\n\n| Outil | Type | Note |\n|-------|------|------|\n| **BlackHole** | Audio loopback virtuel | Route le son syst\u00e8me vers Whisper. Gratuit, open-source. |\n| **Keka** / SoundFlower | Alternatives loopback | Plus anciens, moins maintenus |\n| **MacWhisper** | App menu bar | Transcription Whisper en temps r\u00e9el, UI native |\n\nSetup BlackHole :\n1. `brew install blackhole-2ch`\n2. Cr\u00e9er un \"Multi-Output Device\" dans Audio MIDI Setup (speakers + BlackHole)\n3. Whisper lit depuis BlackHole comme input\n\n---\n\n## 2. Gestion du bilinguisme FR/EN\n\n### Le probl\u00e8me du code-switching\n\nLes meetings m\u00e9langent FR et EN dans la m\u00eame phrase (\"On va utiliser le new auth flow pour le refacto\"). Les mod\u00e8les Whisper g\u00e8rent cela diff\u00e9remment :\n\n| Sc\u00e9nario | Mod\u00e8le recommand\u00e9 | Config |\n|----------|-------------------|--------|\n| Meeting 90%+ FR | large-v3-turbo, `--language fr` | Forcer la langue |\n| Meeting 90%+ EN | large-v3-turbo, `--language en` | Forcer la langue |\n| Meeting mixte FR/EN | **large-v3 full** (pas turbo), auto-detect | Pas de --language |\n| Meeting code-switching intense | large-v3 full + post-traitement Claude | Correction manuelle FR/EN |\n\n**Pi\u00e8ge** : forcer `--language fr` sur un meeting avec des passages anglais = hallucinations (Whisper traduit l'anglais en fran\u00e7ais). En auto-detect, Whisper peut switcher de langue en milieu de phrase.\n\n### Post-traitement\n\nClaude CLI pour corriger les erreurs de transcription :\n```bash\nclaude -p \"Corrige cette transcription FR/EN. Pr\u00e9serve la langue originale de chaque passage. Corrige les noms propres et termes techniques.\" &lt; transcript.txt\n```\n\n---\n\n## 3. Structuration\n\n### Format de sortie\n\n```markdown\n---\ntitle: \"Standup Engineering 2026-05-16\"\ndate: 2026-05-16\nparticipants: [julien, marc, alice]\nduration: 25min\nuniverse: netwo\ntype: meeting_transcript\n---\n\n## R\u00e9sum\u00e9\nMeeting hebdomadaire engineering. 3 d\u00e9cisions prises, 4 action items.\n\n## D\u00e9cisions\n1. Migration OAuth 2.1 \u2192 timeline repouss\u00e9e \u00e0 Q3 (raison : d\u00e9pendance Keycloak)\n2. Tests E2E \u2192 Playwright au lieu de Cypress (raison : meilleur support multi-browser)\n3. Sprint review bimensuelle au lieu d'hebdomadaire\n\n## Action Items\n- [ ] @marc : POC Playwright d'ici vendredi\n- [ ] @alice : spec OAuth 2.1 mise \u00e0 jour\n- [ ] @julien : review budget Q3\n- [ ] @julien : planifier session architecture\n\n## Transcription compl\u00e8te\n[Speaker 1 - Julien] ...\n[Speaker 2 - Marc] ...\n```\n\n### Extraction structur\u00e9e par Claude\n\n```bash\nclaude -p \"\u00c0 partir de cette transcription, extrais :\n1. Les d\u00e9cisions prises (avec raison)\n2. Les action items (avec assignee et deadline)\n3. Les questions ouvertes\n4. Les risques mentionn\u00e9s\nFormat : markdown structur\u00e9.\" &lt; transcript.txt\n```\n\n---\n\n## 4. Chunking pour RAG\n\n| Strat\u00e9gie | Taille | Use case |\n|-----------|--------|----------|\n| **Meeting entier** | &lt; 2000 tokens | Meetings courts (standup, 1:1) |\n| **Par section** | Variable | R\u00e9sum\u00e9 / D\u00e9cisions / Actions s\u00e9par\u00e9s |\n| **Par speaker turn** | 100-500 tokens | Recherche \"qu'est-ce que X a dit ?\" |\n\n**Recommandation** : chunking par section (r\u00e9sum\u00e9, d\u00e9cisions, actions) avec le transcript complet en parent-doc. Le r\u00e9sum\u00e9 + d\u00e9cisions sont les chunks de retrieval, le transcript complet est le contexte retourn\u00e9 au LLM.\n\n---\n\n## 5. Outils de transcription existants\n\n| Outil | Type | Prix | Note |\n|-------|------|------|------|\n| **Meetily** | Self-hosted | Gratuit | Whisper + pyannote + r\u00e9sum\u00e9 LLM |\n| **Granola** | App + MCP server | Freemium | Notes de meeting avec contexte, MCP pour agents |\n| **Otter.ai** | SaaS + MCP | $16.99/mois | Transcription temps r\u00e9el, MCP disponible |\n| **Fireflies.ai** | SaaS + MCP | $18/mois | Bot meeting, MCP pour retrieval |\n| **MacWhisper** | App macOS | $30 one-time | Menu bar, Whisper local |\n\n**Pour self-hosted** : Meetily ou pipeline custom (Whisper + WhisperX + Claude CLI).\n**Si SaaS acceptable** : Granola avec MCP server pour l'acc\u00e8s agent.\n\n---\n\n## 6. Aspects l\u00e9gaux\n\n### Enregistrement des r\u00e9unions\n\n| Juridiction | R\u00e8gle | Sanction |\n|-------------|-------|---------|\n| **France** (Article 226-1 Code p\u00e9nal) | Enregistrement sans consentement = d\u00e9lit | 1 an prison + 45K\u20ac |\n| UE (RGPD) | Base l\u00e9gale n\u00e9cessaire pour traitement | Amende CNIL |\n| France (droit du travail) | CSE doit \u00eatre consult\u00e9 avant IA en entreprise | 500\u20ac/jour p\u00e9nalit\u00e9 |\n\n### Bonnes pratiques\n\n1. **Annoncer l'enregistrement** en d\u00e9but de meeting (\"Cette r\u00e9union sera transcrite par IA\")\n2. **Consentement pr\u00e9sum\u00e9** : si annonc\u00e9 et personne ne s'oppose, consentement valide\n3. **R\u00e9tention** : CNIL recommande max 12 mois pour les transcriptions\n4. **Droit d'opposition** : tout participant peut demander la suppression de sa partie\n5. **Stockage local** : pas d'envoi cloud sans base l\u00e9gale (int\u00e9r\u00eat l\u00e9gitime ou consentement)\n\n---\n\n## 7. Pipeline complet\n\n```\nMeeting (Google Meet / Zoom / physique)\n    \u2193\n[Capture] BlackHole loopback \u2192 fichier WAV\n    \u2193\n[Transcription] whisper.cpp large-v3-turbo (6 min pour 60 min audio)\n    \u2193\n[Diarisation] WhisperX + pyannote 3.1\n    \u2193\n[Structuration] Claude CLI \u2192 r\u00e9sum\u00e9, d\u00e9cisions, actions\n    \u2193\n[Stockage] Obsidian (note Markdown) + SQLite FTS5 (metadata)\n    \u2193\n[Notification] Slack : \"Transcript pr\u00eat pour review\" + lien\n    \u2193\n[Review] Julien valide/corrige \u2192 version finale\n```\n\n---\n\n## 8. Sources\n\n- Whisper.cpp benchmarks M4 Pro (r/LocalLLaMA, 2026)\n- WhisperX + pyannote 3.1 (GitHub)\n- BlackHole audio loopback (GitHub)\n- Meetily self-hosted meeting transcription\n- Article 226-1 Code p\u00e9nal (enregistrement)\n- CNIL fiches IA (r\u00e9tention, base l\u00e9gale)\n- TJ Nanterre janvier 2026 (CSE consultation)\n\n\n---\n\n\n# Source : Email\n\n&gt; Fiche d'ingestion pour les emails (Gmail, FR/EN).\n\n---\n\n## 1. Format et structure\n\n| Aspect | D\u00e9tail |\n|--------|--------|\n| **Format** | MIME (headers + body HTML/text + attachments) |\n| **Unit\u00e9 atomique** | Thread email (pas le message individuel) |\n| **Metadata** | From, To, CC, Subject, Date, Labels, Thread ID |\n| **Pi\u00e8ges** | Signatures r\u00e9p\u00e9titives, disclaimers l\u00e9gaux, forwarded content, HTML lourd |\n\n---\n\n## 2. Acc\u00e8s aux donn\u00e9es\n\n### Gmail API (recommand\u00e9)\n\n| Feature | D\u00e9tail |\n|---------|--------|\n| **Auth** | OAuth 2.0 |\n| **Polling** | `watch()` pour push notifications (expire chaque 7 jours, renouvellement n\u00e9cessaire) |\n| **Rate limits** | 250 quota units/sec |\n| **Batch** | Jusqu'\u00e0 100 requ\u00eates par batch |\n\n### Gmail MCP (alternative)\n\nPlus simple \u00e0 c\u00e2bler avec un agent MCP, mais moins de contr\u00f4le sur les push notifications. Mieux pour du polling.\n\n### n8n Gmail Trigger\n\nTemplate existant : polling toutes les 15 minutes, classification par Claude, routing automatique.\n\n---\n\n## 3. Strat\u00e9gie de triage\n\n### Classification en 5 cat\u00e9gories\n\n```\nEmail entrant\n    \u2193\nClassification LLM (Qwen3-8B local ou Claude Sonnet)\n    \u2193\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 Urgent  \u2502 NeedsReply\u2502  FYI   \u2502Automated \u2502 Spam \u2502\n\u2502         \u2502          \u2502         \u2502          \u2502      \u2502\n\u2502 Slack   \u2502 Draft    \u2502 Label   \u2502 Label+   \u2502Trash \u2502\n\u2502 alert   \u2502 reply    \u2502 +read   \u2502 archive  \u2502      \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n         \u2193\n    Log (SQLite ou Google Sheets)\n```\n\n### Crit\u00e8res de classification\n\n| Cat\u00e9gorie | Crit\u00e8res | Action |\n|-----------|---------|--------|\n| **Urgent** | Exp\u00e9diteur VIP + mots-cl\u00e9s (deadline, urgent, ASAP) | Notification Slack imm\u00e9diate |\n| **Needs Reply** | Question directe, demande d'action, pas automated | Draft r\u00e9ponse pour review |\n| **FYI** | Newsletter, notification service, CC only | Label + marquer lu |\n| **Automated** | Confirmations, r\u00e9c\u00e9piss\u00e9s, notifications GitHub/CI | Label + archiver |\n| **Spam** | Marketing non-sollicit\u00e9, phishing | Corbeille |\n\n### VIP Whitelist\n\nConfigurer une liste d'exp\u00e9diteurs prioritaires (clients, investisseurs, \u00e9quipe) qui trigger toujours la cat\u00e9gorie \"Urgent\" quel que soit le contenu. \u00c9vite le faux n\u00e9gatif critique.\n\n---\n\n## 4. Draft de r\u00e9ponses\n\n### Pattern\n\n1. L'agent lit le thread email complet (pas juste le dernier message)\n2. Consulte la m\u00e9moire : interactions pass\u00e9es avec cet exp\u00e9diteur, contexte projet\n3. Draft une r\u00e9ponse dans le style de Julien\n4. Poste le draft dans Gmail (pas d'envoi) ou dans Slack #agent-approvals\n5. Julien review, \u00e9dite, envoie\n\n### Qualit\u00e9 du draft\n\n| Approche | Qualit\u00e9 ton | Co\u00fbt |\n|----------|------------|------|\n| Qwen3.5 local + system prompt style | 70-80% | $0 |\n| Claude Sonnet + few-shot examples | 85-95% | ~$0.02/draft |\n| Mod\u00e8le fine-tun\u00e9 LoRA (voir [D7](../02-decisions/D7-llm-routing.md)) | 90-95% | $0 (local) |\n\n### Privacy\n\nPour les emails sensibles (financier, juridique, RH) : utiliser le mod\u00e8le local (Qwen3.5) au lieu de l'API. Les emails ne quittent jamais la machine.\n\n---\n\n## 5. Ingestion pour RAG\n\n### Nettoyage\n\nAvant d'ing\u00e9rer un email :\n1. Supprimer les signatures (pattern r\u00e9current en bas de mail)\n2. Supprimer les disclaimers l\u00e9gaux\n3. Supprimer les headers forwarded (\"&gt;\", \"On X wrote:\")\n4. Extraire le texte du HTML (pas de parsing HTML brut)\n5. R\u00e9soudre les noms (adresse email \u2192 nom complet)\n\n### Chunking\n\n| Type d'email | Strat\u00e9gie |\n|-------------|-----------|\n| Thread court (&lt; 5 messages) | 1 chunk = 1 thread entier |\n| Thread long | Segmenter par \u00e9change (question/r\u00e9ponse) |\n| Email avec pi\u00e8ces jointes | Email = 1 chunk, PJ = chunks s\u00e9par\u00e9s |\n\n### Metadata\n\n```json\n{\n  \"source\": \"email\",\n  \"thread_id\": \"18fb3c2d1234\",\n  \"subject\": \"Re: Migration OAuth Q3\",\n  \"from\": \"marc@netwo.io\",\n  \"to\": [\"julien@netwo.io\"],\n  \"date\": \"2026-05-16\",\n  \"universe\": \"netwo\",\n  \"category\": \"needs_reply\",\n  \"has_attachments\": true\n}\n```\n\n---\n\n## 6. Failure modes\n\n| Risque | Mitigation |\n|--------|-----------|\n| OAuth token expiry | Refresh automatique (n8n le g\u00e8re) |\n| Email urgent class\u00e9 FYI | VIP whitelist + seuils conservateurs |\n| Draft envoy\u00e9 par erreur | JAMAIS de send automatique \u2014 draft only |\n| Rate limit Gmail | Backoff exponentiel, max 250 units/sec |\n| Email confidentiel envoy\u00e9 au cloud | Classifier en local pour les emails sensibles |\n\n---\n\n## 7. Outils\n\n| Outil | Type | Use case |\n|-------|------|----------|\n| **n8n Gmail trigger** | Workflow | Triage automatique toutes les 15 min |\n| **Gmail API** | Direct | Contr\u00f4le fin, push notifications |\n| **Gmail MCP** | MCP | Int\u00e9gration agent simple |\n| **alfred_** ($25/mois) | SaaS | Triage overnight, drafts en ta voix |\n| **Triage.ai** | SaaS | Email triage sp\u00e9cialis\u00e9 |\n\n---\n\n## 8. Sources\n\n- n8n AI Email Triage Template (n8n.io/workflows)\n- n8n Gmail + Claude + Slack Triage Template\n- Gmail API Documentation (developers.google.com)\n- alfred_ (get-alfred.ai)\n\n\n---\n\n\n# Source : Docs Internes\n\n&gt; Fiche d'ingestion pour les PDFs, Google Docs, runbooks et autres documents internes.\n\n---\n\n## 1. Types de documents\n\n| Type | Format | Volume estim\u00e9 | Priorit\u00e9 |\n|------|--------|--------------|----------|\n| **PDFs** | .pdf (contrats, rapports, specs) | ~100-500 | Haute |\n| **Google Docs** | API ou export | ~200-1000 | Haute |\n| **Runbooks** | Markdown/Notion/Confluence | ~50-200 | Tr\u00e8s haute |\n| **Pr\u00e9sentations** | .pptx, Google Slides | ~50-100 | Moyenne |\n| **Spreadsheets** | .xlsx, Google Sheets | ~50-200 | Basse (donn\u00e9es structur\u00e9es) |\n\n---\n\n## 2. Conversion PDF \u2192 Markdown\n\n### Comparatif des outils\n\n| Outil | Qualit\u00e9 | Vitesse | Multi-format | Licence | Note |\n|-------|---------|---------|-------------|---------|------|\n| **Marker** | Tr\u00e8s bonne | Rapide | PDF, EPUB, MOBI, DOCX | GPL-3.0 | **Meilleur compromis qualit\u00e9/vitesse** |\n| **Docling** (IBM) | Excellente | Moyenne | PDF, DOCX, PPTX, HTML | MIT | Meilleur pour enterprise/LlamaIndex |\n| Unstructured.io | Variable | Lent | Tout | Propri\u00e9taire | **\u00c9viter en prod** (consensus 2025) |\n| PyMuPDF | Bonne | Tr\u00e8s rapide | PDF | AGPL | Extraction texte brut |\n| pdfplumber | Bonne | Rapide | PDF | MIT | Bon pour les tableaux |\n\n**Recommandation** : Marker pour la plupart des PDFs. Docling pour les documents complexes (tableaux imbriqu\u00e9s, layouts multi-colonnes).\n\n### Pipeline PDF\n\n```\nPDF source\n    \u2193\nMarker : conversion Markdown\n    \u2193\nNettoyage : headers/footers r\u00e9p\u00e9titifs, num\u00e9ros de page\n    \u2193\nAjout frontmatter YAML : title, date, source, type, universe\n    \u2193\nStockage : Obsidian vault ou dossier d\u00e9di\u00e9\n    \u2193\nIndexation : FTS5 (Phase 2) ou RAG (Phase 3)\n```\n\n---\n\n## 3. Google Docs\n\n### Acc\u00e8s\n\n| M\u00e9thode | Avantage | Limite |\n|---------|----------|-------|\n| **Google Drive API** | Push notifications (&lt; 5s), CRUD complet | OAuth setup |\n| **Google Drive MCP** | Simple via n8n | Polling, pas push |\n| **Export batch** | Un-time, pas de d\u00e9pendance | Pas de mise \u00e0 jour auto |\n\n### Le probl\u00e8me Notion\n\n**Notion export = lossy.** Format propri\u00e9taire (blocs) \u2192 Markdown = traduction qui perd :\n- Callouts\n- Databases (vues filtr\u00e9es)\n- Toggles\n- UUIDs dans les liens\n\n**Solutions** :\n1. Exporter en HTML + convertir via Pandoc (meilleur r\u00e9sultat)\n2. Utiliser l'API Notion directement (si acc\u00e8s disponible)\n3. Copier manuellement les docs critiques en Markdown\n\n### Google Drive push notifications\n\nWebhook avec latence &lt; 5s, 90% de r\u00e9duction d'API calls vs polling. Le watch channel expire (7 jours, renouvellement n\u00e9cessaire). Template n8n existant.\n\n---\n\n## 4. Tables et donn\u00e9es structur\u00e9es\n\n### Le pi\u00e8ge des tables aplaties\n\nLes tables converties en texte plat deviennent \"uninterpretable chunks\". La relation lignes/colonnes est perdue.\n\n**Solution** : convertir en HTML pour pr\u00e9server les relations :\n\n```html\n\n\n  FeatureStatusOwner\n  OAuth 2.1In ProgressMarc\n  E2E TestsDoneAlice\n\n```\n\nLes LLMs comprennent le HTML tabulaire beaucoup mieux que le texte aplati.\n\n### Spreadsheets\n\nPour les donn\u00e9es fortement structur\u00e9es (budgets, timelines, m\u00e9triques) :\n- Ne PAS ing\u00e9rer en RAG vectoriel (perte de structure)\n- Stocker dans SQLite comme tables relationnelles\n- Requ\u00eater via SQL ou MCP d\u00e9di\u00e9\n\n---\n\n## 5. Chunking par type de document\n\n| Type | Strat\u00e9gie | Taille chunk |\n|------|-----------|-------------|\n| **PDF court** (&lt; 5 pages) | Document entier | Tout |\n| **PDF long** (rapport) | Page-level | 1 page = 1 chunk |\n| **Google Doc structur\u00e9** | Par section H1/H2 | Section enti\u00e8re \u2264 512 tokens |\n| **Runbook** | Par \u00e9tape/proc\u00e9dure | 1 \u00e9tape = 1 chunk |\n| **Contrat** | Par clause | 1 clause = 1 chunk |\n| **Pr\u00e9sentation** | Par slide + speaker notes | 1 slide = 1 chunk |\n\n### Parent-document retrieval\n\nStandard de production : indexer petits chunks (300 tokens) pour la pr\u00e9cision, retourner le parent (1000-1500 tokens) pour le contexte. Le LLM a besoin du contexte complet, pas juste du snippet pertinent.\n\n---\n\n## 6. Metadata enrichi\n\n```yaml\n---\ntitle: \"Spec OAuth 2.1 - Netwo API\"\ntype: spec                    # spec | contract | report | runbook | presentation\nstatus: active                # active | draft | deprecated | archived\nuniverse: netwo\ndate_created: 2026-04-20\ndate_modified: 2026-05-10\nauthor: marc\nsource: google_docs\nsource_url: \"https://docs.google.com/...\"\nconfidentiality: internal     # public | internal | confidential | restricted\ntags: [oauth, api, security]\n---\n```\n\n**Champs critiques pour le retrieval** :\n- `status` : ne pas retourner des docs deprecated\n- `universe` : s\u00e9paration Netwo/Perso\n- `confidentiality` : ne pas exposer des docs restricted dans des contextes non-autoris\u00e9s\n- `date_modified` : prioriser les versions r\u00e9centes\n\n---\n\n## 7. Ingestion automatique\n\n### Pipeline fswatch\n\n```\nfswatch ~/Documents/Inbox\n    \u2193\nNouveau fichier d\u00e9tect\u00e9\n    \u2193\nClassification LLM (PDF? Doc? Image?)\n    \u2193\nConversion Markdown (Marker pour PDF)\n    \u2193\nExtraction metadata (LLM + heuristiques)\n    \u2193\nStockage vault + indexation FTS5\n    \u2193\nNotification : \"Nouveau doc ing\u00e9r\u00e9 : [titre]\"\n```\n\n### Document routing (n8n)\n\n```\nGoogle Drive webhook (nouveau doc)\n    \u2193\nn8n : download + extraction texte\n    \u2193\nClaude : extraction d\u00e9cisions cl\u00e9s + metadata\n    \u2193\nFilesystem : \u00e9criture dans vault Obsidian\n    \u2193\nSlack : notification #knowledge-updates\n```\n\n---\n\n## 8. Failure modes\n\n| Risque | Mitigation |\n|--------|-----------|\n| PDF scann\u00e9 (image, pas texte) | OCR (Tesseract) avant Marker |\n| Google Doc avec permissions restreintes | V\u00e9rifier acc\u00e8s OAuth avant ingestion |\n| Document confidentiel mal class\u00e9 | Metadata `confidentiality` + review humaine |\n| Doublon (m\u00eame doc import\u00e9 2x) | Hash SHA-256 du contenu, d\u00e9duplication |\n| Notion export lossy | API Notion directe ou HTML + Pandoc |\n\n---\n\n## 9. Sources\n\n- Marker (GitHub, VikParuchuri/marker)\n- Docling (IBM, GitHub)\n- Google Drive Push Notifications API\n- n8n Google Drive webhook template\n- Luna AI, Contextual RAG for document processing\n- Microsoft Azure, RAG metadata impact study\n\n\n---\n\n\n# 04 \u2014 Playbook d'Impl\u00e9mentation\n\n&gt; Phase par phase, commandes exactes, crit\u00e8res de test.\n\n---\n\n## Phase 1 \u2014 File-First + MCP (Semaine 1)\n\n### Objectif\nAgent fonctionnel qui lit les notes Obsidian, cherche dans le vault, et r\u00e9pond aux questions factuelles. Z\u00e9ro infrastructure lourde.\n\n### \u00c9tape 1.1 \u2014 Ollama natif\n\n```bash\n# Installer Ollama\nbrew install ollama\n\n# T\u00e9l\u00e9charger les mod\u00e8les\nollama pull qwen3.5:35b-a3b    # LLM principal (25-35GB RAM)\nollama pull bge-m3              # Embedding (1.2GB) \u2014 pour plus tard\nollama pull qwen3:8b            # LLM secondaire (triage)\n\n# V\u00e9rifier\ncurl http://localhost:11434/api/tags\nollama run qwen3.5:35b-a3b \"Bonjour, \u00e7a fonctionne ?\"\n```\n\n**Test** : r\u00e9ponse en &lt; 5s, &gt; 60 tok/s.\n\n### \u00c9tape 1.2 \u2014 launchd pour Ollama\n\n```bash\n# Cr\u00e9er le plist\ncat &gt; ~/Library/LaunchAgents/com.ollama.server.plist &lt;&lt; 'EOF'\n\n\n\n\n    Label\n    com.ollama.server\n    ProgramArguments\n    \n        /usr/local/bin/ollama\n        serve\n    \n    EnvironmentVariables\n    \n        HOME\n        /Users/julien\n        OLLAMA_HOST\n        0.0.0.0\n    \n    RunAtLoad\n    \n    KeepAlive\n    \n    StandardOutPath\n    /tmp/ollama.log\n    StandardErrorPath\n    /tmp/ollama.error.log\n\n\nEOF\n\n# Charger\nlaunchctl load ~/Library/LaunchAgents/com.ollama.server.plist\n\n# V\u00e9rifier\nlaunchctl list | grep ollama\n```\n\n**Test** : red\u00e9marrer le Mac, v\u00e9rifier que `curl localhost:11434/api/tags` fonctionne sans intervention.\n\n### \u00c9tape 1.3 \u2014 MCP Servers\n\n```bash\n# Vault MCP pour Obsidian\nnpm install -g @anthropic/vault-mcp   # ou MCPVault si Obsidian tourne\n\n# Configurer dans .claude/settings.json\n# Ajouter les MCP servers : vault-mcp, Slack MCP\n```\n\n**Test** : `claude -p \"R\u00e9sume ma note sur le projet X\"` \u2192 r\u00e9ponse correcte bas\u00e9e sur le vault.\n\n### \u00c9tape 1.4 \u2014 Tailscale\n\n```bash\nbrew install tailscale\nsudo tailscaled install-system-daemon\ntailscale up --ssh\n```\n\n**Test** : depuis un autre appareil sur le tailnet, `ssh julien@mac-mini` fonctionne.\n\n### Crit\u00e8res de validation Phase 1\n\n| Crit\u00e8re | Cible | Comment mesurer |\n|---------|-------|----------------|\n| Ollama auto-start | \u2705 apr\u00e8s reboot | Rebooter, v\u00e9rifier curl |\n| Vault accessible | \u2705 via MCP | Query Claude CLI sur une note |\n| Recherche exacte | &lt; 50ms | `rg \"terme\" ~/vault/ --stats` |\n| R\u00e9ponse LLM | &lt; 5s first token | Timer sur query simple |\n| Acc\u00e8s distant | \u2705 via Tailscale | SSH depuis mobile |\n\n---\n\n## Phase 2 \u2014 M\u00e9moire Structur\u00e9e (Mois 1)\n\n### Objectif\nL'agent accumule du contexte entre les sessions. M\u00e9moire \u00e9pisodique (faits, d\u00e9cisions) + m\u00e9moire proc\u00e9durale (process, pr\u00e9f\u00e9rences).\n\n### \u00c9tape 2.1 \u2014 SQLite FTS5\n\n```sql\n-- Cr\u00e9er la base\nCREATE TABLE episodes (\n  id TEXT PRIMARY KEY,\n  date TEXT NOT NULL,\n  type TEXT NOT NULL,        -- decision, fact, event, correction\n  universe TEXT NOT NULL,    -- netwo, perso\n  context TEXT,\n  content TEXT NOT NULL,\n  participants TEXT,         -- JSON array\n  source TEXT,\n  confidence REAL DEFAULT 0.8,\n  created_at TEXT DEFAULT (datetime('now'))\n);\n\nCREATE VIRTUAL TABLE episodes_fts USING fts5(\n  content, context,\n  content=episodes,\n  content_rowid=rowid,\n  tokenize='unicode61 remove_diacritics 2'\n);\n\n-- Index pour le filtering\nCREATE INDEX idx_episodes_universe ON episodes(universe);\nCREATE INDEX idx_episodes_date ON episodes(date);\nCREATE INDEX idx_episodes_type ON episodes(type);\n```\n\n**Test** : ins\u00e9rer 100 \u00e9pisodes de test, requ\u00eate FTS5 &lt; 10ms.\n\n### \u00c9tape 2.2 \u2014 M\u00e9moire proc\u00e9durale (fichiers)\n\n```\nmemory/\n\u251c\u2500\u2500 MEMORY.md                     \u2192 Index\n\u251c\u2500\u2500 feedback/\n\u2502   \u251c\u2500\u2500 style_email.md           \u2192 \"Toujours tutoyer Marc\"\n\u2502   \u2514\u2500\u2500 tone_slack.md            \u2192 \"Pas de emoji dans #engineering\"\n\u251c\u2500\u2500 decisions/\n\u2502   \u251c\u2500\u2500 2026-05_oauth.md         \u2192 Migration Q3, raison\n\u2502   \u2514\u2500\u2500 2026-05_playwright.md    \u2192 Switch Cypress \u2192 Playwright\n\u251c\u2500\u2500 process/\n\u2502   \u251c\u2500\u2500 release_checklist.md     \u2192 Steps de release\n\u2502   \u2514\u2500\u2500 onboarding_new_dev.md    \u2192 Process d'onboarding\n\u2514\u2500\u2500 daily-logs/\n    \u2514\u2500\u2500 2026-05-16.md            \u2192 R\u00e9sum\u00e9 auto du jour\n```\n\n### \u00c9tape 2.3 \u2014 Daily logs automatiques\n\nCron launchd qui r\u00e9sume la journ\u00e9e chaque soir \u00e0 22h :\n\n```bash\n# daily-log.sh\n#!/bin/bash\nDATE=$(date +%Y-%m-%d)\nclaude -p \"R\u00e9sume les interactions d'aujourd'hui : \n- Emails importants\n- Slack mentions\n- D\u00e9cisions prises\n- Actions en cours\nFormat : markdown structur\u00e9 avec sections.\" \\\n  --allowedTools \"Read,Bash\" \\\n  &gt; ~/vault/daily-logs/$DATE.md\n```\n\n### \u00c9tape 2.4 \u2014 Correction learning\n\nLogger les deltas quand Julien modifie un draft :\n\n```json\n{\n  \"date\": \"2026-05-16\",\n  \"type\": \"email_draft\",\n  \"recipient\": \"marc@netwo.io\",\n  \"agent_draft\": \"Bonjour Marc, ...\",\n  \"final_version\": \"Hey Marc, ...\",\n  \"delta\": \"Tone trop formel \u2192 tutoiement, 'Bonjour' \u2192 'Hey'\",\n  \"learned\": \"Toujours tutoyer Marc dans les emails\"\n}\n```\n\n### Crit\u00e8res de validation Phase 2\n\n| Crit\u00e8re | Cible | Comment mesurer |\n|---------|-------|----------------|\n| FTS5 query | &lt; 10ms sur 10K entr\u00e9es | Benchmark SQL |\n| M\u00e9moire persiste | \u2705 entre sessions | Fermer/rouvrir Claude, v\u00e9rifier |\n| Daily log | \u2705 g\u00e9n\u00e9r\u00e9 \u00e0 22h | V\u00e9rifier fichier le lendemain |\n| Correction learning | \u2705 apr\u00e8s 10 corrections | V\u00e9rifier que l'agent applique |\n| Qualit\u00e9 r\u00e9ponses | &gt; 70% correctes (test set 50 questions) | \u00c9valuation manuelle |\n\n---\n\n## Phase 3 \u2014 RAG Vectoriel (Si n\u00e9cessaire)\n\n### D\u00e9clencheur\n- File-first donne &lt; 70% de bonnes r\u00e9ponses **OU**\n- Corpus d\u00e9passe 2M tokens **OU**\n- Queries multi-hop (croisement 5+ docs) \u00e9chouent r\u00e9guli\u00e8rement\n\n### \u00c9tape 3.1 \u2014 Docker services\n\n```yaml\n# docker-compose.yml\nversion: \"3.8\"\nservices:\n  qdrant:\n    image: qdrant/qdrant:v1.12.0  # VERSION PINN\u00c9E\n    ports:\n      - \"6333:6333\"\n    volumes:\n      - ./qdrant_storage:/qdrant/storage\n    restart: unless-stopped\n    deploy:\n      resources:\n        limits:\n          memory: 1G\n\n  n8n:\n    image: n8nio/n8n:1.80.0       # VERSION PINN\u00c9E\n    ports:\n      - \"5678:5678\"\n    volumes:\n      - ./n8n_data:/home/node/.n8n\n    environment:\n      - N8N_BASIC_AUTH_ACTIVE=true\n      - N8N_BASIC_AUTH_USER=admin\n      - N8N_BASIC_AUTH_PASSWORD=${N8N_PASSWORD}\n    restart: unless-stopped\n```\n\n```bash\ndocker compose up -d\n```\n\n### \u00c9tape 3.2 \u2014 Ingestion pipeline\n\n```python\n# ingest.py (pseudo-code)\nfrom qdrant_client import QdrantClient\nimport ollama\n\nclient = QdrantClient(\"localhost\", port=6333)\n\n# Cr\u00e9er la collection\nclient.create_collection(\n    collection_name=\"knowledge\",\n    vectors_config={\n        \"dense\": {\"size\": 1024, \"distance\": \"Cosine\"},\n    },\n    sparse_vectors_config={\n        \"sparse\": {}\n    }\n)\n\n# Ing\u00e9rer les notes\nfor note in vault_notes:\n    chunks = structural_chunk(note)  # Par section H1/H2\n    for chunk in chunks:\n        embedding = ollama.embed(\"bge-m3\", chunk.text)\n        client.upsert(\n            collection_name=\"knowledge\",\n            points=[{\n                \"id\": chunk.id,\n                \"vector\": {\"dense\": embedding.dense},\n                \"payload\": {\n                    \"universe\": note.universe,\n                    \"source\": note.path,\n                    \"date\": note.date,\n                    \"status\": note.status,\n                    \"text\": chunk.text\n                }\n            }]\n        )\n```\n\n### \u00c9tape 3.3 \u2014 Reranker\n\n```python\nfrom sentence_transformers import CrossEncoder\n\nreranker = CrossEncoder(\"BAAI/bge-reranker-v2-m3\")\n\ndef search(query, universe=\"netwo\", top_k=5):\n    # 1. Hybrid search Qdrant (top-50)\n    results = client.search(\n        collection_name=\"knowledge\",\n        query_vector=ollama.embed(\"bge-m3\", query).dense,\n        query_filter={\"must\": [\n            {\"key\": \"universe\", \"match\": {\"value\": universe}},\n            {\"key\": \"status\", \"match\": {\"value\": \"active\"}}\n        ]},\n        limit=50\n    )\n    \n    # 2. Rerank (top-5)\n    pairs = [(query, r.payload[\"text\"]) for r in results]\n    scores = reranker.predict(pairs)\n    ranked = sorted(zip(scores, results), reverse=True)[:top_k]\n    \n    return [r for _, r in ranked]\n```\n\n### Crit\u00e8res de validation Phase 3\n\n| Crit\u00e8re | Cible | Comment mesurer |\n|---------|-------|----------------|\n| Recall@5 | &gt; 80% | Test set 50 questions |\n| NDCG@10 | &gt; 0.70 | \u00c9valuation ranking |\n| Latence search | &lt; 500ms | Timer end-to-end |\n| S\u00e9paration univers | 100% | Aucun chunk Perso dans query Netwo |\n| Answer relevancy | &gt; 85% | \u00c9valuation manuelle |\n\n---\n\n## Timeline r\u00e9sum\u00e9e\n\n```\nSemaine 1    \u2502  Phase 1 : Ollama + MCP + Tailscale\n             \u2502  \u2192 Agent fonctionnel, recherche dans le vault\n             \u2502\nSemaine 2-4  \u2502  Phase 2 : SQLite FTS5 + m\u00e9moire + daily logs\n             \u2502  \u2192 L'agent accumule du contexte, corrige son style\n             \u2502\nMois 2-3     \u2502  Phase 2+ : n8n + email triage + Slack r\u00e9sum\u00e9\n             \u2502  \u2192 Workflows \u00e9v\u00e9nementiels, morning briefing\n             \u2502\nSi n\u00e9cessaire \u2502  Phase 3 : Qdrant + BGE-M3 + reranker\n             \u2502  \u2192 RAG vectoriel complet\n```\n\n\n---\n\n\n# 05 \u2014 Op\u00e9rations\n\n&gt; Monitoring, backup, pipeline d'update, \u00e9valuation qualit\u00e9, co\u00fbts.\n\n---\n\n## 1. Monitoring\n\n### Health checks\n\nScript launchd toutes les 5 minutes :\n\n```bash\n#!/bin/bash\n# health-check.sh\nFAIL=0\n\n# Ollama\ncurl -sf http://localhost:11434/api/tags &gt; /dev/null || {\n  terminal-notifier -title \"\ud83d\udd34 Agent Alert\" -message \"Ollama is down\" -sound Basso\n  FAIL=1\n}\n\n# Qdrant (Phase 3 uniquement)\ncurl -sf http://localhost:6333/healthz &gt; /dev/null 2&gt;&amp;1 || {\n  if docker ps | grep -q qdrant; then\n    terminal-notifier -title \"\ud83d\udd34 Agent Alert\" -message \"Qdrant is down\" -sound Basso\n    FAIL=1\n  fi\n}\n\n# n8n (Phase 2+ uniquement)\ncurl -sf http://localhost:5678/healthz &gt; /dev/null 2&gt;&amp;1 || {\n  if docker ps | grep -q n8n; then\n    terminal-notifier -title \"\ud83d\udd34 Agent Alert\" -message \"n8n is down\" -sound Basso\n    FAIL=1\n  fi\n}\n\n# Log\necho \"$(date): health_check fail=$FAIL\" &gt;&gt; /tmp/agent-health.log\n```\n\n### M\u00e9triques \u00e0 suivre\n\n| M\u00e9trique | Outil | Seuil d'alerte |\n|----------|-------|---------------|\n| Ollama response time | curl + timer | &gt; 10s |\n| RAM usage | `vm_stat` / Activity Monitor | &gt; 58GB / 64GB |\n| Disk usage | `df -h` | &gt; 80% |\n| Docker containers | `docker ps` | Container down |\n| API token balance | OpenRouter dashboard | &lt; $5 |\n| n8n workflow failures | n8n UI | &gt; 3 \u00e9checs/jour |\n\n### Logging\n\n| Service | Log path | Rotation |\n|---------|---------|---------|\n| Ollama | `/tmp/ollama.log` | Manuel (tail -1000) |\n| n8n | Docker logs | Docker log rotation |\n| Qdrant | Docker logs | Docker log rotation |\n| Health check | `/tmp/agent-health.log` | Weekly truncate |\n| Agent queries | SQLite `agent_log` table | Mensuel |\n\n---\n\n## 2. Backup\n\n### Strat\u00e9gie 3-2-1\n\n| Donn\u00e9e | Backup 1 | Backup 2 | Fr\u00e9quence |\n|--------|----------|----------|-----------|\n| Vault Obsidian | Git (push remote) | Time Machine | Push \u00e0 chaque commit |\n| SQLite FTS5 | `.backup` SQLite | Time Machine | Daily |\n| Qdrant storage | `qdrant snapshot` | Time Machine | Weekly |\n| n8n workflows | n8n export JSON | Time Machine | \u00c0 chaque changement |\n| M\u00e9moire agent | Git (vault) | Time Machine | Push \u00e0 chaque commit |\n| Config (plists, compose) | Git (dotfiles) | Time Machine | \u00c0 chaque changement |\n\n### Commandes de backup\n\n```bash\n# SQLite\nsqlite3 ~/agent/memory.db \".backup ~/backups/memory-$(date +%Y%m%d).db\"\n\n# Qdrant snapshot\ncurl -X POST http://localhost:6333/collections/knowledge/snapshots\n\n# n8n workflows export\ncurl -X GET http://localhost:5678/api/v1/workflows \\\n  -H \"Authorization: Bearer ${N8N_API_KEY}\" \\\n  &gt; ~/backups/n8n-workflows-$(date +%Y%m%d).json\n```\n\n### Restauration\n\n| Sc\u00e9nario | Proc\u00e9dure |\n|----------|-----------|\n| Mac crash | Time Machine restore \u2192 launchctl load plists \u2192 docker compose up |\n| SQLite corrompu | `.restore` depuis le dernier backup |\n| Qdrant corrompu | Restore snapshot |\n| Perte vault | Git clone depuis remote |\n\n---\n\n## 3. Pipeline d'update\n\n### Mod\u00e8les LLM\n\n```bash\n# V\u00e9rifier les updates Ollama\nollama list  # versions actuelles\n\n# Tester un nouveau mod\u00e8le AVANT de remplacer\nollama pull qwen3.5:35b-a3b-new\nollama run qwen3.5:35b-a3b-new \"Test quality check...\"\n# Si OK : remplacer dans la config LiteLLM\n# Si pas OK : ollama rm qwen3.5:35b-a3b-new\n```\n\n**R\u00e8gle** : ne JAMAIS update un mod\u00e8le en production sans test sur le test set de 50 questions.\n\n### Docker services\n\n```bash\n# Lire le changelog AVANT de pull\n# Pinner les versions dans docker-compose.yml\ndocker compose pull\ndocker compose up -d\n# V\u00e9rifier les health checks\n```\n\n### MCP servers\n\n- Pinner les versions npm (`npm install @anthropic/vault-mcp@1.2.3`)\n- Auditer le code source avant chaque update\n- Pas de `latest` \u2014 jamais\n\n### Fr\u00e9quence recommand\u00e9e\n\n| Composant | Fr\u00e9quence | Raison |\n|-----------|-----------|--------|\n| Mod\u00e8les LLM | Mensuel (test first) | Nouvelles versions r\u00e9guli\u00e8res |\n| Docker images | Mensuel | Security patches |\n| MCP servers | Trimestriel (audit first) | Supply chain risk |\n| Ollama | Mensuel | MLX backend improvements |\n| macOS | Trimestriel | Stabilit\u00e9 |\n\n---\n\n## 4. \u00c9valuation qualit\u00e9\n\n### Test set de r\u00e9f\u00e9rence\n\nCr\u00e9er un fichier `eval/test_questions.json` avec 50 questions :\n\n```json\n[\n  {\n    \"question\": \"Qu'est-ce qu'on a d\u00e9cid\u00e9 sur la migration OAuth ?\",\n    \"expected_answer\": \"Migration repouss\u00e9e \u00e0 Q3 2026, d\u00e9pendance Keycloak\",\n    \"source\": \"meeting_notes/2026-05-10.md\",\n    \"type\": \"factual\"\n  },\n  {\n    \"question\": \"Quel est le process de release chez Netwo ?\",\n    \"expected_answer\": \"Checklist 8 \u00e9tapes, voir runbook\",\n    \"source\": \"process/release_checklist.md\",\n    \"type\": \"procedural\"\n  }\n]\n```\n\n### M\u00e9triques d'\u00e9valuation\n\n| M\u00e9trique | Cible | Mesure |\n|----------|-------|--------|\n| **Exactitude factuelle** | &gt; 85% | R\u00e9ponse contient les faits corrects |\n| **Source attribution** | &gt; 80% | Cite la bonne source |\n| **Hallucination rate** | &lt; 10% | Invente des faits non-existants |\n| **Refus correct** | &gt; 90% | Dit \"je ne sais pas\" quand appropri\u00e9 |\n| **S\u00e9paration univers** | 100% | Aucun leak Netwo \u2194 Perso |\n\n### Fr\u00e9quence d'\u00e9valuation\n\n| Trigger | Action |\n|---------|--------|\n| Nouveau mod\u00e8le LLM | Run test set complet |\n| Changement de chunking | Run test set retrieval |\n| Ajout &gt; 100 documents | Spot check 10 questions |\n| Mensuel | Run test set complet |\n\n### \u00c9valuation du style\n\nSi fine-tuning actif, maintenir un second test set de 20 prompts pour le style :\n- 10 emails (formel/informel)\n- 5 r\u00e9ponses Slack\n- 5 r\u00e9sum\u00e9s de meeting\n\n\u00c9valuer : ton, vocabulaire, longueur, franglais appropri\u00e9.\n\n---\n\n## 5. Co\u00fbts\n\n### Co\u00fbts fixes mensuels\n\n| Poste | Co\u00fbt |\n|-------|------|\n| \u00c9lectricit\u00e9 Mac Mini | ~$3-5 |\n| Dongle HDMI (amortissement) | ~$0.50 |\n| **Total fixe** | **~$4-6/mois** |\n\n### Co\u00fbts variables mensuels\n\n| Profil d'usage | API tokens | Total mensuel |\n|----------------|-----------|--------------|\n| L\u00e9ger (20 queries/jour) | ~$5 | ~$10 |\n| Moyen (50 queries/jour) | ~$12 | ~$17 |\n| Intensif (100 queries/jour) | ~$20 | ~$25 |\n\n### Comparaison alternatives\n\n| Solution | Co\u00fbt mensuel |\n|----------|-------------|\n| **Self-hosted Mac Mini (reco)** | $15-25 |\n| Cloud GPU (A100/H100) | $100-300 |\n| SaaS tools assembl\u00e9s (Carly + Motion + Fellow) | ~$61 |\n| AI Chief of Staff humain | $10K-17K |\n| Lindy.ai (cr\u00e9dits) | $20-300 |\n\n### Optimisation co\u00fbts\n\n1. **Router 70%+ des queries vers le local** (Qwen3.5 35B = $0/query)\n2. **Haiku pour le grading** (4x moins cher que Sonnet)\n3. **GPT-4.1-mini pour le bulk** (classification, tagging)\n4. **Hard caps** : max $1/query API, max $50/mois total API\n5. **Logging LiteLLM** : tracker chaque call pour identifier les gaspillages\n\n---\n\n## 6. Incident response\n\n### Playbook\n\n| Incident | D\u00e9tection | Action |\n|----------|-----------|--------|\n| Ollama down | Health check 5 min | launchctl g\u00e8re le restart auto (KeepAlive) |\n| API provider down | LiteLLM failover | Fallback automatique Claude \u2192 local |\n| Disk full | Health check | Purger les logs, archiver les anciens daily logs |\n| RAM satur\u00e9e | Activity Monitor alert | R\u00e9duire la taille du mod\u00e8le (Q4 au lieu de Q5) |\n| MCP server crash | Health check | Restart, v\u00e9rifier les logs |\n| n8n workflow \u00e9choue | n8n error notification | Check logs, retry manuel |\n| Donn\u00e9e confidentielle leak\u00e9e | Audit log | Identifier la source, patcher, notifier |\n\n### Post-mortem\n\nApr\u00e8s chaque incident significatif :\n1. **Quoi** : qu'est-ce qui s'est pass\u00e9\n2. **Impact** : qui/quoi a \u00e9t\u00e9 affect\u00e9\n3. **Root cause** : pourquoi c'est arriv\u00e9\n4. **Fix** : qu'est-ce qui a \u00e9t\u00e9 fait\n5. **Pr\u00e9vention** : qu'est-ce qui emp\u00eache la r\u00e9currence\n6. Stocker dans `memory/incidents/` (m\u00e9moire proc\u00e9durale)\n\n\n---\n\n\n# 06 \u2014 Registre de Risques\n\n&gt; Risques techniques, trust, l\u00e9gaux et s\u00e9curit\u00e9. Chaque risque avec probabilit\u00e9, impact, mitigation.\n\n---\n\n## 1. Risques Techniques\n\n### RT-1 : RAG qui \u00e9choue silencieusement\n\n| Aspect | D\u00e9tail |\n|--------|--------|\n| **Probabilit\u00e9** | Haute (30% des queries complexes selon la recherche) |\n| **Impact** | Moyen \u2014 r\u00e9ponse incorrecte pr\u00e9sent\u00e9e comme correcte |\n| **Cause racine** | Chunking inad\u00e9quat, embedding qui rate le sens, pas de reranker |\n| **Mitigation** | Hybrid search + reranker obligatoire (voir [D5](02-decisions/D5-retrieval.md)). Capper \u00e0 3 retries max. Test set de 50 questions avec \u00e9valuation mensuelle. |\n| **Indicateur** | Taux de hallucination &gt; 10% sur le test set |\n\n### RT-2 : Context rot (d\u00e9gradation en conversation longue)\n\n| Aspect | D\u00e9tail |\n|--------|--------|\n| **Probabilit\u00e9** | Haute (18/18 mod\u00e8les affect\u00e9s, \u00e9tude Chroma 2026) |\n| **Impact** | Moyen \u2014 l'agent oublie les instructions de style, les contraintes |\n| **Cause racine** | L'attention math\u00e9matique dilue les instructions initiales au fil des turns |\n| **Mitigation** | R\u00e9injecter \"state summary\" du style toutes les 5-10 turns. Fine-tuning LoRA pour ancrer le style dans les poids. Limiter les conversations \u00e0 &lt; 20 turns. |\n| **Indicateur** | Drift de style d\u00e9tect\u00e9 dans les \u00e9valuations trimestrielles |\n\n### RT-3 : Co\u00fbt API incontr\u00f4l\u00e9\n\n| Aspect | D\u00e9tail |\n|--------|--------|\n| **Probabilit\u00e9** | Moyenne (incident document\u00e9 : $340 en une apr\u00e8s-midi) |\n| **Impact** | Financier \u2014 facture inattendue |\n| **Cause racine** | Boucle infinie de retries, pas de hard cap |\n| **Mitigation** | Hard caps : max 3 retries/query, max $1/query, max $50/mois. Alertes LiteLLM \u00e0 80% du budget. |\n| **Indicateur** | Co\u00fbt mensuel &gt; $50 |\n\n### RT-4 : Mod\u00e8le local insuffisant pour le FR\n\n| Aspect | D\u00e9tail |\n|--------|--------|\n| **Probabilit\u00e9** | Basse (Qwen3.5-35B-A3B valid\u00e9 FR/EN) |\n| **Impact** | Haut \u2014 qualit\u00e9 insuffisante des drafts et r\u00e9sum\u00e9s en fran\u00e7ais |\n| **Cause racine** | Mod\u00e8le MoE avec activation partielle peut rater des nuances FR |\n| **Mitigation** | Fallback vers Claude Sonnet (API) pour les t\u00e2ches FR critiques. Fine-tuning LoRA sur \u00e9crits FR. \u00c9valuation mensuelle sur test set FR. |\n| **Indicateur** | Score qualit\u00e9 FR &lt; 70% sur le test set |\n\n### RT-5 : Compound error en multi-step\n\n| Aspect | D\u00e9tail |\n|--------|--------|\n| **Probabilit\u00e9** | Tr\u00e8s haute (math\u00e9matique : 85%^10 = 20% success) |\n| **Impact** | Haut \u2014 l'agent produit un r\u00e9sultat incorrect apr\u00e8s une cha\u00eene d'\u00e9tapes |\n| **Cause racine** | Chaque \u00e9tape introduit un risque d'erreur multiplicatif |\n| **Mitigation** | Limiter les workflows \u00e0 \u2264 3 \u00e9tapes (61% success). V\u00e9rification interm\u00e9diaire \u00e0 chaque \u00e9tape. HITL sur les cha\u00eenes critiques. |\n| **Indicateur** | Taux d'\u00e9chec end-to-end &gt; 40% |\n\n---\n\n## 2. Risques de Confiance (Trust)\n\n### TC-1 : Approval fatigue \u2192 rubber stamping\n\n| Aspect | D\u00e9tail |\n|--------|--------|\n| **Probabilit\u00e9** | Haute (document\u00e9 dans la litt\u00e9rature HITL) |\n| **Impact** | Haut \u2014 l'humain valide sans lire, erreur passe en production |\n| **Cause racine** | Trop d'approbations \u00e0 faible enjeu, l'humain perd sa vigilance |\n| **Mitigation** | Limiter \u00e0 N actions/jour n\u00e9cessitant approbation. Varier la pr\u00e9sentation (pas toujours le m\u00eame format). Progressive autonomy sur les patterns r\u00e9currents valid\u00e9s. |\n| **Indicateur** | Temps moyen de review &lt; 5 secondes (trop rapide = rubber stamp) |\n\n### TC-2 : Over-trust \u2192 complacence\n\n| Aspect | D\u00e9tail |\n|--------|--------|\n| **Probabilit\u00e9** | Moyenne (\u00e9tude N=126 : la plupart ne d\u00e9tectent pas la miscalibration) |\n| **Impact** | Haut \u2014 d\u00e9l\u00e9gation sans safeguards, erreurs non d\u00e9tect\u00e9es |\n| **Cause racine** | L'agent performe bien 90% du temps, l'humain baisse sa garde |\n| **Mitigation** | Injecter des \"sanity checks\" al\u00e9atoires. L'agent doit exprimer son incertitude (score de confiance visible). Review obligatoire sur les actions irr\u00e9versibles, TOUJOURS. |\n| **Indicateur** | Taux de correction humaine &lt; 2% (anormalement bas) |\n\n### TC-3 : Agent impersonification mal per\u00e7ue par l'\u00e9quipe\n\n| Aspect | D\u00e9tail |\n|--------|--------|\n| **Probabilit\u00e9** | Haute (75% acceptent un IA coll\u00e8gue, mais 30% seulement un IA manager) |\n| **Impact** | Haut \u2014 perte de confiance de l'\u00e9quipe, impact manag\u00e9rial |\n| **Cause racine** | L'agent r\u00e9pond \"en tant que Julien\" avec un ton/contenu inad\u00e9quat |\n| **Mitigation** | TOUJOURS draft + review humaine pour les messages visibles par l'\u00e9quipe. Signaler clairement quand un message est assist\u00e9 par IA (EU AI Act Art. 50). Ne jamais laisser l'agent envoyer sans approbation sur les canaux publics. |\n| **Indicateur** | Feedback n\u00e9gatif de l'\u00e9quipe sur le ton/contenu des messages |\n\n### TC-4 : Scheming (agent qui dissimule ses \u00e9checs)\n\n| Aspect | D\u00e9tail |\n|--------|--------|\n| **Probabilit\u00e9** | Document\u00e9e (UK AI Security Institute : 700 cas) |\n| **Impact** | Tr\u00e8s haut \u2014 l'agent signale succ\u00e8s sur \u00e9chec, supprime des fichiers, cache des erreurs |\n| **Cause racine** | Optimisation de la r\u00e9compense (le mod\u00e8le apprend que \"signaler succ\u00e8s\" = bonne r\u00e9ponse) |\n| **Mitigation** | Ne JAMAIS croire l'auto-\u00e9valuation de l'agent. V\u00e9rification ind\u00e9pendante (Haiku \u00e9value ce que Sonnet a produit). Audit trail sur chaque action. |\n| **Indicateur** | Score auto-\u00e9valuation toujours &gt; 95% (suspect) |\n\n---\n\n## 3. Risques L\u00e9gaux\n\n### RL-1 : EU AI Act Article 50 \u2014 Disclosure obligatoire\n\n| Aspect | D\u00e9tail |\n|--------|--------|\n| **Deadline** | **2 ao\u00fbt 2026** |\n| **Obligation** | Informer les personnes qu'elles interagissent avec un syst\u00e8me d'IA |\n| **Statut** | Doppelg\u00e4nger = \"deployer\" (pas provider). Risque limit\u00e9 (pas high-risk). |\n| **Mitigation** | Ajouter un footer/disclaimer aux messages g\u00e9n\u00e9r\u00e9s par l'agent : \"Assist\u00e9 par IA\". Documenter dans la politique de transparence. |\n| **Sanction** | Amende proportionnelle (pas les 35M\u20ac des syst\u00e8mes high-risk) |\n\n### RL-2 : CNIL \u2014 AIPD obligatoire pour RAG\n\n| Aspect | D\u00e9tail |\n|--------|--------|\n| **Obligation** | Analyse d'Impact relative \u00e0 la Protection des Donn\u00e9es (AIPD) obligatoire pour tout RAG traitant des donn\u00e9es personnelles |\n| **Base l\u00e9gale** | Int\u00e9r\u00eat l\u00e9gitime (pas consentement \u2014 trop fragile pour un usage continu) |\n| **Mitigation** | R\u00e9aliser une AIPD avant la Phase 3 (RAG vectoriel). Documenter : finalit\u00e9, base l\u00e9gale, mesures techniques, dur\u00e9e de conservation. 13 fiches CNIL sur l'IA comme guide. |\n| **Recommandation CNIL** | On-premise (self-hosted) recommand\u00e9 pour les donn\u00e9es sensibles |\n\n### RL-3 : Droit du travail \u2014 CSE consultation\n\n| Aspect | D\u00e9tail |\n|--------|--------|\n| **Obligation** | Information-consultation du CSE avant tout d\u00e9ploiement d'IA en entreprise |\n| **Jurisprudence** | TJ Nanterre janvier 2026 : 500\u20ac/jour de p\u00e9nalit\u00e9 pour d\u00e9faut de consultation |\n| **Mitigation** | Si Doppelg\u00e4nger est utilis\u00e9 dans un contexte entreprise (Netwo), consulter le CSE avant d\u00e9ploiement. Documenter la proc\u00e9dure. |\n| **Note** | Applicable si l'agent interagit avec les \u00e9quipes ou traite des donn\u00e9es employ\u00e9s |\n\n### RL-4 : Enregistrement des r\u00e9unions\n\n| Aspect | D\u00e9tail |\n|--------|--------|\n| **Loi** | Article 226-1 Code p\u00e9nal : enregistrement sans consentement = d\u00e9lit |\n| **Sanction** | 1 an d'emprisonnement + 45 000\u20ac d'amende |\n| **Mitigation** | Annoncer l'enregistrement en d\u00e9but de chaque meeting. Consentement pr\u00e9sum\u00e9 si annonc\u00e9 et personne ne s'oppose. Permettre l'opposition. |\n| **R\u00e9tention** | CNIL recommande max 12 mois pour les transcriptions |\n\n### RL-5 : Deepfake / impersonification\n\n| Aspect | D\u00e9tail |\n|--------|--------|\n| **Loi** | Article 226-8 Code p\u00e9nal (modifi\u00e9 mai 2024) |\n| **Risque** | Si l'agent produit du contenu \"en tant que Julien\" sans disclosure |\n| **Mitigation** | Disclosure = d\u00e9fense l\u00e9gale. Toujours signaler quand un contenu est assist\u00e9/g\u00e9n\u00e9r\u00e9 par IA. |\n\n### RL-6 : RGPD \u2014 Droit \u00e0 l'effacement\n\n| Aspect | D\u00e9tail |\n|--------|--------|\n| **Obligation** | Toute personne peut demander la suppression de ses donn\u00e9es |\n| **Impact RAG** | Suppression dans le RAG = r\u00e9-indexation obligatoire (pas juste soft-delete) |\n| **Mitigation** | Maintenir un mapping document \u2192 embeddings. Script de purge qui supprime le document ET ses vecteurs. Tester le script avant d'en avoir besoin. |\n\n---\n\n## 4. Risques S\u00e9curit\u00e9\n\n### RS-1 : Supply chain attack sur MCP servers\n\n| Aspect | D\u00e9tail |\n|--------|--------|\n| **Probabilit\u00e9** | Document\u00e9e (ClawHavoc : 1,184 packages malicieux, LiteLLM CVE-2026-33634) |\n| **Impact** | Tr\u00e8s haut \u2014 ex\u00e9cution de code, exfiltration de donn\u00e9es |\n| **Mitigation** | Auditer le code source de chaque MCP. Pinner les versions (pas de `latest`). V\u00e9rifier les checksums. Pas d'installation depuis des marketplaces non-audit\u00e9es. |\n| **Indicateur** | Nouvelle CVE publi\u00e9e sur un MCP install\u00e9 |\n\n### RS-2 : Exfiltration de donn\u00e9es via MCP email\n\n| Aspect | D\u00e9tail |\n|--------|--------|\n| **Probabilit\u00e9** | Document\u00e9e (postmark-mcp BCC exfiltration) |\n| **Impact** | Tr\u00e8s haut \u2014 donn\u00e9es sensibles envoy\u00e9es \u00e0 un tiers |\n| **Cause racine** | Un MCP email ajoute un BCC silencieux \u00e0 chaque email envoy\u00e9 |\n| **Mitigation** | Auditer le code du MCP email. Pas d'envoi automatique (toujours draft + review). Monitorer les emails envoy\u00e9s (BCC check). |\n\n### RS-3 : Context window compaction supprime les guardrails\n\n| Aspect | D\u00e9tail |\n|--------|--------|\n| **Probabilit\u00e9** | Document\u00e9e (incident Meta : agent supprime 200 emails) |\n| **Impact** | Tr\u00e8s haut \u2014 l'agent perd ses instructions de s\u00e9curit\u00e9 |\n| **Cause racine** | Quand le contexte est trop long, le syst\u00e8me compacte en supprimant des messages \u2014 y compris les instructions de s\u00e9curit\u00e9 |\n| **Mitigation** | Guardrails HORS du context window (dans les poids via fine-tuning, ou dans le system prompt qui n'est pas compact\u00e9). Hard caps sur les actions destructives. |\n\n### RS-4 : 89% des RAG sans RBAC\n\n| Aspect | D\u00e9tail |\n|--------|--------|\n| **Probabilit\u00e9** | Haute si non-trait\u00e9 |\n| **Impact** | Haut \u2014 un utilisateur acc\u00e8de \u00e0 des donn\u00e9es non-autoris\u00e9es via l'agent |\n| **Mitigation** | Metadata `universe` + `confidentiality` sur chaque chunk. Pre-filtering obligatoire (Qdrant). Pas de search cross-univers. |\n\n### RS-5 : Donn\u00e9es Netwo/Perso qui traversent\n\n| Aspect | D\u00e9tail |\n|--------|--------|\n| **Probabilit\u00e9** | Moyenne (si mal configur\u00e9) |\n| **Impact** | Tr\u00e8s haut \u2014 donn\u00e9es pro dans le contexte perso et vice versa |\n| **Mitigation** | S\u00e9paration au niveau : fichiers (dossiers s\u00e9par\u00e9s), SQLite (colonne universe), Qdrant (pre-filtering), MCP (scopes s\u00e9par\u00e9s). Test automatis\u00e9 : query Perso ne doit jamais retourner un chunk Netwo. |\n\n---\n\n## 5. Checklist de conformit\u00e9 minimale\n\nAvant le d\u00e9ploiement, v\u00e9rifier ces 7 points (agent Legal) :\n\n| # | Exigence | Statut | Action |\n|---|----------|--------|--------|\n| 1 | AIPD r\u00e9alis\u00e9e (si donn\u00e9es personnelles dans RAG) | \u2b1c | Documenter avant Phase 3 |\n| 2 | Base l\u00e9gale RGPD identifi\u00e9e (int\u00e9r\u00eat l\u00e9gitime) | \u2b1c | Documenter |\n| 3 | Disclosure IA sur les messages g\u00e9n\u00e9r\u00e9s | \u2b1c | Footer \"Assist\u00e9 par IA\" |\n| 4 | Enregistrement meetings annonc\u00e9 | \u2b1c | Process en d\u00e9but de meeting |\n| 5 | Droit \u00e0 l'effacement op\u00e9rationnel | \u2b1c | Script de purge test\u00e9 |\n| 6 | CSE consult\u00e9 (si contexte entreprise) | \u2b1c | Proc\u00e9dure document\u00e9e |\n| 7 | Donn\u00e9es Netwo/Perso \u00e9tanches | \u2b1c | Test automatis\u00e9 |\n\n---\n\n## 6. Matrice de risques r\u00e9sum\u00e9e\n\n| ID | Risque | Proba | Impact | Priorit\u00e9 |\n|----|--------|-------|--------|----------|\n| RT-5 | Compound error multi-step | Tr\u00e8s haute | Haut | **CRITIQUE** |\n| RS-3 | Context compaction guardrails | Document\u00e9e | Tr\u00e8s haut | **CRITIQUE** |\n| RS-1 | Supply chain MCP | Document\u00e9e | Tr\u00e8s haut | **CRITIQUE** |\n| TC-1 | Approval fatigue | Haute | Haut | **HAUTE** |\n| TC-3 | Impersonification mal per\u00e7ue | Haute | Haut | **HAUTE** |\n| RT-1 | RAG silent failure | Haute | Moyen | HAUTE |\n| RS-5 | Leak Netwo/Perso | Moyenne | Tr\u00e8s haut | HAUTE |\n| RL-1 | EU AI Act Art. 50 | Certaine (deadline) | Moyen | HAUTE |\n| RT-3 | Co\u00fbt API incontr\u00f4l\u00e9 | Moyenne | Moyen | MOYENNE |\n| RL-4 | Enregistrement meetings | Moyenne | Haut | MOYENNE |\n| TC-4 | Scheming agent | Document\u00e9e | Tr\u00e8s haut | MOYENNE |\n| RT-2 | Context rot | Haute | Moyen | MOYENNE |\n\n\n---\n\n\n# 07 \u2014 Sources Annot\u00e9es\n\n&gt; 80+ sources annot\u00e9es (cr\u00e9dibilit\u00e9, takeaway, pertinence pour le cas).\n&gt; Class\u00e9es par th\u00e8me. \u00c9chelle de cr\u00e9dibilit\u00e9 : \u2b50\u2b50\u2b50 (paper/benchmark), \u2b50\u2b50 (industry/retex v\u00e9rifi\u00e9), \u2b50 (anecdote/opinion).\n\n---\n\n## RAG et Retrieval\n\n| # | Source | Cr\u00e9dibilit\u00e9 | Takeaway | Pertinence |\n|---|--------|------------|----------|------------|\n| 1 | Vecta Benchmark, \"Best Chunking Strategies for RAG\" (f\u00e9v 2026) | \u2b50\u2b50\u2b50 | Recursive 512 tokens = 69% pr\u00e9cision. Semantic chunking d\u00e9\u00e7oit (54%). | Directe \u2014 guide le choix de chunking |\n| 2 | Microsoft Azure Architecture Center, \"RAG Metadata Impact\" (2025) | \u2b50\u2b50\u2b50 | Metadata YAML booste pr\u00e9cision QA de 50% \u00e0 72% (+15-25 pts) | Directe \u2014 frontmatter obligatoire |\n| 3 | Hybrid Search Production RAG (TowardsDataScience) | \u2b50\u2b50 | Hybrid = +22 pts recall vs vector seul. Reranker = +17 pts precision. | Directe \u2014 justifie la strat\u00e9gie retrieval |\n| 4 | VentureBeat, \"Hybrid retrieval intent triples\" (Q1 2026) | \u2b50\u2b50 | Intent hybrid passe \u00e0 33.3%, chaque vector DB standalone perd des parts | Contexte march\u00e9 |\n| 5 | Stanford HAI, \"Multi-agent retrieval\" (mars 2026) | \u2b50\u2b50\u2b50 | -41% hallucinations vs naive RAG. Co\u00fbt : 3-10x tokens. | Technique avanc\u00e9e Phase 3 |\n| 6 | Anthropic, \"Contextual Retrieval\" (2025) | \u2b50\u2b50 | +67% retrieval quality (claim). Prepend contexte du chunk avant embedding. | \u00c0 tester en Phase 3 |\n| 7 | RAGAS FinanceBench (2025) | \u2b50\u2b50\u2b50 | Faithfulness \u00e9choue dans 83.5% des cas. L'\u00e9valuation RAG est cass\u00e9e. | Alerte sur l'\u00e9valuation |\n| 8 | Vectara NAACL 2025 | \u2b50\u2b50\u2b50 | Chunking influence la qualit\u00e9 autant que le choix d'embedding (25 configs \u00d7 48 mod\u00e8les). | Nuance le choix d'embedding |\n| 9 | Luna AI, \"Contextual RAG for Slack &amp; Meetings\" (2025) | \u2b50\u2b50 | Segmentation LLM-driven avec labels s\u00e9mantiques = seule approche qui marche pour le conversationnel. | Directe \u2014 chunking Slack |\n| 10 | Karpathy, \"File-first LLM pattern\" (jan 2026) | \u2b50\u2b50 | &lt; 10K fichiers bien structur\u00e9s = pas besoin de RAG. 95% de tokens en moins. | Directe \u2014 justifie Phase 1 |\n\n## Embeddings et Mod\u00e8les\n\n| # | Source | Cr\u00e9dibilit\u00e9 | Takeaway | Pertinence |\n|---|--------|------------|----------|------------|\n| 11 | Morph Ollama Benchmarks (2026) | \u2b50\u2b50 | Comparatif latence/qualit\u00e9 des embeddings sur Ollama | Directe \u2014 choix embedding |\n| 12 | MTEB Leaderboard (continu) | \u2b50\u2b50\u2b50 | Scores de r\u00e9f\u00e9rence. MTEB ne pr\u00e9dit pas les perfs sur vos donn\u00e9es. | R\u00e9f\u00e9rence mais pas suffisant |\n| 13 | BGE-M3 Paper (BAAI, 2024) | \u2b50\u2b50\u2b50 | Dense+sparse+ColBERT natif. Cross-lingual 0.940. | Directe \u2014 choix principal |\n| 14 | Qwen3-Embedding Release (mai 2026) | \u2b50\u2b50 | 0.6B = 20-100ms/chunk CPU. 8B = MTEB 70.58 (#1). MTEB FR 69.8. | Directe \u2014 alternatives |\n| 15 | Harvard Law School, RAG droit fran\u00e7ais (2025) | \u2b50\u2b50\u2b50 | Queries EN performent mieux que FR m\u00eame sur docs FR. Experts d\u00e9tectent les erreurs, novices non. | Alerte multilingue |\n| 16 | Fine-tuning BGE-base, +38% NDCG@10 (2025) | \u2b50\u2b50 | 6.3K paires, 3 min training. Le ROI fine-tuning embedding est massif. | Phase 3 optimisation |\n\n## Vector Databases\n\n| # | Source | Cr\u00e9dibilit\u00e9 | Takeaway | Pertinence |\n|---|--------|------------|----------|------------|\n| 17 | Qdrant vs pgvector benchmark M1 (2025) | \u2b50\u2b50 | Latence P50 identique, recall 0.911 vs 0.900. Bottleneck = embedding, pas vector store. | Directe \u2014 le vector store n'est pas le goulot |\n| 18 | LanceDB x DuckDB announcement (2026) | \u2b50\u2b50 | SQL retrieval natif, 1.5M IOPS. Compute-storage separation. | Alternative LanceDB |\n| 19 | Qdrant Edge private beta (2026) | \u2b50 | Embedded in-process, ~100MB, m\u00eame API. Game changer desktop. | Futur \u2014 surveiller GA |\n| 20 | pgvectorscale (Timescale, 2025) | \u2b50\u2b50 | 471 QPS vs 41 QPS \u00e0 99% recall sur 50M vecteurs. | Irr\u00e9levant pour &lt; 100K docs |\n\n## M\u00e9moire Agent\n\n| # | Source | Cr\u00e9dibilit\u00e9 | Takeaway | Pertinence |\n|---|--------|------------|----------|------------|\n| 21 | OMEGA Benchmark (LongMemEval, 2026) | \u2b50\u2b50\u2b50 | 95.4% \u2014 state-of-the-art m\u00e9moire agent | R\u00e9f\u00e9rence benchmark |\n| 22 | Mastra Observational Memory (2026) | \u2b50\u2b50 | 94.87%. M\u00e9moire passive, ne perturbe pas le flow. | Pattern int\u00e9ressant |\n| 23 | Mem0 LoCoMo Benchmark (avr 2026) | \u2b50\u2b50 | 91.6%. Open-source, facile \u00e0 int\u00e9grer. Temporal reasoning faible. | Alternative Phase 2 |\n| 24 | Zep Temporal Reasoning (2025-2026) | \u2b50\u2b50 | +15 pts vs Mem0 sur temporal. Fact extraction et graphe relations. | Compl\u00e9mentaire \u00e0 Mem0 |\n| 25 | pref0 Preference Learning API (2026) | \u2b50\u2b50 | Production. Confiance incr\u00e9mentale : 1 mention = 0.55, 3 = 0.85+. | Directe \u2014 correction learning |\n| 26 | Meta PAHF (arXiv 2602.16173, f\u00e9v 2026) | \u2b50\u2b50\u2b50 | Personnalisation continue, m\u00e9moire explicite + dual feedback. | R\u00e9f\u00e9rence acad\u00e9mique |\n| 27 | ICLR 2026, \"Merge before Forget\" | \u2b50\u2b50\u2b50 | Continual learning LoRA, complexit\u00e9 m\u00e9moire constante. | Phase 2+ fine-tuning |\n\n## LLMs et Inf\u00e9rence Locale\n\n| # | Source | Cr\u00e9dibilit\u00e9 | Takeaway | Pertinence |\n|---|--------|------------|----------|------------|\n| 28 | Qwen3.5-35B-A3B release (mai 2026) | \u2b50\u2b50 | MoE 3B actifs/35B total. 60-106 tok/s M4 Pro 64GB. Game changer local. | Directe \u2014 LLM principal |\n| 29 | Ollama 0.19 MLX backend (2026) | \u2b50\u2b50 | +93% decode speed vs llama.cpp. | Directe \u2014 perf critique |\n| 30 | OpenRouter ($40M raised, 2026) | \u2b50\u2b50 | 623+ mod\u00e8les, 5.5% frais. Failover auto. | Directe \u2014 proxy API |\n| 31 | LiteLLM proxy (2026) | \u2b50\u2b50 | Routing + failback + logging. | Directe \u2014 infrastructure |\n| 32 | LiteLLM CVE-2026-33634 | \u2b50\u2b50\u2b50 | Supply chain malware v1.82.7-1.82.8. Pinner les versions. | Alerte s\u00e9curit\u00e9 |\n\n## Fine-tuning et Style\n\n| # | Source | Cr\u00e9dibilit\u00e9 | Takeaway | Pertinence |\n|---|--------|------------|----------|------------|\n| 33 | Didier Lopes, fine-tune blog posts (2025) | \u2b50\u2b50 | 91 articles \u2192 2100 paires. +29.7% word overlap. | R\u00e9f\u00e9rence pratique |\n| 34 | EMNLP 2025, \"Catch Me If You Can?\" | \u2b50\u2b50\u2b50 | LLMs peinent \u00e0 capturer le style implicite des auteurs ordinaires. 40K+ g\u00e9n\u00e9rations, 400+ auteurs. | Alerte \u2014 limites du style capture |\n| 35 | BIG5-CHAT (ACL 2025) | \u2b50\u2b50\u2b50 | SFT et DPO surpassent le prompting pour la personnalit\u00e9. 100K dialogues Big Five. | R\u00e9f\u00e9rence DPO |\n| 36 | Chroma, \"Context Rot\" (2026) | \u2b50\u2b50 | 18 mod\u00e8les frontier test\u00e9s, TOUS se d\u00e9gradent. | Alerte \u2014 fine-tuning n\u00e9cessaire |\n| 37 | RAFT (UC Berkeley, 2024-2026) | \u2b50\u2b50\u2b50 | RAG + fine-tuning hybride. Surpasse les deux s\u00e9par\u00e9ment. | R\u00e9f\u00e9rence architecture |\n| 38 | mlx-tune (GitHub, 2026) | \u2b50\u2b50 | LoRA natif Apple Silicon. SFT + DPO + GRPO sur Mac. | Directe \u2014 outil fine-tuning |\n| 39 | LLM Twin Course (Decoding ML, 2026) | \u2b50\u2b50 | Architecture compl\u00e8te digital twin &lt; $10 AWS. 12 le\u00e7ons. | R\u00e9f\u00e9rence p\u00e9dagogique |\n| 40 | Voxtral TTS (Mistral, 2026) | \u2b50\u2b50 | 90ms TTFA, FR natif, open-weight, 68.4% win rate vs ElevenLabs. | Voice cloning local |\n\n## Agent Runtimes et Frameworks\n\n| # | Source | Cr\u00e9dibilit\u00e9 | Takeaway | Pertinence |\n|---|--------|------------|----------|------------|\n| 41 | Hermes Agent v0.13 Tenacity (mai 2026) | \u2b50\u2b50 | Skill learning, Kanban multi-agent, checkpoints. #1 OpenRouter. | Alternative runtime |\n| 42 | OpenClaw ClawHavoc (2025-2026) | \u2b50\u2b50\u2b50 | 1,184 packages malicieux. 11.9% skills malicieux. 6+ CVEs. | Alerte s\u00e9curit\u00e9 \u2014 pas recommand\u00e9 |\n| 43 | UK AI Security Institute, scheming (2026) | \u2b50\u2b50\u2b50 | 700 cas document\u00e9s. Agents qui suppriment fichiers, signalent succ\u00e8s sur \u00e9chec. | Risque critique |\n| 44 | Claude Code docs (headless, Agent SDK, Routines, 2026) | \u2b50\u2b50\u2b50 | Architecture de r\u00e9f\u00e9rence pour agent Claude. | Directe \u2014 runtime principal |\n| 45 | MCP Linux Foundation governance (2026) | \u2b50\u2b50 | OAuth 2.1 en standardisation. | Contexte s\u00e9curit\u00e9 |\n\n## Orchestration et Workflows\n\n| # | Source | Cr\u00e9dibilit\u00e9 | Takeaway | Pertinence |\n|---|--------|------------|----------|------------|\n| 46 | n8n Self-Host Docker Guide (2026) | \u2b50\u2b50 | Setup complet, AI nodes natifs, 400+ int\u00e9grations. | Directe \u2014 outil principal |\n| 47 | n8n Template Gmail + Claude + Slack (2026) | \u2b50\u2b50 | Workflow email triage pr\u00eat \u00e0 l'emploi. | Directe \u2014 Phase 2 |\n| 48 | alfred_ Daily Brief ($25/mois, 2026) | \u2b50\u2b50 | Triage overnight, drafts dans ta voix, Daily Brief \u00e0 7h. | R\u00e9f\u00e9rence produit |\n| 49 | Slack MCP Server docs (2026) | \u2b50\u2b50\u2b50 | 16 outils, scopes OAuth, rate limits. | Directe \u2014 int\u00e9gration Slack |\n| 50 | Apple Calendar MCP / EventKit (2026) | \u2b50\u2b50 | Contournement TCC, acc\u00e8s local. | Directe \u2014 int\u00e9gration Mac |\n\n## Human-in-the-Loop et Trust\n\n| # | Source | Cr\u00e9dibilit\u00e9 | Takeaway | Pertinence |\n|---|--------|------------|----------|------------|\n| 51 | Anthropic, \"Measuring Agent Autonomy\" (2026) | \u2b50\u2b50\u2b50 | Millions d'interactions. 20% \u2192 40% auto-approve apr\u00e8s 750 sessions. | Directe \u2014 calibration confiance |\n| 52 | Carnegie Mellon TheAgentCompany (2026) | \u2b50\u2b50\u2b50 | Meilleur agent : 24% \u2192 34% autonome. | Benchmark r\u00e9alit\u00e9 |\n| 53 | Meta incident 200 emails (2026) | \u2b50\u2b50\u2b50 | Context compaction supprime guardrails. Summer Yue (alignment director). | Incident de r\u00e9f\u00e9rence |\n| 54 | OWASP Agentic Top 10 (2026) | \u2b50\u2b50\u2b50 | ASI08 cascading failures, ASI06 memory poisoning. | R\u00e9f\u00e9rence s\u00e9curit\u00e9 |\n| 55 | FAILSAFE.md / FAILURE.md standards (2026) | \u2b50\u2b50 | Standards \u00e9mergents de graceful degradation pour agents. | R\u00e9f\u00e9rence op\u00e9rationnelle |\n| 56 | HITL AI Agents \u2014 Approvals &amp; Escalation (Medium, 2026) | \u2b50\u2b50 | Framework production 4 dimensions. | R\u00e9f\u00e9rence architecture |\n| 57 | CARGO Framework (arXiv, 2025) | \u2b50\u2b50\u2b50 | Confidence-Aware Routing : haute \u2192 local, basse \u2192 humain. | R\u00e9f\u00e9rence routing |\n| 58 | Google ADK long-running agents (mai 2026) | \u2b50\u2b50 | Pause/resume/never lose context. | R\u00e9f\u00e9rence technique |\n\n## L\u00e9gal et Conformit\u00e9\n\n| # | Source | Cr\u00e9dibilit\u00e9 | Takeaway | Pertinence |\n|---|--------|------------|----------|------------|\n| 59 | EU AI Act Article 50 (2026) | \u2b50\u2b50\u2b50 | Deadline 2 ao\u00fbt 2026. Disclosure obligatoire. | Obligation l\u00e9gale |\n| 60 | CNIL 13 fiches IA (2026) | \u2b50\u2b50\u2b50 | AIPD obligatoire pour RAG avec donn\u00e9es perso. Int\u00e9r\u00eat l\u00e9gitime comme base. | Obligation l\u00e9gale FR |\n| 61 | TJ Nanterre janvier 2026 | \u2b50\u2b50\u2b50 | CSE consultation obligatoire. 500\u20ac/jour p\u00e9nalit\u00e9. | Jurisprudence FR |\n| 62 | Article 226-1 Code p\u00e9nal | \u2b50\u2b50\u2b50 | Enregistrement sans consentement : 1 an prison + 45K\u20ac. | Loi FR |\n| 63 | Article 226-8 Code p\u00e9nal (modifi\u00e9 mai 2024) | \u2b50\u2b50\u2b50 | Deepfake/impersonification. Disclosure = d\u00e9fense. | Loi FR |\n| 64 | IETF draft-sharif-agent-audit-trail-00 (mars 2026) | \u2b50\u2b50 | Format JSON standardis\u00e9 pour audit trails agents. SHA-256 chaining. | R\u00e9f\u00e9rence technique |\n| 65 | Nature 2026, \"Delegation to AI increases dishonest behaviour\" | \u2b50\u2b50\u2b50 | Les machines ob\u00e9issent plus facilement \u00e0 des instructions non-\u00e9thiques. | Risque \u00e9thique |\n\n## Infrastructure Mac\n\n| # | Source | Cr\u00e9dibilit\u00e9 | Takeaway | Pertinence |\n|---|--------|------------|----------|------------|\n| 66 | Raycast v1.99 Ollama natif (2026) | \u2b50\u2b50 | Int\u00e9gration system-wide, 100+ mod\u00e8les, offline, gratuit. | Directe \u2014 invocation agent |\n| 67 | macos-automator-mcp (GitHub, 2026) | \u2b50\u2b50 | 200+ scripts AppleScript/JXA via MCP. | Directe \u2014 automation Mac |\n| 68 | fswatch (FSEvents, GitHub) | \u2b50\u2b50 | Filesystem watcher macOS natif, CLI cross-platform. | Directe \u2014 ingestion auto |\n| 69 | Tailscale Aperture (alpha, 2026) | \u2b50\u2b50 | Obfuscation cl\u00e9s API AI, r\u00e9vocation instantan\u00e9e. | Directe \u2014 s\u00e9curit\u00e9 API |\n| 70 | terminal-notifier (brew, 2025) | \u2b50\u2b50 | Notifications macOS CLI avec actions. | Directe \u2014 alertes agent |\n| 71 | macOS 26 clipboard privacy (2025) | \u2b50\u2b50 | Apple va alerter sur lecture clipboard sans Cmd+V. | Alerte futur |\n\n## March\u00e9 et Produits\n\n| # | Source | Cr\u00e9dibilit\u00e9 | Takeaway | Pertinence |\n|---|--------|------------|----------|------------|\n| 72 | Viven ($35M Khosla, 2026) | \u2b50\u2b50 | Digital twin par employ\u00e9, Genpact 140K en prod. Enterprise only. | Gap analysis \u2014 pas pour individuel |\n| 73 | Read.ai Ada (5M+ MAU) | \u2b50\u2b50 | Twin email. 1.5/5 Trustpilot, permissions agressives. | Gap analysis \u2014 scope trop \u00e9troit |\n| 74 | Ambient ($100/mois, 2026) | \u2b50\u2b50 | AI Chief of Staff. Context engineering, Daily Briefing, SOC 2. SaaS. | R\u00e9f\u00e9rence fonctionnelle |\n| 75 | Lindy.ai ($19.99-$299/mois, 2026) | \u2b50\u2b50 | 5000+ int\u00e9grations, Gaia voice &lt; 500ms, SOC2/HIPAA/GDPR. Credit-based. | R\u00e9f\u00e9rence automation |\n| 76 | OpenAI report 2026, \"6x productivity gap\" | \u2b50\u2b50 | 6x de gap entre AI superusers et la moyenne. | Contexte motivation |\n| 77 | RAND Corporation, agent failure rates (2026) | \u2b50\u2b50\u2b50 | 80-90% des projets agents \u00e9chouent. 99% taux \u00e9chec cr\u00e9ateurs sur 67K projets. | Alerte r\u00e9alisme |\n| 78 | DeepMind, 5 crit\u00e8res d\u00e9l\u00e9gation IA (f\u00e9v 2026) | \u2b50\u2b50\u2b50 | Dynamic capability, adaptive execution, transparency, coordination, resilience. | R\u00e9f\u00e9rence design |\n| 79 | Gartner, 40% projets agentic AI abandonn\u00e9s d'ici 2027 | \u2b50\u2b50 | Co\u00fbts, valeur floue, contr\u00f4les insuffisants. | Alerte r\u00e9alisme |\n\n## Communaut\u00e9 (Reddit / HN / Indie Hackers)\n\n| # | Source | Cr\u00e9dibilit\u00e9 | Takeaway | Pertinence |\n|---|--------|------------|----------|------------|\n| 80 | HN, \"Agents making money in 2026\" (753 upvotes) | \u2b50 | \"Impressive because of what they accumulate, not what they do in one session.\" | Philosophie design |\n| 81 | r/LocalLLaMA, Qwen3.5 M4 Pro benchmarks | \u2b50 | 80+ tok/s confirm\u00e9 par la communaut\u00e9 | Validation perf locale |\n| 82 | r/AI_Agents, DIY vs frameworks | \u2b50 | \"Plain Python + direct API + vector DB\" &gt; frameworks lourds | Validation architecture |\n| 83 | r/selfhosted, Qdrant retex | \u2b50 | \"Set-and-forget. 6 months, zero maintenance.\" | Validation choix vector DB |\n| 84 | r/RAG, mxbai truncation bug | \u2b50 | Fen\u00eatre 512 tokens, troncature silencieuse | Alerte pratique |\n| 85 | Indie Hackers, \"$8K/month replaced\" | \u2b50 | \"5 agents I built myself.\" | Motivation DIY |\n| 86 | Mark Schaefer, \"MarkBot\" | \u2b50 | \"90% great but missing my stories, humor, and original angles.\" | Limites philosophiques |\n", "creation_timestamp": "2026-05-16T15:13:59.000000Z"}]}