[{"data":1,"prerenderedAt":5273},["ShallowReactive",2],{"published-article-paths":3,"search-navigation":348,"\u002Ffr\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp":421,"\u002Ffr\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp-surround":1409},[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":1356,"date":1359,"description":1360,"extension":1361,"image":1362,"imageAlt":1363,"isPublished":646,"meta":1364,"minRead":1034,"navigation":646,"path":115,"seo":1401,"stem":1403,"tags":1404,"updatedAt":1400,"__hash__":1408},"article\u002Ffr\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp.md","Exposer Hermes Agent en privé via Cloudflare WARP","",{"type":426,"value":427,"toc":1338},"minimark",[428,445,456,461,464,478,483,492,496,500,553,557,710,714,748,752,755,822,825,861,864,891,895,905,910,949,1042,1046,1051,1068,1077,1157,1162,1208,1212,1257,1272,1276,1320,1324,1334],[429,430,431,432,436,437,440,441,444],"p",{},"Un défi courant se pose lorsque vous souhaitez accéder à votre ",[433,434,435],"strong",{},"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 ",[433,438,439],{},"Cloudflare WARP"," avec ",[433,442,443],{},"Cloudflare Zero Trust"," vous permet d'exposer globalement le Hermes Agent sans ouvrir le moindre port entrant sur votre pare-feu.",[429,446,447,448,452,453,455],{},"Si vous avez suivi notre guide précédent, '",[449,450,451],"a",{"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 ",[433,454,439],{}," pour exposer le Hermes Agent à un réseau privé via Internet.",[457,458,460],"h2",{"id":459},"comprendre-larchitecture","Comprendre l'architecture",[429,462,463],{},"Les composants en jeu :",[465,466,467,473],"ol",{},[468,469,470,472],"li",{},[433,471,443],{}," : Le tableau de bord chez Cloudflare où vous définissez les règles de routage et les politiques d'accès.",[468,474,475,477],{},[433,476,439],{}," : 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.",[479,480,482],"h3",{"id":481},"prérequis","Prérequis",[484,485,486,489],"ul",{},[468,487,488],{},"Un Hermes Agent en cours d'exécution sur votre VPS.",[468,490,491],{},"Un compte Cloudflare gratuit.",[457,493,495],{"id":494},"guide-étape-par-étape","Guide étape par étape",[479,497,499],{"id":498},"étape-1-configurer-cloudflare-zero-trust","Étape 1 : Configurer Cloudflare Zero Trust",[465,501,502,512,520,532,539,546],{},[468,503,504,505,511],{},"Connectez-vous à votre ",[449,506,510],{"href":507,"rel":508},"https:\u002F\u002Fdash.cloudflare.com\u002F",[509],"nofollow","Tableau de bord Cloudflare",".",[468,513,514,515],{},"Cliquez sur 'Zero Trust' dans le menu de gauche.\n",[516,517],"img",{"alt":518,"src":519},"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",[468,521,522,523,527,528],{},"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, ",[524,525,526],"code",{},"ai-team",").\n",[516,529],{"alt":530,"src":531},"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",[468,533,534,535],{},"Cliquez sur 'Access' puis sur 'Policies' pour créer une politique d'accès définissant qui a accès au réseau.\n",[516,536],{"alt":537,"src":538},"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",[468,540,541,542],{},"Cliquez sur 'Create new policy'.\n",[516,543],{"alt":544,"src":545},"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",[468,547,548,549],{},"Sélectionnez 'Emails' et entrez votre adresse e-mail sous 'Policy rules'.\n",[516,550],{"alt":551,"src":552},"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",[479,554,556],{"id":555},"étape-2-configurer-le-client-cloudflare-warp-sur-le-vps","Étape 2 : Configurer le client Cloudflare WARP sur le VPS",[465,558,559,570,576,583,586,601,604,703],{},[468,560,561,562,565,566,569],{},"Exécutez ",[524,563,564],{},"sudo apt update"," et ",[524,567,568],{},"sudo apt install cloudflare-warp"," dans le terminal de votre VPS.",[468,571,561,572,575],{},[524,573,574],{},"warp-cli registration new \u003CTEAM-NAME>"," dans le terminal de votre VPS, ce qui affichera une URL.",[468,577,578,579,582],{},"Copiez l'URL affichée, qui ressemblera à ",[524,580,581],{},"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fwarp",", et collez-la dans votre navigateur pour l'authentification.",[468,584,585],{},"L'authentification par e-mail étant utilisée dans la configuration de la politique ci-dessus, entrez votre e-mail pour vous authentifier.",[468,587,588,589,592,593,596,597,600],{},"Sur la page '",[433,590,591],{},"Success","' (Succès) du navigateur, faites un clic droit et sélectionnez '",[433,594,595],{},"Inspect","' (Inspecter) sur le bouton bleu '",[433,598,599],{},"Open Cloudflare WARP","'.",[468,602,603],{},"Copiez le long jeton (token) qui est indiqué dans le lien du bouton.",[468,605,561,606,609,610,613,614],{},[524,607,608],{},"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.",[611,612],"br",{},"Si vous rencontrez l'erreur 'Error: Failed to communicate with the WARP API' sur Ubuntu 26, exécutez les commandes suivantes :",[615,616,620],"pre",{"className":617,"code":618,"language":619,"meta":424,"style":424},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","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","bash",[524,621,622,641,648,655,667,672,678],{"__ignoreMap":424},[623,624,627,631,635,638],"span",{"class":625,"line":626},"line",1,[623,628,630],{"class":629},"sBMFI","sudo",[623,632,634],{"class":633},"sfazB"," systemctl",[623,636,637],{"class":633}," restart",[623,639,640],{"class":633}," warp-svc.service\n",[623,642,644],{"class":625,"line":643},2,[623,645,647],{"emptyLinePlaceholder":646},true,"\n",[623,649,651],{"class":625,"line":650},3,[623,652,654],{"class":653},"sHwdD","# Check status\n",[623,656,658,660,662,665],{"class":625,"line":657},4,[623,659,630],{"class":629},[623,661,634],{"class":633},[623,663,664],{"class":633}," status",[623,666,640],{"class":633},[623,668,670],{"class":625,"line":669},5,[623,671,647],{"emptyLinePlaceholder":646},[623,673,675],{"class":625,"line":674},6,[623,676,677],{"class":653},"# Run the warp-cli registration token again\n",[623,679,681,684,687,690,693,697,700],{"class":625,"line":680},7,[623,682,683],{"class":629},"warp-cli",[623,685,686],{"class":633}," --accept-tos",[623,688,689],{"class":633}," registration",[623,691,692],{"class":633}," token",[623,694,696],{"class":695},"sMK4o","   \"",[623,698,699],{"class":633},"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fauth?token=\u003Ccopied_token>",[623,701,702],{"class":695},"\"\n",[468,704,705,706],{},"Retournez au tableau de bord Cloudflare Zero Trust et cliquez sur 'Devices' (Appareils). Votre appareil VPS devrait maintenant s'afficher.\n",[516,707],{"alt":708,"src":709},"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",[479,711,713],{"id":712},"étape-3-configurer-le-routage-du-trafic","Étape 3 : Configurer le routage du trafic",[465,715,716,723,730,737],{},[468,717,718,719],{},"Cliquez sur le profil de votre VPS dans le tableau de bord Devices.\n",[516,720],{"alt":721,"src":722},"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",[468,724,725,726],{},"Faites défiler jusqu'à la section 'Split Tunnels' (Tunnels divisés).\n",[516,727],{"alt":728,"src":729},"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",[468,731,732,733],{},"Cliquez sur the bouton 'Manage' (Gérer) et configurez les paramètres comme indiqué ci-dessous. Remplacez l'adresse IP si nécessaire.\n",[516,734],{"alt":735,"src":736},"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",[468,738,739,740,743,744,747],{},"Exposer l'",[524,741,742],{},"address"," (adresse) et le ",[524,745,746],{},"host"," (hôte) acheminera le trafic vers vos services sur le même réseau privé.",[479,749,751],{"id":750},"étape-4-configurer-le-pare-feu-sur-le-vps","Étape 4 : Configurer le pare-feu sur le VPS",[429,753,754],{},"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.",[615,756,758],{"className":617,"code":757,"language":619,"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",[524,759,760,774,791,805],{"__ignoreMap":424},[623,761,762,764,767,770],{"class":625,"line":626},[623,763,630],{"class":629},[623,765,766],{"class":633}," ufw",[623,768,769],{"class":633}," enable",[623,771,773],{"class":772},"sTEyZ"," \n",[623,775,776,778,780,783,786,789],{"class":625,"line":643},[623,777,630],{"class":629},[623,779,766],{"class":633},[623,781,782],{"class":633}," default",[623,784,785],{"class":633}," allow",[623,787,788],{"class":633}," outgoing",[623,790,773],{"class":772},[623,792,793,795,797,799,802],{"class":625,"line":650},[623,794,630],{"class":629},[623,796,766],{"class":633},[623,798,782],{"class":633},[623,800,801],{"class":633}," deny",[623,803,804],{"class":633}," incoming\n",[623,806,807,809,811,813,816,819],{"class":625,"line":657},[623,808,630],{"class":629},[623,810,766],{"class":633},[623,812,785],{"class":633},[623,814,815],{"class":633}," in",[623,817,818],{"class":633}," from",[623,820,821],{"class":633}," 100.96.0.0\u002F12\n",[429,823,824],{},"Autorisez le trafic loopback pour éviter de perturber les services locaux :",[615,826,828],{"className":617,"code":827,"language":619,"meta":424,"style":424},"sudo ufw allow in on lo\nsudo ufw allow out on lo\n",[524,829,830,846],{"__ignoreMap":424},[623,831,832,834,836,838,840,843],{"class":625,"line":626},[623,833,630],{"class":629},[623,835,766],{"class":633},[623,837,785],{"class":633},[623,839,815],{"class":633},[623,841,842],{"class":633}," on",[623,844,845],{"class":633}," lo\n",[623,847,848,850,852,854,857,859],{"class":625,"line":643},[623,849,630],{"class":629},[623,851,766],{"class":633},[623,853,785],{"class":633},[623,855,856],{"class":633}," out",[623,858,842],{"class":633},[623,860,845],{"class":633},[429,862,863],{},"Rechargez le pare-feu et vérifiez son statut :",[615,865,867],{"className":617,"code":866,"language":619,"meta":424,"style":424},"sudo ufw reload \nsudo ufw status verbose\n",[524,868,869,880],{"__ignoreMap":424},[623,870,871,873,875,878],{"class":625,"line":626},[623,872,630],{"class":629},[623,874,766],{"class":633},[623,876,877],{"class":633}," reload",[623,879,773],{"class":772},[623,881,882,884,886,888],{"class":625,"line":643},[623,883,630],{"class":629},[623,885,766],{"class":633},[623,887,664],{"class":633},[623,889,890],{"class":633}," verbose\n",[479,892,894],{"id":893},"étape-5-exposer-hermes-agent-au-réseau-privé","Étape 5 : Exposer Hermes Agent au réseau privé",[429,896,897,898,901,902,511],{},"Nous allons exposer le ",[433,899,900],{},"Hermes Agent Web Dashboard"," à notre réseau privé et utiliser le fournisseur d'authentification par défaut, ",[433,903,904],{},"Nous Research",[906,907,909],"h4",{"id":908},"configurer-le-fournisseur-dauthentification","Configurer le fournisseur d'authentification",[465,911,912,921,928,935,942],{},[468,913,914,915,920],{},"Rendez-vous sur ",[449,916,919],{"href":917,"rel":918},"https:\u002F\u002Fportal.nousresearch.com",[509],"portal.nousresearch.com"," pour créer un compte.",[468,922,923,924],{},"Sélectionnez 'Local Dashboards' (Tableaux de bord locaux).\n",[516,925],{"alt":926,"src":927},"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",[468,929,930,931],{},"Cliquez sur 'Register Dashboard' (Enregistrer le tableau de bord).\n",[516,932],{"alt":933,"src":934},"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",[468,936,937,938],{},"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",[516,939],{"alt":940,"src":941},"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",[468,943,944,945,948],{},"Copiez le 'OAuth client ID' et collez-le dans votre fichier ",[524,946,947],{},"config.yaml"," :",[615,950,954],{"className":951,"code":952,"language":953,"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",[524,955,956,965,976,987,994,1004,1014,1021,1032],{"__ignoreMap":424},[623,957,958,962],{"class":625,"line":626},[623,959,961],{"class":960},"swJcz","dashboard",[623,963,964],{"class":695},":\n",[623,966,967,970,973],{"class":625,"line":643},[623,968,969],{"class":960},"  theme",[623,971,972],{"class":695},":",[623,974,975],{"class":633}," default\n",[623,977,978,981,983],{"class":625,"line":650},[623,979,980],{"class":960},"  show_token_analytics",[623,982,972],{"class":695},[623,984,986],{"class":985},"sfNiH"," false\n",[623,988,989,992],{"class":625,"line":657},[623,990,991],{"class":960},"  oauth",[623,993,964],{"class":695},[623,995,996,999,1001],{"class":625,"line":669},[623,997,998],{"class":960},"    client_id",[623,1000,972],{"class":695},[623,1002,1003],{"class":633}," agent:cmq02x7ha0002jk0ba3kfnb\n",[623,1005,1006,1009,1011],{"class":625,"line":674},[623,1007,1008],{"class":960},"    portal_url",[623,1010,972],{"class":695},[623,1012,1013],{"class":633}," https:\u002F\u002Fportal.nousresearch.com\n",[623,1015,1016,1019],{"class":625,"line":680},[623,1017,1018],{"class":960},"  basic_auth",[623,1020,964],{"class":695},[623,1022,1024,1027,1029],{"class":625,"line":1023},8,[623,1025,1026],{"class":960},"    username",[623,1028,972],{"class":695},[623,1030,1031],{"class":695}," ''\n",[623,1033,1035,1038,1040],{"class":625,"line":1034},9,[623,1036,1037],{"class":960},"    password_hash",[623,1039,972],{"class":695},[623,1041,1031],{"class":695},[906,1043,1045],{"id":1044},"configurer-systemd-pour-démarrer-automatiquement-le-tableau-de-bord-hermes","Configurer Systemd pour démarrer automatiquement le tableau de bord Hermes",[465,1047,1048],{},[468,1049,1050],{},"Créez un fichier de service :",[615,1052,1056],{"className":1053,"code":1054,"language":1055,"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",[524,1057,1058],{"__ignoreMap":424},[623,1059,1060,1062,1065],{"class":625,"line":626},[623,1061,630],{"class":629},[623,1063,1064],{"class":633}," nano",[623,1066,1067],{"class":633}," \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-dashboard.service\n",[465,1069,1070],{"start":643},[468,1071,1072,1073,1076],{},"Collez la configuration suivante, en vous assurant que ",[524,1074,1075],{},"--host 0.0.0.0"," fait partie de la commande :",[615,1078,1082],{"className":1079,"code":1080,"language":1081,"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",[524,1083,1084,1089,1094,1099,1103,1108,1113,1118,1123,1128,1134,1140,1145,1151],{"__ignoreMap":424},[623,1085,1086],{"class":625,"line":626},[623,1087,1088],{},"[Unit]\n",[623,1090,1091],{"class":625,"line":643},[623,1092,1093],{},"Description=Hermes Dashboard\n",[623,1095,1096],{"class":625,"line":650},[623,1097,1098],{},"After=network.target\n",[623,1100,1101],{"class":625,"line":657},[623,1102,647],{"emptyLinePlaceholder":646},[623,1104,1105],{"class":625,"line":669},[623,1106,1107],{},"[Service]\n",[623,1109,1110],{"class":625,"line":674},[623,1111,1112],{},"User=hermes\n",[623,1114,1115],{"class":625,"line":680},[623,1116,1117],{},"WorkingDirectory=\u002Fhome\u002Fhermes\n",[623,1119,1120],{"class":625,"line":1023},[623,1121,1122],{},"ExecStart=\u002Fhome\u002Fhermes\u002F.local\u002Fbin\u002Fhermes dashboard --host 0.0.0.0\n",[623,1124,1125],{"class":625,"line":1034},[623,1126,1127],{},"Restart=always\n",[623,1129,1131],{"class":625,"line":1130},10,[623,1132,1133],{},"RestartSec=10\n",[623,1135,1137],{"class":625,"line":1136},11,[623,1138,1139],{},"Environment=PATH=\u002Fhome\u002Fhermes\u002F.local\u002Fbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fbin:\u002Fbin\n",[623,1141,1143],{"class":625,"line":1142},12,[623,1144,647],{"emptyLinePlaceholder":646},[623,1146,1148],{"class":625,"line":1147},13,[623,1149,1150],{},"[Install]\n",[623,1152,1154],{"class":625,"line":1153},14,[623,1155,1156],{},"WantedBy=multi-user.target\n",[465,1158,1159],{"start":650},[468,1160,1161],{},"Activez et démarrez le service :",[615,1163,1165],{"className":1053,"code":1164,"language":1055,"meta":424,"style":424},"sudo systemctl daemon-reload\nsudo systemctl enable hermes-dashboard\nsudo systemctl start hermes-dashboard\nsudo systemctl status hermes-dashboard\n",[524,1166,1167,1176,1187,1198],{"__ignoreMap":424},[623,1168,1169,1171,1173],{"class":625,"line":626},[623,1170,630],{"class":629},[623,1172,634],{"class":633},[623,1174,1175],{"class":633}," daemon-reload\n",[623,1177,1178,1180,1182,1184],{"class":625,"line":643},[623,1179,630],{"class":629},[623,1181,634],{"class":633},[623,1183,769],{"class":633},[623,1185,1186],{"class":633}," hermes-dashboard\n",[623,1188,1189,1191,1193,1196],{"class":625,"line":650},[623,1190,630],{"class":629},[623,1192,634],{"class":633},[623,1194,1195],{"class":633}," start",[623,1197,1186],{"class":633},[623,1199,1200,1202,1204,1206],{"class":625,"line":657},[623,1201,630],{"class":629},[623,1203,634],{"class":633},[623,1205,664],{"class":633},[623,1207,1186],{"class":633},[479,1209,1211],{"id":1210},"étape-6-installer-le-client-cloudflare-warp-sur-lordinateur","Étape 6 : Installer le client Cloudflare WARP sur l'ordinateur",[465,1213,1214,1222,1225,1232,1239,1246],{},[468,1215,1216,1217,511],{},"Téléchargez le client Cloudflare WARP depuis le ",[449,1218,1221],{"href":1219,"rel":1220},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fwarp-client\u002Fget-started\u002F",[509],"portail de Cloudflare",[468,1223,1224],{},"Ouvrez et lancez le client Cloudflare WARP après l'installation.",[468,1226,1227,1228],{},"Connectez-vous lorsque vous y êtes invité.\n",[516,1229],{"alt":1230,"src":1231},"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",[468,1233,1234,1235],{},"Une page 'Success' (Succès) s'affichera après une connexion réussie.\n",[516,1236],{"alt":1237,"src":1238},"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",[468,1240,1241,1242],{},"Le client WARP devrait maintenant indiquer qu'il est connecté à votre équipe Zero Trust.\n",[516,1243],{"alt":1244,"src":1245},"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",[468,1247,1248,1249,1252,1253],{},"Accédez à votre navigateur web et entrez votre IP privée (par exemple, ",[524,1250,1251],{},"100.96.0.3","). Le Hermes Web Dashboard devrait se charger avec succès.\n",[516,1254],{"alt":1255,"src":1256},"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",[1258,1259,1260],"blockquote",{},[429,1261,1262,1265,1266,1271],{},[433,1263,1264],{},"Conseil de pro pour les utilisateurs macOS :"," Si vous utilisez le client WARP pour accéder à plusieurs comptes Cloudflare, consultez notre guide rapide sur ",[433,1267,1268],{},[449,1269,1270],{"href":399},"Basculer entre plusieurs profils Cloudflare WARP sur macOS"," pour passer d'un compte à l'autre en toute fluidité.",[479,1273,1275],{"id":1274},"étape-7-installer-le-client-cloudflare-warp-sur-les-appareils-ios","Étape 7 : Installer le client Cloudflare WARP sur les appareils iOS",[465,1277,1278,1285,1293,1301,1309],{},[468,1279,1280,1281,1284],{},"Installez ",[433,1282,1283],{},"Cloudflare One"," depuis l'App Store.",[468,1286,1287,1288],{},"Ouvrez l'application Cloudflare One et entrez le nom de votre équipe lorsque vous y êtes invité.\n",[516,1289],{"alt":1290,"src":1291,"width":1292},"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,[468,1294,1295,1296],{},"Connectez-vous en utilisant la même adresse e-mail que celle configurée dans la règle de politique ci-dessus.\n",[516,1297],{"alt":1298,"src":1299,"width":1300},"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,[468,1302,1303,1304],{},"Une fois connecté, cela devrait ressembler à ceci :\n",[516,1305],{"alt":1306,"src":1307,"width":1308},"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,[468,1310,1311,1312,1314,1315],{},"Accédez à votre navigateur web et entrez l'IP privée ",[524,1313,1251],{}," pour accéder au Hermes Web Dashboard sur votre appareil mobile.\n",[516,1316],{"alt":1317,"src":1318,"width":1319},"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,[457,1321,1323],{"id":1322},"conclusion","Conclusion",[429,1325,1326,1327,1329,1330,1333],{},"Avec ",[433,1328,443],{}," gérant les politiques d'identité et le client ",[433,1331,1332],{},"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.",[1335,1336,1337],"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 .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":643,"depth":650,"links":1339},[1340,1343,1355],{"id":459,"depth":643,"text":460,"children":1341},[1342],{"id":481,"depth":650,"text":482},{"id":494,"depth":643,"text":495,"children":1344},[1345,1346,1347,1348,1349,1353,1354],{"id":498,"depth":650,"text":499},{"id":555,"depth":650,"text":556},{"id":712,"depth":650,"text":713},{"id":750,"depth":650,"text":751},{"id":893,"depth":650,"text":894,"children":1350},[1351,1352],{"id":908,"depth":657,"text":909},{"id":1044,"depth":657,"text":1045},{"id":1210,"depth":650,"text":1211},{"id":1274,"depth":650,"text":1275},{"id":1322,"depth":643,"text":1323},[1357,1358],"ai-agents","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.","md","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 en toute sécurité Hermes Agent à un réseau privé via Cloudflare Zero Trust et un tunnel WARP",{"schemaOrg":1365,"robots":1398,"sitemap":1399},[1366],{"@type":1367,"headline":423,"description":1360,"name":423,"image":1362,"step":1368},"HowTo",[1369,1374,1378,1382,1386,1390,1394],{"@type":1370,"name":1371,"text":1372,"url":1373,"image":519},"HowToStep","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":1370,"name":1375,"text":1376,"url":1377,"image":709},"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":1370,"name":1379,"text":1380,"url":1381,"image":722},"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":1370,"name":1383,"text":1384,"url":1385},"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":1370,"name":1387,"text":1388,"url":1389},"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":1370,"name":1391,"text":1392,"url":1393,"image":1231},"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":1370,"name":1395,"text":1396,"url":1397,"image":1291},"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","index, follow",{"lastmod":1400},"2026-09-28",{"title":1402,"description":1360,"ogTitle":423,"ogDescription":1360,"twitterTitle":423,"twitterDescription":1360},"Accès sécurisé à Hermes Agent avec Cloudflare Zero Trust","fr\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",[439,1405,435,1406,1407],"Zero Trust","Réseau privé","Tutoriel","znaIPQ7_5S4t576NDV1Cm2dwmV4KfgwgNWNih_62HSs",{"surround":1410,"related":4094},[1411,2873],{"id":1412,"title":1413,"author":424,"body":1414,"category":2851,"date":2853,"description":2854,"extension":1361,"image":2855,"imageAlt":2856,"isPublished":646,"meta":2857,"minRead":2124,"navigation":646,"path":135,"seo":2864,"stem":2866,"tags":2867,"updatedAt":2871,"__hash__":2872},"article\u002Ffr\u002Farticle\u002Fsync-obsidian-across-devices.md","Comment synchroniser ses coffres Obsidian en sécurité",{"type":426,"value":1415,"toc":2829},[1416,1419,1424,1433,1442,1459,1464,1473,1477,1482,1496,1512,1515,1519,1523,1530,1535,1539,1544,1602,1609,1641,1645,1652,1660,1667,1729,1732,1751,1758,1770,1774,1778,1789,1794,1805,1827,1832,1846,1851,1857,1862,1877,1880,1885,1888,1893,1897,1902,1916,1920,1934,1944,1948,1953,1956,1966,1999,2003,2010,2154,2188,2193,2214,2225,2230,2234,2244,2315,2319,2325,2362,2493,2500,2506,2512,2518,2521,2527,2533,2547,2558,2565,2571,2578,2707,2713,2718,2721,2726,2729,2733,2738,2743,2749,2760,2770,2774,2785,2790,2796,2799,2803,2826],[429,1417,1418],{},"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.",[516,1420],{"src":1421,"alt":1422,"style":1423},"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,1425,1426,1427,1432],{},"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. ",[449,1428,1431],{"href":1429,"rel":1430},"https:\u002F\u002Fgithub.com\u002Fhjinco\u002Fsynch",[509],"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,1434,1435,1436,1441],{},"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. ",[449,1437,1440],{"href":1438,"rel":1439},"https:\u002F\u002Fgithub.com\u002FNystik-gh\u002Fignis",[509],"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,1443,1444,1445,565,1447,1449,1450,1453,1454,1458],{},"Dans ce guide, nous allons installer ",[433,1446,1431],{},[433,1448,1440],{}," sur un ",[433,1451,1452],{},"VPS"," (Serveur Privé Virtuel), en les hébergeant de manière sécurisée dans un réseau privé ",[433,1455,1456],{},[449,1457,443],{"href":363}," plutôt que de les exposer directement sur l'internet public.",[516,1460],{"src":1461,"alt":1462,"style":1463},"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;",[1465,1466],"article-card",{"description":1467,"image":1468,"image-alt":1469,"label":1470,"min-read":1471,"title":1472,"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",[457,1474,1476],{"id":1475},"synchronisation-sécurisée-des-coffres-obsidian-avec-synch","Synchronisation sécurisée des coffres Obsidian avec Synch",[429,1478,1479,1481],{},[433,1480,1431],{}," offre les fonctionnalités suivantes :",[484,1483,1484,1487,1490,1493],{},[468,1485,1486],{},"Synchronise votre coffre dès que des modifications sont détectées",[468,1488,1489],{},"Chiffre les données du coffre avant leur téléversement",[468,1491,1492],{},"Permet la restauration à partir de l'historique des versions",[468,1494,1495],{},"Comprend une gestion automatique des conflits",[429,1497,1498,1500,1501,1504,1505,1508,1509,1511],{},[433,1499,1431],{}," génère une ",[433,1502,1503],{},"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 ",[433,1506,1507],{},"mot de passe de coffre"," ; ce mot de passe est utilisé pour protéger la ",[433,1510,1503],{}," afin que celle-ci puisse être stockée en toute sécurité sur le serveur et déverrouillée sur d'autres appareils.",[429,1513,1514],{},"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.",[479,1516,1518],{"id":1517},"installer-synch-sur-votre-vps","Installer Synch sur votre VPS",[906,1520,1522],{"id":1521},"créer-un-nom-de-domaine","Créer un nom de domaine",[429,1524,1525,1526,1529],{},"Créez un enregistrement A dans Cloudflare et réglez le statut du proxy sur ",[433,1527,1528],{},"DNS uniquement"," (en contournant le CDN de Cloudflare).",[516,1531],{"src":1532,"alt":1533,"style":1534},"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;",[906,1536,1538],{"id":1537},"installer-synch-via-docker-sur-ubuntu","Installer Synch via Docker sur Ubuntu",[1540,1541,1543],"h5",{"id":1542},"cloner-le-dépôt","Cloner le dépôt",[615,1545,1547],{"className":617,"code":1546,"language":619,"meta":424,"style":424},"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",[524,1548,1549,1563,1568,1573,1582,1586,1591],{"__ignoreMap":424},[623,1550,1551,1554,1557,1560],{"class":625,"line":626},[623,1552,1553],{"class":629},"git",[623,1555,1556],{"class":633}," clone",[623,1558,1559],{"class":633}," https:\u002F\u002Fgithub.com\u002Fhjinco\u002Fsynch.git",[623,1561,1562],{"class":772},"       \n",[623,1564,1565],{"class":625,"line":643},[623,1566,1567],{"class":772},"        \n",[623,1569,1570],{"class":625,"line":650},[623,1571,1572],{"class":653},"# Accéder au dossier de l'API\n",[623,1574,1575,1579],{"class":625,"line":657},[623,1576,1578],{"class":1577},"s2Zo4","cd",[623,1580,1581],{"class":633}," synch\u002Fapps\u002Fapi\n",[623,1583,1584],{"class":625,"line":669},[623,1585,1567],{"class":772},[623,1587,1588],{"class":625,"line":674},[623,1589,1590],{"class":653},"# Copier le fichier d'environnement d'exemple :\n",[623,1592,1593,1596,1599],{"class":625,"line":680},[623,1594,1595],{"class":629},"cp",[623,1597,1598],{"class":633}," .env.example",[623,1600,1601],{"class":633}," .env\n",[1540,1603,1605,1606],{"id":1604},"modifier-les-valeurs-du-env","Modifier les valeurs du ",[524,1607,1608],{},".env",[484,1610,1611,1617,1635],{},[468,1612,1613,1616],{},[524,1614,1615],{},"PUBLIC_URL=synch.pafor.me"," : Saisissez le nom de domaine public de votre serveur Synch (le domaine créé à l'étape précédente).",[468,1618,1619,565,1622,1625,1626,1630,1631,1634],{},[524,1620,1621],{},"BETTER_AUTH_SECRET",[524,1623,1624],{},"SYNC_TOKEN_SECRET"," : Générez des clés sécurisées à l'aide de cet ",[449,1627,1629],{"href":1628},"\u002Ffr\u002Ftools\u002Fsecret-key-hex","outil de clé secrète en ligne"," ou en exécutant deux fois ",[524,1632,1633],{},"openssl rand -hex 32"," dans votre terminal.",[468,1636,1637,1640],{},[524,1638,1639],{},"AUTH_ALLOWED_EMAILS"," : Une liste d'adresses e-mail séparées par des virgules autorisées à s'inscrire et à créer des comptes.",[1540,1642,1644],{"id":1643},"ajouter-le-domaine-au-caddyfile","Ajouter le domaine au Caddyfile",[429,1646,1647,1648,511],{},"Les détails de l'intégration du module Cloudflare DNS avec Caddy et son lancement dans un conteneur se trouvent dans notre ",[449,1649,1651],{"href":1650},"\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",[1465,1653],{"description":1654,"image":1655,"image-alt":1656,"label":1657,"min-read":1658,"title":1659,"to":1650},"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,1661,1662,1663,1666],{},"Insérez la directive ",[524,1664,1665],{},"SYNCH_DOMAIN"," dans votre Caddyfile, pointant vers le port 8787 (le port utilisé par le conteneur Synch) :",[615,1668,1672],{"className":1669,"code":1670,"language":1671,"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",[524,1673,1674,1679,1687,1691,1695,1709,1714,1725],{"__ignoreMap":424},[623,1675,1676],{"class":625,"line":626},[623,1677,1678],{"class":695},"{\n",[623,1680,1681,1684],{"class":625,"line":643},[623,1682,1683],{"class":772},"  acme_dns cloudflare {env.CLOUDFLARE_API_TOKEN",[623,1685,1686],{"class":695},"}\n",[623,1688,1689],{"class":625,"line":650},[623,1690,1686],{"class":772},[623,1692,1693],{"class":625,"line":657},[623,1694,647],{"emptyLinePlaceholder":646},[623,1696,1697,1700,1703,1706],{"class":625,"line":669},[623,1698,1699],{"class":695},"{",[623,1701,1702],{"class":772},"$SYNCH_DOMAIN",[623,1704,1705],{"class":695},"}",[623,1707,1708],{"class":695}," {\n",[623,1710,1711],{"class":625,"line":674},[623,1712,1713],{"class":772},"  encode zstd gzip\n",[623,1715,1716,1719,1721],{"class":625,"line":680},[623,1717,1718],{"class":772},"  reverse_proxy host.docker.internal",[623,1720,972],{"class":695},[623,1722,1724],{"class":1723},"sbssI","8787\n",[623,1726,1727],{"class":625,"line":1023},[623,1728,1686],{"class":695},[429,1730,1731],{},"Lancez le conteneur :",[615,1733,1735],{"className":617,"code":1734,"language":619,"meta":424,"style":424},"docker compose up -d\n",[524,1736,1737],{"__ignoreMap":424},[623,1738,1739,1742,1745,1748],{"class":625,"line":626},[623,1740,1741],{"class":629},"docker",[623,1743,1744],{"class":633}," compose",[623,1746,1747],{"class":633}," up",[623,1749,1750],{"class":633}," -d\n",[429,1752,1753,1754,1757],{},"Exécutez la commande ",[524,1755,1756],{},"curl"," suivante pour vérifier sa disponibilité :",[615,1759,1761],{"className":617,"code":1760,"language":619,"meta":424,"style":424},"curl https:\u002F\u002Fsynch.pafor.me\u002Fhealth\n",[524,1762,1763],{"__ignoreMap":424},[623,1764,1765,1767],{"class":625,"line":626},[623,1766,1756],{"class":629},[623,1768,1769],{"class":633}," https:\u002F\u002Fsynch.pafor.me\u002Fhealth\n",[479,1771,1773],{"id":1772},"connecter-obsidian-à-votre-serveur-synch","Connecter Obsidian à votre serveur Synch",[906,1775,1777],{"id":1776},"installer-le-plugin-synch-sur-obsidian","Installer le plugin Synch sur Obsidian",[429,1779,1780,1781,1784,1785,1788],{},"Ouvrez les paramètres d'Obsidian, accédez à ",[433,1782,1783],{},"Community plugins"," (Plugins de la communauté) et cliquez sur le bouton ",[433,1786,1787],{},"'Browse'"," (Parcourir) :",[516,1790],{"src":1791,"alt":1792,"style":1793},"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,1795,1796,1797,1800,1801],{},"Recherchez et installez ",[433,1798,1799],{},"'Synchrun'"," :\n",[516,1802],{"src":1803,"alt":1804,"style":1534},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-install-synchrun-plugin.webp","Installation du plugin Synchrun dans Obsidian",[429,1806,1807,1808,1810,1811,1814,1815,1818,1819,1822,1823,1826],{},"Une fois ",[433,1809,1799],{}," installé, ouvrez les paramètres du plugin et activez ",[433,1812,1813],{},"'Use a self-hosted server'"," (Utiliser un serveur auto-hébergé). Saisissez ensuite ",[524,1816,1817],{},"https:\u002F\u002Fsynch.pafor.me"," dans le champ ",[433,1820,1821],{},"'Server URL'"," (URL du serveur) et cliquez sur ",[433,1824,1825],{},"'Save'"," (Enregistrer).",[516,1828],{"src":1829,"alt":1830,"style":1831},"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,1833,1834,1835,1838,1839,1842,1843,1845],{},"Cliquez sur le bouton ",[433,1836,1837],{},"'Sign in on this device'"," (Se connecter sur cet appareil) sous ",[433,1840,1841],{},"'Account'"," (Compte). Inscrivez-vous ensuite en utilisant l'adresse e-mail spécifiée dans votre liste ",[524,1844,1639],{}," ; vous serez redirigé vers la page d'autorisation suivante :",[516,1847],{"src":1848,"alt":1849,"style":1850},"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,1852,1834,1853,1856],{},[433,1854,1855],{},"'Allow Obsidian sign-in'"," (Autoriser la connexion Obsidian) :",[516,1858],{"src":1859,"alt":1860,"style":1861},"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,1863,1834,1864,1867,1868,1871,1872],{},[433,1865,1866],{},"'Return to Obsidian'"," (Retourner à Obsidian), puis cliquez sur ",[433,1869,1870],{},"'Create vault'"," (Créer un coffre) :\n",[516,1873],{"src":1874,"alt":1875,"style":1876},"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,1878,1879],{},"Saisissez un nom et un mot de passe sécurisé pour créer votre coffre distant.",[516,1881],{"src":1882,"alt":1883,"style":1884},"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,1886,1887],{},"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.",[516,1889],{"src":1890,"alt":1891,"style":1892},"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;",[457,1894,1896],{"id":1895},"accès-à-obsidian-via-un-navigateur-web-avec-ignis","Accès à Obsidian via un navigateur web avec Ignis",[429,1898,1899,1901],{},[433,1900,1440],{}," 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,1903,1904,1905,565,1910,1915],{},"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 ",[449,1906,1909],{"href":1907,"rel":1908},"https:\u002F\u002Fignis.thiefling.com\u002Fdocs\u002Fusing\u002Flimitations\u002F",[509],"Limitations",[449,1911,1914],{"href":1912,"rel":1913},"https:\u002F\u002Fignis.thiefling.com\u002Fdocs\u002Fusing\u002Fplugin-compatibility\u002F",[509],"Compatibilité des plugins"," pour obtenir la liste détaillée de compatibilité.",[479,1917,1919],{"id":1918},"configuration-dignis","Configuration d'Ignis",[429,1921,1922,1923,1925,1926,1929,1930,1933],{},"Nous allons installer ",[433,1924,1440],{}," sur notre VPS à l'aide de Docker, en le montant sur le dossier local ",[524,1927,1928],{},".\u002Fvaults",". Ce répertoire de coffres sera synchronisé à l'aide de la ",[433,1931,1932],{},"Synch CLI"," pour extraire les mises à jour de notes depuis le coffre distant configuré précédemment.",[429,1935,1936,1937,1939,1940,511],{},"Comme ",[433,1938,1440],{}," ne dispose pas d'authentification intégrée, il doit être sécurisé derrière un réseau privé ",[433,1941,1942],{},[449,1943,443],{"href":363},[906,1945,1947],{"id":1946},"créer-un-enregistrement-dns","Créer un enregistrement DNS",[516,1949],{"src":1950,"alt":1951,"style":1952},"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;",[906,1954,1644],{"id":1955},"ajouter-le-domaine-au-caddyfile-1",[429,1957,1958,1959,1962,1963,948],{},"Ajoutez ",[524,1960,1961],{},"obsidian.pafor.me"," à votre Caddyfile de la même manière que ",[524,1964,1965],{},"synch.pafor.me",[615,1967,1969],{"className":1669,"code":1968,"language":1671,"meta":424,"style":424},"{$OBSIDIAN_DOMAIN} {\n  encode zstd gzip\n  reverse_proxy host.docker.internal:9898\n}\n",[524,1970,1971,1982,1986,1995],{"__ignoreMap":424},[623,1972,1973,1975,1978,1980],{"class":625,"line":626},[623,1974,1699],{"class":695},[623,1976,1977],{"class":772},"$OBSIDIAN_DOMAIN",[623,1979,1705],{"class":695},[623,1981,1708],{"class":695},[623,1983,1984],{"class":625,"line":643},[623,1985,1713],{"class":772},[623,1987,1988,1990,1992],{"class":625,"line":650},[623,1989,1718],{"class":772},[623,1991,972],{"class":695},[623,1993,1994],{"class":1723},"9898\n",[623,1996,1997],{"class":625,"line":657},[623,1998,1686],{"class":695},[906,2000,2002],{"id":2001},"lancer-ignis-avec-docker","Lancer Ignis avec Docker",[429,2004,2005,2006,2009],{},"Enregistrez le code docker compose yml suivant sous le nom ",[524,2007,2008],{},"ignis-docker-compose.yml"," sur le VPS :",[615,2011,2015],{"className":2012,"code":2013,"language":2014,"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",[524,2016,2017,2024,2031,2041,2048,2061,2068,2073,2080,2087,2094,2101,2108,2115,2122,2133,2138,2146],{"__ignoreMap":424},[623,2018,2019,2022],{"class":625,"line":626},[623,2020,2021],{"class":960},"services",[623,2023,964],{"class":695},[623,2025,2026,2029],{"class":625,"line":643},[623,2027,2028],{"class":960},"  ignis",[623,2030,964],{"class":695},[623,2032,2033,2036,2038],{"class":625,"line":650},[623,2034,2035],{"class":960},"    image",[623,2037,972],{"class":695},[623,2039,2040],{"class":633}," nobbe\u002Fignis:latest\n",[623,2042,2043,2046],{"class":625,"line":657},[623,2044,2045],{"class":960},"    ports",[623,2047,964],{"class":695},[623,2049,2050,2053,2056,2059],{"class":625,"line":669},[623,2051,2052],{"class":695},"      -",[623,2054,2055],{"class":695}," \"",[623,2057,2058],{"class":633},"9898:8080",[623,2060,702],{"class":695},[623,2062,2063,2066],{"class":625,"line":674},[623,2064,2065],{"class":960},"    environment",[623,2067,964],{"class":695},[623,2069,2070],{"class":625,"line":680},[623,2071,2072],{"class":653},"      # correspondre à votre utilisateur hôte (exécutez : id)\n",[623,2074,2075,2077],{"class":625,"line":1023},[623,2076,2052],{"class":695},[623,2078,2079],{"class":633}," PUID=1000\n",[623,2081,2082,2084],{"class":625,"line":1034},[623,2083,2052],{"class":695},[623,2085,2086],{"class":633}," PGID=1000\n",[623,2088,2089,2091],{"class":625,"line":1130},[623,2090,2052],{"class":695},[623,2092,2093],{"class":633}," WS_ORIGINS=https:\u002F\u002Fobsidian.pafor.me\n",[623,2095,2096,2099],{"class":625,"line":1136},[623,2097,2098],{"class":960},"    volumes",[623,2100,964],{"class":695},[623,2102,2103,2105],{"class":625,"line":1142},[623,2104,2052],{"class":695},[623,2106,2107],{"class":633}," .\u002Fvaults:\u002Fvaults\n",[623,2109,2110,2112],{"class":625,"line":1147},[623,2111,2052],{"class":695},[623,2113,2114],{"class":633}," .\u002Fdata:\u002Fapp\u002Fdata\n",[623,2116,2117,2119],{"class":625,"line":1153},[623,2118,2052],{"class":695},[623,2120,2121],{"class":633}," obsidian-app:\u002Fapp\u002Fobsidian-app\n",[623,2123,2125,2128,2130],{"class":625,"line":2124},15,[623,2126,2127],{"class":960},"    restart",[623,2129,972],{"class":695},[623,2131,2132],{"class":633}," unless-stopped\n",[623,2134,2136],{"class":625,"line":2135},16,[623,2137,647],{"emptyLinePlaceholder":646},[623,2139,2141,2144],{"class":625,"line":2140},17,[623,2142,2143],{"class":960},"volumes",[623,2145,964],{"class":695},[623,2147,2149,2152],{"class":625,"line":2148},18,[623,2150,2151],{"class":960},"  obsidian-app",[623,2153,964],{"class":695},[484,2155,2156,2167,2181],{},[468,2157,2158,2159,2162,2163,2166],{},"Utilisez le port ",[524,2160,2161],{},"9898"," sur l'hôte, car le port ",[524,2164,2165],{},"8080"," est couramment utilisé par d'autres services.",[468,2168,1753,2169,2172,2173,2176,2177,2180],{},[524,2170,2171],{},"id"," sur votre VPS pour vérifier l' ",[524,2174,2175],{},"UID"," et le ",[524,2178,2179],{},"GID"," de votre utilisateur hôte afin de garantir des permissions système appropriées.",[468,2182,2183,2184,2187],{},"Définissez ",[524,2185,2186],{},"WS_ORIGINS"," pour autoriser uniquement les connexions WebSocket provenant de votre nom de domaine spécifique.",[429,2189,2190,2191,948],{},"Lancez le Docker d' ",[433,2192,1440],{},[615,2194,2196],{"className":617,"code":2195,"language":619,"meta":424,"style":424},"docker compose -f ignis-docker-compose.yml up -d\n",[524,2197,2198],{"__ignoreMap":424},[623,2199,2200,2202,2204,2207,2210,2212],{"class":625,"line":626},[623,2201,1741],{"class":629},[623,2203,1744],{"class":633},[623,2205,2206],{"class":633}," -f",[623,2208,2209],{"class":633}," ignis-docker-compose.yml",[623,2211,1747],{"class":633},[623,2213,1750],{"class":633},[429,2215,2216,2217,2220,2221,2224],{},"Lorsque vous naviguez vers votre domaine dans un navigateur web, le ",[433,2218,2219],{},"'Vault Manager'"," s'affiche. Il sera vide car aucun coffre n'est encore configuré. Nous allons installer la ",[433,2222,2223],{},"'Synch CLI'"," dans la section suivante pour synchroniser les contenus de notre coffre distant.",[516,2226],{"src":2227,"alt":2228,"style":2229},"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;",[906,2231,2233],{"id":2232},"problème-de-pare-feu","Problème de pare-feu",[429,2235,2236,2237,2240,2241,948],{},"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 ",[524,2238,2239],{},"INPUT",". Pour bloquer le trafic public externe et garder les conteneurs privés, ajoutez manuellement les règles suivantes à ",[524,2242,2243],{},"iptables",[615,2245,2247],{"className":617,"code":2246,"language":619,"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",[524,2248,2249,2254,2281,2285,2290],{"__ignoreMap":424},[623,2250,2251],{"class":625,"line":626},[623,2252,2253],{"class":653},"# Bloquer tout le trafic public externe\n",[623,2255,2256,2258,2261,2264,2267,2270,2273,2276,2279],{"class":625,"line":643},[623,2257,630],{"class":629},[623,2259,2260],{"class":633}," iptables",[623,2262,2263],{"class":633}," -I",[623,2265,2266],{"class":633}," DOCKER-USER",[623,2268,2269],{"class":633}," -i",[623,2271,2272],{"class":633}," ext_if",[623,2274,2275],{"class":633}," -j",[623,2277,2278],{"class":633}," DROP",[623,2280,773],{"class":772},[623,2282,2283],{"class":625,"line":650},[623,2284,647],{"emptyLinePlaceholder":646},[623,2286,2287],{"class":625,"line":657},[623,2288,2289],{"class":653},"# Autoriser uniquement le trafic provenant de l'IP privée de votre client Cloudflare WARP\n",[623,2291,2292,2294,2296,2298,2300,2302,2304,2307,2310,2312],{"class":625,"line":669},[623,2293,630],{"class":629},[623,2295,2260],{"class":633},[623,2297,2263],{"class":633},[623,2299,2266],{"class":633},[623,2301,2269],{"class":633},[623,2303,2272],{"class":633},[623,2305,2306],{"class":633}," -s",[623,2308,2309],{"class":1723}," 100.96.0.10",[623,2311,2275],{"class":633},[623,2313,2314],{"class":633}," ACCEPT\n",[906,2316,2318],{"id":2317},"configuration-de-la-cli-synch","Configuration de la CLI Synch",[429,2320,2321,2322,2324],{},"La ",[433,2323,1932],{}," 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,2326,2327,2328,2330,2331,2334,2335,2338,2339,2342,2343,2346,2347,565,2350,2353,2354,2357,2358,2361],{},"Compilez la ",[433,2329,1932],{}," à partir de votre dépôt ",[524,2332,2333],{},"synch"," cloné. La compilation nécessite ",[433,2336,2337],{},"Node.js >= 22.5"," (car la CLI dépend de ",[524,2340,2341],{},"node:sqlite"," et d'API globales du navigateur comme ",[524,2344,2345],{},"fetch",", ",[524,2348,2349],{},"WebSocket",[524,2351,2352],{},"WebCrypto",") et ",[433,2355,2356],{},"pnpm"," (puisque le dépôt est structuré comme un espace de travail pnpm utilisant la version ",[524,2359,2360],{},"10.33.0",") :",[615,2363,2365],{"className":617,"code":2364,"language":619,"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",[524,2366,2367,2372,2383,2390,2394,2399,2406,2410,2415,2428,2432,2437,2448,2477,2481,2486],{"__ignoreMap":424},[623,2368,2369],{"class":625,"line":626},[623,2370,2371],{"class":653},"# Vérifier les versions\n",[623,2373,2374,2377,2380],{"class":625,"line":643},[623,2375,2376],{"class":629},"node",[623,2378,2379],{"class":633}," --version",[623,2381,2382],{"class":653},"   # doit être >= 22.5\n",[623,2384,2385,2387],{"class":625,"line":650},[623,2386,2356],{"class":629},[623,2388,2389],{"class":633}," --version\n",[623,2391,2392],{"class":625,"line":657},[623,2393,647],{"emptyLinePlaceholder":646},[623,2395,2396],{"class":625,"line":669},[623,2397,2398],{"class":653},"# À la racine du dépôt\n",[623,2400,2401,2403],{"class":625,"line":674},[623,2402,2356],{"class":629},[623,2404,2405],{"class":633}," install\n",[623,2407,2408],{"class":625,"line":680},[623,2409,647],{"emptyLinePlaceholder":646},[623,2411,2412],{"class":625,"line":1023},[623,2413,2414],{"class":653},"# Compiler le paquet de la CLI\n",[623,2416,2417,2419,2422,2425],{"class":625,"line":1034},[623,2418,2356],{"class":629},[623,2420,2421],{"class":633}," -C",[623,2423,2424],{"class":633}," apps\u002Fcli",[623,2426,2427],{"class":633}," build\n",[623,2429,2430],{"class":625,"line":1130},[623,2431,647],{"emptyLinePlaceholder":646},[623,2433,2434],{"class":625,"line":1136},[623,2435,2436],{"class":653},"# Après une compilation réussie, vous obtenez `apps\u002Fcli\u002Fdist\u002Fsynch.js`. Rendez-le exécutable et placez-le dans votre PATH\n",[623,2438,2439,2442,2445],{"class":625,"line":1142},[623,2440,2441],{"class":629},"chmod",[623,2443,2444],{"class":633}," +x",[623,2446,2447],{"class":633}," apps\u002Fcli\u002Fdist\u002Fsynch.js\n",[623,2449,2450,2453,2456,2458,2461,2464,2467,2469,2472,2475],{"class":625,"line":1147},[623,2451,2452],{"class":629},"ln",[623,2454,2455],{"class":633}," -sf",[623,2457,2055],{"class":695},[623,2459,2460],{"class":772},"$PWD",[623,2462,2463],{"class":633},"\u002Fapps\u002Fcli\u002Fdist\u002Fsynch.js",[623,2465,2466],{"class":695},"\"",[623,2468,2055],{"class":695},[623,2470,2471],{"class":772},"$HOME",[623,2473,2474],{"class":633},"\u002F.local\u002Fbin\u002Fsynch",[623,2476,702],{"class":695},[623,2478,2479],{"class":625,"line":1153},[623,2480,647],{"emptyLinePlaceholder":646},[623,2482,2483],{"class":625,"line":2124},[623,2484,2485],{"class":653},"# Vérification\n",[623,2487,2488,2490],{"class":625,"line":2135},[623,2489,2333],{"class":629},[623,2491,2492],{"class":633}," --help\n",[429,2494,2495,2496,2499],{},"É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 ",[524,2497,2498],{},"synch login --api-url \u003Cremote-synch-api-url>"," pour définir votre point d'accès API cible.",[429,2501,2502],{},[516,2503],{"alt":2504,"src":2505},"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,2507,561,2508,2511],{},[524,2509,2510],{},"synch login"," dans votre terminal, et vous recevrez une URL d'authentification :",[429,2513,2514],{},[516,2515],{"alt":2516,"src":2517},"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,2519,2520],{},"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,2522,2523],{},[516,2524],{"alt":2525,"src":2526},"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,2528,561,2529,2532],{},[524,2530,2531],{},"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,2534,2535,2536,2539,2540,2543,2544,2361],{},"L'ID du coffre distant se trouve dans les paramètres du plugin ",[433,2537,2538],{},"Synchrun"," en cliquant sur ",[433,2541,2542],{},"'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. ",[524,2545,2546],{},"123e4567-e89b-12d3-a456-426614174000",[429,2548,2549,2554],{},[516,2550],{"src":2551,"alt":2552,"style":2553},"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;",[516,2555],{"alt":2556,"src":2557},"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,2559,2560,2561,2564],{},"Saisissez le mot de passe de votre coffre lorsque vous y êtes invité pour établir la liaison. Une fois connecté, exécutez ",[524,2562,2563],{},"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,2566,2567],{},[516,2568],{"alt":2569,"src":2570},"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,2572,2573,2574,2577],{},"Pour automatiser cela, configurez et activez un service systemd pour exécuter ",[524,2575,2576],{},"synch watch"," en continu, garantissant une synchronisation instantanée au démarrage :",[615,2579,2581],{"className":617,"code":2580,"language":619,"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",[524,2582,2583,2599,2603,2608,2613,2618,2622,2626,2631,2636,2641,2646,2651,2656,2660,2665,2669,2673,2677,2683,2692],{"__ignoreMap":424},[623,2584,2585,2587,2590,2593,2596],{"class":625,"line":626},[623,2586,630],{"class":629},[623,2588,2589],{"class":633}," tee",[623,2591,2592],{"class":633}," \u002Fetc\u002Fsystemd\u002Fsystem\u002Fsynch-watch.service",[623,2594,2595],{"class":695}," \u003C\u003C",[623,2597,2598],{"class":695},"'EOF'\n",[623,2600,2601],{"class":625,"line":643},[623,2602,1088],{"class":633},[623,2604,2605],{"class":625,"line":650},[623,2606,2607],{"class":633},"Description=Synch vault watcher\n",[623,2609,2610],{"class":625,"line":657},[623,2611,2612],{"class":633},"After=network-online.target\n",[623,2614,2615],{"class":625,"line":669},[623,2616,2617],{"class":633},"Wants=network-online.target\n",[623,2619,2620],{"class":625,"line":674},[623,2621,647],{"emptyLinePlaceholder":646},[623,2623,2624],{"class":625,"line":680},[623,2625,1107],{"class":633},[623,2627,2628],{"class":625,"line":1023},[623,2629,2630],{"class":633},"Type=simple\n",[623,2632,2633],{"class":625,"line":1034},[623,2634,2635],{"class":633},"User=\u003Cusername>\n",[623,2637,2638],{"class":625,"line":1130},[623,2639,2640],{"class":633},"ExecStart=\u002Fhome\u002F\u003Cusername>\u002F.local\u002Fbin\u002Fsynch watch --vault \u002Fhome\u002F\u003Cusername>\u002Fvaults\u002F\u003Cvault-name>\n",[623,2642,2643],{"class":625,"line":1136},[623,2644,2645],{"class":633},"WorkingDirectory=\u002Fhome\u002F\u003Cusername>\u002Fvaults\n",[623,2647,2648],{"class":625,"line":1142},[623,2649,2650],{"class":633},"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",[623,2652,2653],{"class":625,"line":1147},[623,2654,2655],{"class":633},"Environment=\"HOME=\u002Fhome\u002F\u003Cusername>\"\n",[623,2657,2658],{"class":625,"line":1153},[623,2659,1127],{"class":633},[623,2661,2662],{"class":625,"line":2124},[623,2663,2664],{"class":633},"RestartSec=5\n",[623,2666,2667],{"class":625,"line":2135},[623,2668,647],{"emptyLinePlaceholder":646},[623,2670,2671],{"class":625,"line":2140},[623,2672,1150],{"class":633},[623,2674,2675],{"class":625,"line":2148},[623,2676,1156],{"class":633},[623,2678,2680],{"class":625,"line":2679},19,[623,2681,2682],{"class":695},"EOF\n",[623,2684,2686,2688,2690],{"class":625,"line":2685},20,[623,2687,630],{"class":629},[623,2689,634],{"class":633},[623,2691,1175],{"class":633},[623,2693,2695,2697,2699,2701,2704],{"class":625,"line":2694},21,[623,2696,630],{"class":629},[623,2698,634],{"class":633},[623,2700,769],{"class":633},[623,2702,2703],{"class":633}," --now",[623,2705,2706],{"class":633}," synch-watch.service\n",[429,2708,2709,2710,2712],{},"Ouvrez ",[524,2711,1961],{}," dans votre navigateur web. Vous constaterez que l'interface utilisateur et la mise en page sont pratiquement identiques à celles de l'application de bureau :",[516,2714],{"src":2715,"alt":2716,"style":2717},"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,2719,2720],{},"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 :",[516,2722],{"src":2723,"alt":2724,"style":2725},"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,2727,2728],{},"Pour tester l'installation, vous pouvez ajouter une nouvelle note via l'interface web :",[516,2730],{"src":2731,"alt":2732,"style":2725},"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,2734,2735,2736,511],{},"La note est immédiatement synchronisée avec votre application de bureau Obsidian. Notez que les dossiers vides n'apparaissent pas dans ",[433,2737,1440],{},[516,2739],{"src":2740,"alt":2741,"style":2742},"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,2744,2745,2746,2748],{},"Visualisation de ",[524,2747,1961],{}," sur un navigateur web mobile :",[429,2750,2751,2756],{},[516,2752],{"src":2753,"alt":2754,"style":2755},"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;",[516,2757],{"src":2758,"alt":2759,"style":2755},"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,2761,2762,2763,2765,2766,2769],{},"Lorsque vous supprimez une note dans ",[433,2764,1440],{},", elle est déplacée en toute sécurité vers le dossier ",[524,2767,2768],{},"~\u002Fvaults\u002F\u003Cnom-du-coffre>\u002F.trash"," de votre coffre local.",[457,2771,2773],{"id":2772},"dernières-réflexions-sur-les-coffres-auto-hébergés","Dernières réflexions sur les coffres auto-hébergés",[429,2775,2776,2777,565,2779,2781,2782,2784],{},"Ensemble, ",[433,2778,1431],{},[433,2780,1440],{}," 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é ",[433,2783,443],{}," garantit que vos notes personnelles sont entièrement protégées de l'internet public.",[429,2786,2787,2789],{},[433,2788,1440],{}," 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,2791,2792,2793,2795],{},"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 ",[433,2794,1503],{}," 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,2797,2798],{},"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.",[457,2800,2802],{"id":2801},"références","Références",[484,2804,2805,2812,2819],{},[468,2806,2807],{},[449,2808,2811],{"href":2809,"rel":2810},"https:\u002F\u002Fsynch.run\u002Fself-hosting-docker\u002F",[509],"Déployer Synch avec Docker Compose",[468,2813,2814],{},[449,2815,2818],{"href":2816,"rel":2817},"https:\u002F\u002Fignis.thiefling.com\u002Fdocs\u002Fserver\u002Fdeploy\u002F",[509],"Déployer Ignis avec Docker",[468,2820,2821],{},[449,2822,2825],{"href":2823,"rel":2824},"https:\u002F\u002Fsynch.run\u002Fblog\u002Fencryption-and-decryption\u002F",[509],"Comment fonctionne le chiffrement de bout en bout dans Synch ?",[1335,2827,2828],{},"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":643,"depth":650,"links":2830},[2831,2840,2849,2850],{"id":1475,"depth":643,"text":1476,"children":2832},[2833,2837],{"id":1517,"depth":650,"text":1518,"children":2834},[2835,2836],{"id":1521,"depth":657,"text":1522},{"id":1537,"depth":657,"text":1538},{"id":1772,"depth":650,"text":1773,"children":2838},[2839],{"id":1776,"depth":657,"text":1777},{"id":1895,"depth":643,"text":1896,"children":2841},[2842],{"id":1918,"depth":650,"text":1919,"children":2843},[2844,2845,2846,2847,2848],{"id":1946,"depth":657,"text":1947},{"id":1955,"depth":657,"text":1644},{"id":2001,"depth":657,"text":2002},{"id":2232,"depth":657,"text":2233},{"id":2317,"depth":657,"text":2318},{"id":2772,"depth":643,"text":2773},{"id":2801,"depth":643,"text":2802},[2852],"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é.","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":2858,"robots":1398,"sitemap":2862},[2859,2861],{"@type":2860,"headline":1413,"description":2854,"image":2855},"Article",{"@type":1367,"name":1413,"description":2854,"image":2855},{"lastmod":2863},"2026-09-16",{"title":2865,"description":2854,"ogTitle":1413,"ogDescription":2854,"twitterTitle":1413,"twitterDescription":2854},"Sync Obsidian auto-hébergée et sécurisée : Synch & Ignis","fr\u002Farticle\u002Fsync-obsidian-across-devices",[2868,2869,2870,1405],"Auto-hébergement","Obsidian","Synchronisation",null,"hHj4q0ZL3891f1Ld3Q04a8KFMEIi9gzuLrgHZG1xpfQ",{"id":2874,"title":2875,"author":424,"body":2876,"category":4055,"date":4058,"description":4059,"extension":1361,"image":4060,"imageAlt":4061,"isPublished":646,"meta":4062,"minRead":1136,"navigation":646,"path":111,"seo":4087,"stem":4089,"tags":4090,"updatedAt":2871,"__hash__":4093},"article\u002Ffr\u002Farticle\u002Fbringing-buzz-to-deepseek-harness.md","Connecter DeepSeek Harness à Buzz: La passerelle Nostr",{"type":426,"value":2877,"toc":4039},[2878,2884,2904,2910,2913,2917,2923,2964,2967,3024,3028,3034,3299,3302,3306,3310,3316,3320,3334,3338,3347,3393,3400,3404,3407,3439,3443,3448,3489,3497,3503,3512,3518,3547,3560,3564,3573,3602,3624,3672,3679,3684,3690,3697,3703,3708,3715,3729,3735,3744,3779,3782,3788,3795,3801,3805,3808,3959,3963,3997,4001,4007,4010,4036],[429,2879,2880],{},[516,2881],{"alt":2882,"src":2883},"Vue d'ensemble de la passerelle de messagerie DeepSeek Harness connectée à un canal Block Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-nostr-gateway-overview.webp",[429,2885,2886,2887,2894,2895,2899,2900,511],{},"Le plugin pour DeepSeek Harness (DSH), ",[433,2888,2889],{},[449,2890,2893],{"href":2891,"rel":2892},"https:\u002F\u002Fgithub.com\u002Fa792883583\u002Fdsh-message-gateway",[509],"dsh-message-gateway",", étend l'assistant DeepSeek Harness à de multiples plateformes de messagerie telles que Discord, Telegram et WeChat. Le dépôt du plugin a été forké et enrichi pour ajouter la plateforme ",[433,2896,2897],{},[449,2898,1659],{"href":383}," à la liste. Le dépôt forké est disponible sur GitHub à l'adresse ",[449,2901,2902],{"href":2902,"rel":2903},"https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fdsh-message-gateway",[509],[1465,2905],{"description":2906,"image":2907,"image-alt":2908,"label":2909,"min-read":1658,"title":1659,"to":383},"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.","Guide prérequis",[429,2911,2912],{},"L'assistant DSH rejoint un relais Buzz en tant que membre à part entière, reçoit les messages directs (DM) ainsi que les messages de canal où il est @mentionné, et répond à travers le même pipeline d'agents par conversation qu'utilise l'interface Web.",[457,2914,2916],{"id":2915},"architecture-du-plugin-dsh-message-gateway","Architecture du plugin dsh-message-gateway",[429,2918,2919,2920,2922],{},"L'architecture du plugin ",[433,2921,2893],{}," s'articule autour de deux volets complémentaires :",[484,2924,2925,2954],{},[468,2926,2927,2930,2931,2934,2935,2938,2939,2942,2943,2946,2947,2353,2950,2953],{},[433,2928,2929],{},"Hôte"," (Node) : ",[524,2932,2933],{},"gateway-store"," (gestion des identifiants dans ",[524,2936,2937],{},"~\u002F.dsh\u002Fgateway.json","), ",[524,2940,2941],{},"platforms.ts"," (définitions des plateformes et tests de connexion), ",[524,2944,2945],{},"routes.ts"," (endpoints ",[524,2948,2949],{},"\u002Fgateway\u002F*",[524,2951,2952],{},"bridge-manager.ts"," (les passerelles résidentes : sessions d'agents indépendantes par canal et streaming des réponses).",[468,2955,2956,2959,2960,2963],{},[433,2957,2958],{},"Client"," (navigateur) : la page \"",[433,2961,2962],{},"Message platforms","\" dans la barre latérale, permettant de renseigner les accès, tester la connectivité et surveiller l'état en direct.",[429,2965,2966],{},"L'intégration d'une nouvelle plateforme nécessite les étapes suivantes :",[465,2968,2969,2986,3000],{},[468,2970,2971,2974,2975,2978,2979,2982,2983,511],{},[433,2972,2973],{},"Une classe de passerelle (bridge)"," : proposant les méthodes ",[524,2976,2977],{},"start\u002Fstop\u002Fstatus"," et un callback ",[524,2980,2981],{},"onText(text, frame)",", à l'image de ",[524,2984,2985],{},"wecom-bridge.ts",[468,2987,2988,2991,2992,2995,2996,2999],{},[433,2989,2990],{},"Câblage dans bridge-manager"," : réutilisation du pipeline par conversation existant (",[524,2993,2994],{},"ensureAgentForKey"," + ",[524,2997,2998],{},"pendingMap",") en branchant le collecteur de réponses de la plateforme.",[468,3001,3002,3005,3006,565,3009,3012,3013,3016,3017,3020,3021,511],{},[433,3003,3004],{},"Persistance et routage"," : dans ",[524,3007,3008],{},"\u002Fgateway\u002Fsave",[524,3010,3011],{},"\u002Fgateway\u002Fdelete"," : ",[433,3014,3015],{},"enregistrer les identifiants démarre la passerelle, les supprimer l'arrête"," — complété d'un drapeau ",[524,3018,3019],{},"autoStartXxx"," assurant la reconnexion automatique au démarrage de ",[524,3022,3023],{},"dsh web",[457,3025,3027],{"id":3026},"implémentation-de-la-passerelle-buzz-protocole-nostr-et-cycle-de-vie-des-événements","Implémentation de la passerelle Buzz : Protocole Nostr et cycle de vie des événements",[429,3029,3030,3033],{},[433,3031,3032],{},"DeepSeek Harness"," a été utilisé pour développer la passerelle Buzz. L'implémentation respecte scrupuleusement les spécifications du protocole Nostr :",[3035,3036,3037,3063],"table",{},[3038,3039,3040],"thead",{},[3041,3042,3043,3049],"tr",{},[3044,3045,3046],"th",{},[433,3047,3048],{},"Transport",[3044,3050,3051,3052,3055,3056,3059,3060],{},"Un unique WebSocket authentifié via NIP-42 ; par défaut ",[524,3053,3054],{},"ws:\u002F\u002Flocalhost:3000"," ; ",[524,3057,3058],{},"http(s):\u002F\u002F"," est normalisé en ",[524,3061,3062],{},"ws(s):\u002F\u002F",[3064,3065,3066,3085,3112,3129,3152,3175,3199,3212,3225,3244,3261,3275],"tbody",{},[3041,3067,3068,3074],{},[3069,3070,3071],"td",{},[433,3072,3073],{},"Authentification",[3069,3075,3076,3077,3080,3081,3084],{},"Événement AUTH ",[524,3078,3079],{},"kind 22242",", tags ",[524,3082,3083],{},"[[\"relay\", url], [\"challenge\", challenge]]",", contenu vide, signé avec la clé privée de l'agent",[3041,3086,3087,3092],{},[3069,3088,3089],{},[433,3090,3091],{},"Abonnements",[3069,3093,3094,3012,3097,3100,3101,3104,3105,3108,3109],{},[433,3095,3096],{},"Par canal",[524,3098,3099],{},"REQ {\"kinds\":[9], \"#h\":[\u003Cuuid>]}"," — un REQ par canal. Un REQ global ",[524,3102,3103],{},"kinds:[9]"," reçoit EOSE sans jamais distribuer d'événements ; le filtre ",[524,3106,3107],{},"#h"," multivalué ",[433,3110,3111],{},"échoue",[3041,3113,3114,3119],{},[3069,3115,3116],{},[433,3117,3118],{},"Découverte",[3069,3120,3121,3124,3125,3128],{},[524,3122,3123],{},"REQ {kinds:[39000]}"," historique pour récupérer les métadonnées (",[524,3126,3127],{},"type == \"dm\""," signale un canal de messagerie directe)",[3041,3130,3131,3136],{},[3069,3132,3133],{},[433,3134,3135],{},"Adhésion aux canaux",[3069,3137,3138,3141,3142,3144,3145,3148,3149],{},[524,3139,3140],{},"REQ {kinds:[44100,44101], \"#p\":[notre pubkey], since: now-60s}"," en direct — 44100 = ajout, 44101 = retrait, avec ",[524,3143,429],{},"+",[524,3146,3147],{},"h"," ; met à jour les abonnements ",[433,3150,3151],{},"sans reconnexion",[3041,3153,3154,3159],{},[3069,3155,3156],{},[433,3157,3158],{},"Événements de chat",[3069,3160,3161,3164,3165,3168,3169,2346,3172],{},[524,3162,3163],{},"kind 9"," avec tags ",[524,3166,3167],{},"[\"h\", canal]",", et facultativement ",[524,3170,3171],{},"[\"e\", replyTo]",[524,3173,3174],{},"[\"p\", mention]",[3041,3176,3177,3182],{},[3069,3178,3179],{},[433,3180,3181],{},"Éditions sur place",[3069,3183,3184,440,3187,2995,3189,3192,3193,3195,3196,3198],{},[524,3185,3186],{},"kind 40003",[524,3188,3147],{},[524,3190,3191],{},"e","→cible ; remplacement du contenu ; plafond relais de 64 Ko → charge utile ≤ 60 000 octets ; découpage des longues réponses — le tronçon 0 remplace l'édition, les suivants s'ajoutent en ",[524,3194,3163],{}," dans le fil (",[524,3197,3191],{},"→racine)",[3041,3200,3201,3206],{},[3069,3202,3203],{},[433,3204,3205],{},"Trames CLOSED",[3069,3207,3208,3211],{},[524,3209,3210],{},"auth-required"," avant AUTH est normal au bootstrap (terminer AUTH, rouvrir subs) ; post-AUTH → réabonnement borné (3 tentatives, temporisation 0\u002F1\u002F2 s) ; la reconnexion réinitialise tout",[3041,3213,3214,3219],{},[3069,3215,3216],{},[433,3217,3218],{},"Limites du relais",[3069,3220,3221,3222],{},"≤ 2000 événements historiques par abonnement, triés du plus récent au plus ancien, même avec le filtre ",[524,3223,3224],{},"since",[3041,3226,3227,3232],{},[3069,3228,3229],{},[433,3230,3231],{},"Filtrage des mentions",[3069,3233,3234,3235,3237,3238,3240,3241,3243],{},"Traite les ",[524,3236,3163],{}," entrants uniquement si : (a) le tag ",[524,3239,429],{}," inclut notre pubkey, (b) le canal est un DM, ou (c) la racine ",[524,3242,3191],{}," provient de notre agent. Ignore notre pubkey (anti-boucle)",[3041,3245,3246,3251],{},[3069,3247,3248],{},[433,3249,3250],{},"Mentions sortantes",[3069,3252,3253,3254,3257,3258,3260],{},"Texte publié tel quel — le relais ne valide pas les tokens ",[524,3255,3256],{},"@"," ; les tags ",[524,3259,429],{}," intègrent l'auteur source et jusqu'à 7 autres pubkeys mentionnées (max 8)",[3041,3262,3263,3268],{},[3069,3264,3265],{},[433,3266,3267],{},"Messages directs",[3069,3269,3270,3271,3274],{},"Canaux en texte brut confinés au relais (métadonnées ",[524,3272,3273],{},"type: \"dm\"",") — sans chiffrement NIP-04\u002F44 dans cette passerelle",[3041,3276,3277,3282],{},[3069,3278,3279],{},[433,3280,3281],{},"Pièces jointes",[3069,3283,3284,3285,3288,3289,2346,3292,2346,3295,3298],{},"NIP-92 ",[524,3286,3287],{},"imeta"," (",[524,3290,3291],{},"url",[524,3293,3294],{},"sha256",[524,3296,3297],{},"m",") → téléchargement http(s), contrôle SHA-256, limite de 20 Mo, max 4 par message ; images sortantes non prises en charge",[429,3300,3301],{},"Le schéma ci-dessous détaille le processus d'initialisation (bootstrap) de la passerelle Buzz :",[516,3303],{"src":3304,"alt":3305},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-bootstrap.webp","Diagramme de séquence illustrant l'initialisation et l'authentification NIP-42 de la passerelle Buzz",[479,3307,3309],{"id":3308},"streaming-en-temps-réel-via-les-éditions-sur-place-nostr-kind-40003","Streaming en temps réel via les éditions sur place Nostr (Kind 40003)",[429,3311,3312,3313,948],{},"Nostr ne disposant pas d'indicateur de frappe natif et ses événements étant strictement append-only, la passerelle Buzz ",[433,3314,3315],{},"simule un affichage fluide en direct grâce aux réécritures sur place",[516,3317],{"src":3318,"alt":3319},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-reply.webp","Diagramme du flux d'édition sur place simulant les réponses en direct avec les événements kind 40003",[484,3321,3322],{},[468,3323,3324],{},[3325,3326,3327,3328,3330,3331,3333],"em",{},"La passerelle Buzz émet d'abord un événement temporaire ",[524,3329,3163],{},", puis le réécrit progressivement avec des éditions in situ ",[524,3332,3186],{}," cadencées, avant de sceller la version finale dès que l'agent termine sa génération. Ce mécanisme reprend le principe éprouvé des passerelles Telegram et Discord.",[479,3335,3337],{"id":3336},"connexion-des-espaces-de-travail-deepseek-harness-via-commandes-de-chat","Connexion des espaces de travail DeepSeek Harness via commandes de chat",[429,3339,3340,3341,3288,3344,2361],{},"Dans l'interface Web de DSH, la gestion des espaces de travail s'appuie sur le service ",[524,3342,3343],{},"workspaceRegistry",[524,3345,3346],{},"@deepseek-ai\u002Fdsh-workspace",[615,3348,3352],{"className":3349,"code":3350,"language":3351,"meta":424,"style":424},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const existing = await ctx.workspaceRegistry.resolveByPath(request.path);\n","typescript",[524,3353,3354],{"__ignoreMap":424},[623,3355,3356,3360,3363,3366,3370,3373,3375,3377,3379,3382,3385,3387,3390],{"class":625,"line":626},[623,3357,3359],{"class":3358},"spNyl","const",[623,3361,3362],{"class":772}," existing ",[623,3364,3365],{"class":695},"=",[623,3367,3369],{"class":3368},"s7zQu"," await",[623,3371,3372],{"class":772}," ctx",[623,3374,511],{"class":695},[623,3376,3343],{"class":772},[623,3378,511],{"class":695},[623,3380,3381],{"class":1577},"resolveByPath",[623,3383,3384],{"class":772},"(request",[623,3386,511],{"class":695},[623,3388,3389],{"class":772},"path)",[623,3391,3392],{"class":695},";\n",[429,3394,3395,3396,3399],{},"La passerelle Buzz met à disposition la commande ",[524,3397,3398],{},"\u002Fworkspace \u003Cdossier>",", qui associe un répertoire existant dans DSH. Toute nouvelle session initiée via la passerelle s'y rattache et devient consultable dans l'interface Web.",[516,3401],{"src":3402,"alt":3403},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-workspace.webp","Architecture de l'enregistrement des espaces de travail DeepSeek Harness via les commandes de chat",[429,3405,3406],{},"Trois règles d'architecture fondamentales :",[484,3408,3409,3419,3429],{},[468,3410,3411,3414,3415,3418],{},[433,3412,3413],{},"Changer de dossier = créer une nouvelle session."," La variable ",[524,3416,3417],{},"cwd"," est inscrite dans l'en-tête de la session lors de sa création et demeure immuable.",[468,3420,3421,3424,3425,3428],{},[433,3422,3423],{},"Le dossier doit impérativement exister."," L'appel ",[524,3426,3427],{},"create"," rejette tout chemin inexistant.",[468,3430,3431,3434,3435,3438],{},[433,3432,3433],{},"Commande sensible du point de vue de la sécurité."," Les sessions bénéficient d'une politique ",[433,3436,3437],{},"auto-approve",", conférant un accès direct aux fichiers du dossier ciblé.",[457,3440,3442],{"id":3441},"guide-pas-à-pas-dinstallation-et-de-configuration","Guide pas à pas d'installation et de configuration",[465,3444,3445],{},[468,3446,3447],{},"Exécutez les commandes suivantes dans votre terminal :",[615,3449,3451],{"className":617,"code":3450,"language":619,"meta":424,"style":424},"dsh plugin --profile web add https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fdsh-message-gateway.git\n\n# Start DSH web\ndsh web\n",[524,3452,3453,3473,3477,3482],{"__ignoreMap":424},[623,3454,3455,3458,3461,3464,3467,3470],{"class":625,"line":626},[623,3456,3457],{"class":629},"dsh",[623,3459,3460],{"class":633}," plugin",[623,3462,3463],{"class":633}," --profile",[623,3465,3466],{"class":633}," web",[623,3468,3469],{"class":633}," add",[623,3471,3472],{"class":633}," https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fdsh-message-gateway.git\n",[623,3474,3475],{"class":625,"line":643},[623,3476,647],{"emptyLinePlaceholder":646},[623,3478,3479],{"class":625,"line":650},[623,3480,3481],{"class":653},"# Start DSH web\n",[623,3483,3484,3486],{"class":625,"line":657},[623,3485,3457],{"class":629},[623,3487,3488],{"class":633}," web\n",[465,3490,3491],{"start":643},[468,3492,3493,3494,3496],{},"Dès que l'interface Web de DSH est accessible dans votre navigateur, cliquez sur l'icône \"",[433,3495,2962],{},"\" :",[429,3498,3499],{},[516,3500],{"alt":3501,"src":3502},"Barre latérale de l'interface Web DeepSeek Harness mettant en évidence le menu Message platforms","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-web-ui-message-platforms-sidebar-icon.webp",[465,3504,3505],{"start":650},[468,3506,3507,3508,3511],{},"Cliquez sur \"",[433,3509,3510],{},"Buzz","\" dans le menu de gauche :",[429,3513,3514],{},[516,3515],{"alt":3516,"src":3517},"Panneau des paramètres de configuration de la passerelle Buzz dans DeepSeek Harness","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-message-gateway-buzz-config-panel.webp",[465,3519,3520,3529,3540],{"start":657},[468,3521,3507,3522,3525,3526,511],{},[433,3523,3524],{},"Generate keypair","\" pour générer une paire de clés Nostr. Conservez précieusement la clé publique ",[524,3527,3528],{},"npub",[468,3530,3531,3532,3535,3536,3539],{},"Renseignez la ",[433,3533,3534],{},"Relay URL"," ainsi que les ",[433,3537,3538],{},"Channels"," (la liste autorisée des UUIDs de canaux à écouter).",[468,3541,3542,3543,3546],{},"Cliquez sur le bouton \"",[433,3544,3545],{},"Save","\".",[429,3548,3549,3550,3553,3554,3557,3558,511],{},"L'enregistrement du formulaire stocke les paramètres et ",[433,3551,3552],{},"démarre la passerelle",". La clé privée ",[524,3555,3556],{},"nsec"," est traitée comme un secret sensible, confinée dans ",[524,3559,2937],{},[479,3561,3563],{"id":3562},"enregistrement-de-la-clé-de-lagent-sur-le-relais-nostr-de-buzz","Enregistrement de la clé de l'agent sur le relais Nostr de Buzz",[429,3565,3566,3569,3570,3572],{},[433,3567,3568],{},"Ajoutez l'assistant DSH au relais en tant que membre."," Indiquez la clé publique ",[524,3571,3528],{}," générée précédemment :",[615,3574,3576],{"className":617,"code":3575,"language":619,"meta":424,"style":424},"docker compose exec relay buzz-admin add-member --pubkey npub123123123\n",[524,3577,3578],{"__ignoreMap":424},[623,3579,3580,3582,3584,3587,3590,3593,3596,3599],{"class":625,"line":626},[623,3581,1741],{"class":629},[623,3583,1744],{"class":633},[623,3585,3586],{"class":633}," exec",[623,3588,3589],{"class":633}," relay",[623,3591,3592],{"class":633}," buzz-admin",[623,3594,3595],{"class":633}," add-member",[623,3597,3598],{"class":633}," --pubkey",[623,3600,3601],{"class":633}," npub123123123\n",[429,3603,3604,3607,3608,3611,3612,3615,3616,3619,3620,3623],{},[433,3605,3606],{},"Attribuez l'assistant à un canal donné."," L'inscription sur le relais ne rend pas automatiquement le membre visible dans les canaux. Pour l'ajouter avec ",[524,3609,3610],{},"buzz-cli",", veillez à renseigner le paramètre ",[524,3613,3614],{},"--pubkey"," en format ",[433,3617,3618],{},"HEX"," et non npub (la commande ",[524,3621,3622],{},"buzz-admin add-member"," affiche la clé HEX correspondante) :",[615,3625,3627],{"className":617,"code":3626,"language":619,"meta":424,"style":424},"buzz channels add-member --channel \u003CCHANNEL_UUID> --pubkey \u003CAGENT_HEX> --role member\n",[524,3628,3629],{"__ignoreMap":424},[623,3630,3631,3634,3637,3639,3642,3645,3648,3651,3654,3656,3658,3661,3664,3666,3669],{"class":625,"line":626},[623,3632,3633],{"class":629},"buzz",[623,3635,3636],{"class":633}," channels",[623,3638,3595],{"class":633},[623,3640,3641],{"class":633}," --channel",[623,3643,3644],{"class":695}," \u003C",[623,3646,3647],{"class":633},"CHANNEL_UUI",[623,3649,3650],{"class":772},"D",[623,3652,3653],{"class":695},">",[623,3655,3598],{"class":633},[623,3657,3644],{"class":695},[623,3659,3660],{"class":633},"AGENT_HE",[623,3662,3663],{"class":772},"X",[623,3665,3653],{"class":695},[623,3667,3668],{"class":633}," --role",[623,3670,3671],{"class":633}," member\n",[1465,3673],{"description":3674,"image":2907,"image-alt":2908,"label":3675,"min-read":3676,"title":3677,"to":3678},"Instructions détaillées pour installer et configurer buzz-cli afin de gérer les canaux Nostr, les clés des membres et les autorisations des agents IA.","Guide CLI","5","Comment installer et utiliser buzz-cli","\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues#install-buzz-cli",[429,3680,3681,3682,948],{},"Personnalisez le profil de l'assistant sur le relais Nostr avec un nom évocateur via ",[524,3683,3610],{},[429,3685,3686],{},[516,3687],{"alt":3688,"src":3689},"Mise à jour du nom de l'assistant DeepSeek Harness sur le relais Nostr avec buzz-cli","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-assistant-buzz-cli-profile-update.webp",[429,3691,3692,3693,3696],{},"Transmettez un ",[433,3694,3695],{},"Wave"," (la salutation de bienvenue de Buzz en message privé) à l'assistant. L'écho confirme la bonne liaison :",[429,3698,3699],{},[516,3700],{"alt":3701,"src":3702},"Test de connexion en envoyant un message Wave en DM à l'assistant DeepSeek Harness dans Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-dm-wave-greeting-reply.webp",[429,3704,3705],{},[3325,3706,3707],{},"Envoi d'un Wave en message direct à l'assistant DSH — la passerelle répond immédiatement.",[479,3709,3711,3712],{"id":3710},"activation-de-laccès-aux-dossiers-locaux-via-workspace","Activation de l'accès aux dossiers locaux via ",[524,3713,3714],{},"\u002Fworkspace",[429,3716,3717,3718,3721,3722,3725,3726,3728],{},"Le paramètre ",[524,3719,3720],{},"allowWorkspace"," étant désactivé (",[524,3723,3724],{},"false",") par défaut, la commande ",[524,3727,3714],{}," est initialement rejetée :",[429,3730,3731],{},[516,3732],{"alt":3733,"src":3734},"Notification d'erreur indiquant le rejet de la commande workspace lorsque allowWorkspace est inactif","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-workspace-command-rejected-error.webp",[429,3736,3737,3738,3741,3742,948],{},"Activez-le dans ",[524,3739,3740],{},"~\u002F.dsh\u002Fprofiles\u002Fweb\u002Fcordis.patch.yml",", puis relancez ",[524,3743,3023],{},[615,3745,3747],{"className":2012,"code":3746,"language":2014,"meta":424,"style":424},"- id: ui-message-gateway\n  config:\n    allowWorkspace: true\n",[524,3748,3749,3762,3769],{"__ignoreMap":424},[623,3750,3751,3754,3757,3759],{"class":625,"line":626},[623,3752,3753],{"class":695},"-",[623,3755,3756],{"class":960}," id",[623,3758,972],{"class":695},[623,3760,3761],{"class":633}," ui-message-gateway\n",[623,3763,3764,3767],{"class":625,"line":643},[623,3765,3766],{"class":960},"  config",[623,3768,964],{"class":695},[623,3770,3771,3774,3776],{"class":625,"line":650},[623,3772,3773],{"class":960},"    allowWorkspace",[623,3775,972],{"class":695},[623,3777,3778],{"class":985}," true\n",[429,3780,3781],{},"Après redémarrage :",[429,3783,3784],{},[516,3785],{"alt":3786,"src":3787},"Confirmation d'exécution réussie de la commande d'enregistrement de l'espace de travail dans Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-workspace-command-success-confirmation.webp",[429,3789,3790,3791,3794],{},"Remarque essentielle : le système considère par défaut que le dossier de travail (",[524,3792,3793],{},"TechVoyage"," sur nos captures) se trouve dans le répertoire utilisateur courant. Dans le cas contraire, spécifiez un chemin absolu. Toute session créée dans cet espace depuis Buzz s'affiche également dans l'interface Web de DeepSeek Harness.",[429,3796,3797],{},[516,3798],{"alt":3799,"src":3800},"Interface Web DeepSeek Harness affichant la session d'espace de travail synchronisée depuis Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-web-ui-synced-workspace-session.webp",[479,3802,3804],{"id":3803},"commandes-supportées-dans-buzz","Commandes supportées dans Buzz",[429,3806,3807],{},"L'ensemble des commandes disponibles sur les autres passerelles fonctionne sur Buzz :",[3035,3809,3810,3820],{},[3038,3811,3812],{},[3041,3813,3814,3817],{},[3044,3815,3816],{},"Commande",[3044,3818,3819],{},"Rôle",[3064,3821,3822,3832,3842,3852,3862,3872,3882,3892,3902,3922,3942],{},[3041,3823,3824,3829],{},[3069,3825,3826],{},[524,3827,3828],{},"\u002Fworkspace \u003Cfolder>",[3069,3830,3831],{},"Associe un dossier existant comme espace de travail pour la discussion (soumis à activation de config)",[3041,3833,3834,3839],{},[3069,3835,3836],{},[524,3837,3838],{},"\u002Fhelp",[3069,3840,3841],{},"Affiche la liste des commandes disponibles",[3041,3843,3844,3849],{},[3069,3845,3846],{},[524,3847,3848],{},"\u002Ftime",[3069,3850,3851],{},"Donne l'heure actuelle du serveur",[3041,3853,3854,3859],{},[3069,3855,3856],{},[524,3857,3858],{},"\u002Fnew",[3069,3860,3861],{},"Démarre une session de discussion vierge",[3041,3863,3864,3869],{},[3069,3865,3866],{},[524,3867,3868],{},"\u002Fclear",[3069,3870,3871],{},"Réinitialise la conversation en cours",[3041,3873,3874,3879],{},[3069,3875,3876],{},[524,3877,3878],{},"\u002Fstatus",[3069,3880,3881],{},"Retourne le statut opérationnel de la passerelle",[3041,3883,3884,3889],{},[3069,3885,3886],{},[524,3887,3888],{},"\u002Fstats",[3069,3890,3891],{},"Détaille le volume de discussions et le statut par passerelle (toutes plateformes confondues, dont Buzz)",[3041,3893,3894,3899],{},[3069,3895,3896],{},[524,3897,3898],{},"\u002Fcommands",[3069,3900,3901],{},"Inventaire exhaustif des descripteurs de commandes",[3041,3903,3904,3909],{},[3069,3905,3906],{},[524,3907,3908],{},"@path\u002Fto\u002Ffile",[3069,3910,3911,3912,2346,3914,3917,3918,3921],{},"Fonctionne à l'identique des mentions de fichiers Web : lecture contextuelle relative au workspace ; ",[524,3913,3256],{},[524,3915,3916],{},"@prefixe"," ou ",[524,3919,3920],{},"\u002Ffiles \u003Cprefixe>"," listent les fichiers et répertoires correspondants",[3041,3923,3924,3929],{},[3069,3925,3926],{},[524,3927,3928],{},"\u002Fmodel",[3069,3930,3931,3934,3935,3937,3938,3941],{},[524,3932,3933],{},"[provider model effort]"," — validé face au catalogue LLM actif ; ",[524,3936,3928],{}," seul liste les choix, ",[524,3939,3940],{},"\u002Fmodel reset"," rétablit la configuration par défaut",[3041,3943,3944,3949],{},[3069,3945,3946],{},[524,3947,3948],{},"\u002Feffort",[3069,3950,3951,3954,3955,3958],{},[524,3952,3953],{},"\u003Cid>"," ajuste le niveau d'effort de raisonnement ; ",[524,3956,3957],{},"\u002Feffort reset"," rétablit la valeur par défaut",[479,3960,3962],{"id":3961},"synthèse-sur-la-sécurité","Synthèse sur la sécurité",[484,3964,3965,3978,3988],{},[468,3966,3967,3968,3970,3971,3973,3974,3977],{},"La clé privée ",[433,3969,3556],{}," demeure confinée dans ",[524,3972,2937],{}," (droits 0600, écriture atomique) — jamais exposée via ",[524,3975,3976],{},"\u002Fgateway\u002Flist"," ni dans les journaux d'exécution.",[468,3979,3980,3981,3288,3984,3987],{},"Chaque événement reçu subit une ",[433,3982,3983],{},"validation de signature cryptographique",[524,3985,3986],{},"verifyEvent","), une déduplication, un filtrage d'auto-émission et un contrôle de mention préalable.",[468,3989,3990,3288,3993,3996],{},[433,3991,3992],{},"L'enregistrement des workspaces requiert une validation de configuration expresse",[524,3994,3995],{},"allowWorkspace: false"," par défaut), évitant toute ouverture imprévue du système de fichiers local.",[457,3998,4000],{"id":3999},"conclusion-lavenir-de-la-collaboration-ia-décentralisée-avec-buzz","Conclusion : L'avenir de la collaboration IA décentralisée avec Buzz",[429,4002,4003,4004,4006],{},"La complexité principale de l'intégration de Buzz dans ",[524,4005,2893],{}," résidait dans l'implémentation fidèle des spécifications Nostr. L'architecture modulaire du plugin fournissait déjà un socle solide pour l'isolation des sessions et la gestion des commandes, rendant le déploiement fluide une fois la mécanique d'événements et le streaming synchronisés.",[457,4008,4009],{"id":2801},"Références :",[484,4011,4012,4020,4028],{},[468,4013,4014,4019],{},[449,4015,4018],{"href":4016,"rel":4017},"https:\u002F\u002Fgithub.com\u002Fa792883583\u002Fdsh-message-gateway\u002Fblob\u002Fmain\u002Fdocs\u002Farchitecture.md",[509],"dsh-message-gateway architecture guide"," — guide d'architecture, recettes d'extension et sécurité",[468,4021,4022,4027],{},[449,4023,4026],{"href":4024,"rel":4025},"https:\u002F\u002Fgithub.com\u002Fnbd-wtf\u002Fnostr-tools",[509],"nostr-tools"," — bibliothèque Nostr exploitée sous le capot",[468,4029,4030,4035],{},[449,4031,4034],{"href":4032,"rel":4033},"https:\u002F\u002Fgithub.com\u002Fbytedance\u002Fdeer-flow\u002Fblob\u002Fmain\u002Fbackend\u002Fdocs\u002FIM_CHANNEL_CONNECTIONS.md",[509],"deer-flow IM channel connections"," — modèles de référence pour les connexions de messagerie instantanée",[1335,4037,4038],{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--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 .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 .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":643,"depth":650,"links":4040},[4041,4042,4046,4053,4054],{"id":2915,"depth":643,"text":2916},{"id":3026,"depth":643,"text":3027,"children":4043},[4044,4045],{"id":3308,"depth":650,"text":3309},{"id":3336,"depth":650,"text":3337},{"id":3441,"depth":643,"text":3442,"children":4047},[4048,4049,4051,4052],{"id":3562,"depth":650,"text":3563},{"id":3710,"depth":650,"text":4050},"Activation de l'accès aux dossiers locaux via \u002Fworkspace",{"id":3803,"depth":650,"text":3804},{"id":3961,"depth":650,"text":3962},{"id":3999,"depth":643,"text":4000},{"id":2801,"depth":643,"text":4009},[1357,4056,3633,4057],"collaboration","deepseek-harness","2026-09-30","Intégrez DeepSeek Harness à Block Buzz via une passerelle Nostr. Configurez auth NIP-42, flux de messages in situ et espaces de travail d'agents IA par canal.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002FFR-Bringing-Buzz-to-DeepSeek-Harness.webp","Une carte technologique premium au format 16:9 avec des touches d'indigo profond et d'ambre illustrant comment connecter DeepSeek Harness à Block Buzz via une passerelle Nostr, avec un panneau glassmorphic épuré et typographie centrée.",{"schemaOrg":4063,"robots":1398,"sitemap":4086},[4064,4066],{"@type":4065,"headline":2875,"description":4059,"image":4060},"TechArticle",{"@type":1367,"name":2875,"description":4059,"image":4060,"step":4067},[4068,4071,4074,4077,4080,4083],{"@type":1370,"name":4069,"text":4070},"Phase 1: Installer le plugin passerelle","Installez le plugin dsh-message-gateway et lancez le service dsh web.",{"@type":1370,"name":4072,"text":4073},"Phase 2: Accéder à Message platforms","Ouvrez l'interface Web DSH et accédez aux paramètres Message platforms.",{"@type":1370,"name":4075,"text":4076},"Phase 3: Configurer la passerelle Buzz","Générez une paire de clés Nostr, saisissez l'URL du relais et les canaux.",{"@type":1370,"name":4078,"text":4079},"Phase 4: Enregistrer l'agent sur le relais","Ajoutez l'assistant DSH au relais Nostr de Buzz à l'aide de buzz-admin.",{"@type":1370,"name":4081,"text":4082},"Phase 5: Assigner l'agent au canal","Ajoutez la clé HEX de l'agent aux canaux désignés avec buzz-cli.",{"@type":1370,"name":4084,"text":4085},"Phase 6: Activer les espaces de travail","Configurez allowWorkspace dans cordis.patch.yml pour autoriser les commandes de dossiers.",{"lastmod":4058},{"title":4088,"description":4059,"ogTitle":2875,"ogDescription":4059,"twitterTitle":2875,"twitterDescription":4059},"Plugin Buzz pour DeepSeek Harness: Passerelle Nostr","fr\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",[3032,3510,4091,4092,2893],"Nostr","Agents IA","D-QQL-ioD6fuh4M5DgpHpBjz2gfDhqq9Js67-mdwt0M",[4095,4642,5272],{"id":4096,"title":1270,"author":424,"body":4097,"category":4626,"date":4628,"description":4629,"extension":1361,"image":4630,"imageAlt":4631,"isPublished":646,"meta":4632,"minRead":657,"navigation":646,"path":399,"seo":4636,"stem":4637,"tags":4638,"updatedAt":2871,"__hash__":4641},"article\u002Ffr\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac.md",{"type":426,"value":4098,"toc":4619},[4099,4103,4106,4113,4117,4123,4126,4129,4133,4136,4143,4159,4465,4579,4581,4584,4586,4616],[457,4100,4102],{"id":4101},"quest-ce-que-cloudflare-warp","Qu'est-ce que Cloudflare WARP ?",[429,4104,4105],{},"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,4107,4108,4109,4112],{},"Elle crée un tunnel chiffré basé sur le protocole ",[433,4110,4111],{},"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.",[457,4114,4116],{"id":4115},"pourquoi-avons-nous-besoin-de-cloudflare-warp","Pourquoi avons-nous besoin de Cloudflare WARP ?",[429,4118,4119,4120,511],{},"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'",[433,4121,4122],{},"Accès Réseau Zero Trust (ZTNA)",[429,4124,4125],{},"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,4127,4128],{},"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.",[457,4130,4132],{"id":4131},"prise-en-charge-de-plusieurs-profils-warp-sur-un-seul-appareil","Prise en charge de plusieurs profils WARP sur un seul appareil",[429,4134,4135],{},"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,4137,4138,4139,4142],{},"Pour y parvenir sur macOS, nous pouvons utiliser un fichier de profil MDM ",[524,4140,4141],{},".mobileconfig"," afin de définir et d'enregistrer les différents environnements WARP.",[484,4144,4145,4156],{},[468,4146,4147,4155],{},[449,4148,4151,4152,4154],{"href":4149,"rel":4150},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fstatic\u002Fmdm\u002Fmultiple-orgs\u002FCloudflareWARP.mobileconfig",[509],"Download a sample ",[524,4153,4141],{}," file"," directement depuis Cloudflare.",[468,4157,4158],{},"Voici un exemple de ce à quoi ressemble cette configuration :",[615,4160,4164],{"className":4161,"code":4162,"language":4163,"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",[524,4165,4166,4171,4176,4181,4186,4191,4196,4201,4206,4211,4216,4221,4226,4231,4236,4241,4246,4251,4256,4261,4266,4271,4277,4283,4289,4295,4301,4307,4312,4317,4323,4328,4334,4339,4345,4351,4357,4363,4369,4375,4381,4387,4393,4399,4405,4411,4417,4423,4429,4435,4441,4447,4453,4459],{"__ignoreMap":424},[623,4167,4168],{"class":625,"line":626},[623,4169,4170],{},"\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n",[623,4172,4173],{"class":625,"line":643},[623,4174,4175],{},"\u003C!DOCTYPE plist PUBLIC \"-\u002F\u002FApple\u002F\u002FDTD PLIST 1.0\u002F\u002FEN\" \"http:\u002F\u002Fwww.apple.com\u002FDTDs\u002FPropertyList-1.0.dtd\">\n",[623,4177,4178],{"class":625,"line":650},[623,4179,4180],{},"\u003Cplist version=\"1.0\">\n",[623,4182,4183],{"class":625,"line":657},[623,4184,4185],{},"\u003Cdict>\n",[623,4187,4188],{"class":625,"line":669},[623,4189,4190],{},"  \u003Ckey>PayloadContent\u003C\u002Fkey>\n",[623,4192,4193],{"class":625,"line":674},[623,4194,4195],{},"  \u003Carray>\n",[623,4197,4198],{"class":625,"line":680},[623,4199,4200],{},"    \u003Cdict>\n",[623,4202,4203],{"class":625,"line":1023},[623,4204,4205],{},"      \u003Ckey>PayloadDisplayName\u003C\u002Fkey>\n",[623,4207,4208],{"class":625,"line":1034},[623,4209,4210],{},"      \u003Cstring>Warp Configuration\u003C\u002Fstring>\n",[623,4212,4213],{"class":625,"line":1130},[623,4214,4215],{},"      \u003Ckey>PayloadIdentifier\u003C\u002Fkey>\n",[623,4217,4218],{"class":625,"line":1136},[623,4219,4220],{},"      \u003Cstring>com.cloudflare.warp.CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n",[623,4222,4223],{"class":625,"line":1142},[623,4224,4225],{},"      \u003Ckey>PayloadOrganization\u003C\u002Fkey>\n",[623,4227,4228],{"class":625,"line":1147},[623,4229,4230],{},"      \u003Cstring>Cloudflare Ltd.\u003C\u002Fstring>\n",[623,4232,4233],{"class":625,"line":1153},[623,4234,4235],{},"      \u003Ckey>PayloadType\u003C\u002Fkey>\n",[623,4237,4238],{"class":625,"line":2124},[623,4239,4240],{},"      \u003Cstring>com.cloudflare.warp\u003C\u002Fstring>\n",[623,4242,4243],{"class":625,"line":2135},[623,4244,4245],{},"      \u003Ckey>PayloadUUID\u003C\u002Fkey>\n",[623,4247,4248],{"class":625,"line":2140},[623,4249,4250],{},"      \u003Cstring>CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n",[623,4252,4253],{"class":625,"line":2148},[623,4254,4255],{},"      \u003Ckey>PayloadVersion\u003C\u002Fkey>\n",[623,4257,4258],{"class":625,"line":2679},[623,4259,4260],{},"      \u003Cinteger>1\u003C\u002Finteger>\n",[623,4262,4263],{"class":625,"line":2685},[623,4264,4265],{},"      \u003Ckey>configs\u003C\u002Fkey>\n",[623,4267,4268],{"class":625,"line":2694},[623,4269,4270],{},"      \u003Carray>\n",[623,4272,4274],{"class":625,"line":4273},22,[623,4275,4276],{},"        \u003Cdict>\n",[623,4278,4280],{"class":625,"line":4279},23,[623,4281,4282],{},"          \u003Ckey>organization\u003C\u002Fkey>\n",[623,4284,4286],{"class":625,"line":4285},24,[623,4287,4288],{},"          \u003Cstring>your-team-name-1\u003C\u002Fstring>\n",[623,4290,4292],{"class":625,"line":4291},25,[623,4293,4294],{},"          \u003Ckey>display_name\u003C\u002Fkey>\n",[623,4296,4298],{"class":625,"line":4297},26,[623,4299,4300],{},"          \u003Cstring>Team 1\u003C\u002Fstring>\n",[623,4302,4304],{"class":625,"line":4303},27,[623,4305,4306],{},"        \u003C\u002Fdict>\n",[623,4308,4310],{"class":625,"line":4309},28,[623,4311,4276],{},[623,4313,4315],{"class":625,"line":4314},29,[623,4316,4282],{},[623,4318,4320],{"class":625,"line":4319},30,[623,4321,4322],{},"          \u003Cstring>your-team-name-2\u003C\u002Fstring>\n",[623,4324,4326],{"class":625,"line":4325},31,[623,4327,4294],{},[623,4329,4331],{"class":625,"line":4330},32,[623,4332,4333],{},"          \u003Cstring>Team 2\u003C\u002Fstring>\n",[623,4335,4337],{"class":625,"line":4336},33,[623,4338,4306],{},[623,4340,4342],{"class":625,"line":4341},34,[623,4343,4344],{},"      \u003C\u002Farray>\n",[623,4346,4348],{"class":625,"line":4347},35,[623,4349,4350],{},"    \u003C\u002Fdict>\n",[623,4352,4354],{"class":625,"line":4353},36,[623,4355,4356],{},"  \u003C\u002Farray>\n",[623,4358,4360],{"class":625,"line":4359},37,[623,4361,4362],{},"  \u003Ckey>PayloadDisplayName\u003C\u002Fkey>\n",[623,4364,4366],{"class":625,"line":4365},38,[623,4367,4368],{},"  \u003Cstring>Cloudflare WARP\u003C\u002Fstring>\n",[623,4370,4372],{"class":625,"line":4371},39,[623,4373,4374],{},"  \u003Ckey>PayloadIdentifier\u003C\u002Fkey>\n",[623,4376,4378],{"class":625,"line":4377},40,[623,4379,4380],{},"  \u003Cstring>cloudflare_warp\u003C\u002Fstring>\n",[623,4382,4384],{"class":625,"line":4383},41,[623,4385,4386],{},"  \u003Ckey>PayloadOrganization\u003C\u002Fkey>\n",[623,4388,4390],{"class":625,"line":4389},42,[623,4391,4392],{},"  \u003Cstring>Cloudflare, Ltd.\u003C\u002Fstring>\n",[623,4394,4396],{"class":625,"line":4395},43,[623,4397,4398],{},"  \u003Ckey>PayloadRemovalDisallowed\u003C\u002Fkey>\n",[623,4400,4402],{"class":625,"line":4401},44,[623,4403,4404],{},"  \u003Cfalse\u002F>\n",[623,4406,4408],{"class":625,"line":4407},45,[623,4409,4410],{},"  \u003Ckey>PayloadScope\u003C\u002Fkey>\n",[623,4412,4414],{"class":625,"line":4413},46,[623,4415,4416],{},"  \u003Cstring>System\u003C\u002Fstring>\n",[623,4418,4420],{"class":625,"line":4419},47,[623,4421,4422],{},"  \u003Ckey>PayloadType\u003C\u002Fkey>\n",[623,4424,4426],{"class":625,"line":4425},48,[623,4427,4428],{},"  \u003Cstring>Configuration\u003C\u002Fstring>\n",[623,4430,4432],{"class":625,"line":4431},49,[623,4433,4434],{},"  \u003Ckey>PayloadUUID\u003C\u002Fkey>\n",[623,4436,4438],{"class":625,"line":4437},50,[623,4439,4440],{},"  \u003Cstring>2B7763B8-64F6-41EB-AA5E-7761651B8131\u003C\u002Fstring>\n",[623,4442,4444],{"class":625,"line":4443},51,[623,4445,4446],{},"  \u003Ckey>PayloadVersion\u003C\u002Fkey>\n",[623,4448,4450],{"class":625,"line":4449},52,[623,4451,4452],{},"  \u003Cinteger>1\u003C\u002Finteger>\n",[623,4454,4456],{"class":625,"line":4455},53,[623,4457,4458],{},"\u003C\u002Fdict>\n",[623,4460,4462],{"class":625,"line":4461},54,[623,4463,4464],{},"\u003C\u002Fplist>\n",[484,4466,4467,4477,4489,4499,4505,4522,4535,4554,4570],{},[468,4468,4469,4470,565,4473,4476],{},"Remplacez ",[524,4471,4472],{},"your-team-name-1",[524,4474,4475],{},"your-team-name-2"," par vos noms d'équipe Cloudflare Zero Trust respectifs.",[468,4478,1753,4479,4482,4483,4486,4487,511],{},[524,4480,4481],{},"uuidgen"," dans votre Terminal pour générer des UUID uniques, et utilisez-les pour remplacer les valeurs ",[524,4484,4485],{},"PayloadUUID"," temporaires dans le fichier ",[524,4488,4141],{},[468,4490,4491,4492,4495,4496,4498],{},"Assurez-vous que la chaîne ",[524,4493,4494],{},"PayloadIdentifier"," contient également le ",[524,4497,4485],{}," mis à jour pour que le profil reste distinct.",[468,4500,4501,4502,4504],{},"Enregistrez votre fichier ",[524,4503,4141],{}," modifié.",[468,4506,4507,4508,4511,4512,4515,4516,4518],{},"Ouvrez les ",[433,4509,4510],{},"Réglages Système"," sur votre Mac, recherchez ",[433,4513,4514],{},"Profils",", puis sélectionnez-le.",[611,4517],{},[516,4519],{"alt":4520,"src":4521},"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",[468,4523,4524,4525,4528,4529,4531],{},"Cliquez sur ",[433,4526,4527],{},"Installer, afficher ou supprimer..."," pour commencer à ajouter votre nouveau profil de configuration.",[611,4530],{},[516,4532],{"alt":4533,"src":4534},"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",[468,4536,4537,4538,4540,4541,4543,4544,4546,4550],{},"Cliquez sur l'icône ",[433,4539,3144],{}," (plus) dans le coin inférieur gauche et sélectionnez votre fichier ",[524,4542,4141],{}," enregistré.",[611,4545],{},[516,4547],{"alt":4548,"src":4549},"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",[516,4551],{"alt":4552,"src":4553},"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",[468,4555,4556,4557,4559,4560,4563,4564,4566],{},"Sélectionnez ",[433,4558,439],{}," et cliquez sur ",[433,4561,4562],{},"Installer"," pour appliquer la configuration.",[611,4565],{},[516,4567],{"alt":4568,"src":4569},"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",[468,4571,4572,4573,4575],{},"Redémarrez votre client Cloudflare WARP. Vous devriez maintenant voir le sélecteur multi-profil dans l'interface utilisateur :",[611,4574],{},[516,4576],{"alt":4577,"src":4578},"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",[457,4580,1323],{"id":1322},[429,4582,4583],{},"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.",[457,4585,2802],{"id":2801},[484,4587,4588,4595,4602,4609],{},[468,4589,4590],{},[449,4591,4594],{"href":4592,"rel":4593},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fteam-and-resources\u002Fdevices\u002Fcloudflare-one-client\u002Fdeployment\u002Fmdm-deployment\u002F#prepare-file-for-mdm-deployment",[509],"Managed Deployment Preparation",[468,4596,4597],{},[449,4598,4601],{"href":4599,"rel":4600},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fteam-and-resources\u002Fdevices\u002Fcloudflare-one-client\u002Fdeployment\u002Fmdm-deployment\u002Fswitch-organizations\u002F",[509],"Switch Between Zero Trust Organizations",[468,4603,4604],{},[449,4605,4608],{"href":4606,"rel":4607},"https:\u002F\u002Fblog.cloudflare.com\u002Fintroducing-warp-connector-paving-the-path-to-any-to-any-connectivity-2\u002F",[509],"Introducing WARP Connector: Paving the Path to Any-to-Any Connectivity",[468,4610,4611],{},[449,4612,4615],{"href":4613,"rel":4614},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fteam-and-resources\u002Fdevices\u002Fcloudflare-one-client\u002F",[509],"Cloudflare One Client Documentation",[1335,4617,4618],{},"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":643,"depth":650,"links":4620},[4621,4622,4623,4624,4625],{"id":4101,"depth":643,"text":4102},{"id":4115,"depth":643,"text":4116},{"id":4131,"depth":643,"text":4132},{"id":1322,"depth":643,"text":1323},{"id":2801,"depth":643,"text":2802},[1358,4627],"cloudflare","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":4633,"robots":1398,"sitemap":4635},[4634],{"@type":1367,"headline":1270,"description":4629},{"lastmod":4628},{"title":4631,"description":4629,"ogTitle":1270,"ogDescription":4629,"twitterTitle":1270,"twitterDescription":4629},"fr\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",[4639,439,4640,1405],"macOS","MDM","jJik-19rQGXNPJD_47FtTwK_qZTlpBhn9RktaRCaTsE",{"id":4643,"title":451,"author":424,"body":4644,"category":5244,"date":5245,"description":5246,"extension":1361,"image":5247,"imageAlt":5248,"isPublished":646,"meta":5249,"minRead":674,"navigation":646,"path":375,"seo":5263,"stem":5265,"tags":5266,"updatedAt":2871,"__hash__":5271},"article\u002Ffr\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server.md",{"type":426,"value":4645,"toc":5233},[4646,4650,4653,4656,4660,4664,4667,4680,4686,4689,4718,4725,4752,4758,4763,4777,4789,4797,4802,4818,4822,4825,4846,4852,4855,4866,4876,4887,4917,4921,4931,4941,4951,4964,4971,4981,4987,5015,5031,5035,5041,5053,5058,5089,5093,5096,5110,5116,5179,5181,5225,5227,5230],[457,4647,4649],{"id":4648},"pourquoi-héberger-lagent-hermes-sur-un-vps-distant","Pourquoi héberger l'Agent Hermes sur un VPS distant ?",[429,4651,4652],{},"Comme l'Agent Hermes est capable d'exécuter des tâches en arrière-plan, de planifier des tâches et de répondre aux appels de webhooks, nous avons besoin d'une machine disponible 24h\u002F24 et 7j\u002F7. Les ordinateurs locaux peuvent subir des pannes d'électricité, être déconnectés d'Internet ou voir leurs ressources saturées. Un serveur distant garantit une disponibilité de 99 % et facilite l'ajustement des ressources de calcul en fonction des besoins.",[429,4654,4655],{},"Il existe plusieurs fournisseurs de serveurs privés virtuels (VPS) abordables sur le marché, tels que Hetzner, Hostinger et Contabo. Nous utilisons Contabo depuis un certain temps et, jusqu'à présent, tout fonctionne parfaitement.",[457,4657,4659],{"id":4658},"comment-configurer-lagent-hermes-sur-un-vps-linux","Comment configurer l'Agent Hermes sur un VPS Linux",[479,4661,4663],{"id":4662},"étape-1-connexion-à-votre-vps","Étape 1 : Connexion à votre VPS",[429,4665,4666],{},"Ouvrez votre terminal et connectez-vous en SSH à votre machine distante :",[615,4668,4670],{"className":617,"code":4669,"language":619,"meta":424,"style":424},"ssh root@your_server_ip\n",[524,4671,4672],{"__ignoreMap":424},[623,4673,4674,4677],{"class":625,"line":626},[623,4675,4676],{"class":629},"ssh",[623,4678,4679],{"class":633}," root@your_server_ip\n",[429,4681,4682],{},[516,4683],{"alt":4684,"src":4685},"Connexion SSH au serveur VPS Linux dans le terminal","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fvps-terminal-ssh-connection.webp",[429,4687,4688],{},"Assurez-vous que les paquets de votre serveur sont à jour :",[615,4690,4692],{"className":617,"code":4691,"language":619,"meta":424,"style":424},"sudo apt update && sudo apt upgrade -y\n",[524,4693,4694],{"__ignoreMap":424},[623,4695,4696,4698,4701,4704,4707,4710,4712,4715],{"class":625,"line":626},[623,4697,630],{"class":629},[623,4699,4700],{"class":633}," apt",[623,4702,4703],{"class":633}," update",[623,4705,4706],{"class":695}," &&",[623,4708,4709],{"class":629}," sudo",[623,4711,4700],{"class":633},[623,4713,4714],{"class":633}," upgrade",[623,4716,4717],{"class":633}," -y\n",[429,4719,4720,4721,4724],{},"Ajoutez un nouvel utilisateur, ",[524,4722,4723],{},"hermes",", ou le nom de votre choix :",[615,4726,4728],{"className":617,"code":4727,"language":619,"meta":424,"style":424},"sudo adduser hermes \nsudo passwd hermes\n",[524,4729,4730,4742],{"__ignoreMap":424},[623,4731,4732,4734,4737,4740],{"class":625,"line":626},[623,4733,630],{"class":629},[623,4735,4736],{"class":633}," adduser",[623,4738,4739],{"class":633}," hermes",[623,4741,773],{"class":772},[623,4743,4744,4746,4749],{"class":625,"line":643},[623,4745,630],{"class":629},[623,4747,4748],{"class":633}," passwd",[623,4750,4751],{"class":633}," hermes\n",[429,4753,4754,4755,948],{},"Désactivez la connexion par mot de passe pour l'utilisateur ",[524,4756,4757],{},"root",[465,4759,4760],{},[468,4761,4762],{},"Ouvrez le fichier de configuration SSH :",[615,4764,4766],{"className":617,"code":4765,"language":619,"meta":424,"style":424},"sudo nano \u002Fetc\u002Fssh\u002Fsshd_config\n",[524,4767,4768],{"__ignoreMap":424},[623,4769,4770,4772,4774],{"class":625,"line":626},[623,4771,630],{"class":629},[623,4773,1064],{"class":633},[623,4775,4776],{"class":633}," \u002Fetc\u002Fssh\u002Fsshd_config\n",[465,4778,4779],{"start":643},[468,4780,4781,4782,4785,4786,948],{},"Repérez la ligne ",[524,4783,4784],{},"PermitRootLogin"," et remplacez sa valeur par ",[524,4787,4788],{},"no",[615,4790,4795],{"className":4791,"code":4793,"language":4794,"meta":424},[4792],"language-text","PermitRootLogin no\n","text",[524,4796,4793],{"__ignoreMap":424},[465,4798,4799],{"start":650},[468,4800,4801],{},"Enregistrez le fichier et redémarrez le service SSH :",[615,4803,4805],{"className":617,"code":4804,"language":619,"meta":424,"style":424},"sudo systemctl restart ssh\n",[524,4806,4807],{"__ignoreMap":424},[623,4808,4809,4811,4813,4815],{"class":625,"line":626},[623,4810,630],{"class":629},[623,4812,634],{"class":633},[623,4814,637],{"class":633},[623,4816,4817],{"class":633}," ssh\n",[479,4819,4821],{"id":4820},"étape-2-installer-lagent-hermes","Étape 2 : Installer l'Agent Hermes",[429,4823,4824],{},"Exécutez la commande suivante :",[615,4826,4828],{"className":617,"code":4827,"language":619,"meta":424,"style":424},"curl -fsSL https:\u002F\u002Fhermes-agent.nousresearch.com\u002Finstall.sh | bash\n",[524,4829,4830],{"__ignoreMap":424},[623,4831,4832,4834,4837,4840,4843],{"class":625,"line":626},[623,4833,1756],{"class":629},[623,4835,4836],{"class":633}," -fsSL",[623,4838,4839],{"class":633}," https:\u002F\u002Fhermes-agent.nousresearch.com\u002Finstall.sh",[623,4841,4842],{"class":695}," |",[623,4844,4845],{"class":629}," bash\n",[429,4847,4848],{},[516,4849],{"alt":4850,"src":4851},"Exécution du script d'installation de l'Agent Hermes dans le terminal","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-agent-installation-terminal.webp",[429,4853,4854],{},"Une fois installé, vérifiez l'installation en saisissant :",[615,4856,4858],{"className":617,"code":4857,"language":619,"meta":424,"style":424},"hermes --version\n",[524,4859,4860],{"__ignoreMap":424},[623,4861,4862,4864],{"class":625,"line":626},[623,4863,4723],{"class":629},[623,4865,2389],{"class":633},[429,4867,561,4868,4871,4872],{},[524,4869,4870],{},"hermes setup"," pour configurer l'Agent Hermes :\n",[516,4873],{"alt":4874,"src":4875},"Exécution de la commande hermes setup dans le terminal pour démarrer la configuration","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-agent-setup-wizard.webp",[429,4877,4878,4879,4882,4883],{},"Sélectionnez un fournisseur de LLM, commencez par ",[524,4880,4881],{},"DeepSeek"," et ajoutez-en d'autres plus tard.\n",[516,4884],{"alt":4885,"src":4886},"Sélection de DeepSeek comme fournisseur de LLM dans la configuration de Hermes","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-llm-provider-selection.webp",[429,4888,4889,4890,1800,4892,4896,4900,4901,4904,4905,4900,4909,4912,4913],{},"Saisissez la clé API ",[524,4891,4881],{},[516,4893],{"alt":4894,"src":4895},"Saisie de la clé API DeepSeek dans le terminal","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-enter-api-key.webp",[516,4897],{"alt":4898,"src":4899},"Confirmation réussie de la clé API du fournisseur de LLM","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-api-key-success.webp","\nSélectionnez ",[524,4902,4903],{},"local machine"," pour exécuter l'Agent Hermes :\n",[516,4906],{"alt":4907,"src":4908},"Sélection de local machine pour l'environnement d'exécution de l'Agent Hermes","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-select-local-machine.webp",[524,4910,4911],{},"Telegram"," dans les canaux. D'autres canaux pourront être configurés ultérieurement.\n",[516,4914],{"alt":4915,"src":4916},"Sélection de Telegram comme canal de communication dans la configuration de Hermes","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-select-telegram-channel.webp",[479,4918,4920],{"id":4919},"étape-3-intégration-avec-telegram","Étape 3 : Intégration avec Telegram",[429,4922,4556,4923,4926,4927],{},[524,4924,4925],{},"[2]"," pour utiliser un bot Telegram.\n",[516,4928],{"alt":4929,"src":4930},"Sélection de l'option pour configurer l'intégration du bot Telegram","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-bot-integration-option.webp",[429,4932,4933,4934,4936,4937],{},"Allez sur ",[524,4935,4911],{}," et recherchez 'BotFather'.\n",[516,4938],{"alt":4939,"src":4940},"Recherche de BotFather dans l'application Telegram","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-search-botfather.webp",[429,4942,4524,4943,4946,4947],{},[524,4944,4945],{},"Open"," pour ouvrir 'BotFather'.\n",[516,4948],{"alt":4949,"src":4950},"Ouverture de l'interface de chat avec BotFather sur Telegram","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-open-botfather-chat.webp",[429,4952,4524,4953,4956,4957,527,4960],{},[524,4954,4955],{},"Create a New Bot"," (ou tapez ",[524,4958,4959],{},"\u002Fnewbot",[516,4961],{"alt":4962,"src":4963},"Envoi de la commande newbot à BotFather pour créer un nouveau bot Telegram","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fbotfather-create-new-bot.webp",[429,4965,4966,4967],{},"Renseignez les noms et créez le bot.\n",[516,4968],{"alt":4969,"src":4970},"Configuration du nom et de l'identifiant pour le nouveau bot Telegram","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fbotfather-bot-details-configured.webp",[429,4972,4524,4973,4976,4977],{},[524,4974,4975],{},"Copy"," pour copier le jeton (token) et collez-le dans votre terminal.\n",[516,4978],{"alt":4979,"src":4980},"Copie du jeton d'API HTTP du bot Telegram nouvellement créé","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fbotfather-copy-http-api-token.webp",[429,4982,4983,4984,4986],{},"Trouvez l'identifiant (ID) de votre compte utilisateur ",[524,4985,4911],{}," et ajoutez-le à la liste des utilisateurs autorisés ('Allowed user list') :",[484,4988,4989,4999,5012],{},[468,4990,4991,4992,4994,4995],{},"Recherchez '@raw_data_bot' sur ",[524,4993,4911],{},".\n",[516,4996],{"alt":4997,"src":4998},"Recherche de raw data bot sur Telegram pour obtenir l'ID utilisateur","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-search-raw-data-bot.webp",[468,5000,4524,5001,5004,5005,4994,5008],{},[524,5002,5003],{},"RawDataBot"," puis sur le bouton Start. Votre ID d'utilisateur s'affichera à côté de ",[524,5006,5007],{},"P.S. Your ID:",[516,5009],{"alt":5010,"src":5011},"Démarrage de RawDataBot pour afficher l'ID du compte utilisateur","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-raw-data-bot-user-id.webp",[468,5013,5014],{},"Copiez cet ID utilisateur et collez-le dans le terminal.",[429,5016,5017,5018,5022,5023,5027],{},"Puisque nous exécutons l'agent dans le cloud, nous voulons que le service démarre automatiquement.\n",[516,5019],{"alt":5020,"src":5021},"Configuration de l'option de démarrage automatique pour le service systemd de Hermes","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-autostart-service-option.webp","\nLaissez toutes les options par défaut :\n",[516,5024],{"alt":5025,"src":5026},"Conservation des valeurs par défaut pour l'installation dans le terminal","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-leave-defaults-1.webp",[516,5028],{"alt":5029,"src":5030},"Validation des options d'installation par défaut de Hermes","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-leave-defaults-2.webp",[457,5032,5034],{"id":5033},"tester-votre-agent-hermes-avec-le-bot-telegram","Tester votre Agent Hermes avec le bot Telegram",[429,5036,5037,5038,948],{},"Exécutez la commande suivante pour démarrer ",[524,5039,5040],{},"hermes gateway",[615,5042,5044],{"className":617,"code":5043,"language":619,"meta":424,"style":424},"hermes gateway\n",[524,5045,5046],{"__ignoreMap":424},[623,5047,5048,5050],{"class":625,"line":626},[623,5049,4723],{"class":629},[623,5051,5052],{"class":633}," gateway\n",[429,5054,4933,5055,5057],{},[524,5056,4911],{}," et ajoutez le bot créé, '@tech_cloud_hermes_bot', à vos discussions.",[484,5059,5060,5070,5080],{},[468,5061,5062,5063,5065,5066],{},"Saisissez '\u002Fnew' dans ",[524,5064,4911],{}," pour démarrer une nouvelle session de l'Agent Hermes.\n",[516,5067],{"alt":5068,"src":5069},"Saisie de la commande new dans Telegram pour démarrer une session Agent Hermes","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-chat-hermes-new-session.webp",[468,5071,5072,5073,5075,5076],{},"Saisir ",[524,5074,3898],{}," listera toutes les commandes disponibles.\n",[516,5077],{"alt":5078,"src":5079},"Saisie de la commande commands dans Telegram pour voir la liste des instructions","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-chat-hermes-commands-list.webp",[468,5081,5072,5082,5084,5085],{},[524,5083,3928],{}," affichera la liste des LLM disponibles.\n",[516,5086],{"alt":5087,"src":5088},"Saisie de la commande model dans Telegram pour voir la liste des LLM actifs","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-chat-hermes-model-selection.webp",[457,5090,5092],{"id":5091},"exécuter-la-passerelle-hermes-en-arrière-plan","Exécuter la passerelle Hermes en arrière-plan",[429,5094,5095],{},"Créez le fichier de service :",[615,5097,5099],{"className":1053,"code":5098,"language":1055,"meta":424,"style":424},"sudo nano \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-gateway.service\n",[524,5100,5101],{"__ignoreMap":424},[623,5102,5103,5105,5107],{"class":625,"line":626},[623,5104,630],{"class":629},[623,5106,1064],{"class":633},[623,5108,5109],{"class":633}," \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-gateway.service\n",[429,5111,5112,5113,5115],{},"Collez le contenu suivant en remplaçant ",[524,5114,4723],{}," dans '\u002Fhome\u002Fhermes' par votre nom d'utilisateur :",[615,5117,5119],{"className":1079,"code":5118,"language":1081,"meta":424,"style":424},"[Unit]\nDescription=Hermes Gateway\nAfter=network.target\n\n[Service]\nUser=hermes\nWorkingDirectory=\u002Fhome\u002Fhermes\nExecStart=\u002Fhome\u002Fhermes\u002F.local\u002Fbin\u002Fhermes gateway\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",[524,5120,5121,5125,5130,5134,5138,5142,5146,5150,5155,5159,5163,5167,5171,5175],{"__ignoreMap":424},[623,5122,5123],{"class":625,"line":626},[623,5124,1088],{},[623,5126,5127],{"class":625,"line":643},[623,5128,5129],{},"Description=Hermes Gateway\n",[623,5131,5132],{"class":625,"line":650},[623,5133,1098],{},[623,5135,5136],{"class":625,"line":657},[623,5137,647],{"emptyLinePlaceholder":646},[623,5139,5140],{"class":625,"line":669},[623,5141,1107],{},[623,5143,5144],{"class":625,"line":674},[623,5145,1112],{},[623,5147,5148],{"class":625,"line":680},[623,5149,1117],{},[623,5151,5152],{"class":625,"line":1023},[623,5153,5154],{},"ExecStart=\u002Fhome\u002Fhermes\u002F.local\u002Fbin\u002Fhermes gateway\n",[623,5156,5157],{"class":625,"line":1034},[623,5158,1127],{},[623,5160,5161],{"class":625,"line":1130},[623,5162,1133],{},[623,5164,5165],{"class":625,"line":1136},[623,5166,1139],{},[623,5168,5169],{"class":625,"line":1142},[623,5170,647],{"emptyLinePlaceholder":646},[623,5172,5173],{"class":625,"line":1147},[623,5174,1150],{},[623,5176,5177],{"class":625,"line":1153},[623,5178,1156],{},[429,5180,1161],{},[615,5182,5184],{"className":1053,"code":5183,"language":1055,"meta":424,"style":424},"sudo systemctl daemon-reload\nsudo systemctl enable hermes-gateway\nsudo systemctl start hermes-gateway\nsudo systemctl status hermes-gateway\n",[524,5185,5186,5194,5205,5215],{"__ignoreMap":424},[623,5187,5188,5190,5192],{"class":625,"line":626},[623,5189,630],{"class":629},[623,5191,634],{"class":633},[623,5193,1175],{"class":633},[623,5195,5196,5198,5200,5202],{"class":625,"line":643},[623,5197,630],{"class":629},[623,5199,634],{"class":633},[623,5201,769],{"class":633},[623,5203,5204],{"class":633}," hermes-gateway\n",[623,5206,5207,5209,5211,5213],{"class":625,"line":650},[623,5208,630],{"class":629},[623,5210,634],{"class":633},[623,5212,1195],{"class":633},[623,5214,5204],{"class":633},[623,5216,5217,5219,5221,5223],{"class":625,"line":657},[623,5218,630],{"class":629},[623,5220,634],{"class":633},[623,5222,664],{"class":633},[623,5224,5204],{"class":633},[457,5226,1323],{"id":1322},[429,5228,5229],{},"Dans cet article, nous avons vu comment configurer l'Agent Hermes et interagir avec lui via Telegram. En faisant fonctionner l'Agent Hermes sur un serveur distant, vous disposez d'un véritable assistant virtuel disponible 24h\u002F24 et 7j\u002F7.",[1335,5231,5232],{},"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 .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 .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}",{"title":424,"searchDepth":643,"depth":650,"links":5234},[5235,5236,5241,5242,5243],{"id":4648,"depth":643,"text":4649},{"id":4658,"depth":643,"text":4659,"children":5237},[5238,5239,5240],{"id":4662,"depth":650,"text":4663},{"id":4820,"depth":650,"text":4821},{"id":4919,"depth":650,"text":4920},{"id":5033,"depth":643,"text":5034},{"id":5091,"depth":643,"text":5092},{"id":1322,"depth":643,"text":1323},[1357],"2026-06-19","Déployez l'Agent Hermes sur un VPS distant pour un service actif 24h\u002F24. Suivez ce guide complet pour l'intégrer facilement avec un bot Telegram dédié.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002FFR-How%20to%20Setup%20Hermes%20on%20Remote%20Server.webp","Guide étape par étape pour déployer l'Agent Hermes sur un serveur VPS Linux et l'intégrer à un bot Telegram.",{"schemaOrg":5250,"robots":1398,"sitemap":5262},[5251],{"@type":1367,"name":451,"description":5246,"image":5247,"step":5252},[5253,5256,5259],{"@type":1370,"name":4663,"text":5254,"image":4685,"url":5255},"Ouvrez votre terminal et connectez-vous en SSH à votre machine distante : Assurez-vous que les paquets de votre serveur sont à jour : Ajoutez un no...","#tape-1-connexion-votre-vps",{"@type":1370,"name":4821,"text":5257,"image":4851,"url":5258},"Exécutez la commande suivante : Une fois installé, vérifiez l'installation en saisissant : Exécutez `hermes setup` pour configurer l'Agent Hermes :...","#tape-2-installer-lagent-hermes",{"@type":1370,"name":4920,"text":5260,"image":4930,"url":5261},"Sélectionnez `[2]` pour utiliser un bot Telegram. Allez sur `Telegram` et recherchez 'BotFather'. Cliquez sur `Open` pour ouvrir 'BotFather'. Cliqu...","#tape-3-intgration-avec-telegram",{"lastmod":5245},{"title":5264,"description":5246,"ogTitle":451,"ogDescription":5246,"twitterTitle":451,"twitterDescription":5246},"Installation de l'Agent Hermes sur VPS : Guide Bot Telegram","fr\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",[435,5267,5268,5269,5270],"VPS Setup","Telegram Bot","Linux VPS","AI Agent","ltX16FxH5jYLt4zWAFs695bl7w6OVVG9Zy8qmwtstkM",{"id":2874,"title":2875,"author":424,"body":2876,"category":4055,"date":4058,"description":4059,"extension":1361,"image":4060,"imageAlt":4061,"isPublished":646,"meta":4062,"minRead":1136,"navigation":646,"path":355,"seo":4087,"stem":4089,"tags":4090,"updatedAt":2871,"__hash__":4093},1792489990190]