[{"data":1,"prerenderedAt":6390},["ShallowReactive",2],{"published-article-paths":3,"search-navigation":348,"\u002Ffr\u002Farticle\u002Fsync-obsidian-across-devices":421,"\u002Ffr\u002Farticle\u002Fsync-obsidian-across-devices-surround":1946},[4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112,114,116,118,120,122,124,126,128,130,132,134,136,138,140,142,144,146,148,150,152,154,156,158,160,162,164,166,168,170,172,174,176,178,180,182,184,186,188,190,192,194,196,198,200,202,204,206,208,210,212,214,216,218,220,222,224,226,228,230,232,234,236,238,240,242,244,246,248,250,252,254,256,258,260,262,264,266,268,270,272,274,276,278,280,282,284,286,288,290,292,294,296,298,300,302,304,306,308,310,312,314,316,318,320,322,324,326,328,330,332,334,336,338,340,342,344,346],{"path":5},"\u002Fde\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":7},"\u002Fde\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":9},"\u002Fde\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":11},"\u002Fde\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":13},"\u002Fde\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":15},"\u002Fde\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":17},"\u002Fde\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":19},"\u002Fde\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":21},"\u002Fde\u002Farticle\u002Fsetup-antigravity-2",{"path":23},"\u002Fde\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":25},"\u002Fde\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":27},"\u002Fde\u002Farticle\u002Fsync-obsidian-across-devices",{"path":29},"\u002Fde\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":31},"\u002Fde\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":33},"\u002Fde\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":35},"\u002Fde\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":37},"\u002Fen\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":39},"\u002Fen\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":41},"\u002Fen\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":43},"\u002Fen\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":45},"\u002Fen\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":47},"\u002Fen\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare",{"path":49},"\u002Fen\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":51},"\u002Fen\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":53},"\u002Fen\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":55},"\u002Fen\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare",{"path":57},"\u002Fen\u002Farticle\u002Fsetup-antigravity-2",{"path":59},"\u002Fen\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":61},"\u002Fen\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":63},"\u002Fen\u002Farticle\u002Fsync-obsidian-across-devices",{"path":65},"\u002Fen\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":67},"\u002Fen\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":69},"\u002Fen\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":71},"\u002Fen\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":73},"\u002Fes\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":75},"\u002Fes\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":77},"\u002Fes\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":79},"\u002Fes\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":81},"\u002Fes\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":83},"\u002Fes\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare",{"path":85},"\u002Fes\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":87},"\u002Fes\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":89},"\u002Fes\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":91},"\u002Fes\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare",{"path":93},"\u002Fes\u002Farticle\u002Fsetup-antigravity-2",{"path":95},"\u002Fes\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":97},"\u002Fes\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":99},"\u002Fes\u002Farticle\u002Fsync-obsidian-across-devices",{"path":101},"\u002Fes\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":103},"\u002Fes\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":105},"\u002Fes\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":107},"\u002Fes\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":109},"\u002Ffr\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":111},"\u002Ffr\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":113},"\u002Ffr\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":115},"\u002Ffr\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":117},"\u002Ffr\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":119},"\u002Ffr\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare",{"path":121},"\u002Ffr\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":123},"\u002Ffr\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":125},"\u002Ffr\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":127},"\u002Ffr\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare",{"path":129},"\u002Ffr\u002Farticle\u002Fsetup-antigravity-2",{"path":131},"\u002Ffr\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":133},"\u002Ffr\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":135},"\u002Ffr\u002Farticle\u002Fsync-obsidian-across-devices",{"path":137},"\u002Ffr\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":139},"\u002Ffr\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":141},"\u002Ffr\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":143},"\u002Ffr\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":145},"\u002Fid\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":147},"\u002Fid\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":149},"\u002Fid\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":151},"\u002Fid\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":153},"\u002Fid\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":155},"\u002Fid\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare",{"path":157},"\u002Fid\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":159},"\u002Fid\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":161},"\u002Fid\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":163},"\u002Fid\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare",{"path":165},"\u002Fid\u002Farticle\u002Fsetup-antigravity-2",{"path":167},"\u002Fid\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":169},"\u002Fid\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":171},"\u002Fid\u002Farticle\u002Fsync-obsidian-across-devices",{"path":173},"\u002Fid\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":175},"\u002Fid\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":177},"\u002Fid\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":179},"\u002Fid\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":181},"\u002Fja\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":183},"\u002Fja\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":185},"\u002Fja\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":187},"\u002Fja\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":189},"\u002Fja\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":191},"\u002Fja\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":193},"\u002Fja\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":195},"\u002Fja\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":197},"\u002Fja\u002Farticle\u002Fsetup-antigravity-2",{"path":199},"\u002Fja\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":201},"\u002Fja\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":203},"\u002Fja\u002Farticle\u002Fsync-obsidian-across-devices",{"path":205},"\u002Fja\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":207},"\u002Fja\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":209},"\u002Fja\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":211},"\u002Fja\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":213},"\u002Fpt\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":215},"\u002Fpt\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":217},"\u002Fpt\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":219},"\u002Fpt\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":221},"\u002Fpt\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":223},"\u002Fpt\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare",{"path":225},"\u002Fpt\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":227},"\u002Fpt\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":229},"\u002Fpt\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":231},"\u002Fpt\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare",{"path":233},"\u002Fpt\u002Farticle\u002Fsetup-antigravity-2",{"path":235},"\u002Fpt\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":237},"\u002Fpt\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":239},"\u002Fpt\u002Farticle\u002Fsync-obsidian-across-devices",{"path":241},"\u002Fpt\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":243},"\u002Fpt\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":245},"\u002Fpt\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":247},"\u002Fpt\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":249},"\u002Ftw\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":251},"\u002Ftw\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":253},"\u002Ftw\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":255},"\u002Ftw\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":257},"\u002Ftw\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":259},"\u002Ftw\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":261},"\u002Ftw\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":263},"\u002Ftw\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":265},"\u002Ftw\u002Farticle\u002Fsetup-antigravity-2",{"path":267},"\u002Ftw\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":269},"\u002Ftw\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":271},"\u002Ftw\u002Farticle\u002Fsync-obsidian-across-devices",{"path":273},"\u002Ftw\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":275},"\u002Ftw\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":277},"\u002Ftw\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":279},"\u002Ftw\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":281},"\u002Fvi\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":283},"\u002Fvi\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":285},"\u002Fvi\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":287},"\u002Fvi\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":289},"\u002Fvi\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":291},"\u002Fvi\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare",{"path":293},"\u002Fvi\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":295},"\u002Fvi\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":297},"\u002Fvi\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":299},"\u002Fvi\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare",{"path":301},"\u002Fvi\u002Farticle\u002Fsetup-antigravity-2",{"path":303},"\u002Fvi\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":305},"\u002Fvi\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":307},"\u002Fvi\u002Farticle\u002Fsync-obsidian-across-devices",{"path":309},"\u002Fvi\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":311},"\u002Fvi\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":313},"\u002Fvi\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":315},"\u002Fvi\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":317},"\u002Fzh\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":319},"\u002Fzh\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":321},"\u002Fzh\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":323},"\u002Fzh\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":325},"\u002Fzh\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":327},"\u002Fzh\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":329},"\u002Fzh\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":331},"\u002Fzh\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":333},"\u002Fzh\u002Farticle\u002Fsetup-antigravity-2",{"path":335},"\u002Fzh\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":337},"\u002Fzh\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":339},"\u002Fzh\u002Farticle\u002Fsync-obsidian-across-devices",{"path":341},"\u002Fzh\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":343},"\u002Fzh\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":345},"\u002Fzh\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":347},"\u002Fzh\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",[349,353,357,361,365,369,373,377,381,385,389,393,397,401,405,409,413,417],{"title":350,"path":351,"stem":352},"AI Agent Skills: What They Are & How to Create Them","\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them","en\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"title":354,"path":355,"stem":356},"Bringing Buzz to DeepSeek Harness: Taught to Speak Nostr","\u002Farticle\u002Fbringing-buzz-to-deepseek-harness","en\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"title":358,"path":359,"stem":360},"Solving AI Agent Skills Fragmentation with npx skills","\u002Farticle\u002Fcentralised-the-skills-for-agents","en\u002Farticle\u002Fcentralised-the-skills-for-agents",{"title":362,"path":363,"stem":364},"How to Expose Hermes Agent Privately with Cloudflare WARP","\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp","en\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"title":366,"path":367,"stem":368},"How AI Agent Skills Replace Nuxt App Scaffolding Scripts","\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts","en\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"title":370,"path":371,"stem":372},"Stop Exposing Your Vault: Secure NodeWarden with Cloudflare","\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare","en\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare",{"title":374,"path":375,"stem":376},"How to Deploy Hermes Agent on a Linux VPS","\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server","en\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"title":378,"path":379,"stem":380},"Self-Host Your Travel Itineraries with TREK and Docker","\u002Farticle\u002Fself-hosted-travel-planner-trek","en\u002Farticle\u002Fself-hosted-travel-planner-trek",{"title":382,"path":383,"stem":384},"Self-Host Block's Buzz: Shared AI Agent Workspace","\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues","en\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"title":386,"path":387,"stem":388},"How to Self-Host a BitWarden Compatible Server Nodewarden","\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare","en\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare",{"title":390,"path":391,"stem":392},"Google Antigravity 2 Hands-On: Setup & First Impressions","\u002Farticle\u002Fsetup-antigravity-2","en\u002Farticle\u002Fsetup-antigravity-2",{"title":394,"path":395,"stem":396},"NetSuite AI Connector Guide: MCP Setup & Use Cases","\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude","en\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"title":398,"path":399,"stem":400},"Switch Between Multiple Cloudflare WARP Orgs on Mac","\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac","en\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"title":402,"path":403,"stem":404},"How to Sync Obsidian Vaults Across Devices Securely","\u002Farticle\u002Fsync-obsidian-across-devices","en\u002Farticle\u002Fsync-obsidian-across-devices",{"title":406,"path":407,"stem":408},"Testing Claude Fable 5: A Financial Analysis Review","\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis","en\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"title":410,"path":411,"stem":412},"Guide to Browser and Scheduler in Antigravity 2","\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2","en\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"title":414,"path":415,"stem":416},"Build a Persistent AI Memory System on Cloudflare","\u002Farticle\u002Fuse-cloudflare-as-ai-memory","en\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"title":418,"path":419,"stem":420},"Antigravity 2 in Action: AI Agents, Skills, and MCP","\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2","en\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"id":422,"title":423,"author":424,"body":425,"category":1920,"date":1922,"description":1923,"extension":1924,"image":1925,"imageAlt":1926,"isPublished":738,"meta":1927,"minRead":1181,"navigation":738,"path":135,"seo":1936,"stem":1938,"tags":1939,"updatedAt":1944,"__hash__":1945},"article\u002Ffr\u002Farticle\u002Fsync-obsidian-across-devices.md","Comment synchroniser ses coffres Obsidian en sécurité","",{"type":426,"value":427,"toc":1898},"minimark",[428,432,438,449,458,478,483,492,497,502,518,534,537,542,547,554,559,563,568,643,650,682,686,694,702,709,776,779,798,805,817,821,825,836,841,852,874,879,893,898,904,909,924,927,932,935,940,944,949,963,967,981,991,995,1000,1003,1014,1047,1051,1058,1211,1245,1250,1271,1282,1287,1291,1301,1374,1378,1384,1421,1552,1559,1565,1572,1578,1581,1587,1593,1607,1618,1625,1631,1638,1775,1781,1786,1789,1794,1797,1801,1806,1811,1817,1828,1838,1842,1853,1858,1864,1867,1871,1894],[429,430,431],"p",{},"Obsidian est une application de gestion des connaissances orientée local-first (le local d'abord). Chaque note est un fichier markdown stocké sur votre appareil et reste entièrement sous votre contrôle. Cependant, nous souhaitons souvent disposer du même coffre (vault) sur notre ordinateur portable, notre téléphone et nos autres appareils, ou pouvoir y accéder à distance via un navigateur web.",[433,434],"img",{"src":435,"alt":436,"style":437},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-multi-device-sync-illustration.webp","Illustration de la synchronisation d'un coffre Obsidian sur plusieurs appareils","max-width: 667px; width: 100%; height: auto;",[429,439,440,441,448],{},"Plusieurs solutions de synchronisation existent pour Obsidian, mais elles font toutes des compromis en matière de gestion des conflits, de chiffrement ou de souveraineté des données. ",[442,443,447],"a",{"href":444,"rel":445},"https:\u002F\u002Fgithub.com\u002Fhjinco\u002Fsynch",[446],"nofollow","Synch"," est une application open-source qui synchronise votre coffre Obsidian avec un chiffrement de bout en bout et une gestion automatique des conflits sur un serveur auto-hébergé.",[429,450,451,452,457],{},"Bien que l'approche local-first d'Obsidian fonctionne parfaitement la plupart du temps, il arrive que nous devions accéder à notre coffre à distance depuis un navigateur web. ",[442,453,456],{"href":454,"rel":455},"https:\u002F\u002Fgithub.com\u002FNystik-gh\u002Fignis",[446],"Ignis"," est une application open-source qui fait tourner Obsidian dans un navigateur web dans un format très proche du natif, vous permettant de lire et de modifier votre coffre de n'importe où.",[429,459,460,461,464,465,467,468,471,472,477],{},"Dans ce guide, nous allons installer ",[462,463,447],"strong",{}," et ",[462,466,456],{}," sur un ",[462,469,470],{},"VPS"," (Serveur Privé Virtuel), en les hébergeant de manière sécurisée dans un réseau privé ",[462,473,474],{},[442,475,476],{"href":363},"Cloudflare Zero Trust"," plutôt que de les exposer directement sur l'internet public.",[433,479],{"src":480,"alt":481,"style":482},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-sync-cloudflare-zero-trust-architecture.webp","Diagramme d'architecture de la synchronisation Obsidian via Cloudflare Zero Trust","max-width: 671px; width: 100%; height: auto;",[484,485],"article-card",{"description":486,"image":487,"image-alt":488,"label":489,"min-read":490,"title":491,"to":363},"Découvrez comment exposer et accéder en toute sécurité à votre Hermes Agent à l'échelle mondiale à l'aide de Cloudflare WARP et Zero Trust sans ouvrir de ports pare-feu entrants.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002FEN-Exposing-Hermes-Agent-to-Private-Network-Using-Cloudflare-WARP.webp","Exposer en toute sécurité Hermes Agent à un réseau privé à l'aide du tunnel Cloudflare Zero Trust et WARP","Guide connexe","8","Comment exposer Hermes Agent de manière privée avec Cloudflare WARP",[493,494,496],"h2",{"id":495},"synchronisation-sécurisée-des-coffres-obsidian-avec-synch","Synchronisation sécurisée des coffres Obsidian avec Synch",[429,498,499,501],{},[462,500,447],{}," offre les fonctionnalités suivantes :",[503,504,505,509,512,515],"ul",{},[506,507,508],"li",{},"Synchronise votre coffre dès que des modifications sont détectées",[506,510,511],{},"Chiffre les données du coffre avant leur téléversement",[506,513,514],{},"Permet la restauration à partir de l'historique des versions",[506,516,517],{},"Comprend une gestion automatique des conflits",[429,519,520,522,523,526,527,530,531,533],{},[462,521,447],{}," génère une ",[462,524,525],{},"clé de coffre"," aléatoire de 32 octets sur votre appareil, qui sert à chiffrer les données de votre coffre. Lorsque vous créez un coffre distant, vous choisissez un ",[462,528,529],{},"mot de passe de coffre"," ; ce mot de passe est utilisé pour protéger la ",[462,532,525],{}," afin que celle-ci puisse être stockée en toute sécurité sur le serveur et déverrouillée sur d'autres appareils.",[429,535,536],{},"Notez que la résolution des conflits est gérée sur vos appareils clients plutôt que sur le serveur. Si deux appareils modifient simultanément la même note, le serveur conserve la version qui arrive en premier et marque l'autre appareil comme obsolète. L'appareil obsolète fusionne alors automatiquement la version la plus récente avec ses modifications locales avant de téléverser la note finale fusionnée.",[538,539,541],"h3",{"id":540},"installer-synch-sur-votre-vps","Installer Synch sur votre VPS",[543,544,546],"h4",{"id":545},"créer-un-nom-de-domaine","Créer un nom de domaine",[429,548,549,550,553],{},"Créez un enregistrement A dans Cloudflare et réglez le statut du proxy sur ",[462,551,552],{},"DNS uniquement"," (en contournant le CDN de Cloudflare).",[433,555],{"src":556,"alt":557,"style":558},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fcloudflare-dns-a-record-synch-server.webp","Configuration d'un enregistrement DNS A pour le serveur Synch dans Cloudflare","max-width: 538px; width: 100%; height: auto;",[543,560,562],{"id":561},"installer-synch-via-docker-sur-ubuntu","Installer Synch via Docker sur Ubuntu",[564,565,567],"h5",{"id":566},"cloner-le-dépôt","Cloner le dépôt",[569,570,574],"pre",{"className":571,"code":572,"language":573,"meta":424,"style":424},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","git clone https:\u002F\u002Fgithub.com\u002Fhjinco\u002Fsynch.git       \n        \n# Accéder au dossier de l'API\ncd synch\u002Fapps\u002Fapi\n        \n# Copier le fichier d'environnement d'exemple :\ncp .env.example .env\n","bash",[575,576,577,597,603,610,620,625,631],"code",{"__ignoreMap":424},[578,579,582,586,590,593],"span",{"class":580,"line":581},"line",1,[578,583,585],{"class":584},"sBMFI","git",[578,587,589],{"class":588},"sfazB"," clone",[578,591,592],{"class":588}," https:\u002F\u002Fgithub.com\u002Fhjinco\u002Fsynch.git",[578,594,596],{"class":595},"sTEyZ","       \n",[578,598,600],{"class":580,"line":599},2,[578,601,602],{"class":595},"        \n",[578,604,606],{"class":580,"line":605},3,[578,607,609],{"class":608},"sHwdD","# Accéder au dossier de l'API\n",[578,611,613,617],{"class":580,"line":612},4,[578,614,616],{"class":615},"s2Zo4","cd",[578,618,619],{"class":588}," synch\u002Fapps\u002Fapi\n",[578,621,623],{"class":580,"line":622},5,[578,624,602],{"class":595},[578,626,628],{"class":580,"line":627},6,[578,629,630],{"class":608},"# Copier le fichier d'environnement d'exemple :\n",[578,632,634,637,640],{"class":580,"line":633},7,[578,635,636],{"class":584},"cp",[578,638,639],{"class":588}," .env.example",[578,641,642],{"class":588}," .env\n",[564,644,646,647],{"id":645},"modifier-les-valeurs-du-env","Modifier les valeurs du ",[575,648,649],{},".env",[503,651,652,658,676],{},[506,653,654,657],{},[575,655,656],{},"PUBLIC_URL=synch.pafor.me"," : Saisissez le nom de domaine public de votre serveur Synch (le domaine créé à l'étape précédente).",[506,659,660,464,663,666,667,671,672,675],{},[575,661,662],{},"BETTER_AUTH_SECRET",[575,664,665],{},"SYNC_TOKEN_SECRET"," : Générez des clés sécurisées à l'aide de cet ",[442,668,670],{"href":669},"\u002Ffr\u002Ftools\u002Fsecret-key-hex","outil de clé secrète en ligne"," ou en exécutant deux fois ",[575,673,674],{},"openssl rand -hex 32"," dans votre terminal.",[506,677,678,681],{},[575,679,680],{},"AUTH_ALLOWED_EMAILS"," : Une liste d'adresses e-mail séparées par des virgules autorisées à s'inscrire et à créer des comptes.",[564,683,685],{"id":684},"ajouter-le-domaine-au-caddyfile","Ajouter le domaine au Caddyfile",[429,687,688,689,693],{},"Les détails de l'intégration du module Cloudflare DNS avec Caddy et son lancement dans un conteneur se trouvent dans notre ",[442,690,692],{"href":691},"\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues#_4-enable-https-with-caddy","article sur l'auto-hébergement de Buzz",".",[484,695],{"description":696,"image":697,"image-alt":698,"label":699,"min-read":700,"title":701,"to":691},"Apprenez à configurer Caddy pour générer automatiquement des certificats SSL\u002FTLS via les défis DNS de Cloudflare dans des conteneurs Docker.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002FEN-Self-Hosting-Buzz-As-The-Workspace-Where-AI-Agents-Become-Colleagues.webp","Configuration de Caddy avec le jeton d'API DNS de Cloudflare pour la génération automatisée de certificats SSL\u002FTLS dans un espace de travail auto-hébergé","Guide d'auto-hébergement","12","Auto-héberger Buzz de Block: Espace collaboratif d'agents IA",[429,703,704,705,708],{},"Insérez la directive ",[575,706,707],{},"SYNCH_DOMAIN"," dans votre Caddyfile, pointant vers le port 8787 (le port utilisé par le conteneur Synch) :",[569,710,714],{"className":711,"code":712,"language":713,"meta":424,"style":424},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  acme_dns cloudflare {env.CLOUDFLARE_API_TOKEN}\n}\n\n{$SYNCH_DOMAIN} {\n  encode zstd gzip\n  reverse_proxy host.docker.internal:8787\n}\n","json",[575,715,716,722,730,734,740,754,759,771],{"__ignoreMap":424},[578,717,718],{"class":580,"line":581},[578,719,721],{"class":720},"sMK4o","{\n",[578,723,724,727],{"class":580,"line":599},[578,725,726],{"class":595},"  acme_dns cloudflare {env.CLOUDFLARE_API_TOKEN",[578,728,729],{"class":720},"}\n",[578,731,732],{"class":580,"line":605},[578,733,729],{"class":595},[578,735,736],{"class":580,"line":612},[578,737,739],{"emptyLinePlaceholder":738},true,"\n",[578,741,742,745,748,751],{"class":580,"line":622},[578,743,744],{"class":720},"{",[578,746,747],{"class":595},"$SYNCH_DOMAIN",[578,749,750],{"class":720},"}",[578,752,753],{"class":720}," {\n",[578,755,756],{"class":580,"line":627},[578,757,758],{"class":595},"  encode zstd gzip\n",[578,760,761,764,767],{"class":580,"line":633},[578,762,763],{"class":595},"  reverse_proxy host.docker.internal",[578,765,766],{"class":720},":",[578,768,770],{"class":769},"sbssI","8787\n",[578,772,774],{"class":580,"line":773},8,[578,775,729],{"class":720},[429,777,778],{},"Lancez le conteneur :",[569,780,782],{"className":571,"code":781,"language":573,"meta":424,"style":424},"docker compose up -d\n",[575,783,784],{"__ignoreMap":424},[578,785,786,789,792,795],{"class":580,"line":581},[578,787,788],{"class":584},"docker",[578,790,791],{"class":588}," compose",[578,793,794],{"class":588}," up",[578,796,797],{"class":588}," -d\n",[429,799,800,801,804],{},"Exécutez la commande ",[575,802,803],{},"curl"," suivante pour vérifier sa disponibilité :",[569,806,808],{"className":571,"code":807,"language":573,"meta":424,"style":424},"curl https:\u002F\u002Fsynch.pafor.me\u002Fhealth\n",[575,809,810],{"__ignoreMap":424},[578,811,812,814],{"class":580,"line":581},[578,813,803],{"class":584},[578,815,816],{"class":588}," https:\u002F\u002Fsynch.pafor.me\u002Fhealth\n",[538,818,820],{"id":819},"connecter-obsidian-à-votre-serveur-synch","Connecter Obsidian à votre serveur Synch",[543,822,824],{"id":823},"installer-le-plugin-synch-sur-obsidian","Installer le plugin Synch sur Obsidian",[429,826,827,828,831,832,835],{},"Ouvrez les paramètres d'Obsidian, accédez à ",[462,829,830],{},"Community plugins"," (Plugins de la communauté) et cliquez sur le bouton ",[462,833,834],{},"'Browse'"," (Parcourir) :",[433,837],{"src":838,"alt":839,"style":840},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-community-plugins-browse.webp","Navigation dans les plugins de la communauté depuis les paramètres Obsidian","max-width: 523px; width: 100%; height: auto;",[429,842,843,844,847,848],{},"Recherchez et installez ",[462,845,846],{},"'Synchrun'"," :\n",[433,849],{"src":850,"alt":851,"style":558},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-install-synchrun-plugin.webp","Installation du plugin Synchrun dans Obsidian",[429,853,854,855,857,858,861,862,865,866,869,870,873],{},"Une fois ",[462,856,846],{}," installé, ouvrez les paramètres du plugin et activez ",[462,859,860],{},"'Use a self-hosted server'"," (Utiliser un serveur auto-hébergé). Saisissez ensuite ",[575,863,864],{},"https:\u002F\u002Fsynch.pafor.me"," dans le champ ",[462,867,868],{},"'Server URL'"," (URL du serveur) et cliquez sur ",[462,871,872],{},"'Save'"," (Enregistrer).",[433,875],{"src":876,"alt":877,"style":878},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-synchrun-plugin-settings-self-hosted.webp","Configuration de l'URL du serveur auto-hébergé dans les paramètres Synchrun","max-width: 525px; width: 100%; height: auto;",[429,880,881,882,885,886,889,890,892],{},"Cliquez sur le bouton ",[462,883,884],{},"'Sign in on this device'"," (Se connecter sur cet appareil) sous ",[462,887,888],{},"'Account'"," (Compte). Inscrivez-vous ensuite en utilisant l'adresse e-mail spécifiée dans votre liste ",[575,891,680],{}," ; vous serez redirigé vers la page d'autorisation suivante :",[433,894],{"src":895,"alt":896,"style":897},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynchrun-account-authorization-page.webp","Page d'autorisation de compte pour Synchrun","max-width: 494px; width: 100%; height: auto;",[429,899,881,900,903],{},[462,901,902],{},"'Allow Obsidian sign-in'"," (Autoriser la connexion Obsidian) :",[433,905],{"src":906,"alt":907,"style":908},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynchrun-allow-obsidian-signin.webp","Autoriser la connexion Obsidian pour Synch","max-width: 498px; width: 100%; height: auto;",[429,910,881,911,914,915,918,919],{},[462,912,913],{},"'Return to Obsidian'"," (Retourner à Obsidian), puis cliquez sur ",[462,916,917],{},"'Create vault'"," (Créer un coffre) :\n",[433,920],{"src":921,"alt":922,"style":923},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-synchrun-create-remote-vault.webp","Création d'un nouveau coffre distant dans Synchrun","max-width: 496px; width: 100%; height: auto;",[429,925,926],{},"Saisissez un nom et un mot de passe sécurisé pour créer votre coffre distant.",[433,928],{"src":929,"alt":930,"style":931},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-synchrun-vault-password-setup.webp","Configuration d'un mot de passe sécurisé pour le coffre distant Obsidian","max-width: 500px; width: 100%; height: auto;",[429,933,934],{},"Le processus de synchronisation commence immédiatement et peut prendre du temps selon la taille de votre coffre. Une fois terminé, votre utilisation totale du stockage s'affiche.",[433,936],{"src":937,"alt":938,"style":939},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-synchrun-sync-completed-storage.webp","Synchronisation Synchrun terminée indiquant l'espace de stockage utilisé","max-width: 508px; width: 100%; height: auto;",[493,941,943],{"id":942},"accès-à-obsidian-via-un-navigateur-web-avec-ignis","Accès à Obsidian via un navigateur web avec Ignis",[429,945,946,948],{},[462,947,456],{}," remplace les API Electron d'Obsidian par des API Web, ce qui permet au code JavaScript d'Obsidian de s'exécuter directement dans un navigateur web standard. Tous vos fichiers markdown et pièces jointes sont stockés directement dans le système de fichiers du serveur hôte.",[429,950,951,952,464,957,962],{},"Cependant, il existe quelques limitations par rapport à l'application de bureau native d'Obsidian. Certaines fonctionnalités ou plugins nécessitant les API Electron ou Node.js (qui n'ont pas d'équivalent direct dans un environnement de navigateur) ne fonctionneront pas. Veuillez vous référer aux guides Ignis ",[442,953,956],{"href":954,"rel":955},"https:\u002F\u002Fignis.thiefling.com\u002Fdocs\u002Fusing\u002Flimitations\u002F",[446],"Limitations",[442,958,961],{"href":959,"rel":960},"https:\u002F\u002Fignis.thiefling.com\u002Fdocs\u002Fusing\u002Fplugin-compatibility\u002F",[446],"Compatibilité des plugins"," pour obtenir la liste détaillée de compatibilité.",[538,964,966],{"id":965},"configuration-dignis","Configuration d'Ignis",[429,968,969,970,972,973,976,977,980],{},"Nous allons installer ",[462,971,456],{}," sur notre VPS à l'aide de Docker, en le montant sur le dossier local ",[575,974,975],{},".\u002Fvaults",". Ce répertoire de coffres sera synchronisé à l'aide de la ",[462,978,979],{},"Synch CLI"," pour extraire les mises à jour de notes depuis le coffre distant configuré précédemment.",[429,982,983,984,986,987,693],{},"Comme ",[462,985,456],{}," ne dispose pas d'authentification intégrée, il doit être sécurisé derrière un réseau privé ",[462,988,989],{},[442,990,476],{"href":363},[543,992,994],{"id":993},"créer-un-enregistrement-dns","Créer un enregistrement DNS",[433,996],{"src":997,"alt":998,"style":999},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fcloudflare-dns-a-record-ignis.webp","Configuration d'un enregistrement DNS A pour le client web Ignis dans Cloudflare","max-width: 552px; width: 100%; height: auto;",[543,1001,685],{"id":1002},"ajouter-le-domaine-au-caddyfile-1",[429,1004,1005,1006,1009,1010,1013],{},"Ajoutez ",[575,1007,1008],{},"obsidian.pafor.me"," à votre Caddyfile de la même manière que ",[575,1011,1012],{},"synch.pafor.me"," :",[569,1015,1017],{"className":711,"code":1016,"language":713,"meta":424,"style":424},"{$OBSIDIAN_DOMAIN} {\n  encode zstd gzip\n  reverse_proxy host.docker.internal:9898\n}\n",[575,1018,1019,1030,1034,1043],{"__ignoreMap":424},[578,1020,1021,1023,1026,1028],{"class":580,"line":581},[578,1022,744],{"class":720},[578,1024,1025],{"class":595},"$OBSIDIAN_DOMAIN",[578,1027,750],{"class":720},[578,1029,753],{"class":720},[578,1031,1032],{"class":580,"line":599},[578,1033,758],{"class":595},[578,1035,1036,1038,1040],{"class":580,"line":605},[578,1037,763],{"class":595},[578,1039,766],{"class":720},[578,1041,1042],{"class":769},"9898\n",[578,1044,1045],{"class":580,"line":612},[578,1046,729],{"class":720},[543,1048,1050],{"id":1049},"lancer-ignis-avec-docker","Lancer Ignis avec Docker",[429,1052,1053,1054,1057],{},"Enregistrez le code docker compose yml suivant sous le nom ",[575,1055,1056],{},"ignis-docker-compose.yml"," sur le VPS :",[569,1059,1063],{"className":1060,"code":1061,"language":1062,"meta":424,"style":424},"language-yml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","services:\n  ignis:\n    image: nobbe\u002Fignis:latest\n    ports:\n      - \"9898:8080\"\n    environment:\n      # correspondre à votre utilisateur hôte (exécutez : id)\n      - PUID=1000\n      - PGID=1000\n      - WS_ORIGINS=https:\u002F\u002Fobsidian.pafor.me\n    volumes:\n      - .\u002Fvaults:\u002Fvaults\n      - .\u002Fdata:\u002Fapp\u002Fdata\n      - obsidian-app:\u002Fapp\u002Fobsidian-app\n    restart: unless-stopped\n\nvolumes:\n  obsidian-app:\n","yml",[575,1064,1065,1074,1081,1091,1098,1112,1119,1124,1131,1139,1147,1155,1163,1171,1179,1190,1195,1203],{"__ignoreMap":424},[578,1066,1067,1071],{"class":580,"line":581},[578,1068,1070],{"class":1069},"swJcz","services",[578,1072,1073],{"class":720},":\n",[578,1075,1076,1079],{"class":580,"line":599},[578,1077,1078],{"class":1069},"  ignis",[578,1080,1073],{"class":720},[578,1082,1083,1086,1088],{"class":580,"line":605},[578,1084,1085],{"class":1069},"    image",[578,1087,766],{"class":720},[578,1089,1090],{"class":588}," nobbe\u002Fignis:latest\n",[578,1092,1093,1096],{"class":580,"line":612},[578,1094,1095],{"class":1069},"    ports",[578,1097,1073],{"class":720},[578,1099,1100,1103,1106,1109],{"class":580,"line":622},[578,1101,1102],{"class":720},"      -",[578,1104,1105],{"class":720}," \"",[578,1107,1108],{"class":588},"9898:8080",[578,1110,1111],{"class":720},"\"\n",[578,1113,1114,1117],{"class":580,"line":627},[578,1115,1116],{"class":1069},"    environment",[578,1118,1073],{"class":720},[578,1120,1121],{"class":580,"line":633},[578,1122,1123],{"class":608},"      # correspondre à votre utilisateur hôte (exécutez : id)\n",[578,1125,1126,1128],{"class":580,"line":773},[578,1127,1102],{"class":720},[578,1129,1130],{"class":588}," PUID=1000\n",[578,1132,1134,1136],{"class":580,"line":1133},9,[578,1135,1102],{"class":720},[578,1137,1138],{"class":588}," PGID=1000\n",[578,1140,1142,1144],{"class":580,"line":1141},10,[578,1143,1102],{"class":720},[578,1145,1146],{"class":588}," WS_ORIGINS=https:\u002F\u002Fobsidian.pafor.me\n",[578,1148,1150,1153],{"class":580,"line":1149},11,[578,1151,1152],{"class":1069},"    volumes",[578,1154,1073],{"class":720},[578,1156,1158,1160],{"class":580,"line":1157},12,[578,1159,1102],{"class":720},[578,1161,1162],{"class":588}," .\u002Fvaults:\u002Fvaults\n",[578,1164,1166,1168],{"class":580,"line":1165},13,[578,1167,1102],{"class":720},[578,1169,1170],{"class":588}," .\u002Fdata:\u002Fapp\u002Fdata\n",[578,1172,1174,1176],{"class":580,"line":1173},14,[578,1175,1102],{"class":720},[578,1177,1178],{"class":588}," obsidian-app:\u002Fapp\u002Fobsidian-app\n",[578,1180,1182,1185,1187],{"class":580,"line":1181},15,[578,1183,1184],{"class":1069},"    restart",[578,1186,766],{"class":720},[578,1188,1189],{"class":588}," unless-stopped\n",[578,1191,1193],{"class":580,"line":1192},16,[578,1194,739],{"emptyLinePlaceholder":738},[578,1196,1198,1201],{"class":580,"line":1197},17,[578,1199,1200],{"class":1069},"volumes",[578,1202,1073],{"class":720},[578,1204,1206,1209],{"class":580,"line":1205},18,[578,1207,1208],{"class":1069},"  obsidian-app",[578,1210,1073],{"class":720},[503,1212,1213,1224,1238],{},[506,1214,1215,1216,1219,1220,1223],{},"Utilisez le port ",[575,1217,1218],{},"9898"," sur l'hôte, car le port ",[575,1221,1222],{},"8080"," est couramment utilisé par d'autres services.",[506,1225,800,1226,1229,1230,1233,1234,1237],{},[575,1227,1228],{},"id"," sur votre VPS pour vérifier l' ",[575,1231,1232],{},"UID"," et le ",[575,1235,1236],{},"GID"," de votre utilisateur hôte afin de garantir des permissions système appropriées.",[506,1239,1240,1241,1244],{},"Définissez ",[575,1242,1243],{},"WS_ORIGINS"," pour autoriser uniquement les connexions WebSocket provenant de votre nom de domaine spécifique.",[429,1246,1247,1248,1013],{},"Lancez le Docker d' ",[462,1249,456],{},[569,1251,1253],{"className":571,"code":1252,"language":573,"meta":424,"style":424},"docker compose -f ignis-docker-compose.yml up -d\n",[575,1254,1255],{"__ignoreMap":424},[578,1256,1257,1259,1261,1264,1267,1269],{"class":580,"line":581},[578,1258,788],{"class":584},[578,1260,791],{"class":588},[578,1262,1263],{"class":588}," -f",[578,1265,1266],{"class":588}," ignis-docker-compose.yml",[578,1268,794],{"class":588},[578,1270,797],{"class":588},[429,1272,1273,1274,1277,1278,1281],{},"Lorsque vous naviguez vers votre domaine dans un navigateur web, le ",[462,1275,1276],{},"'Vault Manager'"," s'affiche. Il sera vide car aucun coffre n'est encore configuré. Nous allons installer la ",[462,1279,1280],{},"'Synch CLI'"," dans la section suivante pour synchroniser les contenus de notre coffre distant.",[433,1283],{"src":1284,"alt":1285,"style":1286},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-vault-manager-empty.webp","Interface vide du gestionnaire de coffres dans le client web Ignis","max-width: 466px; width: 100%; height: auto;",[543,1288,1290],{"id":1289},"problème-de-pare-feu","Problème de pare-feu",[429,1292,1293,1294,1297,1298,1013],{},"Par défaut, Docker insère automatiquement ses propres règles DNAT et FORWARD, qui redirigent le trafic public directement vers les conteneurs actifs. Cela contourne la chaîne standard d'Ubuntu UFW\u002Fiptables ",[575,1295,1296],{},"INPUT",". Pour bloquer le trafic public externe et garder les conteneurs privés, ajoutez manuellement les règles suivantes à ",[575,1299,1300],{},"iptables",[569,1302,1304],{"className":571,"code":1303,"language":573,"meta":424,"style":424},"# Bloquer tout le trafic public externe\nsudo iptables -I DOCKER-USER -i ext_if -j DROP \n\n# Autoriser uniquement le trafic provenant de l'IP privée de votre client Cloudflare WARP\nsudo iptables -I DOCKER-USER -i ext_if -s 100.96.0.10 -j ACCEPT\n",[575,1305,1306,1311,1340,1344,1349],{"__ignoreMap":424},[578,1307,1308],{"class":580,"line":581},[578,1309,1310],{"class":608},"# Bloquer tout le trafic public externe\n",[578,1312,1313,1316,1319,1322,1325,1328,1331,1334,1337],{"class":580,"line":599},[578,1314,1315],{"class":584},"sudo",[578,1317,1318],{"class":588}," iptables",[578,1320,1321],{"class":588}," -I",[578,1323,1324],{"class":588}," DOCKER-USER",[578,1326,1327],{"class":588}," -i",[578,1329,1330],{"class":588}," ext_if",[578,1332,1333],{"class":588}," -j",[578,1335,1336],{"class":588}," DROP",[578,1338,1339],{"class":595}," \n",[578,1341,1342],{"class":580,"line":605},[578,1343,739],{"emptyLinePlaceholder":738},[578,1345,1346],{"class":580,"line":612},[578,1347,1348],{"class":608},"# Autoriser uniquement le trafic provenant de l'IP privée de votre client Cloudflare WARP\n",[578,1350,1351,1353,1355,1357,1359,1361,1363,1366,1369,1371],{"class":580,"line":622},[578,1352,1315],{"class":584},[578,1354,1318],{"class":588},[578,1356,1321],{"class":588},[578,1358,1324],{"class":588},[578,1360,1327],{"class":588},[578,1362,1330],{"class":588},[578,1364,1365],{"class":588}," -s",[578,1367,1368],{"class":769}," 100.96.0.10",[578,1370,1333],{"class":588},[578,1372,1373],{"class":588}," ACCEPT\n",[543,1375,1377],{"id":1376},"configuration-de-la-cli-synch","Configuration de la CLI Synch",[429,1379,1380,1381,1383],{},"La ",[462,1382,979],{}," est un outil headless (sans interface graphique) qui permet de synchroniser un répertoire de coffre Obsidian directement sur des serveurs distants sans avoir à installer l'application de bureau complète.",[429,1385,1386,1387,1389,1390,1393,1394,1397,1398,1401,1402,1405,1406,464,1409,1412,1413,1416,1417,1420],{},"Compilez la ",[462,1388,979],{}," à partir de votre dépôt ",[575,1391,1392],{},"synch"," cloné. La compilation nécessite ",[462,1395,1396],{},"Node.js >= 22.5"," (car la CLI dépend de ",[575,1399,1400],{},"node:sqlite"," et d'API globales du navigateur comme ",[575,1403,1404],{},"fetch",", ",[575,1407,1408],{},"WebSocket",[575,1410,1411],{},"WebCrypto",") et ",[462,1414,1415],{},"pnpm"," (puisque le dépôt est structuré comme un espace de travail pnpm utilisant la version ",[575,1418,1419],{},"10.33.0",") :",[569,1422,1424],{"className":571,"code":1423,"language":573,"meta":424,"style":424},"# Vérifier les versions\nnode --version   # doit être >= 22.5\npnpm --version\n\n# À la racine du dépôt\npnpm install\n\n# Compiler le paquet de la CLI\npnpm -C apps\u002Fcli build\n\n# Après une compilation réussie, vous obtenez `apps\u002Fcli\u002Fdist\u002Fsynch.js`. Rendez-le exécutable et placez-le dans votre PATH\nchmod +x apps\u002Fcli\u002Fdist\u002Fsynch.js\nln -sf \"$PWD\u002Fapps\u002Fcli\u002Fdist\u002Fsynch.js\" \"$HOME\u002F.local\u002Fbin\u002Fsynch\"\n\n# Vérification\nsynch --help\n",[575,1425,1426,1431,1442,1449,1453,1458,1465,1469,1474,1487,1491,1496,1507,1536,1540,1545],{"__ignoreMap":424},[578,1427,1428],{"class":580,"line":581},[578,1429,1430],{"class":608},"# Vérifier les versions\n",[578,1432,1433,1436,1439],{"class":580,"line":599},[578,1434,1435],{"class":584},"node",[578,1437,1438],{"class":588}," --version",[578,1440,1441],{"class":608},"   # doit être >= 22.5\n",[578,1443,1444,1446],{"class":580,"line":605},[578,1445,1415],{"class":584},[578,1447,1448],{"class":588}," --version\n",[578,1450,1451],{"class":580,"line":612},[578,1452,739],{"emptyLinePlaceholder":738},[578,1454,1455],{"class":580,"line":622},[578,1456,1457],{"class":608},"# À la racine du dépôt\n",[578,1459,1460,1462],{"class":580,"line":627},[578,1461,1415],{"class":584},[578,1463,1464],{"class":588}," install\n",[578,1466,1467],{"class":580,"line":633},[578,1468,739],{"emptyLinePlaceholder":738},[578,1470,1471],{"class":580,"line":773},[578,1472,1473],{"class":608},"# Compiler le paquet de la CLI\n",[578,1475,1476,1478,1481,1484],{"class":580,"line":1133},[578,1477,1415],{"class":584},[578,1479,1480],{"class":588}," -C",[578,1482,1483],{"class":588}," apps\u002Fcli",[578,1485,1486],{"class":588}," build\n",[578,1488,1489],{"class":580,"line":1141},[578,1490,739],{"emptyLinePlaceholder":738},[578,1492,1493],{"class":580,"line":1149},[578,1494,1495],{"class":608},"# Après une compilation réussie, vous obtenez `apps\u002Fcli\u002Fdist\u002Fsynch.js`. Rendez-le exécutable et placez-le dans votre PATH\n",[578,1497,1498,1501,1504],{"class":580,"line":1157},[578,1499,1500],{"class":584},"chmod",[578,1502,1503],{"class":588}," +x",[578,1505,1506],{"class":588}," apps\u002Fcli\u002Fdist\u002Fsynch.js\n",[578,1508,1509,1512,1515,1517,1520,1523,1526,1528,1531,1534],{"class":580,"line":1165},[578,1510,1511],{"class":584},"ln",[578,1513,1514],{"class":588}," -sf",[578,1516,1105],{"class":720},[578,1518,1519],{"class":595},"$PWD",[578,1521,1522],{"class":588},"\u002Fapps\u002Fcli\u002Fdist\u002Fsynch.js",[578,1524,1525],{"class":720},"\"",[578,1527,1105],{"class":720},[578,1529,1530],{"class":595},"$HOME",[578,1532,1533],{"class":588},"\u002F.local\u002Fbin\u002Fsynch",[578,1535,1111],{"class":720},[578,1537,1538],{"class":580,"line":1173},[578,1539,739],{"emptyLinePlaceholder":738},[578,1541,1542],{"class":580,"line":1181},[578,1543,1544],{"class":608},"# Vérification\n",[578,1546,1547,1549],{"class":580,"line":1192},[578,1548,1392],{"class":584},[578,1550,1551],{"class":588}," --help\n",[429,1553,1554,1555,1558],{},"Étant donné que la Synch CLI s'exécute sur le même VPS que votre coffre distant Synch, elle peut se connecter directement au serveur API local. Si vous configurez un serveur différent, exécutez ",[575,1556,1557],{},"synch login --api-url \u003Cremote-synch-api-url>"," pour définir votre point d'accès API cible.",[429,1560,1561],{},[433,1562],{"alt":1563,"src":1564},"Exécution de la connexion Synch avec une URL d'API personnalisée dans le terminal","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynch-login-api-url-terminal.webp",[429,1566,1567,1568,1571],{},"Exécutez ",[575,1569,1570],{},"synch login"," dans votre terminal, et vous recevrez une URL d'authentification :",[429,1573,1574],{},[433,1575],{"alt":1576,"src":1577},"Sortie du terminal affichant l'URL d'authentification pour Synch CLI","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynch-login-auth-url-terminal.webp",[429,1579,1580],{},"Connectez-vous via la page web en utilisant la même adresse e-mail que celle enregistrée avec le plugin Obsidian desktop Synchrun.",[429,1582,1583],{},[433,1584],{"alt":1585,"src":1586},"Connexion web réussie pour l'autorisation Synch CLI","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynch-web-login-success.webp",[429,1588,1567,1589,1592],{},[575,1590,1591],{},"synch vault connect --vault ~\u002Fvaults\u002F\u003Cnom_du_coffre> --vault-id asadqe-7b29-4677-fsad-234asdafasd"," pour lier votre répertoire de coffre local sur le VPS au coffre distant.",[429,1594,1595,1596,1599,1600,1603,1604,1420],{},"L'ID du coffre distant se trouve dans les paramètres du plugin ",[462,1597,1598],{},"Synchrun"," en cliquant sur ",[462,1601,1602],{},"'Manage remote vaults'"," (Gérer les coffres distants). Cela affichera une page web listant vos coffres distants, chacun identifié par un GUID unique (par ex. ",[575,1605,1606],{},"123e4567-e89b-12d3-a456-426614174000",[429,1608,1609,1614],{},[433,1610],{"src":1611,"alt":1612,"style":1613},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynchrun-manage-remote-vaults.webp","Gestion des coffres distants dans le plugin Synchrun","max-width: 582px; width: 100%; height: auto;",[433,1615],{"alt":1616,"src":1617},"Recherche de l'ID unique du coffre distant dans Synchrun","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynchrun-remote-vault-id.webp",[429,1619,1620,1621,1624],{},"Saisissez le mot de passe de votre coffre lorsque vous y êtes invité pour établir la liaison. Une fois connecté, exécutez ",[575,1622,1623],{},"synch sync --vault ~\u002Fvaults\u002F\u003Cnom-du-coffre>"," pour effectuer votre première synchronisation. Ce premier lancement peut prendre un certain temps en fonction de la taille de votre coffre.",[429,1626,1627],{},[433,1628],{"alt":1629,"src":1630},"Progression de la synchronisation initiale du coffre dans Synch CLI","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynch-cli-initial-sync-progress.webp",[429,1632,1633,1634,1637],{},"Pour automatiser cela, configurez et activez un service systemd pour exécuter ",[575,1635,1636],{},"synch watch"," en continu, garantissant une synchronisation instantanée au démarrage :",[569,1639,1641],{"className":571,"code":1640,"language":573,"meta":424,"style":424},"sudo tee \u002Fetc\u002Fsystemd\u002Fsystem\u002Fsynch-watch.service \u003C\u003C'EOF'\n[Unit]\nDescription=Synch vault watcher\nAfter=network-online.target\nWants=network-online.target\n\n[Service]\nType=simple\nUser=\u003Cusername>\nExecStart=\u002Fhome\u002F\u003Cusername>\u002F.local\u002Fbin\u002Fsynch watch --vault \u002Fhome\u002F\u003Cusername>\u002Fvaults\u002F\u003Cvault-name>\nWorkingDirectory=\u002Fhome\u002F\u003Cusername>\u002Fvaults\nEnvironment=\"PATH=\u002Fhome\u002F\u003Cusername>\u002F.local\u002Fbin:\u002Fhome\u002F\u003Cusername>\u002F.cargo\u002Fbin:\u002Fusr\u002Flocal\u002Fsbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fsbin:\u002Fusr\u002Fbin:\u002Fsbin:\u002Fbin\"\nEnvironment=\"HOME=\u002Fhome\u002F\u003Cusername>\"\nRestart=always\nRestartSec=5\n\n[Install]\nWantedBy=multi-user.target\nEOF\nsudo systemctl daemon-reload\nsudo systemctl enable --now synch-watch.service\n",[575,1642,1643,1659,1664,1669,1674,1679,1683,1688,1693,1698,1703,1708,1713,1718,1723,1728,1732,1737,1742,1748,1759],{"__ignoreMap":424},[578,1644,1645,1647,1650,1653,1656],{"class":580,"line":581},[578,1646,1315],{"class":584},[578,1648,1649],{"class":588}," tee",[578,1651,1652],{"class":588}," \u002Fetc\u002Fsystemd\u002Fsystem\u002Fsynch-watch.service",[578,1654,1655],{"class":720}," \u003C\u003C",[578,1657,1658],{"class":720},"'EOF'\n",[578,1660,1661],{"class":580,"line":599},[578,1662,1663],{"class":588},"[Unit]\n",[578,1665,1666],{"class":580,"line":605},[578,1667,1668],{"class":588},"Description=Synch vault watcher\n",[578,1670,1671],{"class":580,"line":612},[578,1672,1673],{"class":588},"After=network-online.target\n",[578,1675,1676],{"class":580,"line":622},[578,1677,1678],{"class":588},"Wants=network-online.target\n",[578,1680,1681],{"class":580,"line":627},[578,1682,739],{"emptyLinePlaceholder":738},[578,1684,1685],{"class":580,"line":633},[578,1686,1687],{"class":588},"[Service]\n",[578,1689,1690],{"class":580,"line":773},[578,1691,1692],{"class":588},"Type=simple\n",[578,1694,1695],{"class":580,"line":1133},[578,1696,1697],{"class":588},"User=\u003Cusername>\n",[578,1699,1700],{"class":580,"line":1141},[578,1701,1702],{"class":588},"ExecStart=\u002Fhome\u002F\u003Cusername>\u002F.local\u002Fbin\u002Fsynch watch --vault \u002Fhome\u002F\u003Cusername>\u002Fvaults\u002F\u003Cvault-name>\n",[578,1704,1705],{"class":580,"line":1149},[578,1706,1707],{"class":588},"WorkingDirectory=\u002Fhome\u002F\u003Cusername>\u002Fvaults\n",[578,1709,1710],{"class":580,"line":1157},[578,1711,1712],{"class":588},"Environment=\"PATH=\u002Fhome\u002F\u003Cusername>\u002F.local\u002Fbin:\u002Fhome\u002F\u003Cusername>\u002F.cargo\u002Fbin:\u002Fusr\u002Flocal\u002Fsbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fsbin:\u002Fusr\u002Fbin:\u002Fsbin:\u002Fbin\"\n",[578,1714,1715],{"class":580,"line":1165},[578,1716,1717],{"class":588},"Environment=\"HOME=\u002Fhome\u002F\u003Cusername>\"\n",[578,1719,1720],{"class":580,"line":1173},[578,1721,1722],{"class":588},"Restart=always\n",[578,1724,1725],{"class":580,"line":1181},[578,1726,1727],{"class":588},"RestartSec=5\n",[578,1729,1730],{"class":580,"line":1192},[578,1731,739],{"emptyLinePlaceholder":738},[578,1733,1734],{"class":580,"line":1197},[578,1735,1736],{"class":588},"[Install]\n",[578,1738,1739],{"class":580,"line":1205},[578,1740,1741],{"class":588},"WantedBy=multi-user.target\n",[578,1743,1745],{"class":580,"line":1744},19,[578,1746,1747],{"class":720},"EOF\n",[578,1749,1751,1753,1756],{"class":580,"line":1750},20,[578,1752,1315],{"class":584},[578,1754,1755],{"class":588}," systemctl",[578,1757,1758],{"class":588}," daemon-reload\n",[578,1760,1762,1764,1766,1769,1772],{"class":580,"line":1761},21,[578,1763,1315],{"class":584},[578,1765,1755],{"class":588},[578,1767,1768],{"class":588}," enable",[578,1770,1771],{"class":588}," --now",[578,1773,1774],{"class":588}," synch-watch.service\n",[429,1776,1777,1778,1780],{},"Ouvrez ",[575,1779,1008],{}," dans votre navigateur web. Vous constaterez que l'interface utilisateur et la mise en page sont pratiquement identiques à celles de l'application de bureau :",[433,1782],{"src":1783,"alt":1784,"style":1785},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-web-interface-desktop-view.webp","Interface web Ignis affichant le coffre Obsidian sur ordinateur","max-width: 593px; width: 100%; height: auto;",[429,1787,1788],{},"En cliquant sur l'icône des paramètres, vous constaterez que presque toutes les configurations de base sont intactes, bien que vos plugins communautaires devront être réinstallés :",[433,1790],{"src":1791,"alt":1792,"style":1793},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-settings-community-plugins.webp","Paramètres des plugins de la communauté dans l'interface web Ignis","max-width: 597px; width: 100%; height: auto;",[429,1795,1796],{},"Pour tester l'installation, vous pouvez ajouter une nouvelle note via l'interface web :",[433,1798],{"src":1799,"alt":1800,"style":1793},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-create-new-note-web.webp","Création d'une nouvelle note markdown via l'interface web Ignis",[429,1802,1803,1804,693],{},"La note est immédiatement synchronisée avec votre application de bureau Obsidian. Notez que les dossiers vides n'apparaissent pas dans ",[462,1805,456],{},[433,1807],{"src":1808,"alt":1809,"style":1810},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-desktop-synced-note.webp","Nouvelle note créée synchronisée avec succès vers l'application de bureau Obsidian","max-width: 502px; width: 100%; height: auto;",[429,1812,1813,1814,1816],{},"Visualisation de ",[575,1815,1008],{}," sur un navigateur web mobile :",[429,1818,1819,1824],{},[433,1820],{"src":1821,"alt":1822,"style":1823},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-mobile-view-sidebar.webp","Navigation latérale du client web Ignis sur un appareil mobile","max-width: 269px; width: 100%; height: auto;",[433,1825],{"src":1826,"alt":1827,"style":1823},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-mobile-view-editor.webp","Éditeur de notes markdown du client web Ignis sur un appareil mobile",[429,1829,1830,1831,1833,1834,1837],{},"Lorsque vous supprimez une note dans ",[462,1832,456],{},", elle est déplacée en toute sécurité vers le dossier ",[575,1835,1836],{},"~\u002Fvaults\u002F\u003Cnom-du-coffre>\u002F.trash"," de votre coffre local.",[493,1839,1841],{"id":1840},"dernières-réflexions-sur-les-coffres-auto-hébergés","Dernières réflexions sur les coffres auto-hébergés",[429,1843,1844,1845,464,1847,1849,1850,1852],{},"Ensemble, ",[462,1846,447],{},[462,1848,456],{}," rendent votre coffre Obsidian principal disponible de manière fluide sur tous vos appareils, entièrement hébergé sur une infrastructure sous votre contrôle direct. Positionner ces services au sein d'un réseau privé ",[462,1851,476],{}," garantit que vos notes personnelles sont entièrement protégées de l'internet public.",[429,1854,1855,1857],{},[462,1856,456],{}," n'est pas destiné à remplacer complètement l'application de bureau native d'Obsidian. Il sert plutôt de client web léger et temporaire pour accéder et modifier votre coffre lorsque vous êtes loin de votre ordinateur principal. Pour l'écriture quotidienne et la gestion approfondie de vos coffres, l'application native d'Obsidian reste le choix le plus confortable.",[429,1859,1860,1861,1863],{},"Puisque Synch utilise un chiffrement de bout en bout, le mot de passe de votre coffre distant doit être extrêmement fort pour faire face aux attaques par force brute. Il est impératif de ne jamais perdre ce mot de passe : le serveur ne stocke pas la ",[462,1862,525],{}," non déchiffrée et, s'il est oublié, vos données seront totalement irrécupérables. De plus, assurez-vous que votre instance VPS, ainsi que les snapshots et sauvegardes automatisés, soient correctement sécurisés et maintenus.",[429,1865,1866],{},"Bien que l'historique des versions chiffré de Synch et les outils de récupération de fichiers supprimés couvrent la plupart des pertes accidentelles, il reste fortement recommandé de conserver une sauvegarde distincte et indépendante de votre coffre Obsidian.",[493,1868,1870],{"id":1869},"références","Références",[503,1872,1873,1880,1887],{},[506,1874,1875],{},[442,1876,1879],{"href":1877,"rel":1878},"https:\u002F\u002Fsynch.run\u002Fself-hosting-docker\u002F",[446],"Déployer Synch avec Docker Compose",[506,1881,1882],{},[442,1883,1886],{"href":1884,"rel":1885},"https:\u002F\u002Fignis.thiefling.com\u002Fdocs\u002Fserver\u002Fdeploy\u002F",[446],"Déployer Ignis avec Docker",[506,1888,1889],{},[442,1890,1893],{"href":1891,"rel":1892},"https:\u002F\u002Fsynch.run\u002Fblog\u002Fencryption-and-decryption\u002F",[446],"Comment fonctionne le chiffrement de bout en bout dans Synch ?",[1895,1896,1897],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}",{"title":424,"searchDepth":599,"depth":605,"links":1899},[1900,1909,1918,1919],{"id":495,"depth":599,"text":496,"children":1901},[1902,1906],{"id":540,"depth":605,"text":541,"children":1903},[1904,1905],{"id":545,"depth":612,"text":546},{"id":561,"depth":612,"text":562},{"id":819,"depth":605,"text":820,"children":1907},[1908],{"id":823,"depth":612,"text":824},{"id":942,"depth":599,"text":943,"children":1910},[1911],{"id":965,"depth":605,"text":966,"children":1912},[1913,1914,1915,1916,1917],{"id":993,"depth":612,"text":994},{"id":1002,"depth":612,"text":685},{"id":1049,"depth":612,"text":1050},{"id":1289,"depth":612,"text":1290},{"id":1376,"depth":612,"text":1377},{"id":1840,"depth":599,"text":1841},{"id":1869,"depth":599,"text":1870},[1921],"productivity","2026-09-15","Synchronisez vos coffres Obsidian entre vos appareils et accédez-y sur le web avec Synch et Ignis auto-hébergés via Cloudflare Zero Trust en toute sécurité.","md","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002FFR-Sync-Obsidian-Across-Devices.webp","Synchronisation sécurisée de coffres Obsidian entre plusieurs appareils avec Synch et Ignis dans un réseau privé Cloudflare Zero Trust",{"schemaOrg":1928,"robots":1933,"sitemap":1934},[1929,1931],{"@type":1930,"headline":423,"description":1923,"image":1925},"Article",{"@type":1932,"name":423,"description":1923,"image":1925},"HowTo","index, follow",{"lastmod":1935},"2026-09-16",{"title":1937,"description":1923,"ogTitle":423,"ogDescription":1923,"twitterTitle":423,"twitterDescription":1923},"Sync Obsidian auto-hébergée et sécurisée : Synch & Ignis","fr\u002Farticle\u002Fsync-obsidian-across-devices",[1940,1941,1942,1943],"Auto-hébergement","Obsidian","Synchronisation","Zero Trust",null,"hHj4q0ZL3891f1Ld3Q04a8KFMEIi9gzuLrgHZG1xpfQ",{"surround":1947,"related":5051},[1948,4132],{"id":1949,"title":701,"author":424,"body":1950,"category":4092,"date":4095,"description":4096,"extension":1924,"image":4097,"imageAlt":4098,"isPublished":738,"meta":4099,"minRead":1205,"navigation":738,"path":125,"seo":4123,"stem":4125,"tags":4126,"updatedAt":1944,"__hash__":4131},"article\u002Ffr\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues.md",{"type":426,"value":1951,"toc":4062},[1952,1955,1961,1967,1971,1974,2012,2016,2022,2060,2064,2068,2082,2089,2094,2098,2102,2117,2123,2171,2197,2201,2209,2215,2219,2222,2432,2436,2476,2482,2489,2497,2546,2552,2579,2583,2587,2614,2640,2645,2687,2695,2967,2971,3014,3019,3026,3030,3034,3058,3061,3067,3070,3074,3082,3088,3091,3097,3103,3132,3138,3144,3147,3153,3157,3160,3163,3166,3172,3175,3181,3187,3193,3198,3202,3213,3220,3226,3229,3235,3239,3246,3252,3259,3263,3270,3334,3343,3398,3401,3472,3478,3494,3500,3504,3550,3556,3559,3565,3568,3574,3578,3594,3610,3616,3714,3717,3723,3734,3783,3789,3795,3807,3823,3826,3832,3836,3843,3865,3874,3972,3983,3989,3996,4002,4005,4011,4014,4020,4024,4027,4029,4059],[429,1953,1954],{},"La fragmentation du contexte est un obstacle frustrant lorsque l'on travaille avec plusieurs agents IA. Avec des conversations dispersées dans différents outils, vous finissez par agir comme un routeur humain en copiant les conversations de Claude Code pour les coller dans la CLI de Gemini, puis en copiant de la CLI de Gemini vers Hermes Agent. Cette friction s'intensifie lorsque des collègues humains font partie de la même équipe.",[429,1956,1957],{},[433,1958],{"alt":1959,"src":1960},"L'interface utilisateur de l'espace de travail collaboratif Buzz montrant les canaux de discussion et les agents IA actifs","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-workspace-interface.webp",[429,1962,1963,1966],{},[462,1964,1965],{},"Buzz",", un espace de travail collaboratif open-source, rassemble les équipes humaines et les agents IA dans un environnement unique et unifié. Ici, les collègues humains et les agents IA partagent le même historique de tâches et de projets, se transmettant le travail de manière fluide.",[493,1968,1970],{"id":1969},"quest-ce-que-buzz-de-block-lespace-de-travail-collaboratif-pour-agents-ia","Qu'est-ce que Buzz de Block ? L'espace de travail collaboratif pour agents IA",[429,1972,1973],{},"Buzz est un espace de travail collaboratif open-source de Block (l'entreprise de Jack Dorsey) où les humains et les agents IA partagent les mêmes canaux et projets. Il propose les fonctionnalités clés suivantes :",[503,1975,1976,1982,1988,1994,2000,2006],{},[506,1977,1978,1981],{},[462,1979,1980],{},"Contexte partagé :"," Les canaux sont le lieu où collaborent humains et agents. Tout l'historique des conversations et du projet est contenu dans le canal.",[506,1983,1984,1987],{},[462,1985,1986],{},"Communication d'agent à agent :"," Les agents peuvent communiquer entre eux, même sur des machines différentes. Un agent peut @-mentionner un autre agent pour lui transmettre du travail ou faire vérifier du code.",[506,1989,1990,1993],{},[462,1991,1992],{},"Activation par mention :"," Les agents n'agissent que lorsqu'ils sont @-mentionnés, restant discrets le reste du temps. Une fois mentionné, un agent lit le contexte pertinent dans le canal et se met au travail.",[506,1995,1996,1999],{},[462,1997,1998],{},"Système d'identité unifié :"," Humains et agents partagent le même système d'identité, authentifié par des clés cryptographiques.",[506,2001,2002,2005],{},[462,2003,2004],{},"Commandes déléguées :"," Vous pouvez autoriser vos collègues humains à commander vos agents, permettant à toute l'équipe de briefer et de tirer parti des assistants numériques des uns et des autres.",[506,2007,2008,2011],{},[462,2009,2010],{},"Serveurs auto-hébergés :"," Puisque vous hébergez le serveur, vous gardez le contrôle total de vos données. Vous choisissez qui le rejoint et définissez vos propres règles de fonctionnement.",[493,2013,2015],{"id":2014},"larchitecture-cryptographique-de-buzz-basée-sur-nostr","L'architecture cryptographique de Buzz basée sur Nostr",[429,2017,2018],{},[433,2019],{"alt":2020,"src":2021},"Schéma d'architecture cryptographique basé sur Nostr de l'espace de travail collaboratif Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-nostr-cryptographic-architecture.webp",[503,2023,2024,2030,2036,2042,2048,2054],{},[506,2025,2026,2029],{},[462,2027,2028],{},"Le relais Nostr fait office de serveur :"," Les messages, flux de travail, dépôts et autres événements sont signés cryptographiquement, vérifiés et stockés sur un serveur de relais Nostr. Le protocole Nostr prend en charge nativement la communication via WebSockets et API REST.",[506,2031,2032,2035],{},[462,2033,2034],{},"Identité cryptographique unifiée :"," Humains et agents s'authentifient à l'aide de leurs propres clés cryptographiques. Cette identité reste côté client et n'est jamais stockée sur le serveur.",[506,2037,2038,2041],{},[462,2039,2040],{},"Statut d'agent de premier plan :"," Chaque agent dispose de sa propre identité, de ses adhésions aux canaux et de son journal d'audit. Les agents se connectent à l'espace de travail à l'aide du protocole de communication des agents (ACP).",[506,2043,2044,2047],{},[462,2045,2046],{},"Dépôts Git décentralisés :"," Les dépôts de code sont stockés sur un stockage objet compatible S3, tandis que les tâches, les pull requests et les revues de code sont suivis dans le journal des événements de Nostr. Par conséquent, un dépôt Git Buzz est hébergé sur le relais Nostr plutôt que sur GitHub.",[506,2049,2050,2053],{},[462,2051,2052],{},"L'application Buzz est un client Nostr :"," Buzz est indépendant du relais Nostr ; il s'agit d'une application cliente de bureau ou mobile qui se connecte à l'URL du relais.",[506,2055,2056,2059],{},[462,2057,2058],{},"Pile d'infrastructure :"," Une base de données PostgreSQL gère le stockage des événements et la recherche plein texte, Redis gère la messagerie pub\u002Fsub, et MinIO compatible S3 est utilisé pour le stockage des médias.",[493,2061,2063],{"id":2062},"comment-auto-héberger-le-relais-buzz-de-block-sur-un-vps-linux","Comment auto-héberger le relais Buzz de Block sur un VPS Linux",[538,2065,2067],{"id":2066},"_0-prérequis","0. Prérequis",[503,2069,2070,2073,2076,2079],{},[506,2071,2072],{},"Un VPS Linux",[506,2074,2075],{},"Un domaine qui pointe vers votre serveur",[506,2077,2078],{},"Docker et le plugin Docker Compose",[506,2080,2081],{},"Compte Cloudflare (plan gratuit)",[429,2083,2084,2085,2088],{},"Dans ce guide, nous ferons tourner le relais Nostr sur un VPS Ubuntu derrière un réseau privé ",[442,2086,2087],{"href":363},"Exposer Hermes Agent en privé via Cloudflare WARP",". La pile est composée de quatre services sous Docker Compose — relay, PostgreSQL, Redis et MinIO — ainsi que Caddy pour le HTTPS.",[484,2090],{"description":2091,"image":2092,"image-alt":2093,"label":489,"min-read":490,"title":2087,"to":363},"Apprenez à exposer et à accéder de manière sécurisée à votre Hermes Agent dans le monde entier à l'aide de Cloudflare WARP et Zero Trust sans ouvrir de ports de pare-feu.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002FFR-Exposing-Hermes-Agent-to-Private-Network-Using-Cloudflare-WARP.webp","Exposer Hermes Agent en toute sécurité à un réseau privé à l'aide de Cloudflare Zero Trust et d'un tunnel WARP",[538,2095,2097],{"id":2096},"_1-dns-cloudflare-et-jeton-api","1. DNS Cloudflare et jeton API",[543,2099,2101],{"id":2100},"créer-un-jeton-api-cloudflare","Créer un jeton API Cloudflare",[2103,2104,2105,2111],"ol",{},[506,2106,881,2107,2110],{},[462,2108,2109],{},"Profile"," dans le coin supérieur droit depuis le menu déroulant de l'icône de l'utilisateur.",[506,2112,2113,2114,693],{},"Cliquez sur ",[462,2115,2116],{},"API Tokens",[429,2118,2119],{},[433,2120],{"alt":2121,"src":2122},"Page de profil utilisateur Cloudflare affichant le menu de création des jetons API","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fcloudflare-profile-api-tokens.webp",[2103,2124,2125,2130,2136,2156,2161,2165,2168],{"start":605},[506,2126,2113,2127,693],{},[462,2128,2129],{},"Create Token",[506,2131,2132,2133,693],{},"Utilisez le modèle ",[462,2134,2135],{},"Edit zone DNS",[506,2137,2138,2139],{},"Configurez le modèle de la manière suivante :\n",[503,2140,2141,2147],{},[506,2142,2143,2146],{},[462,2144,2145],{},"Permissions"," : Zone — DNS — Edit",[506,2148,2149,2152,2153],{},[462,2150,2151],{},"Zone Resources"," : Include — Specific zone — ",[575,2154,2155],{},"example.com",[506,2157,2113,2158,693],{},[462,2159,2160],{},"Continue to summary",[506,2162,2113,2163,693],{},[462,2164,2129],{},[506,2166,2167],{},"Copiez le jeton généré, car il ne s'affichera plus une fois la page fermée.",[506,2169,2170],{},"Testez le jeton généré dans votre terminal pour vous assurer qu'il fonctionne correctement :",[569,2172,2174],{"className":571,"code":2173,"language":573,"meta":424,"style":424},"curl \"https:\u002F\u002Fapi.cloudflare.com\u002Fclient\u002Fv4\u002Fuser\u002Ftokens\u002Fverify\" -H \"Authorization: Bearer YOUR_TOKEN_HERE\"\n",[575,2175,2176],{"__ignoreMap":424},[578,2177,2178,2180,2182,2185,2187,2190,2192,2195],{"class":580,"line":581},[578,2179,803],{"class":584},[578,2181,1105],{"class":720},[578,2183,2184],{"class":588},"https:\u002F\u002Fapi.cloudflare.com\u002Fclient\u002Fv4\u002Fuser\u002Ftokens\u002Fverify",[578,2186,1525],{"class":720},[578,2188,2189],{"class":588}," -H",[578,2191,1105],{"class":720},[578,2193,2194],{"class":588},"Authorization: Bearer YOUR_TOKEN_HERE",[578,2196,1111],{"class":720},[543,2198,2200],{"id":2199},"enregistrements-dns","Enregistrements DNS",[503,2202,2203],{},[506,2204,2205,2206,2208],{},"Créez un enregistrement A et configurez-le sur ",[462,2207,552],{}," (DNS only).",[429,2210,2211],{},[433,2212],{"alt":2213,"src":2214},"Configuration d'un enregistrement DNS A pour le domaine Buzz dans le tableau de bord Cloudflare avec statut de proxy défini sur DNS uniquement","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fcloudflare-dns-a-record-configuration.webp",[538,2216,2218],{"id":2217},"_2-installer-docker-sur-ubuntu","2. Installer Docker sur Ubuntu",[429,2220,2221],{},"Exécutez les commandes suivantes pour installer Docker sur Ubuntu :",[569,2223,2225],{"className":571,"code":2224,"language":573,"meta":424,"style":424},"# Add Docker's official GPG key and set up the Docker repository\ncurl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fusr\u002Fshare\u002Fkeyrings\u002Fdocker-archive-keyring.gpg\n\n# Add the official Docker repository\necho \"deb [arch=amd64 signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fdocker-archive-keyring.gpg] https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu $(lsb_release -cs) stable\" | sudo tee \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list > \u002Fdev\u002Fnull\n\n# Update package list\nsudo apt update\n\n# Install Docker Engine, Docker Community Edition, and containerd runtime\nsudo apt install docker-ce docker-ce-cli containerd.io -y\n\n# Start automatically when the system boots\nsudo systemctl enable docker\n\n# Verify docker is installed\ndocker --version\n\nsudo apt install -y docker-compose-plugin\n\n# Verify the compose plugin is installed\ndocker compose version\n\n",[575,2226,2227,2232,2260,2264,2269,2311,2315,2320,2330,2334,2339,2360,2364,2369,2380,2384,2389,2395,2399,2413,2417,2422],{"__ignoreMap":424},[578,2228,2229],{"class":580,"line":581},[578,2230,2231],{"class":608},"# Add Docker's official GPG key and set up the Docker repository\n",[578,2233,2234,2236,2239,2242,2245,2248,2251,2254,2257],{"class":580,"line":599},[578,2235,803],{"class":584},[578,2237,2238],{"class":588}," -fsSL",[578,2240,2241],{"class":588}," https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg",[578,2243,2244],{"class":720}," |",[578,2246,2247],{"class":584}," sudo",[578,2249,2250],{"class":588}," gpg",[578,2252,2253],{"class":588}," --dearmor",[578,2255,2256],{"class":588}," -o",[578,2258,2259],{"class":588}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fdocker-archive-keyring.gpg\n",[578,2261,2262],{"class":580,"line":605},[578,2263,739],{"emptyLinePlaceholder":738},[578,2265,2266],{"class":580,"line":612},[578,2267,2268],{"class":608},"# Add the official Docker repository\n",[578,2270,2271,2274,2276,2279,2282,2285,2288,2291,2294,2296,2298,2300,2302,2305,2308],{"class":580,"line":622},[578,2272,2273],{"class":615},"echo",[578,2275,1105],{"class":720},[578,2277,2278],{"class":588},"deb [arch=amd64 signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fdocker-archive-keyring.gpg] https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu ",[578,2280,2281],{"class":720},"$(",[578,2283,2284],{"class":584},"lsb_release",[578,2286,2287],{"class":588}," -cs",[578,2289,2290],{"class":720},")",[578,2292,2293],{"class":588}," stable",[578,2295,1525],{"class":720},[578,2297,2244],{"class":720},[578,2299,2247],{"class":584},[578,2301,1649],{"class":588},[578,2303,2304],{"class":588}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[578,2306,2307],{"class":720}," >",[578,2309,2310],{"class":588}," \u002Fdev\u002Fnull\n",[578,2312,2313],{"class":580,"line":627},[578,2314,739],{"emptyLinePlaceholder":738},[578,2316,2317],{"class":580,"line":633},[578,2318,2319],{"class":608},"# Update package list\n",[578,2321,2322,2324,2327],{"class":580,"line":773},[578,2323,1315],{"class":584},[578,2325,2326],{"class":588}," apt",[578,2328,2329],{"class":588}," update\n",[578,2331,2332],{"class":580,"line":1133},[578,2333,739],{"emptyLinePlaceholder":738},[578,2335,2336],{"class":580,"line":1141},[578,2337,2338],{"class":608},"# Install Docker Engine, Docker Community Edition, and containerd runtime\n",[578,2340,2341,2343,2345,2348,2351,2354,2357],{"class":580,"line":1149},[578,2342,1315],{"class":584},[578,2344,2326],{"class":588},[578,2346,2347],{"class":588}," install",[578,2349,2350],{"class":588}," docker-ce",[578,2352,2353],{"class":588}," docker-ce-cli",[578,2355,2356],{"class":588}," containerd.io",[578,2358,2359],{"class":588}," -y\n",[578,2361,2362],{"class":580,"line":1157},[578,2363,739],{"emptyLinePlaceholder":738},[578,2365,2366],{"class":580,"line":1165},[578,2367,2368],{"class":608},"# Start automatically when the system boots\n",[578,2370,2371,2373,2375,2377],{"class":580,"line":1173},[578,2372,1315],{"class":584},[578,2374,1755],{"class":588},[578,2376,1768],{"class":588},[578,2378,2379],{"class":588}," docker\n",[578,2381,2382],{"class":580,"line":1181},[578,2383,739],{"emptyLinePlaceholder":738},[578,2385,2386],{"class":580,"line":1192},[578,2387,2388],{"class":608},"# Verify docker is installed\n",[578,2390,2391,2393],{"class":580,"line":1197},[578,2392,788],{"class":584},[578,2394,1448],{"class":588},[578,2396,2397],{"class":580,"line":1205},[578,2398,739],{"emptyLinePlaceholder":738},[578,2400,2401,2403,2405,2407,2410],{"class":580,"line":1744},[578,2402,1315],{"class":584},[578,2404,2326],{"class":588},[578,2406,2347],{"class":588},[578,2408,2409],{"class":588}," -y",[578,2411,2412],{"class":588}," docker-compose-plugin\n",[578,2414,2415],{"class":580,"line":1750},[578,2416,739],{"emptyLinePlaceholder":738},[578,2418,2419],{"class":580,"line":1761},[578,2420,2421],{"class":608},"# Verify the compose plugin is installed\n",[578,2423,2425,2427,2429],{"class":580,"line":2424},22,[578,2426,788],{"class":584},[578,2428,791],{"class":588},[578,2430,2431],{"class":588}," version\n",[538,2433,2435],{"id":2434},"_3-cloner-et-configurer","3. Cloner et configurer",[569,2437,2439],{"className":571,"code":2438,"language":573,"meta":424,"style":424},"git clone https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz.git\n\ncd buzz\u002Fdeploy\u002Fcompose\ncp .env.example .env\nnano .env\n",[575,2440,2441,2450,2454,2461,2469],{"__ignoreMap":424},[578,2442,2443,2445,2447],{"class":580,"line":581},[578,2444,585],{"class":584},[578,2446,589],{"class":588},[578,2448,2449],{"class":588}," https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz.git\n",[578,2451,2452],{"class":580,"line":599},[578,2453,739],{"emptyLinePlaceholder":738},[578,2455,2456,2458],{"class":580,"line":605},[578,2457,616],{"class":615},[578,2459,2460],{"class":588}," buzz\u002Fdeploy\u002Fcompose\n",[578,2462,2463,2465,2467],{"class":580,"line":612},[578,2464,636],{"class":584},[578,2466,639],{"class":588},[578,2468,642],{"class":588},[578,2470,2471,2474],{"class":580,"line":622},[578,2472,2473],{"class":584},"nano",[578,2475,642],{"class":588},[429,2477,2478,2479,2481],{},"Modifiez ",[575,2480,649],{}," en groupes :",[503,2483,2484],{},[506,2485,2486],{},[462,2487,2488],{},"Domaine :",[569,2490,2495],{"className":2491,"code":2493,"language":2494},[2492],"language-text","BUZZ_DOMAIN=buzz.pafor.me\nRELAY_URL=wss:\u002F\u002Fbuzz.pafor.me\nBUZZ_PAIRING_RELAY_URL=wss:\u002F\u002Fbuzz.pafor.me\u002Fpair\nBUZZ_MEDIA_BASE_URL=https:\u002F\u002Fbuzz.pafor.me\u002Fmedia\nBUZZ_MEDIA_SERVER_DOMAIN=buzz.pafor.me\nBUZZ_CORS_ORIGINS=https:\u002F\u002Fbuzz.pafor.me\n","text",[575,2496,2493],{"__ignoreMap":424},[503,2498,2499,2509],{},[506,2500,2501,2504,2505,2508],{},[462,2502,2503],{},"Clé du propriétaire :"," ",[575,2506,2507],{},"RELAY_OWNER_PUBKEY"," nécessite votre clé publique hexadécimale de 64 caractères. Générez d'abord une identité dans l'application de bureau ('Create a new identity key' → copiez votre identifiant public, qui est au format npub), puis convertissez-le en hexadécimal.",[506,2510,2511,2514],{},[462,2512,2513],{},"Secrets :",[503,2515,2516,2526,2540],{},[506,2517,2518,2519,2522,2523,2525],{},"Générez des secrets à l'aide de cet ",[442,2520,2521],{"href":669},"outil en ligne"," ou avec ",[575,2524,674],{}," (exécutez-le sept fois)",[506,2527,2528,2529,2532,2533,1405,2536,2539],{},"Remplacez chaque espace réservé ",[575,2530,2531],{},"CHANGE_ME"," : ",[575,2534,2535],{},"BUZZ_RELAY_PRIVATE_KEY",[575,2537,2538],{},"BUZZ_GIT_HOOK_HMAC_SECRET",", les mots de passe Postgres\u002FRedis\u002FTypesense, et les clés d'accès\u002Fsecrètes S3.",[506,2541,2542,2543,693],{},"Les espaces réservés restants sont la cause la plus fréquente des boucles de redémarrage des conteneurs ; vérifiez les vôtres avec ",[575,2544,2545],{},"grep CHANGE_ME .env",[569,2547,2550],{"className":2548,"code":2549,"language":2494},[2492],"    BUZZ_RELAY_PRIVATE_KEY=CHANGE_ME_64_HEX_PRIVATE_KEY\n    BUZZ_GIT_HOOK_HMAC_SECRET=CHANGE_ME_RANDOM_64_HEX\n    POSTGRES_PASSWORD=CHANGE_ME_RANDOM_PASSWORD\n    REDIS_PASSWORD=CHANGE_ME_RANDOM_PASSWORD\n    TYPESENSE_API_KEY=CHANGE_ME_RANDOM_API_KEY\n    BUZZ_S3_ACCESS_KEY=CHANGE_ME_RANDOM_ACCESS_KEY\n    BUZZ_S3_SECRET_KEY=CHANGE_ME_RANDOM_SECRET_KEY\n",[575,2551,2549],{"__ignoreMap":424},[503,2553,2554],{},[506,2555,2556,2559],{},[462,2557,2558],{},"Autres :",[503,2560,2561,2567],{},[506,2562,1005,2563,2566],{},[575,2564,2565],{},"CLOUDFLARE_API_TOKEN"," comme variable d'environnement et attribuez-lui le jeton API généré précédemment. C'est obligatoire pour Caddy.",[506,2568,2569,2570,1405,2572,2575,2576,693],{},"Buzz est livré avec des valeurs par défaut ouvertes — toute personne connaissant l'URL de votre relais peut s'authentifier et s'y joindre. Définissez ",[575,2571,2507],{},[575,2573,2574],{},"BUZZ_REQUIRE_RELAY_MEMBERSHIP=true",", et ",[575,2577,2578],{},"BUZZ_REQUIRE_AUTH_TOKEN=true",[538,2580,2582],{"id":2581},"_4-activer-le-https-with-caddy","4. Activer le HTTPS with Caddy",[543,2584,2586],{"id":2585},"créer-une-image-caddy-personnalisée-avec-le-module-dns-cloudflare","Créer une image Caddy personnalisée avec le module DNS Cloudflare",[503,2588,2589,2600,2611],{},[506,2590,2591,2592,2595,2596,2599],{},"Nous configurons DNS-01 avec Cloudflare pour Caddy. DNS-01 fonctionne en demandant au plugin d'écrire un enregistrement TXT ",[575,2593,2594],{},"_acme-challenge.buzz.pafor.me"," sur le ",[462,2597,2598],{},"DNS public"," ;",[506,2601,2602,2603,2606,2607,2610],{},"Let's Encrypt consulte ensuite l'enregistrement depuis l'internet public pour vérifier le contrôle du domaine. Cela signifie que ",[575,2604,2605],{},"pafor.me"," doit être une zone publique dans votre compte Cloudflare — et non un simple nom d'hôte privé qui n'existe que dans le DNS privé Zero Trust \u002F WARP. Si ",[575,2608,2609],{},"buzz.pafor.me"," n'est résolu que de manière privée et qu'il n'y a pas de zone publique, DNS-01 échouera, ce qui nécessitera une approche différente.",[506,2612,2613],{},"Ajoutez ce qui suit au Caddyfile :",[569,2615,2617],{"className":1060,"code":2616,"language":1062,"meta":424,"style":424},"{\n  acme_dns cloudflare {env.CLOUDFLARE_API_TOKEN}\n}\n",[575,2618,2619,2623,2636],{"__ignoreMap":424},[578,2620,2621],{"class":580,"line":581},[578,2622,721],{"class":720},[578,2624,2625,2628,2631,2634],{"class":580,"line":599},[578,2626,2627],{"class":588},"  acme_dns cloudflare",[578,2629,2630],{"class":720}," {",[578,2632,2633],{"class":588},"env.CLOUDFLARE_API_TOKEN",[578,2635,729],{"class":720},[578,2637,2638],{"class":580,"line":605},[578,2639,729],{"class":720},[503,2641,2642],{},[506,2643,2644],{},"Créez un Dockerfile.caddy avec le contenu suivant, requis par compose.caddy.yml :",[569,2646,2648],{"className":1060,"code":2647,"language":1062,"meta":424,"style":424},"FROM caddy:2-builder AS builder\n\nRUN xcaddy build \\\n    --with github.com\u002Fcaddy-dns\u002Fcloudflare\n\nFROM caddy:2-alpine\n\nCOPY --from=builder \u002Fusr\u002Fbin\u002Fcaddy \u002Fusr\u002Fbin\u002Fcaddy\n",[575,2649,2650,2655,2659,2664,2669,2673,2678,2682],{"__ignoreMap":424},[578,2651,2652],{"class":580,"line":581},[578,2653,2654],{"class":588},"FROM caddy:2-builder AS builder\n",[578,2656,2657],{"class":580,"line":599},[578,2658,739],{"emptyLinePlaceholder":738},[578,2660,2661],{"class":580,"line":605},[578,2662,2663],{"class":588},"RUN xcaddy build \\\n",[578,2665,2666],{"class":580,"line":612},[578,2667,2668],{"class":588},"    --with github.com\u002Fcaddy-dns\u002Fcloudflare\n",[578,2670,2671],{"class":580,"line":622},[578,2672,739],{"emptyLinePlaceholder":738},[578,2674,2675],{"class":580,"line":627},[578,2676,2677],{"class":588},"FROM caddy:2-alpine\n",[578,2679,2680],{"class":580,"line":633},[578,2681,739],{"emptyLinePlaceholder":738},[578,2683,2684],{"class":580,"line":773},[578,2685,2686],{"class":588},"COPY --from=builder \u002Fusr\u002Fbin\u002Fcaddy \u002Fusr\u002Fbin\u002Fcaddy\n",[503,2688,2689],{},[506,2690,2478,2691,2694],{},[575,2692,2693],{},"compose.caddy.yml"," pour utiliser l'image avec le module Cloudflare et passer le jeton API Cloudflare :",[569,2696,2698],{"className":1060,"code":2697,"language":1062,"meta":424,"style":424},"services:\n  relay:\n    ports: !reset []\n\n  caddy:\n    build:\n      context: .\n      dockerfile: Dockerfile.caddy\n    image: buzz-caddy:cloudflare\n    depends_on:\n      relay:\n        condition: service_healthy\n    environment:\n      BUZZ_DOMAIN: ${BUZZ_DOMAIN:?set BUZZ_DOMAIN}\n      CLOUDFLARE_API_TOKEN: ${CLOUDFLARE_API_TOKEN:?set CLOUDFLARE_API_TOKEN}\n    ports:\n      - \"${CADDY_HTTP_PORT:-80}:80\"\n      - \"${CADDY_HTTPS_PORT:-443}:443\"\n    volumes:\n      - .\u002FCaddyfile:\u002Fetc\u002Fcaddy\u002FCaddyfile:ro\n      - buzz-caddy-data:\u002Fdata\n      - buzz-caddy-config:\u002Fconfig\n    restart: unless-stopped\n    networks:\n      - buzz-net\n\nvolumes:\n  buzz-caddy-data:\n    labels:\n      com.buzz.volume: caddy-data\n  buzz-caddy-config:\n    labels:\n      com.buzz.volume: caddy-config\n",[575,2699,2700,2706,2713,2726,2730,2737,2744,2754,2764,2773,2780,2787,2797,2803,2813,2823,2829,2840,2851,2857,2864,2871,2878,2887,2895,2903,2908,2915,2923,2931,2942,2950,2957],{"__ignoreMap":424},[578,2701,2702,2704],{"class":580,"line":581},[578,2703,1070],{"class":1069},[578,2705,1073],{"class":720},[578,2707,2708,2711],{"class":580,"line":599},[578,2709,2710],{"class":1069},"  relay",[578,2712,1073],{"class":720},[578,2714,2715,2717,2719,2723],{"class":580,"line":605},[578,2716,1095],{"class":1069},[578,2718,766],{"class":720},[578,2720,2722],{"class":2721},"spNyl"," !reset",[578,2724,2725],{"class":720}," []\n",[578,2727,2728],{"class":580,"line":612},[578,2729,739],{"emptyLinePlaceholder":738},[578,2731,2732,2735],{"class":580,"line":622},[578,2733,2734],{"class":1069},"  caddy",[578,2736,1073],{"class":720},[578,2738,2739,2742],{"class":580,"line":627},[578,2740,2741],{"class":1069},"    build",[578,2743,1073],{"class":720},[578,2745,2746,2749,2751],{"class":580,"line":633},[578,2747,2748],{"class":1069},"      context",[578,2750,766],{"class":720},[578,2752,2753],{"class":769}," .\n",[578,2755,2756,2759,2761],{"class":580,"line":773},[578,2757,2758],{"class":1069},"      dockerfile",[578,2760,766],{"class":720},[578,2762,2763],{"class":588}," Dockerfile.caddy\n",[578,2765,2766,2768,2770],{"class":580,"line":1133},[578,2767,1085],{"class":1069},[578,2769,766],{"class":720},[578,2771,2772],{"class":588}," buzz-caddy:cloudflare\n",[578,2774,2775,2778],{"class":580,"line":1141},[578,2776,2777],{"class":1069},"    depends_on",[578,2779,1073],{"class":720},[578,2781,2782,2785],{"class":580,"line":1149},[578,2783,2784],{"class":1069},"      relay",[578,2786,1073],{"class":720},[578,2788,2789,2792,2794],{"class":580,"line":1157},[578,2790,2791],{"class":1069},"        condition",[578,2793,766],{"class":720},[578,2795,2796],{"class":588}," service_healthy\n",[578,2798,2799,2801],{"class":580,"line":1165},[578,2800,1116],{"class":1069},[578,2802,1073],{"class":720},[578,2804,2805,2808,2810],{"class":580,"line":1173},[578,2806,2807],{"class":1069},"      BUZZ_DOMAIN",[578,2809,766],{"class":720},[578,2811,2812],{"class":588}," ${BUZZ_DOMAIN:?set BUZZ_DOMAIN}\n",[578,2814,2815,2818,2820],{"class":580,"line":1181},[578,2816,2817],{"class":1069},"      CLOUDFLARE_API_TOKEN",[578,2819,766],{"class":720},[578,2821,2822],{"class":588}," ${CLOUDFLARE_API_TOKEN:?set CLOUDFLARE_API_TOKEN}\n",[578,2824,2825,2827],{"class":580,"line":1192},[578,2826,1095],{"class":1069},[578,2828,1073],{"class":720},[578,2830,2831,2833,2835,2838],{"class":580,"line":1197},[578,2832,1102],{"class":720},[578,2834,1105],{"class":720},[578,2836,2837],{"class":588},"${CADDY_HTTP_PORT:-80}:80",[578,2839,1111],{"class":720},[578,2841,2842,2844,2846,2849],{"class":580,"line":1205},[578,2843,1102],{"class":720},[578,2845,1105],{"class":720},[578,2847,2848],{"class":588},"${CADDY_HTTPS_PORT:-443}:443",[578,2850,1111],{"class":720},[578,2852,2853,2855],{"class":580,"line":1744},[578,2854,1152],{"class":1069},[578,2856,1073],{"class":720},[578,2858,2859,2861],{"class":580,"line":1750},[578,2860,1102],{"class":720},[578,2862,2863],{"class":588}," .\u002FCaddyfile:\u002Fetc\u002Fcaddy\u002FCaddyfile:ro\n",[578,2865,2866,2868],{"class":580,"line":1761},[578,2867,1102],{"class":720},[578,2869,2870],{"class":588}," buzz-caddy-data:\u002Fdata\n",[578,2872,2873,2875],{"class":580,"line":2424},[578,2874,1102],{"class":720},[578,2876,2877],{"class":588}," buzz-caddy-config:\u002Fconfig\n",[578,2879,2881,2883,2885],{"class":580,"line":2880},23,[578,2882,1184],{"class":1069},[578,2884,766],{"class":720},[578,2886,1189],{"class":588},[578,2888,2890,2893],{"class":580,"line":2889},24,[578,2891,2892],{"class":1069},"    networks",[578,2894,1073],{"class":720},[578,2896,2898,2900],{"class":580,"line":2897},25,[578,2899,1102],{"class":720},[578,2901,2902],{"class":588}," buzz-net\n",[578,2904,2906],{"class":580,"line":2905},26,[578,2907,739],{"emptyLinePlaceholder":738},[578,2909,2911,2913],{"class":580,"line":2910},27,[578,2912,1200],{"class":1069},[578,2914,1073],{"class":720},[578,2916,2918,2921],{"class":580,"line":2917},28,[578,2919,2920],{"class":1069},"  buzz-caddy-data",[578,2922,1073],{"class":720},[578,2924,2926,2929],{"class":580,"line":2925},29,[578,2927,2928],{"class":1069},"    labels",[578,2930,1073],{"class":720},[578,2932,2934,2937,2939],{"class":580,"line":2933},30,[578,2935,2936],{"class":1069},"      com.buzz.volume",[578,2938,766],{"class":720},[578,2940,2941],{"class":588}," caddy-data\n",[578,2943,2945,2948],{"class":580,"line":2944},31,[578,2946,2947],{"class":1069},"  buzz-caddy-config",[578,2949,1073],{"class":720},[578,2951,2953,2955],{"class":580,"line":2952},32,[578,2954,2928],{"class":1069},[578,2956,1073],{"class":720},[578,2958,2960,2962,2964],{"class":580,"line":2959},33,[578,2961,2936],{"class":1069},[578,2963,766],{"class":720},[578,2965,2966],{"class":588}," caddy-config\n",[543,2968,2970],{"id":2969},"démarrer-les-conteneurs-docker","Démarrer les conteneurs Docker",[569,2972,2974],{"className":571,"code":2973,"language":573,"meta":424,"style":424},"docker compose -f compose.yml -f compose.caddy.yml up -d\n\n#Check the Docker status\ndocker compose ps\n",[575,2975,2976,2996,3000,3005],{"__ignoreMap":424},[578,2977,2978,2980,2982,2984,2987,2989,2992,2994],{"class":580,"line":581},[578,2979,788],{"class":584},[578,2981,791],{"class":588},[578,2983,1263],{"class":588},[578,2985,2986],{"class":588}," compose.yml",[578,2988,1263],{"class":588},[578,2990,2991],{"class":588}," compose.caddy.yml",[578,2993,794],{"class":588},[578,2995,797],{"class":588},[578,2997,2998],{"class":580,"line":599},[578,2999,739],{"emptyLinePlaceholder":738},[578,3001,3002],{"class":580,"line":605},[578,3003,3004],{"class":608},"#Check the Docker status\n",[578,3006,3007,3009,3011],{"class":580,"line":612},[578,3008,788],{"class":584},[578,3010,791],{"class":588},[578,3012,3013],{"class":588}," ps\n",[433,3015],{"src":3016,"alt":3017,"style":3018},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fdocker-compose-ps-status-terminal.webp","Fenêtre de terminal affichant les conteneurs en cours d'exécution pour les services Buzz via docker compose ps","max-width: 700px; width: 100%; height: auto;",[429,3020,3021,3022,3025],{},"Ouvrez votre navigateur web et accédez à ",[575,3023,3024],{},"http:\u002F\u002Fbuzz.pafor.me"," pour vérifier que le relais fonctionne.",[433,3027],{"src":3028,"alt":3029,"style":931},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-relay-running-browser-verification.webp","Vérification dans le navigateur montrant la réponse réussie du relais Buzz de Block auto-hébergé",[538,3031,3033],{"id":3032},"étape-5-sauvegarder-dès-le-premier-jour","Étape 5 : Sauvegarder dès le premier jour",[569,3035,3037],{"className":571,"code":3036,"language":573,"meta":424,"style":424},"mkdir -p \u002Fbuzz_backups\ncrontab -e\n",[575,3038,3039,3050],{"__ignoreMap":424},[578,3040,3041,3044,3047],{"class":580,"line":581},[578,3042,3043],{"class":584},"mkdir",[578,3045,3046],{"class":588}," -p",[578,3048,3049],{"class":588}," \u002Fbuzz_backups\n",[578,3051,3052,3055],{"class":580,"line":599},[578,3053,3054],{"class":584},"crontab",[578,3056,3057],{"class":588}," -e\n",[429,3059,3060],{},"Ajouter une tâche cron nocturne de sauvegarde de la base de données :",[569,3062,3065],{"className":3063,"code":3064,"language":2494},[2492],"0 3 * * * cd \u002Fhome\u002F\u003Cuser>\u002Fbuzz\u002Fdeploy\u002Fcompose && docker compose exec -T postgres pg_dump -U buzz buzz > \u002Fbuzz_backups\u002Fbuzz-$(date +\\%Y\\%m\\%d).sql\n",[575,3066,3064],{"__ignoreMap":424},[429,3068,3069],{},"Note : Traitez BUZZ_RELAY_PRIVATE_KEY comme permanente. Les événements signés par celle-ci échoueront à la vérification si la clé change ; une base de données restaurée associée à une nouvelle clé n'est pas traitée comme le même relais.",[493,3071,3073],{"id":3072},"configuration-du-client-de-bureau-buzz-et-des-identités-nostr","Configuration du client de bureau Buzz et des identités Nostr",[429,3075,3076,3077,3081],{},"Téléchargez l'application de bureau Buzz depuis ",[442,3078,3079],{"href":3079,"rel":3080},"https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz\u002Freleases",[446]," et lancez-la. Remplissez les détails du profil jusqu'à atteindre la page \"Join or create a community\".",[429,3083,3084],{},[433,3085],{"alt":3086,"src":3087},"Écran de configuration initiale du client de bureau Buzz pour rejoindre ou créer une communauté","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-setup-community.webp",[429,3089,3090],{},"Cliquez sur \"Join a community\" et copiez votre clé publique.",[429,3092,3093],{},[433,3094],{"alt":3095,"src":3096},"Affichage du client Buzz montrant l'identité de clé publique avant de rejoindre la communauté","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-join-community-public-key.webp",[429,3098,3099,3100,3102],{},"Exécutez la commande suivante sur le ",[462,3101,470],{}," pour vous ajouter en tant que premier membre :",[569,3104,3106],{"className":571,"code":3105,"language":573,"meta":424,"style":424},"docker compose exec relay buzz-admin add-member --pubkey npub1yourkeyhere\n",[575,3107,3108],{"__ignoreMap":424},[578,3109,3110,3112,3114,3117,3120,3123,3126,3129],{"class":580,"line":581},[578,3111,788],{"class":584},[578,3113,791],{"class":588},[578,3115,3116],{"class":588}," exec",[578,3118,3119],{"class":588}," relay",[578,3121,3122],{"class":588}," buzz-admin",[578,3124,3125],{"class":588}," add-member",[578,3127,3128],{"class":588}," --pubkey",[578,3130,3131],{"class":588}," npub1yourkeyhere\n",[429,3133,1005,3134,3137],{},[575,3135,3136],{},"wss:\u002F\u002Fbuzz.pafor.me"," comme URL de communauté et cliquez sur \"Next\".",[429,3139,3140],{},[433,3141],{"alt":3142,"src":3143},"Saisie de l'URL du relais communautaire auto-hébergé dans l'application de bureau Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-input-community-url.webp",[429,3145,3146],{},"Saisissez un nom et cliquez sur le bouton Next.",[429,3148,3149],{},[433,3150],{"alt":3151,"src":3152},"Écran de configuration du profil dans l'application Buzz pour saisir le nom d'affichage","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-profile-name-input.webp",[538,3154,3156],{"id":3155},"canaux-et-agents","Canaux et Agents",[429,3158,3159],{},"Les canaux sont des groupes de tâches ou de projets. Créez un canal par tâche ou projet et invitez-y les humains et les agents.",[429,3161,3162],{},"Tout ce qui se trouve dans un canal est partagé automatiquement, éliminant ainsi le besoin de briefer chaque membre individuellement. Chaque agent peut être mentionné à l'aide de @ et lit les messages pertinents. De plus, les agents peuvent se @-mentionner entre eux.",[429,3164,3165],{},"Envoyons un message privé (DM) à un agent préconfiguré",[429,3167,3168],{},[433,3169],{"alt":3170,"src":3171},"Envoi d'un message direct à un agent IA dans le client de bureau collaboratif Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-dm-agent.webp",[429,3173,3174],{},"Créons un canal et ajoutons-y des agents",[429,3176,3177],{},[433,3178],{"alt":3179,"src":3180},"Création d'un nouveau canal de tâche ou de projet dans l'application de bureau Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-create-channel-dialog.webp",[429,3182,3183],{},[433,3184],{"alt":3185,"src":3186},"Ajout de membres humains et d'agents IA au canal nouvellement créé","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-add-agents-to-channel.webp",[429,3188,3189],{},[433,3190],{"alt":3191,"src":3192},"Vue du canal actif affichant l'historique des discussions consolidé et les tâches du projet","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-channel-view.webp",[433,3194],{"src":3195,"alt":3196,"style":3197},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-channel-active-agents.webp","Vue détaillée des agents IA actifs intégrés dans le canal du projet collaboratif","max-width: 367px; width: 100%; height: auto;",[538,3199,3201],{"id":3200},"activer-les-environnements-dexécution-runtimes-dagents","Activer les environnements d'exécution (runtimes) d'agents",[429,3203,3204,3205,3208,3209,3212],{},"Les runtimes prédéfinis s'appuient sur l'auto-découverte qui détecte les binaires de lancement (par exemple ",[575,3206,3207],{},"hermes-acp",") dans les répertoires standards comme ",[575,3210,3211],{},"~\u002F.local\u002Fbin",". Si un outil a été installé dans un emplacement non standard, Buzz ne pourra pas le résoudre.",[429,3214,3215,3216,3219],{},"Pour Kimi Code, l'identifiant de l'agent est kimi, et Buzz recherche son binaire dans ",[575,3217,3218],{},"~\u002F.local\u002Fbin\u002Fkimi",". Un lien symbolique fera l'affaire :",[569,3221,3224],{"className":3222,"code":3223,"language":2494},[2492],"ln -s kimi-cli \u002FUsers\u002F\u003Cuser>\u002F.local\u002Fbin\u002Fkimi\n",[575,3225,3223],{"__ignoreMap":424},[429,3227,3228],{},"Kimi Code apparaît désormais sous les environnements d'exécution des agents.",[429,3230,3231],{},[433,3232],{"alt":3233,"src":3234},"Paramètres de l'application Buzz affichant les runtimes d'agents IA configurés, y compris Kimi","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-settings-agent-runtimes-list.webp",[538,3236,3238],{"id":3237},"projets-et-dépôts","Projets et Dépôts",[429,3240,3241,3242,3245],{},"Activez d'abord la fonctionnalité '",[462,3243,3244],{},"Projects","' dans Settings → Experiments :",[429,3247,3248],{},[433,3249],{"alt":3250,"src":3251},"Activation de la fonctionnalité expérimentale Projects dans l'onglet des paramètres de Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-settings-experiments-projects.webp",[429,3253,3254,3255,3258],{},"Actuellement, un projet doit être créé à l'aide de ",[575,3256,3257],{},"buzz-cli"," (bien que la création directe de projets à partir de l'interface utilisateur soit prévue pour une version ultérieure).",[543,3260,3262],{"id":3261},"installer-buzz-cli","Installer buzz-cli",[429,3264,3265,3266,2595,3268,1013],{},"Exécutez les commandes suivantes pour installer ",[575,3267,3257],{},[462,3269,470],{},[569,3271,3273],{"className":571,"code":3272,"language":573,"meta":424,"style":424},"sudo apt install cargo\ncd ~\u002Fbuzz\ncargo install --path crates\u002Fbuzz-cli\necho 'export PATH=\"$HOME\u002F.cargo\u002Fbin:$PATH\"' >> ~\u002F.bashrc && source ~\u002F.bashrc\n",[575,3274,3275,3286,3293,3306],{"__ignoreMap":424},[578,3276,3277,3279,3281,3283],{"class":580,"line":581},[578,3278,1315],{"class":584},[578,3280,2326],{"class":588},[578,3282,2347],{"class":588},[578,3284,3285],{"class":588}," cargo\n",[578,3287,3288,3290],{"class":580,"line":599},[578,3289,616],{"class":615},[578,3291,3292],{"class":588}," ~\u002Fbuzz\n",[578,3294,3295,3298,3300,3303],{"class":580,"line":605},[578,3296,3297],{"class":584},"cargo",[578,3299,2347],{"class":588},[578,3301,3302],{"class":588}," --path",[578,3304,3305],{"class":588}," crates\u002Fbuzz-cli\n",[578,3307,3308,3310,3313,3316,3319,3322,3325,3328,3331],{"class":580,"line":612},[578,3309,2273],{"class":615},[578,3311,3312],{"class":720}," '",[578,3314,3315],{"class":588},"export PATH=\"$HOME\u002F.cargo\u002Fbin:$PATH\"",[578,3317,3318],{"class":720},"'",[578,3320,3321],{"class":720}," >>",[578,3323,3324],{"class":588}," ~\u002F.bashrc",[578,3326,3327],{"class":720}," &&",[578,3329,3330],{"class":615}," source",[578,3332,3333],{"class":588}," ~\u002F.bashrc\n",[429,3335,3336,3337,3339,3340,3342],{},"Générez une paire de clés privée et publique à l'aide de l'outil en ligne ou de ",[575,3338,3257],{},". Cette paire constitue l'identité de ",[575,3341,3257],{}," sur le relais Nostr.",[569,3344,3346],{"className":571,"code":3345,"language":573,"meta":424,"style":424},"docker run --rm --entrypoint \u002Fusr\u002Flocal\u002Fbin\u002Fbuzz-admin ghcr.io\u002Fblock\u002Fbuzz:main generate-key\n\n# Use the generated Public Key\ndocker compose exec relay buzz-admin add-member --pubkey generated_Public_key\n",[575,3347,3348,3370,3374,3379],{"__ignoreMap":424},[578,3349,3350,3352,3355,3358,3361,3364,3367],{"class":580,"line":581},[578,3351,788],{"class":584},[578,3353,3354],{"class":588}," run",[578,3356,3357],{"class":588}," --rm",[578,3359,3360],{"class":588}," --entrypoint",[578,3362,3363],{"class":588}," \u002Fusr\u002Flocal\u002Fbin\u002Fbuzz-admin",[578,3365,3366],{"class":588}," ghcr.io\u002Fblock\u002Fbuzz:main",[578,3368,3369],{"class":588}," generate-key\n",[578,3371,3372],{"class":580,"line":599},[578,3373,739],{"emptyLinePlaceholder":738},[578,3375,3376],{"class":580,"line":605},[578,3377,3378],{"class":608},"# Use the generated Public Key\n",[578,3380,3381,3383,3385,3387,3389,3391,3393,3395],{"class":580,"line":612},[578,3382,788],{"class":584},[578,3384,791],{"class":588},[578,3386,3116],{"class":588},[578,3388,3119],{"class":588},[578,3390,3122],{"class":588},[578,3392,3125],{"class":588},[578,3394,3128],{"class":588},[578,3396,3397],{"class":588}," generated_Public_key\n",[429,3399,3400],{},"Configurer la CLI :",[569,3402,3404],{"className":571,"code":3403,"language":573,"meta":424,"style":424},"# Copy the Secret key as the BUZZ_PRIVATE_KEY\necho 'export BUZZ_PRIVATE_KEY=\"nsec1...\"'  >> \u002Fhome\u002F\u003Cuser>\u002F.bashrc\n\necho 'export BUZZ_RELAY_URL=\"wss:\u002F\u002Fbuzz.pafor.me\"'  >> \u002Fhome\u002F\u003Cuser>\u002F.bashrc\n",[575,3405,3406,3411,3443,3447],{"__ignoreMap":424},[578,3407,3408],{"class":580,"line":581},[578,3409,3410],{"class":608},"# Copy the Secret key as the BUZZ_PRIVATE_KEY\n",[578,3412,3413,3415,3417,3420,3422,3425,3428,3431,3434,3437,3440],{"class":580,"line":599},[578,3414,2273],{"class":615},[578,3416,3312],{"class":720},[578,3418,3419],{"class":588},"export BUZZ_PRIVATE_KEY=\"nsec1...\"",[578,3421,3318],{"class":720},[578,3423,3424],{"class":720},"  >>",[578,3426,3427],{"class":588}," \u002Fhome\u002F",[578,3429,3430],{"class":720},"\u003C",[578,3432,3433],{"class":588},"use",[578,3435,3436],{"class":595},"r",[578,3438,3439],{"class":720},">",[578,3441,3442],{"class":588},"\u002F.bashrc\n",[578,3444,3445],{"class":580,"line":605},[578,3446,739],{"emptyLinePlaceholder":738},[578,3448,3449,3451,3453,3456,3458,3460,3462,3464,3466,3468,3470],{"class":580,"line":612},[578,3450,2273],{"class":615},[578,3452,3312],{"class":720},[578,3454,3455],{"class":588},"export BUZZ_RELAY_URL=\"wss:\u002F\u002Fbuzz.pafor.me\"",[578,3457,3318],{"class":720},[578,3459,3424],{"class":720},[578,3461,3427],{"class":588},[578,3463,3430],{"class":720},[578,3465,3433],{"class":588},[578,3467,3436],{"class":595},[578,3469,3439],{"class":720},[578,3471,3442],{"class":588},[429,3473,3474,3475,3477],{},"Exécutez la commande suivante pour vérifier que ",[575,3476,3257],{}," est correctement configuré :",[569,3479,3481],{"className":571,"code":3480,"language":573,"meta":424,"style":424},"buzz channels list\n",[575,3482,3483],{"__ignoreMap":424},[578,3484,3485,3488,3491],{"class":580,"line":581},[578,3486,3487],{"class":584},"buzz",[578,3489,3490],{"class":588}," channels",[578,3492,3493],{"class":588}," list\n",[429,3495,3496],{},[433,3497],{"alt":3498,"src":3499},"Exécution de commande de terminal vérifiant la configuration de buzz-cli en listant les canaux actifs","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-cli-channels-list-terminal.webp",[543,3501,3503],{"id":3502},"créer-un-projet-avec-buzz-cli","Créer un projet avec buzz-cli",[569,3505,3507],{"className":571,"code":3506,"language":573,"meta":424,"style":424},"# --channel refers to the UUID of the channel\nbuzz repos create --id TestKOA --name 'Display Name' --channel \"bd92b3d1-8fac-441c-a9ac-2b2f3aac5c5b\"\n",[575,3508,3509,3514],{"__ignoreMap":424},[578,3510,3511],{"class":580,"line":581},[578,3512,3513],{"class":608},"# --channel refers to the UUID of the channel\n",[578,3515,3516,3518,3521,3524,3527,3530,3533,3535,3538,3540,3543,3545,3548],{"class":580,"line":599},[578,3517,3487],{"class":584},[578,3519,3520],{"class":588}," repos",[578,3522,3523],{"class":588}," create",[578,3525,3526],{"class":588}," --id",[578,3528,3529],{"class":588}," TestKOA",[578,3531,3532],{"class":588}," --name",[578,3534,3312],{"class":720},[578,3536,3537],{"class":588},"Display Name",[578,3539,3318],{"class":720},[578,3541,3542],{"class":588}," --channel",[578,3544,1105],{"class":720},[578,3546,3547],{"class":588},"bd92b3d1-8fac-441c-a9ac-2b2f3aac5c5b",[578,3549,1111],{"class":720},[429,3551,3552,3553,3555],{},"Un projet ne peut être supprimé que par son propriétaire. Étant donné que le projet \"Display Name\" a été créé par ",[575,3554,3257],{},", qui ne dispose pas de commande de suppression, il ne peut pas être supprimé de cette manière.",[429,3557,3558],{},"Consultez l'application de bureau Buzz pour vérifier que le projet est bien créé.",[429,3560,3561],{},[433,3562],{"alt":3563,"src":3564},"Vue des projets de l'application Buzz confirmant la création réussie du projet","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-project-view.webp",[429,3566,3567],{},"Une fois qu'un projet est disponible dans Projects, d'autres projets peuvent être ajoutés en utilisant le bouton \"+\" dans le coin supérieur droit.",[429,3569,3570],{},[433,3571],{"alt":3572,"src":3573},"Ajout de nouveaux projets de développement à l'aide de l'icône plus dans le client Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-add-project-button.webp",[543,3575,3577],{"id":3576},"intégrer-des-dépôts-git-existants","Intégrer des dépôts Git existants",[429,3579,3580,3581,3584,3585,3588,3589,1013],{},"Installez ",[575,3582,3583],{},"git-credential-nostr"," sur la machine où se trouvent les dépôts Git. Cela nécessite ",[462,3586,3587],{},"git 2.46+"," et la chaîne d'outils Rust. Référez-vous à ce ",[442,3590,3593],{"href":3591,"rel":3592},"https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz\u002Ftree\u002Fmain\u002Fcrates\u002Fgit-credential-nostr",[446],"Readme",[569,3595,3597],{"className":571,"code":3596,"language":573,"meta":424,"style":424},"cargo install --path crates\u002Fgit-credential-nostr\n",[575,3598,3599],{"__ignoreMap":424},[578,3600,3601,3603,3605,3607],{"class":580,"line":581},[578,3602,3297],{"class":584},[578,3604,2347],{"class":588},[578,3606,3302],{"class":588},[578,3608,3609],{"class":588}," crates\u002Fgit-credential-nostr\n",[429,3611,3612,3613,3615],{},"Configurez ",[575,3614,3583],{}," pour l'autorisation de relais Buzz :",[569,3617,3619],{"className":571,"code":3618,"language":573,"meta":424,"style":424},"# 1. Register the helper and enable per-path credentials.\ngit config --global credential.helper nostr\ngit config --global credential.useHttpPath true\n\n# 2. Store your nsec in a key file (must be 0600). Replace \"nsec1...\" with your private key\nmkdir -p ~\u002F.nostr\necho \"nsec1...\" > ~\u002F.nostr\u002Fkey && chmod 600 ~\u002F.nostr\u002Fkey\ngit config --global nostr.keyfile ~\u002F.nostr\u002Fkey\n",[575,3620,3621,3626,3642,3656,3660,3665,3674,3701],{"__ignoreMap":424},[578,3622,3623],{"class":580,"line":581},[578,3624,3625],{"class":608},"# 1. Register the helper and enable per-path credentials.\n",[578,3627,3628,3630,3633,3636,3639],{"class":580,"line":599},[578,3629,585],{"class":584},[578,3631,3632],{"class":588}," config",[578,3634,3635],{"class":588}," --global",[578,3637,3638],{"class":588}," credential.helper",[578,3640,3641],{"class":588}," nostr\n",[578,3643,3644,3646,3648,3650,3653],{"class":580,"line":605},[578,3645,585],{"class":584},[578,3647,3632],{"class":588},[578,3649,3635],{"class":588},[578,3651,3652],{"class":588}," credential.useHttpPath",[578,3654,3655],{"class":720}," true\n",[578,3657,3658],{"class":580,"line":612},[578,3659,739],{"emptyLinePlaceholder":738},[578,3661,3662],{"class":580,"line":622},[578,3663,3664],{"class":608},"# 2. Store your nsec in a key file (must be 0600). Replace \"nsec1...\" with your private key\n",[578,3666,3667,3669,3671],{"class":580,"line":627},[578,3668,3043],{"class":584},[578,3670,3046],{"class":588},[578,3672,3673],{"class":588}," ~\u002F.nostr\n",[578,3675,3676,3678,3680,3683,3685,3687,3690,3692,3695,3698],{"class":580,"line":633},[578,3677,2273],{"class":615},[578,3679,1105],{"class":720},[578,3681,3682],{"class":588},"nsec1...",[578,3684,1525],{"class":720},[578,3686,2307],{"class":720},[578,3688,3689],{"class":588}," ~\u002F.nostr\u002Fkey",[578,3691,3327],{"class":720},[578,3693,3694],{"class":584}," chmod",[578,3696,3697],{"class":769}," 600",[578,3699,3700],{"class":588}," ~\u002F.nostr\u002Fkey\n",[578,3702,3703,3705,3707,3709,3712],{"class":580,"line":773},[578,3704,585],{"class":584},[578,3706,3632],{"class":588},[578,3708,3635],{"class":588},[578,3710,3711],{"class":588}," nostr.keyfile",[578,3713,3700],{"class":588},[429,3715,3716],{},"Créez un dépôt sur le relais Buzz :",[569,3718,3721],{"className":3719,"code":3720,"language":2494},[2492],"buzz repos create --id koa-email-routing --name \"KOA Email Routing\" --clone \"https:\u002F\u002Fbuzz.pafor.me\u002Fgit\u002F\u003Cpub_key>\u002Fkoa-email-routing\" --nostr-relay \"wss:\u002F\u002Fbuzz.pafor.me\"\n",[575,3722,3720],{"__ignoreMap":424},[429,3724,3725,3726,3729,3730,3733],{},"Lors de votre premier ",[575,3727,3728],{},"git push",", vous rencontrerez une erreur ",[575,3731,3732],{},"remote: missing Authorization header",". Pour résoudre ce problème, vous devez lier l'ID du dépôt à un canal Buzz, car l'appartenance à un canal dicte les privilèges d'écriture de Git (ACL) :",[569,3735,3737],{"className":571,"code":3736,"language":573,"meta":424,"style":424},"buzz repos bind --id koa-email-routing --channel \u003CCHANNEL_UUID>\n\n# push the code again\ngit push\n",[575,3738,3739,3767,3771,3776],{"__ignoreMap":424},[578,3740,3741,3743,3745,3748,3750,3753,3755,3758,3761,3764],{"class":580,"line":581},[578,3742,3487],{"class":584},[578,3744,3520],{"class":588},[578,3746,3747],{"class":588}," bind",[578,3749,3526],{"class":588},[578,3751,3752],{"class":588}," koa-email-routing",[578,3754,3542],{"class":588},[578,3756,3757],{"class":720}," \u003C",[578,3759,3760],{"class":588},"CHANNEL_UUI",[578,3762,3763],{"class":595},"D",[578,3765,3766],{"class":720},">\n",[578,3768,3769],{"class":580,"line":599},[578,3770,739],{"emptyLinePlaceholder":738},[578,3772,3773],{"class":580,"line":605},[578,3774,3775],{"class":608},"# push the code again\n",[578,3777,3778,3780],{"class":580,"line":612},[578,3779,585],{"class":584},[578,3781,3782],{"class":588}," push\n",[429,3784,3785,3786,3788],{},"La vérification du projet dans l'application de bureau Buzz affiche les éléments suivants, car l'application requiert ",[462,3787,3587],{}," — le lancement direct de l'application peut charger une version plus ancienne de Git :",[429,3790,3791],{},[433,3792],{"alt":3793,"src":3794},"Le client Buzz affiche une erreur de chargement Git en raison d'une version Git locale obsolète inférieure à 2.46","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-git-version-error.webp",[429,3796,3797,3798,3801,3802,693],{},"Exportez le PATH via ",[575,3799,3800],{},"launchctl setenv PATH \"\u002Fopt\u002Fhomebrew\u002Fbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fbin:\u002Fbin:\u002Fusr\u002Fsbin:\u002Fsbin\""," dans le profil du shell et lancez l'application Buzz depuis le shell. Référez-vous à ce ",[442,3803,3806],{"href":3804,"rel":3805},"https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz\u002Fissues\u002F5348",[446],"ticket",[569,3808,3810],{"className":571,"code":3809,"language":573,"meta":424,"style":424},"open -a Buzz\n",[575,3811,3812],{"__ignoreMap":424},[578,3813,3814,3817,3820],{"class":580,"line":581},[578,3815,3816],{"class":584},"open",[578,3818,3819],{"class":588}," -a",[578,3821,3822],{"class":588}," Buzz\n",[429,3824,3825],{},"Consultez à nouveau l'onglet Projects dans l'application Buzz, les détails du dépôt sont maintenant chargés.",[429,3827,3828],{},[433,3829],{"alt":3830,"src":3831},"Interface de bureau Buzz avec les détails du dépôt Git et les journaux de commit chargés avec succès","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-repository-details-loaded.webp",[493,3833,3835],{"id":3834},"synchroniser-les-agents-ia-avec-lapplication-mobile-buzz-via-un-code-qr","Synchroniser les agents IA avec l'application mobile Buzz via un code QR",[429,3837,3838,3839,3842],{},"Le couplage de l'application mobile Buzz accepte uniquement le protocole HTTPS et ",[575,3840,3841],{},"buzz-pair-relay"," n'est pas démarré par défaut sur le VPS.",[569,3844,3846],{"className":571,"code":3845,"language":573,"meta":424,"style":424},"cd ~\u002Fbuzz\ncargo install --path crates\u002Fbuzz-pair-relay\n",[575,3847,3848,3854],{"__ignoreMap":424},[578,3849,3850,3852],{"class":580,"line":581},[578,3851,616],{"class":615},[578,3853,3292],{"class":588},[578,3855,3856,3858,3860,3862],{"class":580,"line":599},[578,3857,3297],{"class":584},[578,3859,2347],{"class":588},[578,3861,3302],{"class":588},[578,3863,3864],{"class":588}," crates\u002Fbuzz-pair-relay\n",[429,3866,3867,3868,3871,3872,1013],{},"Ajoutez ce qui suit à ",[575,3869,3870],{},"compose.yml"," pour démarrer le service ",[575,3873,3841],{},[569,3875,3877],{"className":1060,"code":3876,"language":1062,"meta":424,"style":424},"  pair:\n    image: ${BUZZ_IMAGE:-ghcr.io\u002Fblock\u002Fbuzz:main}\n    entrypoint: [\"\u002Fusr\u002Flocal\u002Fbin\u002Fbuzz-pair-relay\"]\n    environment:\n      BUZZ_PAIR_RELAY_BIND_ADDR: 0.0.0.0:5000\n    ports:\n      - \"${BUZZ_PAIR_RELAY_PORT:-5000}:5000\"\n    restart: unless-stopped\n    networks:\n      [buzz-net]\n",[575,3878,3879,3886,3895,3915,3921,3931,3937,3948,3956,3962],{"__ignoreMap":424},[578,3880,3881,3884],{"class":580,"line":581},[578,3882,3883],{"class":1069},"  pair",[578,3885,1073],{"class":720},[578,3887,3888,3890,3892],{"class":580,"line":599},[578,3889,1085],{"class":1069},[578,3891,766],{"class":720},[578,3893,3894],{"class":588}," ${BUZZ_IMAGE:-ghcr.io\u002Fblock\u002Fbuzz:main}\n",[578,3896,3897,3900,3902,3905,3907,3910,3912],{"class":580,"line":605},[578,3898,3899],{"class":1069},"    entrypoint",[578,3901,766],{"class":720},[578,3903,3904],{"class":720}," [",[578,3906,1525],{"class":720},[578,3908,3909],{"class":588},"\u002Fusr\u002Flocal\u002Fbin\u002Fbuzz-pair-relay",[578,3911,1525],{"class":720},[578,3913,3914],{"class":720},"]\n",[578,3916,3917,3919],{"class":580,"line":612},[578,3918,1116],{"class":1069},[578,3920,1073],{"class":720},[578,3922,3923,3926,3928],{"class":580,"line":622},[578,3924,3925],{"class":1069},"      BUZZ_PAIR_RELAY_BIND_ADDR",[578,3927,766],{"class":720},[578,3929,3930],{"class":588}," 0.0.0.0:5000\n",[578,3932,3933,3935],{"class":580,"line":627},[578,3934,1095],{"class":1069},[578,3936,1073],{"class":720},[578,3938,3939,3941,3943,3946],{"class":580,"line":633},[578,3940,1102],{"class":720},[578,3942,1105],{"class":720},[578,3944,3945],{"class":588},"${BUZZ_PAIR_RELAY_PORT:-5000}:5000",[578,3947,1111],{"class":720},[578,3949,3950,3952,3954],{"class":580,"line":773},[578,3951,1184],{"class":1069},[578,3953,766],{"class":720},[578,3955,1189],{"class":588},[578,3957,3958,3960],{"class":580,"line":1133},[578,3959,2892],{"class":1069},[578,3961,1073],{"class":720},[578,3963,3964,3967,3970],{"class":580,"line":1141},[578,3965,3966],{"class":720},"      [",[578,3968,3969],{"class":588},"buzz-net",[578,3971,3914],{"class":720},[429,3973,1005,3974,464,3977,3980,3981,1013],{},[575,3975,3976],{},"BUZZ_PAIRING_RELAY_URL",[575,3978,3979],{},"BUZZ_PAIR_RELAY_PORT"," au fichier ",[575,3982,649],{},[569,3984,3987],{"className":3985,"code":3986,"language":2494},[2492],"BUZZ_PAIRING_RELAY_URL=wss:\u002F\u002Fbuzz.pafor.me\u002Fpair\nBUZZ_PAIR_RELAY_PORT=5000\n",[575,3988,3986],{"__ignoreMap":424},[429,3990,3991,3992,3995],{},"Rendez-vous dans la section '",[462,3993,3994],{},"Mobile","' des paramètres de bureau de Buzz :",[429,3997,3998],{},[433,3999],{"alt":4000,"src":4001},"Boîte de dialogue des paramètres dans l'application Buzz affichant l'onglet de configuration des appareils mobiles","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-settings-mobile-tab.webp",[429,4003,4004],{},"Cliquez sur \"Start pairing\" — un code QR est généré ; scannez ce code QR avec l'application Buzz sur votre appareil mobile. Il sera couplé après avoir cliqué sur \"Code Match\".",[429,4006,4007],{},[433,4008],{"alt":4009,"src":4010},"Génération d'un code QR de couplage sécurisé dans le client de bureau pour la synchronisation mobile Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-pairing-qr-code.webp",[429,4012,4013],{},"Les agents sur l'application mobile Buzz sont disponibles uniquement s'ils s'exécutent sur l'application de bureau Buzz. La machine de bureau doit être active pour que les agents fonctionnent.",[429,4015,4016],{},[433,4017],{"alt":4018,"src":4019},"Interface de l'application mobile Buzz présentant les agents IA actifs synchronisés","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-mobile-app-active-agents.webp",[493,4021,4023],{"id":4022},"mot-de-la-fin","Mot de la fin",[429,4025,4026],{},"Bien que Buzz soit encore trop jeune pour les environnements de production à grande échelle, avec plusieurs bogues et limitations de l'interface utilisateur, il s'agit d'une expérience passionnante pour les petites équipes et les développeurs solo. Il offre un aperçu de ce à quoi ressemble réellement un espace de travail collaboratif axé sur l'IA.",[493,4028,1870],{"id":1869},[503,4030,4031,4038,4045,4052],{},[506,4032,4033],{},[442,4034,4037],{"href":4035,"rel":4036},"https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz",[446],"Buzz releases",[506,4039,4040],{},[442,4041,4044],{"href":4042,"rel":4043},"https:\u002F\u002Fblock.xyz\u002Finside\u002Fintroducing-buzz-where-humans-and-agents-work-together",[446],"Introducing Buzz",[506,4046,4047],{},[442,4048,4051],{"href":4049,"rel":4050},"https:\u002F\u002Fwww.hostinger.com\u002Ftutorials\u002Fwhat-is-buzz",[446],"What is buzz",[506,4053,4054],{},[442,4055,4058],{"href":4056,"rel":4057},"https:\u002F\u002Fmiget.com\u002Fblog\u002Fhow-to-self-host-buzz",[446],"How to self-host Buzz (Miget)",[1895,4060,4061],{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}",{"title":424,"searchDepth":599,"depth":605,"links":4063},[4064,4065,4066,4080,4089,4090,4091],{"id":1969,"depth":599,"text":1970},{"id":2014,"depth":599,"text":2015},{"id":2062,"depth":599,"text":2063,"children":4067},[4068,4069,4073,4074,4075,4079],{"id":2066,"depth":605,"text":2067},{"id":2096,"depth":605,"text":2097,"children":4070},[4071,4072],{"id":2100,"depth":612,"text":2101},{"id":2199,"depth":612,"text":2200},{"id":2217,"depth":605,"text":2218},{"id":2434,"depth":605,"text":2435},{"id":2581,"depth":605,"text":2582,"children":4076},[4077,4078],{"id":2585,"depth":612,"text":2586},{"id":2969,"depth":612,"text":2970},{"id":3032,"depth":605,"text":3033},{"id":3072,"depth":599,"text":3073,"children":4081},[4082,4083,4084],{"id":3155,"depth":605,"text":3156},{"id":3200,"depth":605,"text":3201},{"id":3237,"depth":605,"text":3238,"children":4085},[4086,4087,4088],{"id":3261,"depth":612,"text":3262},{"id":3502,"depth":612,"text":3503},{"id":3576,"depth":612,"text":3577},{"id":3834,"depth":599,"text":3835},{"id":4022,"depth":599,"text":4023},{"id":1869,"depth":599,"text":1870},[4093,4094,3487],"collaboration","ai-agents","2026-09-08","Découvrez comment auto-héberger le relay Buzz sur un VPS Linux derrière Cloudflare. Créez un espace de travail Nostr où humains et agents IA collaborent.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002FFR-Self-Hosting-Buzz-As-The-Workspace-Where-AI-Agents-Become-Colleagues.webp","Une carte technologique premium de 16:9 avec des touches de bleu foncé et d'orange illustrant comment auto-héberger le relais Buzz de Block sur un VPS Ubuntu, avec un panneau de style glassmorphic épuré avec typographie centrée.",{"schemaOrg":4100,"robots":1933,"sitemap":4121},[4101,4103],{"@type":4102,"headline":701,"description":4096,"image":4097},"TechArticle",{"@type":1932,"name":701,"description":4096,"image":4097,"step":4104},[4105,4109,4112,4115,4118],{"@type":4106,"name":4107,"text":4108},"HowToStep","Étape 1: Configuration de Cloudflare","Créer un jeton API Cloudflare et configurer les paramètres DNS.",{"@type":4106,"name":4110,"text":4111},"Étape 2: Installer Docker","Configurer et installer Docker Engine sur le VPS Ubuntu.",{"@type":4106,"name":4113,"text":4114},"Étape 3: Cloner et configurer","Cloner le dépôt et configurer les variables compose.",{"@type":4106,"name":4116,"text":4117},"Étape 4: Intégration de Caddy","Créer une image Caddy personnalisée avec le module de défi Cloudflare DNS.",{"@type":4106,"name":4119,"text":4120},"Étape 5: Sauvegarde automatisée","Configurer une tâche cron pour sauvegarder automatiquement PostgreSQL.",{"lastmod":4122},"2026-09-03",{"title":4124,"description":4096,"ogTitle":701,"ogDescription":4096,"twitterTitle":701,"twitterDescription":4096},"Comment auto-héberger le relay Buzz de Block sur VPS Ubuntu","fr\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",[4127,4128,1965,4129,4130],"Nostr","Docker","Caddy","Cloudflare","my_-e5EU4v_YuR3HYC8IMTI57lZWOq-Sf9dWjKN1Thk",{"id":4133,"title":2087,"author":424,"body":4134,"category":5005,"date":5007,"description":5008,"extension":1924,"image":2092,"imageAlt":5009,"isPublished":738,"meta":5010,"minRead":1133,"navigation":738,"path":115,"seo":5044,"stem":5046,"tags":5047,"updatedAt":5043,"__hash__":5050},"article\u002Ffr\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp.md",{"type":426,"value":4135,"toc":4987},[4136,4150,4160,4164,4167,4179,4183,4191,4195,4199,4248,4252,4382,4386,4420,4424,4427,4491,4494,4530,4533,4560,4564,4574,4578,4616,4704,4708,4713,4730,4739,4809,4814,4859,4863,4908,4923,4927,4970,4974,4984],[429,4137,4138,4139,4142,4143,4146,4147,4149],{},"Un défi courant se pose lorsque vous souhaitez accéder à votre ",[462,4140,4141],{},"Hermes Agent"," depuis d'autres appareils tels que des ordinateurs portables, des tablettes ou des téléphones sans l'exposer à l'Internet public. L'utilisation de ",[462,4144,4145],{},"Cloudflare WARP"," avec ",[462,4148,476],{}," vous permet d'exposer globalement le Hermes Agent sans ouvrir le moindre port entrant sur votre pare-feu.",[429,4151,4152,4153,4156,4157,4159],{},"Si vous avez suivi notre guide précédent, '",[442,4154,4155],{"href":375},"Comment déployer l'Agent Hermes sur un serveur VPS Linux","', un Hermes Agent est déjà opérationnel 24h\u002F24 et 7j\u002F7. Au lieu de gérer la lourdeur des VPN traditionnels, nous allons utiliser le client ",[462,4158,4145],{}," pour exposer le Hermes Agent à un réseau privé via Internet.",[493,4161,4163],{"id":4162},"comprendre-larchitecture","Comprendre l'architecture",[429,4165,4166],{},"Les composants en jeu :",[2103,4168,4169,4174],{},[506,4170,4171,4173],{},[462,4172,476],{}," : Le tableau de bord chez Cloudflare où vous définissez les règles de routage et les politiques d'accès.",[506,4175,4176,4178],{},[462,4177,4145],{}," : L'application client installée sur vos appareils (VPS, ordinateurs portables, téléphones). Elle intercepte le trafic destiné à votre réseau privé et le route de manière sécurisée.",[538,4180,4182],{"id":4181},"prérequis","Prérequis",[503,4184,4185,4188],{},[506,4186,4187],{},"Un Hermes Agent en cours d'exécution sur votre VPS.",[506,4189,4190],{},"Un compte Cloudflare gratuit.",[493,4192,4194],{"id":4193},"guide-étape-par-étape","Guide étape par étape",[538,4196,4198],{"id":4197},"étape-1-configurer-cloudflare-zero-trust","Étape 1 : Configurer Cloudflare Zero Trust",[2103,4200,4201,4209,4216,4227,4234,4241],{},[506,4202,4203,4204,693],{},"Connectez-vous à votre ",[442,4205,4208],{"href":4206,"rel":4207},"https:\u002F\u002Fdash.cloudflare.com\u002F",[446],"Tableau de bord Cloudflare",[506,4210,4211,4212],{},"Cliquez sur 'Zero Trust' dans le menu de gauche.\n",[433,4213],{"alt":4214,"src":4215},"Menu de navigation de la barre latérale gauche du tableau de bord Cloudflare avec l'option Zero Trust","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-left-menu.webp",[506,4217,4218,4219,4222,4223],{},"Si c'est votre première fois, vous serez invité à choisir un forfait (le niveau Gratuit convient parfaitement à cette configuration) et à nommer votre équipe (par exemple, ",[575,4220,4221],{},"ai-team",").\n",[433,4224],{"alt":4225,"src":4226},"Configuration initiale du compte Cloudflare Zero Trust et attribution du nom de l'équipe","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-team-setup.webp",[506,4228,4229,4230],{},"Cliquez sur 'Access' puis sur 'Policies' pour créer une politique d'accès définissant qui a accès au réseau.\n",[433,4231],{"alt":4232,"src":4233},"Page de stratégies d'accès Cloudflare Zero Trust montrant les règles configurées","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-access-policies-page.webp",[506,4235,4236,4237],{},"Cliquez sur 'Create new policy'.\n",[433,4238],{"alt":4239,"src":4240},"Cloudflare Access policies page showing no policies added and a button to create a new policy.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-no-policies-create-button.png",[506,4242,4243,4244],{},"Sélectionnez 'Emails' et entrez votre adresse e-mail sous 'Policy rules'.\n",[433,4245],{"alt":4246,"src":4247},"Cloudflare Access policy rule configuration screen with an email address specified as the inclusion criteria.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-policy-rule-email.png",[538,4249,4251],{"id":4250},"étape-2-configurer-le-client-cloudflare-warp-sur-le-vps","Étape 2 : Configurer le client Cloudflare WARP sur le VPS",[2103,4253,4254,4263,4269,4276,4279,4294,4297,4375],{},[506,4255,1567,4256,464,4259,4262],{},[575,4257,4258],{},"sudo apt update",[575,4260,4261],{},"sudo apt install cloudflare-warp"," dans le terminal de votre VPS.",[506,4264,1567,4265,4268],{},[575,4266,4267],{},"warp-cli registration new \u003CTEAM-NAME>"," dans le terminal de votre VPS, ce qui affichera une URL.",[506,4270,4271,4272,4275],{},"Copiez l'URL affichée, qui ressemblera à ",[575,4273,4274],{},"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fwarp",", et collez-la dans votre navigateur pour l'authentification.",[506,4277,4278],{},"L'authentification par e-mail étant utilisée dans la configuration de la politique ci-dessus, entrez votre e-mail pour vous authentifier.",[506,4280,4281,4282,4285,4286,4289,4290,4293],{},"Sur la page '",[462,4283,4284],{},"Success","' (Succès) du navigateur, faites un clic droit et sélectionnez '",[462,4287,4288],{},"Inspect","' (Inspecter) sur le bouton bleu '",[462,4291,4292],{},"Open Cloudflare WARP","'.",[506,4295,4296],{},"Copiez le long jeton (token) qui est indiqué dans le lien du bouton.",[506,4298,1567,4299,4302,4303,4306,4307],{},[575,4300,4301],{},"warp-cli --accept-tos registration token \"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fauth?token=\u003Ccopied_token>\""," dans le terminal de votre VPS pour le connecter à Cloudflare Zero Trust.",[4304,4305],"br",{},"Si vous rencontrez l'erreur 'Error: Failed to communicate with the WARP API' sur Ubuntu 26, exécutez les commandes suivantes :",[569,4308,4310],{"className":571,"code":4309,"language":573,"meta":424,"style":424},"sudo systemctl restart warp-svc.service\n\n# Check status\nsudo systemctl status warp-svc.service\n\n# Run the warp-cli registration token again\nwarp-cli --accept-tos registration token   \"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fauth?token=\u003Ccopied_token>\"\n",[575,4311,4312,4324,4328,4333,4344,4348,4353],{"__ignoreMap":424},[578,4313,4314,4316,4318,4321],{"class":580,"line":581},[578,4315,1315],{"class":584},[578,4317,1755],{"class":588},[578,4319,4320],{"class":588}," restart",[578,4322,4323],{"class":588}," warp-svc.service\n",[578,4325,4326],{"class":580,"line":599},[578,4327,739],{"emptyLinePlaceholder":738},[578,4329,4330],{"class":580,"line":605},[578,4331,4332],{"class":608},"# Check status\n",[578,4334,4335,4337,4339,4342],{"class":580,"line":612},[578,4336,1315],{"class":584},[578,4338,1755],{"class":588},[578,4340,4341],{"class":588}," status",[578,4343,4323],{"class":588},[578,4345,4346],{"class":580,"line":622},[578,4347,739],{"emptyLinePlaceholder":738},[578,4349,4350],{"class":580,"line":627},[578,4351,4352],{"class":608},"# Run the warp-cli registration token again\n",[578,4354,4355,4358,4361,4364,4367,4370,4373],{"class":580,"line":633},[578,4356,4357],{"class":584},"warp-cli",[578,4359,4360],{"class":588}," --accept-tos",[578,4362,4363],{"class":588}," registration",[578,4365,4366],{"class":588}," token",[578,4368,4369],{"class":720},"   \"",[578,4371,4372],{"class":588},"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fauth?token=\u003Ccopied_token>",[578,4374,1111],{"class":720},[506,4376,4377,4378],{},"Retournez au tableau de bord Cloudflare Zero Trust et cliquez sur 'Devices' (Appareils). Votre appareil VPS devrait maintenant s'afficher.\n",[433,4379],{"alt":4380,"src":4381},"Tableau de bord des appareils Zero Trust confirmant que le VPS Linux est connecté","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-devices-vps-connected.webp",[538,4383,4385],{"id":4384},"étape-3-configurer-le-routage-du-trafic","Étape 3 : Configurer le routage du trafic",[2103,4387,4388,4395,4402,4409],{},[506,4389,4390,4391],{},"Cliquez sur le profil de votre VPS dans le tableau de bord Devices.\n",[433,4392],{"alt":4393,"src":4394},"Accès aux détails et aux paramètres du tunnel divisé pour l'appareil VPS enregistré","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-device-profile.webp",[506,4396,4397,4398],{},"Faites défiler jusqu'à la section 'Split Tunnels' (Tunnels divisés).\n",[433,4399],{"alt":4400,"src":4401},"Section des tunnels divisés sous les paramètres de profil du VPS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-split-tunnels-section.webp",[506,4403,4404,4405],{},"Cliquez sur the bouton 'Manage' (Gérer) et configurez les paramètres comme indiqué ci-dessous. Remplacez l'adresse IP si nécessaire.\n",[433,4406],{"alt":4407,"src":4408},"Gestion des exclusions d'adresses IP et d'hôtes dans les paramètres Cloudflare","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-manage-split-tunnels.webp",[506,4410,4411,4412,4415,4416,4419],{},"Exposer l'",[575,4413,4414],{},"address"," (adresse) et le ",[575,4417,4418],{},"host"," (hôte) acheminera le trafic vers vos services sur le même réseau privé.",[538,4421,4423],{"id":4422},"étape-4-configurer-le-pare-feu-sur-le-vps","Étape 4 : Configurer le pare-feu sur le VPS",[429,4425,4426],{},"Activez le pare-feu pour n'autoriser que le sous-réseau '100.96.0.0\u002F12', en bloquant tout autre accès public entrant.",[569,4428,4430],{"className":571,"code":4429,"language":573,"meta":424,"style":424},"sudo ufw enable \nsudo ufw default allow outgoing \nsudo ufw default deny incoming\nsudo ufw allow in from 100.96.0.0\u002F12\n",[575,4431,4432,4443,4460,4474],{"__ignoreMap":424},[578,4433,4434,4436,4439,4441],{"class":580,"line":581},[578,4435,1315],{"class":584},[578,4437,4438],{"class":588}," ufw",[578,4440,1768],{"class":588},[578,4442,1339],{"class":595},[578,4444,4445,4447,4449,4452,4455,4458],{"class":580,"line":599},[578,4446,1315],{"class":584},[578,4448,4438],{"class":588},[578,4450,4451],{"class":588}," default",[578,4453,4454],{"class":588}," allow",[578,4456,4457],{"class":588}," outgoing",[578,4459,1339],{"class":595},[578,4461,4462,4464,4466,4468,4471],{"class":580,"line":605},[578,4463,1315],{"class":584},[578,4465,4438],{"class":588},[578,4467,4451],{"class":588},[578,4469,4470],{"class":588}," deny",[578,4472,4473],{"class":588}," incoming\n",[578,4475,4476,4478,4480,4482,4485,4488],{"class":580,"line":612},[578,4477,1315],{"class":584},[578,4479,4438],{"class":588},[578,4481,4454],{"class":588},[578,4483,4484],{"class":588}," in",[578,4486,4487],{"class":588}," from",[578,4489,4490],{"class":588}," 100.96.0.0\u002F12\n",[429,4492,4493],{},"Autorisez le trafic loopback pour éviter de perturber les services locaux :",[569,4495,4497],{"className":571,"code":4496,"language":573,"meta":424,"style":424},"sudo ufw allow in on lo\nsudo ufw allow out on lo\n",[575,4498,4499,4515],{"__ignoreMap":424},[578,4500,4501,4503,4505,4507,4509,4512],{"class":580,"line":581},[578,4502,1315],{"class":584},[578,4504,4438],{"class":588},[578,4506,4454],{"class":588},[578,4508,4484],{"class":588},[578,4510,4511],{"class":588}," on",[578,4513,4514],{"class":588}," lo\n",[578,4516,4517,4519,4521,4523,4526,4528],{"class":580,"line":599},[578,4518,1315],{"class":584},[578,4520,4438],{"class":588},[578,4522,4454],{"class":588},[578,4524,4525],{"class":588}," out",[578,4527,4511],{"class":588},[578,4529,4514],{"class":588},[429,4531,4532],{},"Rechargez le pare-feu et vérifiez son statut :",[569,4534,4536],{"className":571,"code":4535,"language":573,"meta":424,"style":424},"sudo ufw reload \nsudo ufw status verbose\n",[575,4537,4538,4549],{"__ignoreMap":424},[578,4539,4540,4542,4544,4547],{"class":580,"line":581},[578,4541,1315],{"class":584},[578,4543,4438],{"class":588},[578,4545,4546],{"class":588}," reload",[578,4548,1339],{"class":595},[578,4550,4551,4553,4555,4557],{"class":580,"line":599},[578,4552,1315],{"class":584},[578,4554,4438],{"class":588},[578,4556,4341],{"class":588},[578,4558,4559],{"class":588}," verbose\n",[538,4561,4563],{"id":4562},"étape-5-exposer-hermes-agent-au-réseau-privé","Étape 5 : Exposer Hermes Agent au réseau privé",[429,4565,4566,4567,4570,4571,693],{},"Nous allons exposer le ",[462,4568,4569],{},"Hermes Agent Web Dashboard"," à notre réseau privé et utiliser le fournisseur d'authentification par défaut, ",[462,4572,4573],{},"Nous Research",[543,4575,4577],{"id":4576},"configurer-le-fournisseur-dauthentification","Configurer le fournisseur d'authentification",[2103,4579,4580,4589,4596,4603,4610],{},[506,4581,4582,4583,4588],{},"Rendez-vous sur ",[442,4584,4587],{"href":4585,"rel":4586},"https:\u002F\u002Fportal.nousresearch.com",[446],"portal.nousresearch.com"," pour créer un compte.",[506,4590,4591,4592],{},"Sélectionnez 'Local Dashboards' (Tableaux de bord locaux).\n",[433,4593],{"alt":4594,"src":4595},"Sélection de l'option Local Dashboards dans le portail de Nous Research","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fnous-portal-local-dashboards-selection.webp",[506,4597,4598,4599],{},"Cliquez sur 'Register Dashboard' (Enregistrer le tableau de bord).\n",[433,4600],{"alt":4601,"src":4602},"Clic sur le bouton Enregistrer le tableau de bord pour créer une nouvelle entrée","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fnous-portal-register-dashboard.webp",[506,4604,4605,4606],{},"Entrez l'adresse IP du réseau privé de votre VPS comme 'Dashboard redirect URI' (URI de redirection du tableau de bord) et cliquez sur 'Save' (Enregistrer).\n",[433,4607],{"alt":4608,"src":4609},"Enregistrement de l'adresse IP privée du VPS comme URI de redirection sur Nous Research","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fnous-portal-register-redirect-uri.webp",[506,4611,4612,4613,1013],{},"Copiez le 'OAuth client ID' et collez-le dans votre fichier ",[575,4614,4615],{},"config.yaml",[569,4617,4621],{"className":4618,"code":4619,"language":4620,"meta":424,"style":424},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","dashboard:\n  theme: default\n  show_token_analytics: false\n  oauth:\n    client_id: agent:cmq02x7ha0002jk0ba3kfnb\n    portal_url: https:\u002F\u002Fportal.nousresearch.com\n  basic_auth:\n    username: ''\n    password_hash: ''\n","yaml",[575,4622,4623,4630,4640,4651,4658,4668,4678,4685,4695],{"__ignoreMap":424},[578,4624,4625,4628],{"class":580,"line":581},[578,4626,4627],{"class":1069},"dashboard",[578,4629,1073],{"class":720},[578,4631,4632,4635,4637],{"class":580,"line":599},[578,4633,4634],{"class":1069},"  theme",[578,4636,766],{"class":720},[578,4638,4639],{"class":588}," default\n",[578,4641,4642,4645,4647],{"class":580,"line":605},[578,4643,4644],{"class":1069},"  show_token_analytics",[578,4646,766],{"class":720},[578,4648,4650],{"class":4649},"sfNiH"," false\n",[578,4652,4653,4656],{"class":580,"line":612},[578,4654,4655],{"class":1069},"  oauth",[578,4657,1073],{"class":720},[578,4659,4660,4663,4665],{"class":580,"line":622},[578,4661,4662],{"class":1069},"    client_id",[578,4664,766],{"class":720},[578,4666,4667],{"class":588}," agent:cmq02x7ha0002jk0ba3kfnb\n",[578,4669,4670,4673,4675],{"class":580,"line":627},[578,4671,4672],{"class":1069},"    portal_url",[578,4674,766],{"class":720},[578,4676,4677],{"class":588}," https:\u002F\u002Fportal.nousresearch.com\n",[578,4679,4680,4683],{"class":580,"line":633},[578,4681,4682],{"class":1069},"  basic_auth",[578,4684,1073],{"class":720},[578,4686,4687,4690,4692],{"class":580,"line":773},[578,4688,4689],{"class":1069},"    username",[578,4691,766],{"class":720},[578,4693,4694],{"class":720}," ''\n",[578,4696,4697,4700,4702],{"class":580,"line":1133},[578,4698,4699],{"class":1069},"    password_hash",[578,4701,766],{"class":720},[578,4703,4694],{"class":720},[543,4705,4707],{"id":4706},"configurer-systemd-pour-démarrer-automatiquement-le-tableau-de-bord-hermes","Configurer Systemd pour démarrer automatiquement le tableau de bord Hermes",[2103,4709,4710],{},[506,4711,4712],{},"Créez un fichier de service :",[569,4714,4718],{"className":4715,"code":4716,"language":4717,"meta":424,"style":424},"language-shell shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","sudo nano \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-dashboard.service\n","shell",[575,4719,4720],{"__ignoreMap":424},[578,4721,4722,4724,4727],{"class":580,"line":581},[578,4723,1315],{"class":584},[578,4725,4726],{"class":588}," nano",[578,4728,4729],{"class":588}," \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-dashboard.service\n",[2103,4731,4732],{"start":599},[506,4733,4734,4735,4738],{},"Collez la configuration suivante, en vous assurant que ",[575,4736,4737],{},"--host 0.0.0.0"," fait partie de la commande :",[569,4740,4744],{"className":4741,"code":4742,"language":4743,"meta":424,"style":424},"language-ini shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[Unit]\nDescription=Hermes Dashboard\nAfter=network.target\n\n[Service]\nUser=hermes\nWorkingDirectory=\u002Fhome\u002Fhermes\nExecStart=\u002Fhome\u002Fhermes\u002F.local\u002Fbin\u002Fhermes dashboard --host 0.0.0.0\nRestart=always\nRestartSec=10\nEnvironment=PATH=\u002Fhome\u002Fhermes\u002F.local\u002Fbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fbin:\u002Fbin\n\n[Install]\nWantedBy=multi-user.target\n","ini",[575,4745,4746,4750,4755,4760,4764,4768,4773,4778,4783,4787,4792,4797,4801,4805],{"__ignoreMap":424},[578,4747,4748],{"class":580,"line":581},[578,4749,1663],{},[578,4751,4752],{"class":580,"line":599},[578,4753,4754],{},"Description=Hermes Dashboard\n",[578,4756,4757],{"class":580,"line":605},[578,4758,4759],{},"After=network.target\n",[578,4761,4762],{"class":580,"line":612},[578,4763,739],{"emptyLinePlaceholder":738},[578,4765,4766],{"class":580,"line":622},[578,4767,1687],{},[578,4769,4770],{"class":580,"line":627},[578,4771,4772],{},"User=hermes\n",[578,4774,4775],{"class":580,"line":633},[578,4776,4777],{},"WorkingDirectory=\u002Fhome\u002Fhermes\n",[578,4779,4780],{"class":580,"line":773},[578,4781,4782],{},"ExecStart=\u002Fhome\u002Fhermes\u002F.local\u002Fbin\u002Fhermes dashboard --host 0.0.0.0\n",[578,4784,4785],{"class":580,"line":1133},[578,4786,1722],{},[578,4788,4789],{"class":580,"line":1141},[578,4790,4791],{},"RestartSec=10\n",[578,4793,4794],{"class":580,"line":1149},[578,4795,4796],{},"Environment=PATH=\u002Fhome\u002Fhermes\u002F.local\u002Fbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fbin:\u002Fbin\n",[578,4798,4799],{"class":580,"line":1157},[578,4800,739],{"emptyLinePlaceholder":738},[578,4802,4803],{"class":580,"line":1165},[578,4804,1736],{},[578,4806,4807],{"class":580,"line":1173},[578,4808,1741],{},[2103,4810,4811],{"start":605},[506,4812,4813],{},"Activez et démarrez le service :",[569,4815,4817],{"className":4715,"code":4816,"language":4717,"meta":424,"style":424},"sudo systemctl daemon-reload\nsudo systemctl enable hermes-dashboard\nsudo systemctl start hermes-dashboard\nsudo systemctl status hermes-dashboard\n",[575,4818,4819,4827,4838,4849],{"__ignoreMap":424},[578,4820,4821,4823,4825],{"class":580,"line":581},[578,4822,1315],{"class":584},[578,4824,1755],{"class":588},[578,4826,1758],{"class":588},[578,4828,4829,4831,4833,4835],{"class":580,"line":599},[578,4830,1315],{"class":584},[578,4832,1755],{"class":588},[578,4834,1768],{"class":588},[578,4836,4837],{"class":588}," hermes-dashboard\n",[578,4839,4840,4842,4844,4847],{"class":580,"line":605},[578,4841,1315],{"class":584},[578,4843,1755],{"class":588},[578,4845,4846],{"class":588}," start",[578,4848,4837],{"class":588},[578,4850,4851,4853,4855,4857],{"class":580,"line":612},[578,4852,1315],{"class":584},[578,4854,1755],{"class":588},[578,4856,4341],{"class":588},[578,4858,4837],{"class":588},[538,4860,4862],{"id":4861},"étape-6-installer-le-client-cloudflare-warp-sur-lordinateur","Étape 6 : Installer le client Cloudflare WARP sur l'ordinateur",[2103,4864,4865,4873,4876,4883,4890,4897],{},[506,4866,4867,4868,693],{},"Téléchargez le client Cloudflare WARP depuis le ",[442,4869,4872],{"href":4870,"rel":4871},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fwarp-client\u002Fget-started\u002F",[446],"portail de Cloudflare",[506,4874,4875],{},"Ouvrez et lancez le client Cloudflare WARP après l'installation.",[506,4877,4878,4879],{},"Connectez-vous lorsque vous y êtes invité.\n",[433,4880],{"alt":4881,"src":4882},"Invite de connexion du client Cloudflare WARP sur l'ordinateur de bureau","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-warp-desktop-login-prompt.webp",[506,4884,4885,4886],{},"Une page 'Success' (Succès) s'affichera après une connexion réussie.\n",[433,4887],{"alt":4888,"src":4889},"Page de succès d'authentification après connexion à Cloudflare Zero Trust sur bureau","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-warp-desktop-login-success.webp",[506,4891,4892,4893],{},"Le client WARP devrait maintenant indiquer qu'il est connecté à votre équipe Zero Trust.\n",[433,4894],{"alt":4895,"src":4896},"Client Cloudflare WARP de bureau confirmant la connexion active au réseau privé Zero Trust","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-warp-desktop-client-connected.webp",[506,4898,4899,4900,4903,4904],{},"Accédez à votre navigateur web et entrez votre IP privée (par exemple, ",[575,4901,4902],{},"100.96.0.3","). Le Hermes Web Dashboard devrait se charger avec succès.\n",[433,4905],{"alt":4906,"src":4907},"Accès au tableau de bord Web privé de Hermes Agent sur un navigateur de bureau","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fhermes-agent-dashboard-desktop-view.webp",[4909,4910,4911],"blockquote",{},[429,4912,4913,4916,4917,4922],{},[462,4914,4915],{},"Conseil de pro pour les utilisateurs macOS :"," Si vous utilisez le client WARP pour accéder à plusieurs comptes Cloudflare, consultez notre guide rapide sur ",[462,4918,4919],{},[442,4920,4921],{"href":399},"Basculer entre plusieurs profils Cloudflare WARP sur macOS"," pour passer d'un compte à l'autre en toute fluidité.",[538,4924,4926],{"id":4925},"étape-7-installer-le-client-cloudflare-warp-sur-les-appareils-ios","Étape 7 : Installer le client Cloudflare WARP sur les appareils iOS",[2103,4928,4929,4935,4943,4951,4959],{},[506,4930,3580,4931,4934],{},[462,4932,4933],{},"Cloudflare One"," depuis l'App Store.",[506,4936,4937,4938],{},"Ouvrez l'application Cloudflare One et entrez le nom de votre équipe lorsque vous y êtes invité.\n",[433,4939],{"alt":4940,"src":4941,"width":4942},"Saisie du nom de l'équipe Cloudflare Zero Trust dans l'application Cloudflare One sur iOS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-one-ios-team-name-prompt.webp",239,[506,4944,4945,4946],{},"Connectez-vous en utilisant la même adresse e-mail que celle configurée dans la règle de politique ci-dessus.\n",[433,4947],{"alt":4948,"src":4949,"width":4950},"Invite d'authentification par e-mail pour Cloudflare Zero Trust sur iOS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-one-ios-email-login.webp",229,[506,4952,4953,4954],{},"Une fois connecté, cela devrait ressembler à ceci :\n",[433,4955],{"alt":4956,"src":4957,"width":4958},"Application Cloudflare One affichant l'état connecté sur l'appareil mobile iOS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-one-ios-client-connected.webp",322,[506,4960,4961,4962,4964,4965],{},"Accédez à votre navigateur web et entrez l'IP privée ",[575,4963,4902],{}," pour accéder au Hermes Web Dashboard sur votre appareil mobile.\n",[433,4966],{"alt":4967,"src":4968,"width":4969},"Accès à l'interface du tableau de bord Web de Hermes Agent sur navigateur mobile","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fhermes-agent-dashboard-mobile-view.webp",345,[493,4971,4973],{"id":4972},"conclusion","Conclusion",[429,4975,4976,4977,4979,4980,4983],{},"Avec ",[462,4978,476],{}," gérant les politiques d'identité et le client ",[462,4981,4982],{},"WARP"," acheminant le trafic via un tunnel crypté, votre Hermes Agent est accessible de manière sécurisée depuis vos appareils dans le monde entier. Cette configuration pose des fondations sécurisées et robustes pour créer et accéder à une infrastructure d'IA privée et entièrement à distance.",[1895,4985,4986],{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":424,"searchDepth":599,"depth":605,"links":4988},[4989,4992,5004],{"id":4162,"depth":599,"text":4163,"children":4990},[4991],{"id":4181,"depth":605,"text":4182},{"id":4193,"depth":599,"text":4194,"children":4993},[4994,4995,4996,4997,4998,5002,5003],{"id":4197,"depth":605,"text":4198},{"id":4250,"depth":605,"text":4251},{"id":4384,"depth":605,"text":4385},{"id":4422,"depth":605,"text":4423},{"id":4562,"depth":605,"text":4563,"children":4999},[5000,5001],{"id":4576,"depth":612,"text":4577},{"id":4706,"depth":612,"text":4707},{"id":4861,"depth":605,"text":4862},{"id":4925,"depth":605,"text":4926},{"id":4972,"depth":599,"text":4973},[4094,5006],"security","2026-07-09","Apprenez à exposer et à accéder mondialement à votre Hermes Agent en toute sécurité via Cloudflare WARP et Zero Trust, sans ouvrir de port pare-feu entrant.","Exposer en toute sécurité Hermes Agent à un réseau privé via Cloudflare Zero Trust et un tunnel WARP",{"schemaOrg":5011,"robots":1933,"sitemap":5042},[5012],{"@type":1932,"headline":2087,"description":5008,"name":2087,"image":2092,"step":5013},[5014,5018,5022,5026,5030,5034,5038],{"@type":4106,"name":5015,"text":5016,"url":5017,"image":4215},"Configurer Cloudflare Zero Trust","Connectez-vous à votre Tableau de bord Cloudflare. Cliquez sur 'Zero Trust' dans le menu de gauche. Si c'est votre première fois, vous serez invité à choisir un forfait (le niveau Gratuit convient parfaitement à cette configuration) et à nommer votre","#step-1",{"@type":4106,"name":5019,"text":5020,"url":5021,"image":4381},"Configurer le client Cloudflare WARP sur le VPS","Exécutez sudo apt update et sudo apt install cloudflare-warp dans le terminal de votre VPS. Exécutez warp-cli registration new \u003CTEAM-NAME> dans le terminal de votre VPS, ce qui affichera une URL. Copiez l'URL affichée, qui ressemblera à https:\u002F\u002F\u003Cteam","#step-2",{"@type":4106,"name":5023,"text":5024,"url":5025,"image":4394},"Configurer le routage du trafic","Cliquez sur le profil de votre VPS dans le tableau de bord Devices. Faites défiler jusqu'à la section 'Split Tunnels' (Tunnels divisés). Cliquez sur the bouton 'Manage' (Gérer) et configurez les paramètres comme indiqué ci-dessous. Remplacez l'adress","#step-3",{"@type":4106,"name":5027,"text":5028,"url":5029},"Configurer le pare-feu sur le VPS","Activez le pare-feu pour n'autoriser que le sous-réseau '100.96.0.0\u002F12', en bloquant tout autre accès public entrant. bash Autorisez le trafic loopback pour éviter de perturber les services locaux : bash Rechargez le pare-feu et vérifiez son statut :","#step-4",{"@type":4106,"name":5031,"text":5032,"url":5033},"Exposer Hermes Agent au réseau privé","Nous allons exposer le Hermes Agent Web Dashboard à notre réseau privé et utiliser le fournisseur d'authentification par défaut, Nous Research.","#step-5",{"@type":4106,"name":5035,"text":5036,"url":5037,"image":4882},"Installer le client Cloudflare WARP sur l'ordinateur","Téléchargez le client Cloudflare WARP depuis le portail de Cloudflare. Ouvrez et lancez le client Cloudflare WARP après l'installation. Connectez-vous lorsque vous y êtes invité. Une page 'Success' (Succès) s'affichera après une connexion réussie. Le","#step-6",{"@type":4106,"name":5039,"text":5040,"url":5041,"image":4941},"Installer le client Cloudflare WARP sur les appareils iOS","Installez Cloudflare One depuis l'App Store. Ouvrez l'application Cloudflare One et entrez le nom de votre équipe lorsque vous y êtes invité. Connectez-vous en utilisant la même adresse e-mail que celle configurée dans la règle de politique ci-dessus","#step-7",{"lastmod":5043},"2026-09-28",{"title":5045,"description":5008,"ogTitle":2087,"ogDescription":5008,"twitterTitle":2087,"twitterDescription":5008},"Accès sécurisé à Hermes Agent avec Cloudflare Zero Trust","fr\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",[4145,1943,4141,5048,5049],"Réseau privé","Tutoriel","znaIPQ7_5S4t576NDV1Cm2dwmV4KfgwgNWNih_62HSs",[5052,5053,5856],{"id":4133,"title":2087,"author":424,"body":4134,"category":5005,"date":5007,"description":5008,"extension":1924,"image":2092,"imageAlt":5009,"isPublished":738,"meta":5010,"minRead":1133,"navigation":738,"path":363,"seo":5044,"stem":5046,"tags":5047,"updatedAt":5043,"__hash__":5050},{"id":5054,"title":5055,"author":1944,"body":5056,"category":5839,"date":5841,"description":5842,"extension":1924,"image":5843,"imageAlt":5844,"isPublished":738,"meta":5845,"minRead":1133,"navigation":738,"path":415,"seo":5850,"stem":5851,"tags":5852,"updatedAt":1944,"__hash__":5855},"article\u002Ffr\u002Farticle\u002Fuse-cloudflare-as-ai-memory.md","Bâtir un système de mémoire IA persistant sur Cloudflare",{"type":426,"value":5057,"toc":5821},[5058,5062,5065,5068,5072,5075,5089,5093,5100,5114,5117,5120,5164,5168,5250,5254,5280,5389,5400,5404,5409,5450,5474,5478,5483,5554,5559,5563,5597,5603,5642,5646,5678,5682,5690,5694,5724,5728,5770,5772,5775,5778,5781,5784,5818],[493,5059,5061],{"id":5060},"limportance-dune-mémoire-ia-persistante-pour-les-agents","L'importance d'une mémoire IA persistante pour les agents",[429,5063,5064],{},"À mesure que les assistants IA s'intègrent dans notre quotidien, nous sommes fréquemment confrontés au problème du contexte vide (blank context). Les décisions prises la semaine précédente sont oubliées, nous obligeant à ressaisir continuellement les détails de notre stack technologique et à redéfinir nos préférences utilisateur.",[429,5066,5067],{},"Plutôt que de repartir de zéro à chaque session, nous devons mettre en place un système de mémoire évolutif qui assimile continuellement les choix de l'utilisateur et élimine le besoin de répéter sans cesse le contexte.",[493,5069,5071],{"id":5070},"mémoire-ia-auto-hébergée-vs-systèmes-de-mémoire-intégrés","Mémoire IA auto-hébergée vs. Systèmes de mémoire intégrés",[429,5073,5074],{},"De nombreux agents IA intègrent désormais leur propre mémoire, mais nous n'utilisons rarement qu'un seul outil pour toutes nos tâches. Nous sollicitons Claude pour l'architecture et la conception d'un projet, Kimi pour le code, et ChatGPT pour la recherche de fond. Le contexte n'est pas partagé entre ces différents outils ; il reste cloisonné au sein de chaque agent.",[429,5076,5077,5078,5083,5084,5088],{},"Du point de vue de l'ingénierie logicielle, nous évitons les boîtes noires. Nous exigeons un système de mémoire IA observable, auditable et totalement sous notre contrôle. Le projet open source ",[442,5079,5082],{"href":5080,"rel":5081},"https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fsecond-brain-cloudflare\u002Ftree\u002Fmain",[446],"Second Brain"," (un fork de ",[442,5085,5086],{"href":5086,"rel":5087},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare",[446],") offre une solution de mémoire persistante et auto-hébergée compatible avec le protocole MCP (Model Context Protocol). N'importe quel agent IA compatible (comme Claude, ChatGPT ou Kimi Code) peut ainsi exploiter et alimenter ce contexte unique y compris en local.",[493,5090,5092],{"id":5091},"comment-bâtir-un-second-brain-de-mémoire-ia-sur-cloudflare","Comment bâtir un Second Brain de mémoire IA sur Cloudflare",[429,5094,5095,5096,5099],{},"Le système de mémoire de Second Brain est déployé sur ",[462,5097,5098],{},"Cloudflare Workers",", offrant une infrastructure d'exécution serverless hautement distribuée à l'échelle mondiale. Cela garantit que la recherche de souvenirs (recall) et les autres opérations s'exécutent avec une latence minimale, totalement invisible dans la boucle de réflexion de l'IA.",[429,5101,5102,5103,5106,5107,5110,5111,5113],{},"La génération d'embeddings vectoriels repose sur le modèle dédié de ",[462,5104,5105],{},"Workers AI",". Ces embeddings sont ensuite stockés dans ",[462,5108,5109],{},"Cloudflare Vectorize",", une base de datos vectorielle globale performante. ",[462,5112,5109],{}," effectue une recherche de similarité cosinus (cosine similarity) pour identifier les souvenirs sémantiquement proches de la requête.",[429,5115,5116],{},"Second Brain intègre également des mécanismes de déduplication et de fusion intelligente. Tout contenu présentant une similarité inférieure à 85 % est enregistré ; au-delà, il est ignoré ou marqué comme doublon potentiel. Les textes de plus de 1 600 caractères sont découpés proprement selon les phrases ou les sauts de ligne, avec un chevauchement (overlap) de 200 caractères pour éviter toute perte de contexte. Chaque segment est ensuite vectorisé pour garantir des correspondances ultra-précises.",[429,5118,5119],{},"Les outils suivants sont exposés sous forme d'interfaces MCP exploitables par vos agents IA :",[503,5121,5122,5128,5134,5140,5146,5152,5158],{},[506,5123,5124,5127],{},[575,5125,5126],{},"remember"," : stocker des idées, des décisions, des préférences ou du contexte projet.",[506,5129,5130,5133],{},[575,5131,5132],{},"append"," : ajouter des précisions à un souvenir existant.",[506,5135,5136,5139],{},[575,5137,5138],{},"update"," : remplacer intégralement un souvenir.",[506,5141,5142,5145],{},[575,5143,5144],{},"recall"," : rechercher des souvenirs par leur sens sémantique plutôt que par des mots-clés exacts.",[506,5147,5148,5151],{},[575,5149,5150],{},"list_recent"," : lister les derniers souvenirs enregistrés.",[506,5153,5154,5157],{},[575,5155,5156],{},"forget"," : supprimer définitivement un souvenir.",[506,5159,5160,5163],{},[575,5161,5162],{},"link\u002Fconnections"," : lier des souvenirs associés entre eux (fonctionnalité de graphe v2).",[538,5165,5167],{"id":5166},"configuration-de-second-brain-sur-cloudflare","Configuration de Second Brain sur Cloudflare",[2103,5169,5170,5187,5194,5201,5208,5215,5226,5233,5236,5243],{},[506,5171,2113,5172,5175,5176,5181,5182,5186],{},[575,5173,5174],{},"Deploy to Cloudflare"," depuis la page du ",[442,5177,5180],{"href":5178,"rel":5179},"https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fsecond-brain-cloudflare",[446],"Github repo",". [[",[433,5183],{"alt":5184,"src":5185},"Page GitHub avec le bouton Deploy to Cloudflare mis en évidence","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fdeploy-to-cloudflare-button.webp","]]",[506,5188,5189,5190],{},"Remplissez le formulaire de création du Cloudflare Worker.\n",[433,5191],{"alt":5192,"src":5193},"Formulaire de configuration du déploiement de Cloudflare Workers","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-worker-deployment-form.webp",[506,5195,5196,5197],{},"Saisissez '384' pour Dimensions, sélectionnez 'cosine' pour Metric, puis cliquez sur le bouton Deploy.\n",[433,5198],{"alt":5199,"src":5200},"Écran de configuration de la création de base de données Cloudflare Vectorize","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-vectorize-configuration.webp",[506,5202,5203,5204],{},"Voici un aperçu de l'interface d'administration de Second Brain déployé sur Cloudflare Worker.\n",[433,5205],{"alt":5206,"src":5207},"Tableau de bord général du worker Second Brain déployé","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-worker-second-brain-overview.webp",[506,5209,5210,5211],{},"Accédez à l'onglet 'Settings', puis cliquez sur l'icône d'édition de la variable 'AUTH_TOKEN' afin de définir votre jeton de sécurité.\n",[433,5212],{"alt":5213,"src":5214},"Paramètres des variables de Cloudflare Worker mettant en évidence AUTH_TOKEN","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-worker-auth-token-settings.webp",[506,5216,5217,5218,5222],{},"Cliquez sur le lien 'Rotate' pour pouvoir saisir une nouvelle valeur. ",[433,5219],{"alt":5220,"src":5221},"Écran de modification et de rotation de la variable AUTH_TOKEN","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-worker-auth-token-rotate.webp",[433,5223],{"alt":5224,"src":5225},"Saisie de la chaîne aléatoire générée dans le champ de valeur AUTH_TOKEN","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-worker-auth-token-value-input.webp",[506,5227,5228,5229,5232],{},"Lancez la commande ",[575,5230,5231],{},"openssl rand -base64 32"," dans votre terminal macOS pour générer une clé d'accès aléatoire et collez-la dans le champ de saisie 'Value'.",[506,5234,5235],{},"Cliquez sur le bouton 'Deploy' pour appliquer et enregistrer la nouvelle valeur de 'AUTH_TOKEN'.",[506,5237,5238,5239],{},"Ouvrez l'URL de votre worker Second Brain dans votre navigateur web.\n",[433,5240],{"alt":5241,"src":5242},"Écran de connexion de l'interface web de Second Brain avec champ de saisie Bearer Token","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fsecond-brain-web-ui-login.webp",[506,5244,5245,5246,5249],{},"Saisissez le jeton 'AUTH_TOKEN' créé dans le champ ",[575,5247,5248],{},"Bearer token"," puis cliquez sur le bouton 'Connect' pour accéder à l'interface web (Web UI).",[538,5251,5253],{"id":5252},"intégration-de-claude-desktop-via-mcp","Intégration de Claude Desktop via MCP",[2103,5255,5256,5263,5270],{},[506,5257,5258,5259],{},"Cliquez sur 'Customize' dans Claude Desktop.\n",[433,5260],{"alt":5261,"src":5262},"Interface de Claude Desktop pointant vers le bouton Customize","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-customize-button.webp",[506,5264,5265,5266],{},"Cliquez sur 'Developer' pour éditer manuellement le fichier de configuration des serveurs MCP.\n",[433,5267],{"alt":5268,"src":5269},"Menu des paramètres développeur de Claude Desktop pour accéder à la configuration MCP","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-developer-menu.webp",[506,5271,5272,5273,5276,5277,1013],{},"Ajoutez la configuration suivante à la section ",[575,5274,5275],{},"mcpServers"," de votre fichier ",[575,5278,5279],{},"claude_desktop_config.json",[569,5281,5283],{"className":711,"code":5282,"language":713,"meta":424,"style":424},"    \"second-brain\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"mcp-remote\",\n        \"https:\u002F\u002F\u003Cyour-worker-url>\u002Fmcp\",\n        \"--header\",\n        \"Authorization: Bearer \u003Cyour-token>\"\n      ]\n    }\n",[575,5284,5285,5300,5322,5336,5348,5359,5370,5379,5384],{"__ignoreMap":424},[578,5286,5287,5290,5293,5295,5298],{"class":580,"line":581},[578,5288,5289],{"class":720},"    \"",[578,5291,5292],{"class":588},"second-brain",[578,5294,1525],{"class":720},[578,5296,5297],{"class":595},": ",[578,5299,721],{"class":720},[578,5301,5302,5305,5308,5310,5312,5314,5317,5319],{"class":580,"line":599},[578,5303,5304],{"class":720},"      \"",[578,5306,5307],{"class":2721},"command",[578,5309,1525],{"class":720},[578,5311,766],{"class":720},[578,5313,1105],{"class":720},[578,5315,5316],{"class":588},"npx",[578,5318,1525],{"class":720},[578,5320,5321],{"class":720},",\n",[578,5323,5324,5326,5329,5331,5333],{"class":580,"line":605},[578,5325,5304],{"class":720},[578,5327,5328],{"class":2721},"args",[578,5330,1525],{"class":720},[578,5332,766],{"class":720},[578,5334,5335],{"class":720}," [\n",[578,5337,5338,5341,5344,5346],{"class":580,"line":612},[578,5339,5340],{"class":720},"        \"",[578,5342,5343],{"class":588},"mcp-remote",[578,5345,1525],{"class":720},[578,5347,5321],{"class":720},[578,5349,5350,5352,5355,5357],{"class":580,"line":622},[578,5351,5340],{"class":720},[578,5353,5354],{"class":588},"https:\u002F\u002F\u003Cyour-worker-url>\u002Fmcp",[578,5356,1525],{"class":720},[578,5358,5321],{"class":720},[578,5360,5361,5363,5366,5368],{"class":580,"line":627},[578,5362,5340],{"class":720},[578,5364,5365],{"class":588},"--header",[578,5367,1525],{"class":720},[578,5369,5321],{"class":720},[578,5371,5372,5374,5377],{"class":580,"line":633},[578,5373,5340],{"class":720},[578,5375,5376],{"class":588},"Authorization: Bearer \u003Cyour-token>",[578,5378,1111],{"class":720},[578,5380,5381],{"class":580,"line":773},[578,5382,5383],{"class":720},"      ]\n",[578,5385,5386],{"class":580,"line":1133},[578,5387,5388],{"class":720},"    }\n",[429,5390,5391,5395,5396],{},[433,5392],{"alt":5393,"src":5394},"JSON de configuration de Claude Desktop MCP contenant le serveur Second Brain","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-mcp-config-json.webp","\n4. Redémarrez Claude Desktop et vérifiez la liste des 'Local MCP servers'. Le statut doit indiquer 'running'.\n",[433,5397],{"alt":5398,"src":5399},"Claude Desktop affichant le statut actif pour le serveur Second Brain MCP","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-mcp-status-running.webp",[538,5401,5403],{"id":5402},"intégration-de-claude-code-via-mcp","Intégration de Claude Code via MCP",[503,5405,5406],{},[506,5407,5408],{},"Exécutez la commande suivante pour ajouter le serveur MCP :",[569,5410,5412],{"className":4715,"code":5411,"language":4717,"meta":424,"style":424},"claude mcp add --transport http second-brain https:\u002F\u002F\u003Cyour-worker-url>\u002Fmcp\n",[575,5413,5414],{"__ignoreMap":424},[578,5415,5416,5419,5422,5425,5428,5431,5434,5437,5439,5442,5445,5447],{"class":580,"line":581},[578,5417,5418],{"class":584},"claude",[578,5420,5421],{"class":588}," mcp",[578,5423,5424],{"class":588}," add",[578,5426,5427],{"class":588}," --transport",[578,5429,5430],{"class":588}," http",[578,5432,5433],{"class":588}," second-brain",[578,5435,5436],{"class":588}," https:\u002F\u002F",[578,5438,3430],{"class":720},[578,5440,5441],{"class":588},"your-worker-ur",[578,5443,5444],{"class":595},"l",[578,5446,3439],{"class":720},[578,5448,5449],{"class":588},"\u002Fmcp\n",[503,5451,5452,5458],{},[506,5453,5454,5455,693],{},"Claude Code détectera automatiquement que le point de terminaison (endpoint) requiert une authentification OAuth et ouvrira une page de connexion dans votre navigateur pour valider votre ",[575,5456,5457],{},"AUTH_TOKEN",[506,5459,5460,5461,5464,5465,5468,5469,693],{},"Créez un fichier ",[575,5462,5463],{},"CLAUDE.md"," dans le répertoire ",[575,5466,5467],{},"~\u002F.claude"," et ajoutez-y les instructions détaillées issues de ",[442,5470,5473],{"href":5471,"rel":5472},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare\u002Fblob\u002Fmain\u002FAI_Instructions\u002FCLAUDE_INSTRUCTIONS.md",[446],"CLAUDE_INSTRUCTIONS.md",[538,5475,5477],{"id":5476},"intégration-de-gemini-cli-via-mcp","Intégration de Gemini CLI via MCP",[2103,5479,5480],{},[506,5481,5482],{},"Ajoutez la configuration de serveur MCP suivante à votre fichier '.\u002F.gemini\u002Fsettings.json' :",[569,5484,5486],{"className":711,"code":5485,"language":713,"meta":424,"style":424},"    \"second-brain\": {\n      \"httpUrl\": \"https:\u002F\u002F\u003Cyour-worker-url>\u002Fmcp\",\n      \"oauth\": {\n        \"enabled\": true\n      }\n    }\n",[575,5487,5488,5500,5519,5532,5545,5550],{"__ignoreMap":424},[578,5489,5490,5492,5494,5496,5498],{"class":580,"line":581},[578,5491,5289],{"class":720},[578,5493,5292],{"class":588},[578,5495,1525],{"class":720},[578,5497,5297],{"class":595},[578,5499,721],{"class":720},[578,5501,5502,5504,5507,5509,5511,5513,5515,5517],{"class":580,"line":599},[578,5503,5304],{"class":720},[578,5505,5506],{"class":2721},"httpUrl",[578,5508,1525],{"class":720},[578,5510,766],{"class":720},[578,5512,1105],{"class":720},[578,5514,5354],{"class":588},[578,5516,1525],{"class":720},[578,5518,5321],{"class":720},[578,5520,5521,5523,5526,5528,5530],{"class":580,"line":605},[578,5522,5304],{"class":720},[578,5524,5525],{"class":2721},"oauth",[578,5527,1525],{"class":720},[578,5529,766],{"class":720},[578,5531,753],{"class":720},[578,5533,5534,5536,5539,5541,5543],{"class":580,"line":612},[578,5535,5340],{"class":720},[578,5537,5538],{"class":584},"enabled",[578,5540,1525],{"class":720},[578,5542,766],{"class":720},[578,5544,3655],{"class":720},[578,5546,5547],{"class":580,"line":622},[578,5548,5549],{"class":720},"      }\n",[578,5551,5552],{"class":580,"line":627},[578,5553,5388],{"class":720},[2103,5555,5556],{"start":599},[506,5557,5558],{},"Démarrez l'interface Gemini CLI.",[538,5560,5562],{"id":5561},"tester-second-brain-avec-les-agents-ia","Tester Second Brain avec les agents IA",[2103,5564,5565,5576,5590],{},[506,5566,5567,5568,5571,5572],{},"En commençant par configurer une simple palette de marque dans ",[462,5569,5570],{},"Claude Desktop",", Second Brain n'est pas sollicité par défaut.\n",[433,5573],{"alt":5574,"src":5575},"Premier test dans Claude Desktop sans la couche de mémoire Second Brain active","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-first-run-brand-palette.webp",[506,5577,5578,5579,5582,5583,5585,5586],{},"En utilisant le mot-clé générique 'remember', seuls les outils locaux ",[575,5580,5581],{},"memory_user-edits"," de ",[462,5584,5570],{}," s'exécutent, ignorant la couche distante de Second Brain.\n",[433,5587],{"alt":5588,"src":5589},"Claude Desktop basculant vers les modifications locales intégrées au lieu de Second Brain","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-remember-built-in-tool-fallback.webp",[506,5591,5592,5593,5596],{},"En soumettant l'instruction suivante à ",[462,5594,5595],{},"Claude Code",", le serveur Second Brain est immédiatement appelé :",[569,5598,5601],{"className":5599,"code":5600,"language":2494},[2492],"Remember Our brand palette uses `#1a1a2e` as primary, `#16213e` as secondary, and `#e94560` as accent. Never use pure black.\"\n",[575,5602,5600],{"__ignoreMap":424},[429,5604,5605,5609,5610,847,5613,5617,5618,5622,5623,5625,5626,5630,5631,5634,5635,5617,5639],{},[433,5606],{"alt":5607,"src":5608},"Fenêtre de terminal de Claude Code affichant le déclenchement réussi de Second Brain MCP","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-code-second-brain-mcp-called.webp","\n4. Nous pouvons instantanément vérifier l'enregistrement des codes couleurs au sein de la base ",[462,5611,5612],{},"Second Brain sur Cloudflare",[433,5614],{"alt":5615,"src":5616},"Vérification des codes couleur de marque enregistrés dans la base de données de Second Brain","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fsecond-brain-web-ui-color-verification.webp","\n- ",[5619,5620,5621],"em",{},"Si Claude Code a réagi correctement, c'est parce que son fichier de directives CLAUDE_INSTRUCTIONS.md contient explicitement les termes liés à 'Second Brain'.","\n5. Pour obtenir le même résultat dans ",[462,5624,5570],{},", vous devez mentionner explicitement 'Second Brain' dans vos prompts pour forcer l'écriture ou la lecture de cette couche mémoire.\n",[433,5627],{"alt":5628,"src":5629},"Déclenchement de Second Brain dans Claude Desktop en mentionnant explicitement les mots-clés","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-second-brain-explicit-trigger.webp","\n6. De la même manière, le mot-clé 'Second Brain' doit être mentionné dans vos échanges avec le ",[462,5632,5633],{},"Gemini CLI"," pour déclencher l'appel MCP associé.\n",[433,5636],{"alt":5637,"src":5638},"Fenêtre de terminal de Gemini CLI montrant des appels réussis vers Second Brain MCP","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fgemini-cli-second-brain-trigger.webp",[5619,5640,5641],{},"L'ajout de directives adaptées dans votre fichier GEMINI.md (similaires à celles de CLAUDE_INSTRUCTIONS.md) permettra de solliciter Second Brain de manière totalement transparente.",[538,5643,5645],{"id":5644},"extensions-pour-navigateurs-web","Extensions pour navigateurs web",[503,5647,5648,5651],{},[506,5649,5650],{},"Des extensions officielles sont disponibles pour Google Chrome, Mozilla Firefox et Microsoft Edge.",[506,5652,5653,5654],{},"Elles permettent de :\n",[503,5655,5656,5662,5668],{},[506,5657,5658,5661],{},[462,5659,5660],{},"Capturer la page actuelle"," — sauvegarde le titre et l'adresse URL directement dans votre Second Brain.",[506,5663,5664,5667],{},[462,5665,5666],{},"Capturer un extrait de texte"," — sélectionnez n'importe quelle ligne de texte sur une page avant de cliquer sur l'extension pour l'enregistrer avec les métadonnées de la page.",[506,5669,5670,5673,5674,5677],{},[462,5671,5672],{},"Ajouter une note libre"," — saisissez du contexte ou des ",[575,5675,5676],{},"#hashtags"," directement depuis la popup de l'extension ; les tags sont automatiquement extraits et catégorisés.",[538,5679,5681],{"id":5680},"synchroniser-ses-connaissances-personnelles-avec-le-plugin-obsidian","Synchroniser ses connaissances personnelles avec le plugin Obsidian",[503,5683,5684,5687],{},[506,5685,5686],{},"Un plugin Obsidian dédié permet de synchroniser de manière bidirectionnelle les notes de votre coffre (Vault) local vers votre Second Brain hébergé sur Cloudflare.",[506,5688,5689],{},"Vous pouvez choisir de ne synchroniser que les notes associées à un tag spécifique.",[543,5691,5693],{"id":5692},"installer-le-plugin-obsidian","Installer le plugin Obsidian",[2103,5695,5696,5703,5710,5717],{},[506,5697,5698,5699],{},"Ouvrez Obsidian → Settings → Community Plugins\n",[433,5700],{"alt":5701,"src":5702},"Panneau de configuration d'Obsidian naviguant vers la section Community Plugins","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-settings-community-plugins.webp",[506,5704,5705,5706],{},"Cliquez sur le bouton 'Browse'.\n",[433,5707],{"alt":5708,"src":5709},"Page de recherche des plugins d'Obsidian affichant le bouton Browse","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-community-plugins-browse.webp",[506,5711,5712,5713],{},"Recherchez 'Second Brain Sync'.\n",[433,5714],{"alt":5715,"src":5716},"Recherche du plugin Second Brain Sync dans la bibliothèque d'extensions d'Obsidian","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-community-plugins-search-second-brain.webp",[506,5718,5719,5720],{},"Cliquez sur 'Install' puis sur 'Enable'.\n",[433,5721],{"alt":5722,"src":5723},"Installation et activation du plugin Second Brain Sync dans Obsidian","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-plugin-install-and-enable.webp",[543,5725,5727],{"id":5726},"configurer-le-plugin-obsidian","Configurer le plugin Obsidian",[2103,5729,5730,5733,5740,5747,5754,5763],{},[506,5731,5732],{},"Ouvrez Obsidian → Settings → Second Brain Sync",[506,5734,5735,5736],{},"Renseignez l'adresse de votre Worker ('URL') et votre jeton de sécurité ('Auth token').\n",[433,5737],{"alt":5738,"src":5739},"Saisie de l'URL du Worker et du jeton d'autorisation dans les paramètres d'Obsidian","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-plugin-configuration-credentials.webp",[506,5741,5742,5743],{},"Cliquez sur le bouton 'Test' pour valider la bonne communication avec votre serveur.\n",[433,5744],{"alt":5745,"src":5746},"Test de connexion réussi du plugin Obsidian vers la base de données","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-plugin-connection-test-success.webp",[506,5748,5749,5750],{},"Ajustez les préférences de synchronisation. Définissez le tag de déclenchement ('Sync tag') et cochez 'Auto-sync on save'.\n",[433,5751],{"alt":5752,"src":5753},"Configuration du Sync Tag et activation de l'auto-synchronisation à l'enregistrement dans Obsidian","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-plugin-sync-behavior-settings.webp",[506,5755,5756,5757,4222,5759],{},"Créez une nouvelle note dans Obsidian et associez-y le tag configuré (par exemple ",[575,5758,5292],{},[433,5760],{"alt":5761,"src":5762},"Création d'une nouvelle note dans Obsidian tagguée avec second-brain pour la synchronisation","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-note-with-sync-tag.webp",[506,5764,5765,5766],{},"Dès l'enregistrement, la note est instantanément synchronisée avec votre instance Cloudflare.\n",[433,5767],{"alt":5768,"src":5769},"Vérification de la note Obsidian synchronisée avec succès dans l'interface web de Second Brain","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fsecond-brain-web-ui-synced-note-verification.webp",[493,5771,4973],{"id":4972},[429,5773,5774],{},"Second Brain offre une réponse open source élégante à l'une de nos plus grandes frustrations avec les IA : l'absence de mémoire à long terme. En s'appuyant sur l'infrastructure robuste de Cloudflare, il déploie une couche de mémoire sémantique auto-hébergée, globale et à très faible latence. Grâce aux interfaces MCP, cette base de connaissances devient nativement transportable entre tous vos assistants virtuels.",[429,5776,5777],{},"L'intégration d'Obsidian pousse l'expérience encore plus loin en jetant un pont entre la prise de notes structurée et l'exécution d'agents. Vos notes personnelles se métamorphosent ainsi en un contexte exploitable par l'IA à la demande.",[429,5779,5780],{},"En fusionnant auto-hébergement, recherche vectorielle sémantique et protocoles ouverts (MCP), Second Brain jette les bases concrètes de ce que doit être un véritable écosystème d'agents IA au service de l'utilisateur.",[493,5782,5783],{"id":1869},"Références :",[503,5785,5786,5792,5798,5805,5812],{},[506,5787,5788],{},[442,5789,5790],{"href":5790,"rel":5791},"https:\u002F\u002Fwww.thesecondbrain.dev\u002F",[446],[506,5793,5794],{},[442,5795,5796],{"href":5796,"rel":5797},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare\u002Fwiki\u002FHow-It-Works",[446],[506,5799,5800],{},[442,5801,5804],{"href":5802,"rel":5803},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare\u002Fwiki\u002FConnect-to-AI-Clients",[446],"Connect to AI Clients",[506,5806,5807],{},[442,5808,5811],{"href":5809,"rel":5810},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare\u002Fwiki\u002FObsidian-Plugin",[446],"Second Brain Obsidian Plugin",[506,5813,5814],{},[442,5815,5816],{"href":5816,"rel":5817},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-obsidian-plugin",[446],[1895,5819,5820],{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":424,"searchDepth":599,"depth":605,"links":5822},[5823,5824,5825,5837,5838],{"id":5060,"depth":599,"text":5061},{"id":5070,"depth":599,"text":5071},{"id":5091,"depth":599,"text":5092,"children":5826},[5827,5828,5829,5830,5831,5832,5833],{"id":5166,"depth":605,"text":5167},{"id":5252,"depth":605,"text":5253},{"id":5402,"depth":605,"text":5403},{"id":5476,"depth":605,"text":5477},{"id":5561,"depth":605,"text":5562},{"id":5644,"depth":605,"text":5645},{"id":5680,"depth":605,"text":5681,"children":5834},[5835,5836],{"id":5692,"depth":612,"text":5693},{"id":5726,"depth":612,"text":5727},{"id":4972,"depth":599,"text":4973},{"id":1869,"depth":599,"text":5783},[5840,4094],"cloudflare","2026-08-07","Découvrez comment créer une mémoire IA persistante et auto-hébergée sur Cloudflare avec Second Brain et MCP. Partagez votre contexte entre Claude et Obsidian.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002FFR-Use-Cloudflare-as-AI-memory.webp","Un système de mémoire IA persistant et auto-hébergé sur Cloudflare Workers et Vectorize avec support MCP et synchronisation Obsidian.",{"schemaOrg":5846,"robots":1933,"sitemap":5849},[5847],{"@type":4102,"headline":5848,"description":5842},"Mémoire IA persistante auto-hébergée avec Cloudflare & MCP",{"lastmod":5841},{"title":5848,"description":5842,"ogTitle":5055,"ogDescription":5842,"twitterTitle":5055,"twitterDescription":5842},"fr\u002Farticle\u002Fuse-cloudflare-as-ai-memory",[4130,5853,5854,5082,1941],"MCP","Mémoire IA","ueDwSZvKuSqGS2apgI6d6XyxbLzPRakfdalGtokWIRs",{"id":5857,"title":4921,"author":424,"body":5858,"category":6375,"date":6376,"description":6377,"extension":1924,"image":6378,"imageAlt":6379,"isPublished":738,"meta":6380,"minRead":612,"navigation":738,"path":399,"seo":6384,"stem":6385,"tags":6386,"updatedAt":1944,"__hash__":6389},"article\u002Ffr\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac.md",{"type":426,"value":5859,"toc":6368},[5860,5864,5867,5874,5878,5884,5887,5890,5894,5897,5904,5920,6214,6328,6330,6333,6335,6365],[493,5861,5863],{"id":5862},"quest-ce-que-cloudflare-warp","Qu'est-ce que Cloudflare WARP ?",[429,5865,5866],{},"Cloudflare WARP est une application côté client qui achemine le trafic de l'appareil spécifié via le réseau mondial de Cloudflare plutôt que de l'envoyer directement sur l'internet public.",[429,5868,5869,5870,5873],{},"Elle crée un tunnel chiffré basé sur le protocole ",[462,5871,5872],{},"WireGuard",", sécurisant le trafic de l'appareil vers le centre de données Cloudflare le plus proche. Des politiques peuvent ensuite être créées dans votre tableau de bord Cloudflare pour filtrer, consigner, inspecter ou acheminer ce trafic entrant.",[493,5875,5877],{"id":5876},"pourquoi-avons-nous-besoin-de-cloudflare-warp","Pourquoi avons-nous besoin de Cloudflare WARP ?",[429,5879,5880,5881,693],{},"Pour exposer de manière sécurisée les ressources internes—telles que les services web privés ou les applications SaaS—aux employés, sous-traitants et autres parties prenantes, le client Cloudflare WARP est utilisé comme point d'application côté client pour l'",[462,5882,5883],{},"Accès Réseau Zero Trust (ZTNA)",[429,5885,5886],{},"Le client Cloudflare WARP est installé sur l'ordinateur portable ou le téléphone d'un utilisateur. Il exige que les utilisateurs s'authentifient et satisfassent à des contrôles de sécurité spécifiques (comme provenir d'une plage d'adresses IP approuvée, utiliser un domaine de messagerie enregistré ou exécuter un pare-feu actif) avant de leur accorder l'accès.",[429,5888,5889],{},"En acheminant le trafic de l'appareil directement vers Cloudflare, l'identité de l'utilisateur, l'appareil et les politiques sont vérifiés avant même que les requêtes n'atteignent les ressources internes. Par conséquent, les ressources internes ne sont jamais exposées à l'internet public, et chaque requête est entièrement enregistrée et auditée.",[493,5891,5893],{"id":5892},"prise-en-charge-de-plusieurs-profils-warp-sur-un-seul-appareil","Prise en charge de plusieurs profils WARP sur un seul appareil",[429,5895,5896],{},"Lorsque les utilisateurs doivent basculer entre des comptes Cloudflare personnels et professionnels, ou lorsque les administrateurs système gèrent plusieurs locataires (tenants), la prise en charge de plusieurs profils WARP sur un seul appareil devient cruciale.",[429,5898,5899,5900,5903],{},"Pour y parvenir sur macOS, nous pouvons utiliser un fichier de profil MDM ",[575,5901,5902],{},".mobileconfig"," afin de définir et d'enregistrer les différents environnements WARP.",[503,5905,5906,5917],{},[506,5907,5908,5916],{},[442,5909,5912,5913,5915],{"href":5910,"rel":5911},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fstatic\u002Fmdm\u002Fmultiple-orgs\u002FCloudflareWARP.mobileconfig",[446],"Download a sample ",[575,5914,5902],{}," file"," directement depuis Cloudflare.",[506,5918,5919],{},"Voici un exemple de ce à quoi ressemble cette configuration :",[569,5921,5925],{"className":5922,"code":5923,"language":5924,"meta":424,"style":424},"language-xml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\u003C!DOCTYPE plist PUBLIC \"-\u002F\u002FApple\u002F\u002FDTD PLIST 1.0\u002F\u002FEN\" \"http:\u002F\u002Fwww.apple.com\u002FDTDs\u002FPropertyList-1.0.dtd\">\n\u003Cplist version=\"1.0\">\n\u003Cdict>\n  \u003Ckey>PayloadContent\u003C\u002Fkey>\n  \u003Carray>\n    \u003Cdict>\n      \u003Ckey>PayloadDisplayName\u003C\u002Fkey>\n      \u003Cstring>Warp Configuration\u003C\u002Fstring>\n      \u003Ckey>PayloadIdentifier\u003C\u002Fkey>\n      \u003Cstring>com.cloudflare.warp.CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n      \u003Ckey>PayloadOrganization\u003C\u002Fkey>\n      \u003Cstring>Cloudflare Ltd.\u003C\u002Fstring>\n      \u003Ckey>PayloadType\u003C\u002Fkey>\n      \u003Cstring>com.cloudflare.warp\u003C\u002Fstring>\n      \u003Ckey>PayloadUUID\u003C\u002Fkey>\n      \u003Cstring>CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n      \u003Ckey>PayloadVersion\u003C\u002Fkey>\n      \u003Cinteger>1\u003C\u002Finteger>\n      \u003Ckey>configs\u003C\u002Fkey>\n      \u003Carray>\n        \u003Cdict>\n          \u003Ckey>organization\u003C\u002Fkey>\n          \u003Cstring>your-team-name-1\u003C\u002Fstring>\n          \u003Ckey>display_name\u003C\u002Fkey>\n          \u003Cstring>Team 1\u003C\u002Fstring>\n        \u003C\u002Fdict>\n        \u003Cdict>\n          \u003Ckey>organization\u003C\u002Fkey>\n          \u003Cstring>your-team-name-2\u003C\u002Fstring>\n          \u003Ckey>display_name\u003C\u002Fkey>\n          \u003Cstring>Team 2\u003C\u002Fstring>\n        \u003C\u002Fdict>\n      \u003C\u002Farray>\n    \u003C\u002Fdict>\n  \u003C\u002Farray>\n  \u003Ckey>PayloadDisplayName\u003C\u002Fkey>\n  \u003Cstring>Cloudflare WARP\u003C\u002Fstring>\n  \u003Ckey>PayloadIdentifier\u003C\u002Fkey>\n  \u003Cstring>cloudflare_warp\u003C\u002Fstring>\n  \u003Ckey>PayloadOrganization\u003C\u002Fkey>\n  \u003Cstring>Cloudflare, Ltd.\u003C\u002Fstring>\n  \u003Ckey>PayloadRemovalDisallowed\u003C\u002Fkey>\n  \u003Cfalse\u002F>\n  \u003Ckey>PayloadScope\u003C\u002Fkey>\n  \u003Cstring>System\u003C\u002Fstring>\n  \u003Ckey>PayloadType\u003C\u002Fkey>\n  \u003Cstring>Configuration\u003C\u002Fstring>\n  \u003Ckey>PayloadUUID\u003C\u002Fkey>\n  \u003Cstring>2B7763B8-64F6-41EB-AA5E-7761651B8131\u003C\u002Fstring>\n  \u003Ckey>PayloadVersion\u003C\u002Fkey>\n  \u003Cinteger>1\u003C\u002Finteger>\n\u003C\u002Fdict>\n\u003C\u002Fplist>\n","xml",[575,5926,5927,5932,5937,5942,5947,5952,5957,5962,5967,5972,5977,5982,5987,5992,5997,6002,6007,6012,6017,6022,6027,6032,6037,6042,6047,6052,6057,6062,6066,6070,6075,6079,6084,6088,6094,6100,6106,6112,6118,6124,6130,6136,6142,6148,6154,6160,6166,6172,6178,6184,6190,6196,6202,6208],{"__ignoreMap":424},[578,5928,5929],{"class":580,"line":581},[578,5930,5931],{},"\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n",[578,5933,5934],{"class":580,"line":599},[578,5935,5936],{},"\u003C!DOCTYPE plist PUBLIC \"-\u002F\u002FApple\u002F\u002FDTD PLIST 1.0\u002F\u002FEN\" \"http:\u002F\u002Fwww.apple.com\u002FDTDs\u002FPropertyList-1.0.dtd\">\n",[578,5938,5939],{"class":580,"line":605},[578,5940,5941],{},"\u003Cplist version=\"1.0\">\n",[578,5943,5944],{"class":580,"line":612},[578,5945,5946],{},"\u003Cdict>\n",[578,5948,5949],{"class":580,"line":622},[578,5950,5951],{},"  \u003Ckey>PayloadContent\u003C\u002Fkey>\n",[578,5953,5954],{"class":580,"line":627},[578,5955,5956],{},"  \u003Carray>\n",[578,5958,5959],{"class":580,"line":633},[578,5960,5961],{},"    \u003Cdict>\n",[578,5963,5964],{"class":580,"line":773},[578,5965,5966],{},"      \u003Ckey>PayloadDisplayName\u003C\u002Fkey>\n",[578,5968,5969],{"class":580,"line":1133},[578,5970,5971],{},"      \u003Cstring>Warp Configuration\u003C\u002Fstring>\n",[578,5973,5974],{"class":580,"line":1141},[578,5975,5976],{},"      \u003Ckey>PayloadIdentifier\u003C\u002Fkey>\n",[578,5978,5979],{"class":580,"line":1149},[578,5980,5981],{},"      \u003Cstring>com.cloudflare.warp.CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n",[578,5983,5984],{"class":580,"line":1157},[578,5985,5986],{},"      \u003Ckey>PayloadOrganization\u003C\u002Fkey>\n",[578,5988,5989],{"class":580,"line":1165},[578,5990,5991],{},"      \u003Cstring>Cloudflare Ltd.\u003C\u002Fstring>\n",[578,5993,5994],{"class":580,"line":1173},[578,5995,5996],{},"      \u003Ckey>PayloadType\u003C\u002Fkey>\n",[578,5998,5999],{"class":580,"line":1181},[578,6000,6001],{},"      \u003Cstring>com.cloudflare.warp\u003C\u002Fstring>\n",[578,6003,6004],{"class":580,"line":1192},[578,6005,6006],{},"      \u003Ckey>PayloadUUID\u003C\u002Fkey>\n",[578,6008,6009],{"class":580,"line":1197},[578,6010,6011],{},"      \u003Cstring>CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n",[578,6013,6014],{"class":580,"line":1205},[578,6015,6016],{},"      \u003Ckey>PayloadVersion\u003C\u002Fkey>\n",[578,6018,6019],{"class":580,"line":1744},[578,6020,6021],{},"      \u003Cinteger>1\u003C\u002Finteger>\n",[578,6023,6024],{"class":580,"line":1750},[578,6025,6026],{},"      \u003Ckey>configs\u003C\u002Fkey>\n",[578,6028,6029],{"class":580,"line":1761},[578,6030,6031],{},"      \u003Carray>\n",[578,6033,6034],{"class":580,"line":2424},[578,6035,6036],{},"        \u003Cdict>\n",[578,6038,6039],{"class":580,"line":2880},[578,6040,6041],{},"          \u003Ckey>organization\u003C\u002Fkey>\n",[578,6043,6044],{"class":580,"line":2889},[578,6045,6046],{},"          \u003Cstring>your-team-name-1\u003C\u002Fstring>\n",[578,6048,6049],{"class":580,"line":2897},[578,6050,6051],{},"          \u003Ckey>display_name\u003C\u002Fkey>\n",[578,6053,6054],{"class":580,"line":2905},[578,6055,6056],{},"          \u003Cstring>Team 1\u003C\u002Fstring>\n",[578,6058,6059],{"class":580,"line":2910},[578,6060,6061],{},"        \u003C\u002Fdict>\n",[578,6063,6064],{"class":580,"line":2917},[578,6065,6036],{},[578,6067,6068],{"class":580,"line":2925},[578,6069,6041],{},[578,6071,6072],{"class":580,"line":2933},[578,6073,6074],{},"          \u003Cstring>your-team-name-2\u003C\u002Fstring>\n",[578,6076,6077],{"class":580,"line":2944},[578,6078,6051],{},[578,6080,6081],{"class":580,"line":2952},[578,6082,6083],{},"          \u003Cstring>Team 2\u003C\u002Fstring>\n",[578,6085,6086],{"class":580,"line":2959},[578,6087,6061],{},[578,6089,6091],{"class":580,"line":6090},34,[578,6092,6093],{},"      \u003C\u002Farray>\n",[578,6095,6097],{"class":580,"line":6096},35,[578,6098,6099],{},"    \u003C\u002Fdict>\n",[578,6101,6103],{"class":580,"line":6102},36,[578,6104,6105],{},"  \u003C\u002Farray>\n",[578,6107,6109],{"class":580,"line":6108},37,[578,6110,6111],{},"  \u003Ckey>PayloadDisplayName\u003C\u002Fkey>\n",[578,6113,6115],{"class":580,"line":6114},38,[578,6116,6117],{},"  \u003Cstring>Cloudflare WARP\u003C\u002Fstring>\n",[578,6119,6121],{"class":580,"line":6120},39,[578,6122,6123],{},"  \u003Ckey>PayloadIdentifier\u003C\u002Fkey>\n",[578,6125,6127],{"class":580,"line":6126},40,[578,6128,6129],{},"  \u003Cstring>cloudflare_warp\u003C\u002Fstring>\n",[578,6131,6133],{"class":580,"line":6132},41,[578,6134,6135],{},"  \u003Ckey>PayloadOrganization\u003C\u002Fkey>\n",[578,6137,6139],{"class":580,"line":6138},42,[578,6140,6141],{},"  \u003Cstring>Cloudflare, Ltd.\u003C\u002Fstring>\n",[578,6143,6145],{"class":580,"line":6144},43,[578,6146,6147],{},"  \u003Ckey>PayloadRemovalDisallowed\u003C\u002Fkey>\n",[578,6149,6151],{"class":580,"line":6150},44,[578,6152,6153],{},"  \u003Cfalse\u002F>\n",[578,6155,6157],{"class":580,"line":6156},45,[578,6158,6159],{},"  \u003Ckey>PayloadScope\u003C\u002Fkey>\n",[578,6161,6163],{"class":580,"line":6162},46,[578,6164,6165],{},"  \u003Cstring>System\u003C\u002Fstring>\n",[578,6167,6169],{"class":580,"line":6168},47,[578,6170,6171],{},"  \u003Ckey>PayloadType\u003C\u002Fkey>\n",[578,6173,6175],{"class":580,"line":6174},48,[578,6176,6177],{},"  \u003Cstring>Configuration\u003C\u002Fstring>\n",[578,6179,6181],{"class":580,"line":6180},49,[578,6182,6183],{},"  \u003Ckey>PayloadUUID\u003C\u002Fkey>\n",[578,6185,6187],{"class":580,"line":6186},50,[578,6188,6189],{},"  \u003Cstring>2B7763B8-64F6-41EB-AA5E-7761651B8131\u003C\u002Fstring>\n",[578,6191,6193],{"class":580,"line":6192},51,[578,6194,6195],{},"  \u003Ckey>PayloadVersion\u003C\u002Fkey>\n",[578,6197,6199],{"class":580,"line":6198},52,[578,6200,6201],{},"  \u003Cinteger>1\u003C\u002Finteger>\n",[578,6203,6205],{"class":580,"line":6204},53,[578,6206,6207],{},"\u003C\u002Fdict>\n",[578,6209,6211],{"class":580,"line":6210},54,[578,6212,6213],{},"\u003C\u002Fplist>\n",[503,6215,6216,6226,6238,6248,6254,6271,6283,6303,6319],{},[506,6217,6218,6219,464,6222,6225],{},"Remplacez ",[575,6220,6221],{},"your-team-name-1",[575,6223,6224],{},"your-team-name-2"," par vos noms d'équipe Cloudflare Zero Trust respectifs.",[506,6227,800,6228,6231,6232,6235,6236,693],{},[575,6229,6230],{},"uuidgen"," dans votre Terminal pour générer des UUID uniques, et utilisez-les pour remplacer les valeurs ",[575,6233,6234],{},"PayloadUUID"," temporaires dans le fichier ",[575,6237,5902],{},[506,6239,6240,6241,6244,6245,6247],{},"Assurez-vous que la chaîne ",[575,6242,6243],{},"PayloadIdentifier"," contient également le ",[575,6246,6234],{}," mis à jour pour que le profil reste distinct.",[506,6249,6250,6251,6253],{},"Enregistrez votre fichier ",[575,6252,5902],{}," modifié.",[506,6255,6256,6257,6260,6261,6264,6265,6267],{},"Ouvrez les ",[462,6258,6259],{},"Réglages Système"," sur votre Mac, recherchez ",[462,6262,6263],{},"Profils",", puis sélectionnez-le.",[4304,6266],{},[433,6268],{"alt":6269,"src":6270},"Panneau des profils dans les Réglages Système de macOS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-system-settings-profiles.webp",[506,6272,2113,6273,6276,6277,6279],{},[462,6274,6275],{},"Installer, afficher ou supprimer..."," pour commencer à ajouter votre nouveau profil de configuration.",[4304,6278],{},[433,6280],{"alt":6281,"src":6282},"Bouton pour installer, afficher ou supprimer des profils sur macOS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-profiles-view-remove.webp",[506,6284,6285,6286,6289,6290,6292,6293,6295,6299],{},"Cliquez sur l'icône ",[462,6287,6288],{},"+"," (plus) dans le coin inférieur gauche et sélectionnez votre fichier ",[575,6291,5902],{}," enregistré.",[4304,6294],{},[433,6296],{"alt":6297,"src":6298},"Bouton plus (+) des profils macOS pour ajouter un nouveau profil","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-profiles-add-profile.webp",[433,6300],{"alt":6301,"src":6302},"Sélection du fichier .mobileconfig sur macOS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-select-mobileconfig-file.webp",[506,6304,6305,6306,6308,6309,6312,6313,6315],{},"Sélectionnez ",[462,6307,4145],{}," et cliquez sur ",[462,6310,6311],{},"Installer"," pour appliquer la configuration.",[4304,6314],{},[433,6316],{"alt":6317,"src":6318},"Confirmation de l'installation du profil Cloudflare WARP sur macOS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-install-cloudflare-warp-profile.webp",[506,6320,6321,6322,6324],{},"Redémarrez votre client Cloudflare WARP. Vous devriez maintenant voir le sélecteur multi-profil dans l'interface utilisateur :",[4304,6323],{},[433,6325],{"alt":6326,"src":6327},"Client Cloudflare WARP avec sélecteur multi-profils sur macOS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fcloudflare-warp-multi-profile-switcher.webp",[493,6329,4973],{"id":4972},[429,6331,6332],{},"Le client Cloudflare WARP agit comme un point de sécurité critique sur les appareils des utilisateurs, rendant l'Accès Réseau Zero Trust à la fois robuste et hautement pratique. Maintenir les ressources internes isolées de l'internet public garantit que chaque tentative de connexion est sécurisée, authentifiée, évaluée et auditée.",[493,6334,1870],{"id":1869},[503,6336,6337,6344,6351,6358],{},[506,6338,6339],{},[442,6340,6343],{"href":6341,"rel":6342},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fteam-and-resources\u002Fdevices\u002Fcloudflare-one-client\u002Fdeployment\u002Fmdm-deployment\u002F#prepare-file-for-mdm-deployment",[446],"Managed Deployment Preparation",[506,6345,6346],{},[442,6347,6350],{"href":6348,"rel":6349},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fteam-and-resources\u002Fdevices\u002Fcloudflare-one-client\u002Fdeployment\u002Fmdm-deployment\u002Fswitch-organizations\u002F",[446],"Switch Between Zero Trust Organizations",[506,6352,6353],{},[442,6354,6357],{"href":6355,"rel":6356},"https:\u002F\u002Fblog.cloudflare.com\u002Fintroducing-warp-connector-paving-the-path-to-any-to-any-connectivity-2\u002F",[446],"Introducing WARP Connector: Paving the Path to Any-to-Any Connectivity",[506,6359,6360],{},[442,6361,6364],{"href":6362,"rel":6363},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fteam-and-resources\u002Fdevices\u002Fcloudflare-one-client\u002F",[446],"Cloudflare One Client Documentation",[1895,6366,6367],{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":424,"searchDepth":599,"depth":605,"links":6369},[6370,6371,6372,6373,6374],{"id":5862,"depth":599,"text":5863},{"id":5876,"depth":599,"text":5877},{"id":5892,"depth":599,"text":5893},{"id":4972,"depth":599,"text":4973},{"id":1869,"depth":599,"text":1870},[5006,5840],"2026-07-04","Configurez et basculez entre plusieurs organisations Cloudflare WARP sur macOS via un fichier .mobileconfig. Guide MDM complet pour les administrateurs IT.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002FFR-Switch-Between-Multiple-Cloudflare-WARP-Orgs-on-Mac.webp","Configurer plusieurs profils Cloudflare WARP sur macOS",{"schemaOrg":6381,"robots":1933,"sitemap":6383},[6382],{"@type":1932,"headline":4921,"description":6377},{"lastmod":6376},{"title":6379,"description":6377,"ogTitle":4921,"ogDescription":6377,"twitterTitle":4921,"twitterDescription":6377},"fr\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",[6387,4145,6388,1943],"macOS","MDM","jJik-19rQGXNPJD_47FtTwK_qZTlpBhn9RktaRCaTsE",1792490010903]