[{"data":1,"prerenderedAt":14221},["ShallowReactive",2],{"published-article-paths":3,"search-navigation":348,"category-articles-fr-ai-agents":421},[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,"children":-1},"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,"children":-1},"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,"children":-1},"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,"children":-1},"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,"children":-1},"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,"children":-1},"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,"children":-1},"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,"children":-1},"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,"children":-1},"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,"children":-1},"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,"children":-1},"Google Antigravity 2 Hands-On: Setup & First Impressions","\u002Farticle\u002Fsetup-antigravity-2","en\u002Farticle\u002Fsetup-antigravity-2",{"title":394,"path":395,"stem":396,"children":-1},"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,"children":-1},"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,"children":-1},"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,"children":-1},"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,"children":-1},"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,"children":-1},"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,"children":-1},"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",[422,1700,2644,4093,6248,8135,8709,9490,10022,10414,11035,11493,11703,11927,12269,12962,13394,13647],{"id":423,"title":424,"author":425,"body":426,"category":1654,"date":1658,"description":1659,"extension":1660,"image":1661,"imageAlt":1662,"isPublished":1061,"meta":1663,"minRead":1691,"navigation":1061,"path":111,"seo":1692,"stem":1694,"tags":1695,"updatedAt":1698,"__hash__":1699},"article\u002Ffr\u002Farticle\u002Fbringing-buzz-to-deepseek-harness.md","Connecter DeepSeek Harness à Buzz: La passerelle Nostr","",{"type":427,"value":428,"toc":1638},"minimark",[429,437,462,470,473,478,484,529,532,591,595,601,868,871,875,880,887,891,905,909,919,972,979,983,986,1018,1022,1027,1078,1086,1092,1101,1107,1136,1149,1153,1162,1193,1215,1263,1270,1275,1281,1288,1294,1299,1306,1320,1326,1335,1376,1379,1385,1392,1398,1402,1405,1556,1560,1594,1598,1604,1608,1634],[430,431,432],"p",{},[433,434],"img",{"alt":435,"src":436},"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",[430,438,439,440,450,451,456,457,461],{},"Le plugin pour DeepSeek Harness (DSH), ",[441,442,443],"strong",{},[444,445,449],"a",{"href":446,"rel":447},"https:\u002F\u002Fgithub.com\u002Fa792883583\u002Fdsh-message-gateway",[448],"nofollow","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 ",[441,452,453],{},[444,454,455],{"href":383},"Auto-héberger Buzz de Block: Espace collaboratif d'agents IA"," à la liste. Le dépôt forké est disponible sur GitHub à l'adresse ",[444,458,459],{"href":459,"rel":460},"https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fdsh-message-gateway",[448],".",[463,464],"article-card",{"description":465,"image":466,"image-alt":467,"label":468,"min-read":469,"title":455,"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","12",[430,471,472],{},"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.",[474,475,477],"h2",{"id":476},"architecture-du-plugin-dsh-message-gateway","Architecture du plugin dsh-message-gateway",[430,479,480,481,483],{},"L'architecture du plugin ",[441,482,449],{}," s'articule autour de deux volets complémentaires :",[485,486,487,519],"ul",{},[488,489,490,493,494,498,499,502,503,506,507,510,511,514,515,518],"li",{},[441,491,492],{},"Hôte"," (Node) : ",[495,496,497],"code",{},"gateway-store"," (gestion des identifiants dans ",[495,500,501],{},"~\u002F.dsh\u002Fgateway.json","), ",[495,504,505],{},"platforms.ts"," (définitions des plateformes et tests de connexion), ",[495,508,509],{},"routes.ts"," (endpoints ",[495,512,513],{},"\u002Fgateway\u002F*",") et ",[495,516,517],{},"bridge-manager.ts"," (les passerelles résidentes : sessions d'agents indépendantes par canal et streaming des réponses).",[488,520,521,524,525,528],{},[441,522,523],{},"Client"," (navigateur) : la page \"",[441,526,527],{},"Message platforms","\" dans la barre latérale, permettant de renseigner les accès, tester la connectivité et surveiller l'état en direct.",[430,530,531],{},"L'intégration d'une nouvelle plateforme nécessite les étapes suivantes :",[533,534,535,552,566],"ol",{},[488,536,537,540,541,544,545,548,549,461],{},[441,538,539],{},"Une classe de passerelle (bridge)"," : proposant les méthodes ",[495,542,543],{},"start\u002Fstop\u002Fstatus"," et un callback ",[495,546,547],{},"onText(text, frame)",", à l'image de ",[495,550,551],{},"wecom-bridge.ts",[488,553,554,557,558,561,562,565],{},[441,555,556],{},"Câblage dans bridge-manager"," : réutilisation du pipeline par conversation existant (",[495,559,560],{},"ensureAgentForKey"," + ",[495,563,564],{},"pendingMap",") en branchant le collecteur de réponses de la plateforme.",[488,567,568,571,572,575,576,579,580,583,584,587,588,461],{},[441,569,570],{},"Persistance et routage"," : dans ",[495,573,574],{},"\u002Fgateway\u002Fsave"," et ",[495,577,578],{},"\u002Fgateway\u002Fdelete"," : ",[441,581,582],{},"enregistrer les identifiants démarre la passerelle, les supprimer l'arrête"," — complété d'un drapeau ",[495,585,586],{},"autoStartXxx"," assurant la reconnexion automatique au démarrage de ",[495,589,590],{},"dsh web",[474,592,594],{"id":593},"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",[430,596,597,600],{},[441,598,599],{},"DeepSeek Harness"," a été utilisé pour développer la passerelle Buzz. L'implémentation respecte scrupuleusement les spécifications du protocole Nostr :",[602,603,604,630],"table",{},[605,606,607],"thead",{},[608,609,610,616],"tr",{},[611,612,613],"th",{},[441,614,615],{},"Transport",[611,617,618,619,622,623,626,627],{},"Un unique WebSocket authentifié via NIP-42 ; par défaut ",[495,620,621],{},"ws:\u002F\u002Flocalhost:3000"," ; ",[495,624,625],{},"http(s):\u002F\u002F"," est normalisé en ",[495,628,629],{},"ws(s):\u002F\u002F",[631,632,633,652,679,696,719,743,768,781,794,813,830,844],"tbody",{},[608,634,635,641],{},[636,637,638],"td",{},[441,639,640],{},"Authentification",[636,642,643,644,647,648,651],{},"Événement AUTH ",[495,645,646],{},"kind 22242",", tags ",[495,649,650],{},"[[\"relay\", url], [\"challenge\", challenge]]",", contenu vide, signé avec la clé privée de l'agent",[608,653,654,659],{},[636,655,656],{},[441,657,658],{},"Abonnements",[636,660,661,579,664,667,668,671,672,675,676],{},[441,662,663],{},"Par canal",[495,665,666],{},"REQ {\"kinds\":[9], \"#h\":[\u003Cuuid>]}"," — un REQ par canal. Un REQ global ",[495,669,670],{},"kinds:[9]"," reçoit EOSE sans jamais distribuer d'événements ; le filtre ",[495,673,674],{},"#h"," multivalué ",[441,677,678],{},"échoue",[608,680,681,686],{},[636,682,683],{},[441,684,685],{},"Découverte",[636,687,688,691,692,695],{},[495,689,690],{},"REQ {kinds:[39000]}"," historique pour récupérer les métadonnées (",[495,693,694],{},"type == \"dm\""," signale un canal de messagerie directe)",[608,697,698,703],{},[636,699,700],{},[441,701,702],{},"Adhésion aux canaux",[636,704,705,708,709,711,712,715,716],{},[495,706,707],{},"REQ {kinds:[44100,44101], \"#p\":[notre pubkey], since: now-60s}"," en direct — 44100 = ajout, 44101 = retrait, avec ",[495,710,430],{},"+",[495,713,714],{},"h"," ; met à jour les abonnements ",[441,717,718],{},"sans reconnexion",[608,720,721,726],{},[636,722,723],{},[441,724,725],{},"Événements de chat",[636,727,728,731,732,735,736,739,740],{},[495,729,730],{},"kind 9"," avec tags ",[495,733,734],{},"[\"h\", canal]",", et facultativement ",[495,737,738],{},"[\"e\", replyTo]",", ",[495,741,742],{},"[\"p\", mention]",[608,744,745,750],{},[636,746,747],{},[441,748,749],{},"Éditions sur place",[636,751,752,755,756,561,758,761,762,764,765,767],{},[495,753,754],{},"kind 40003"," avec ",[495,757,714],{},[495,759,760],{},"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 ",[495,763,730],{}," dans le fil (",[495,766,760],{},"→racine)",[608,769,770,775],{},[636,771,772],{},[441,773,774],{},"Trames CLOSED",[636,776,777,780],{},[495,778,779],{},"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",[608,782,783,788],{},[636,784,785],{},[441,786,787],{},"Limites du relais",[636,789,790,791],{},"≤ 2000 événements historiques par abonnement, triés du plus récent au plus ancien, même avec le filtre ",[495,792,793],{},"since",[608,795,796,801],{},[636,797,798],{},[441,799,800],{},"Filtrage des mentions",[636,802,803,804,806,807,809,810,812],{},"Traite les ",[495,805,730],{}," entrants uniquement si : (a) le tag ",[495,808,430],{}," inclut notre pubkey, (b) le canal est un DM, ou (c) la racine ",[495,811,760],{}," provient de notre agent. Ignore notre pubkey (anti-boucle)",[608,814,815,820],{},[636,816,817],{},[441,818,819],{},"Mentions sortantes",[636,821,822,823,826,827,829],{},"Texte publié tel quel — le relais ne valide pas les tokens ",[495,824,825],{},"@"," ; les tags ",[495,828,430],{}," intègrent l'auteur source et jusqu'à 7 autres pubkeys mentionnées (max 8)",[608,831,832,837],{},[636,833,834],{},[441,835,836],{},"Messages directs",[636,838,839,840,843],{},"Canaux en texte brut confinés au relais (métadonnées ",[495,841,842],{},"type: \"dm\"",") — sans chiffrement NIP-04\u002F44 dans cette passerelle",[608,845,846,851],{},[636,847,848],{},[441,849,850],{},"Pièces jointes",[636,852,853,854,857,858,739,861,739,864,867],{},"NIP-92 ",[495,855,856],{},"imeta"," (",[495,859,860],{},"url",[495,862,863],{},"sha256",[495,865,866],{},"m",") → téléchargement http(s), contrôle SHA-256, limite de 20 Mo, max 4 par message ; images sortantes non prises en charge",[430,869,870],{},"Le schéma ci-dessous détaille le processus d'initialisation (bootstrap) de la passerelle Buzz :",[433,872],{"src":873,"alt":874},"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",[876,877,879],"h3",{"id":878},"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)",[430,881,882,883,886],{},"Nostr ne disposant pas d'indicateur de frappe natif et ses événements étant strictement append-only, la passerelle Buzz ",[441,884,885],{},"simule un affichage fluide en direct grâce aux réécritures sur place"," :",[433,888],{"src":889,"alt":890},"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",[485,892,893],{},[488,894,895],{},[896,897,898,899,901,902,904],"em",{},"La passerelle Buzz émet d'abord un événement temporaire ",[495,900,730],{},", puis le réécrit progressivement avec des éditions in situ ",[495,903,754],{}," 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.",[876,906,908],{"id":907},"connexion-des-espaces-de-travail-deepseek-harness-via-commandes-de-chat","Connexion des espaces de travail DeepSeek Harness via commandes de chat",[430,910,911,912,857,915,918],{},"Dans l'interface Web de DSH, la gestion des espaces de travail s'appuie sur le service ",[495,913,914],{},"workspaceRegistry",[495,916,917],{},"@deepseek-ai\u002Fdsh-workspace",") :",[920,921,925],"pre",{"className":922,"code":923,"language":924,"meta":425,"style":425},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const existing = await ctx.workspaceRegistry.resolveByPath(request.path);\n","typescript",[495,926,927],{"__ignoreMap":425},[928,929,932,936,940,944,948,951,953,955,957,961,964,966,969],"span",{"class":930,"line":931},"line",1,[928,933,935],{"class":934},"spNyl","const",[928,937,939],{"class":938},"sTEyZ"," existing ",[928,941,943],{"class":942},"sMK4o","=",[928,945,947],{"class":946},"s7zQu"," await",[928,949,950],{"class":938}," ctx",[928,952,461],{"class":942},[928,954,914],{"class":938},[928,956,461],{"class":942},[928,958,960],{"class":959},"s2Zo4","resolveByPath",[928,962,963],{"class":938},"(request",[928,965,461],{"class":942},[928,967,968],{"class":938},"path)",[928,970,971],{"class":942},";\n",[430,973,974,975,978],{},"La passerelle Buzz met à disposition la commande ",[495,976,977],{},"\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.",[433,980],{"src":981,"alt":982},"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",[430,984,985],{},"Trois règles d'architecture fondamentales :",[485,987,988,998,1008],{},[488,989,990,993,994,997],{},[441,991,992],{},"Changer de dossier = créer une nouvelle session."," La variable ",[495,995,996],{},"cwd"," est inscrite dans l'en-tête de la session lors de sa création et demeure immuable.",[488,999,1000,1003,1004,1007],{},[441,1001,1002],{},"Le dossier doit impérativement exister."," L'appel ",[495,1005,1006],{},"create"," rejette tout chemin inexistant.",[488,1009,1010,1013,1014,1017],{},[441,1011,1012],{},"Commande sensible du point de vue de la sécurité."," Les sessions bénéficient d'une politique ",[441,1015,1016],{},"auto-approve",", conférant un accès direct aux fichiers du dossier ciblé.",[474,1019,1021],{"id":1020},"guide-pas-à-pas-dinstallation-et-de-configuration","Guide pas à pas d'installation et de configuration",[533,1023,1024],{},[488,1025,1026],{},"Exécutez les commandes suivantes dans votre terminal :",[920,1028,1032],{"className":1029,"code":1030,"language":1031,"meta":425,"style":425},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","dsh plugin --profile web add https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fdsh-message-gateway.git\n\n# Start DSH web\ndsh web\n","bash",[495,1033,1034,1056,1063,1070],{"__ignoreMap":425},[928,1035,1036,1040,1044,1047,1050,1053],{"class":930,"line":931},[928,1037,1039],{"class":1038},"sBMFI","dsh",[928,1041,1043],{"class":1042},"sfazB"," plugin",[928,1045,1046],{"class":1042}," --profile",[928,1048,1049],{"class":1042}," web",[928,1051,1052],{"class":1042}," add",[928,1054,1055],{"class":1042}," https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fdsh-message-gateway.git\n",[928,1057,1059],{"class":930,"line":1058},2,[928,1060,1062],{"emptyLinePlaceholder":1061},true,"\n",[928,1064,1066],{"class":930,"line":1065},3,[928,1067,1069],{"class":1068},"sHwdD","# Start DSH web\n",[928,1071,1073,1075],{"class":930,"line":1072},4,[928,1074,1039],{"class":1038},[928,1076,1077],{"class":1042}," web\n",[533,1079,1080],{"start":1058},[488,1081,1082,1083,1085],{},"Dès que l'interface Web de DSH est accessible dans votre navigateur, cliquez sur l'icône \"",[441,1084,527],{},"\" :",[430,1087,1088],{},[433,1089],{"alt":1090,"src":1091},"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",[533,1093,1094],{"start":1065},[488,1095,1096,1097,1100],{},"Cliquez sur \"",[441,1098,1099],{},"Buzz","\" dans le menu de gauche :",[430,1102,1103],{},[433,1104],{"alt":1105,"src":1106},"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",[533,1108,1109,1118,1129],{"start":1072},[488,1110,1096,1111,1114,1115,461],{},[441,1112,1113],{},"Generate keypair","\" pour générer une paire de clés Nostr. Conservez précieusement la clé publique ",[495,1116,1117],{},"npub",[488,1119,1120,1121,1124,1125,1128],{},"Renseignez la ",[441,1122,1123],{},"Relay URL"," ainsi que les ",[441,1126,1127],{},"Channels"," (la liste autorisée des UUIDs de canaux à écouter).",[488,1130,1131,1132,1135],{},"Cliquez sur le bouton \"",[441,1133,1134],{},"Save","\".",[430,1137,1138,1139,1142,1143,1146,1147,461],{},"L'enregistrement du formulaire stocke les paramètres et ",[441,1140,1141],{},"démarre la passerelle",". La clé privée ",[495,1144,1145],{},"nsec"," est traitée comme un secret sensible, confinée dans ",[495,1148,501],{},[876,1150,1152],{"id":1151},"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",[430,1154,1155,1158,1159,1161],{},[441,1156,1157],{},"Ajoutez l'assistant DSH au relais en tant que membre."," Indiquez la clé publique ",[495,1160,1117],{}," générée précédemment :",[920,1163,1165],{"className":1029,"code":1164,"language":1031,"meta":425,"style":425},"docker compose exec relay buzz-admin add-member --pubkey npub123123123\n",[495,1166,1167],{"__ignoreMap":425},[928,1168,1169,1172,1175,1178,1181,1184,1187,1190],{"class":930,"line":931},[928,1170,1171],{"class":1038},"docker",[928,1173,1174],{"class":1042}," compose",[928,1176,1177],{"class":1042}," exec",[928,1179,1180],{"class":1042}," relay",[928,1182,1183],{"class":1042}," buzz-admin",[928,1185,1186],{"class":1042}," add-member",[928,1188,1189],{"class":1042}," --pubkey",[928,1191,1192],{"class":1042}," npub123123123\n",[430,1194,1195,1198,1199,1202,1203,1206,1207,1210,1211,1214],{},[441,1196,1197],{},"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 ",[495,1200,1201],{},"buzz-cli",", veillez à renseigner le paramètre ",[495,1204,1205],{},"--pubkey"," en format ",[441,1208,1209],{},"HEX"," et non npub (la commande ",[495,1212,1213],{},"buzz-admin add-member"," affiche la clé HEX correspondante) :",[920,1216,1218],{"className":1029,"code":1217,"language":1031,"meta":425,"style":425},"buzz channels add-member --channel \u003CCHANNEL_UUID> --pubkey \u003CAGENT_HEX> --role member\n",[495,1219,1220],{"__ignoreMap":425},[928,1221,1222,1225,1228,1230,1233,1236,1239,1242,1245,1247,1249,1252,1255,1257,1260],{"class":930,"line":931},[928,1223,1224],{"class":1038},"buzz",[928,1226,1227],{"class":1042}," channels",[928,1229,1186],{"class":1042},[928,1231,1232],{"class":1042}," --channel",[928,1234,1235],{"class":942}," \u003C",[928,1237,1238],{"class":1042},"CHANNEL_UUI",[928,1240,1241],{"class":938},"D",[928,1243,1244],{"class":942},">",[928,1246,1189],{"class":1042},[928,1248,1235],{"class":942},[928,1250,1251],{"class":1042},"AGENT_HE",[928,1253,1254],{"class":938},"X",[928,1256,1244],{"class":942},[928,1258,1259],{"class":1042}," --role",[928,1261,1262],{"class":1042}," member\n",[463,1264],{"description":1265,"image":466,"image-alt":467,"label":1266,"min-read":1267,"title":1268,"to":1269},"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",[430,1271,1272,1273,886],{},"Personnalisez le profil de l'assistant sur le relais Nostr avec un nom évocateur via ",[495,1274,1201],{},[430,1276,1277],{},[433,1278],{"alt":1279,"src":1280},"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",[430,1282,1283,1284,1287],{},"Transmettez un ",[441,1285,1286],{},"Wave"," (la salutation de bienvenue de Buzz en message privé) à l'assistant. L'écho confirme la bonne liaison :",[430,1289,1290],{},[433,1291],{"alt":1292,"src":1293},"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",[430,1295,1296],{},[896,1297,1298],{},"Envoi d'un Wave en message direct à l'assistant DSH — la passerelle répond immédiatement.",[876,1300,1302,1303],{"id":1301},"activation-de-laccès-aux-dossiers-locaux-via-workspace","Activation de l'accès aux dossiers locaux via ",[495,1304,1305],{},"\u002Fworkspace",[430,1307,1308,1309,1312,1313,1316,1317,1319],{},"Le paramètre ",[495,1310,1311],{},"allowWorkspace"," étant désactivé (",[495,1314,1315],{},"false",") par défaut, la commande ",[495,1318,1305],{}," est initialement rejetée :",[430,1321,1322],{},[433,1323],{"alt":1324,"src":1325},"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",[430,1327,1328,1329,1332,1333,886],{},"Activez-le dans ",[495,1330,1331],{},"~\u002F.dsh\u002Fprofiles\u002Fweb\u002Fcordis.patch.yml",", puis relancez ",[495,1334,590],{},[920,1336,1340],{"className":1337,"code":1338,"language":1339,"meta":425,"style":425},"language-yml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","- id: ui-message-gateway\n  config:\n    allowWorkspace: true\n","yml",[495,1341,1342,1357,1365],{"__ignoreMap":425},[928,1343,1344,1347,1351,1354],{"class":930,"line":931},[928,1345,1346],{"class":942},"-",[928,1348,1350],{"class":1349},"swJcz"," id",[928,1352,1353],{"class":942},":",[928,1355,1356],{"class":1042}," ui-message-gateway\n",[928,1358,1359,1362],{"class":930,"line":1058},[928,1360,1361],{"class":1349},"  config",[928,1363,1364],{"class":942},":\n",[928,1366,1367,1370,1372],{"class":930,"line":1065},[928,1368,1369],{"class":1349},"    allowWorkspace",[928,1371,1353],{"class":942},[928,1373,1375],{"class":1374},"sfNiH"," true\n",[430,1377,1378],{},"Après redémarrage :",[430,1380,1381],{},[433,1382],{"alt":1383,"src":1384},"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",[430,1386,1387,1388,1391],{},"Remarque essentielle : le système considère par défaut que le dossier de travail (",[495,1389,1390],{},"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.",[430,1393,1394],{},[433,1395],{"alt":1396,"src":1397},"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",[876,1399,1401],{"id":1400},"commandes-supportées-dans-buzz","Commandes supportées dans Buzz",[430,1403,1404],{},"L'ensemble des commandes disponibles sur les autres passerelles fonctionne sur Buzz :",[602,1406,1407,1417],{},[605,1408,1409],{},[608,1410,1411,1414],{},[611,1412,1413],{},"Commande",[611,1415,1416],{},"Rôle",[631,1418,1419,1429,1439,1449,1459,1469,1479,1489,1499,1519,1539],{},[608,1420,1421,1426],{},[636,1422,1423],{},[495,1424,1425],{},"\u002Fworkspace \u003Cfolder>",[636,1427,1428],{},"Associe un dossier existant comme espace de travail pour la discussion (soumis à activation de config)",[608,1430,1431,1436],{},[636,1432,1433],{},[495,1434,1435],{},"\u002Fhelp",[636,1437,1438],{},"Affiche la liste des commandes disponibles",[608,1440,1441,1446],{},[636,1442,1443],{},[495,1444,1445],{},"\u002Ftime",[636,1447,1448],{},"Donne l'heure actuelle du serveur",[608,1450,1451,1456],{},[636,1452,1453],{},[495,1454,1455],{},"\u002Fnew",[636,1457,1458],{},"Démarre une session de discussion vierge",[608,1460,1461,1466],{},[636,1462,1463],{},[495,1464,1465],{},"\u002Fclear",[636,1467,1468],{},"Réinitialise la conversation en cours",[608,1470,1471,1476],{},[636,1472,1473],{},[495,1474,1475],{},"\u002Fstatus",[636,1477,1478],{},"Retourne le statut opérationnel de la passerelle",[608,1480,1481,1486],{},[636,1482,1483],{},[495,1484,1485],{},"\u002Fstats",[636,1487,1488],{},"Détaille le volume de discussions et le statut par passerelle (toutes plateformes confondues, dont Buzz)",[608,1490,1491,1496],{},[636,1492,1493],{},[495,1494,1495],{},"\u002Fcommands",[636,1497,1498],{},"Inventaire exhaustif des descripteurs de commandes",[608,1500,1501,1506],{},[636,1502,1503],{},[495,1504,1505],{},"@path\u002Fto\u002Ffile",[636,1507,1508,1509,739,1511,1514,1515,1518],{},"Fonctionne à l'identique des mentions de fichiers Web : lecture contextuelle relative au workspace ; ",[495,1510,825],{},[495,1512,1513],{},"@prefixe"," ou ",[495,1516,1517],{},"\u002Ffiles \u003Cprefixe>"," listent les fichiers et répertoires correspondants",[608,1520,1521,1526],{},[636,1522,1523],{},[495,1524,1525],{},"\u002Fmodel",[636,1527,1528,1531,1532,1534,1535,1538],{},[495,1529,1530],{},"[provider model effort]"," — validé face au catalogue LLM actif ; ",[495,1533,1525],{}," seul liste les choix, ",[495,1536,1537],{},"\u002Fmodel reset"," rétablit la configuration par défaut",[608,1540,1541,1546],{},[636,1542,1543],{},[495,1544,1545],{},"\u002Feffort",[636,1547,1548,1551,1552,1555],{},[495,1549,1550],{},"\u003Cid>"," ajuste le niveau d'effort de raisonnement ; ",[495,1553,1554],{},"\u002Feffort reset"," rétablit la valeur par défaut",[876,1557,1559],{"id":1558},"synthèse-sur-la-sécurité","Synthèse sur la sécurité",[485,1561,1562,1575,1585],{},[488,1563,1564,1565,1567,1568,1570,1571,1574],{},"La clé privée ",[441,1566,1145],{}," demeure confinée dans ",[495,1569,501],{}," (droits 0600, écriture atomique) — jamais exposée via ",[495,1572,1573],{},"\u002Fgateway\u002Flist"," ni dans les journaux d'exécution.",[488,1576,1577,1578,857,1581,1584],{},"Chaque événement reçu subit une ",[441,1579,1580],{},"validation de signature cryptographique",[495,1582,1583],{},"verifyEvent","), une déduplication, un filtrage d'auto-émission et un contrôle de mention préalable.",[488,1586,1587,857,1590,1593],{},[441,1588,1589],{},"L'enregistrement des workspaces requiert une validation de configuration expresse",[495,1591,1592],{},"allowWorkspace: false"," par défaut), évitant toute ouverture imprévue du système de fichiers local.",[474,1595,1597],{"id":1596},"conclusion-lavenir-de-la-collaboration-ia-décentralisée-avec-buzz","Conclusion : L'avenir de la collaboration IA décentralisée avec Buzz",[430,1599,1600,1601,1603],{},"La complexité principale de l'intégration de Buzz dans ",[495,1602,449],{}," 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.",[474,1605,1607],{"id":1606},"références","Références :",[485,1609,1610,1618,1626],{},[488,1611,1612,1617],{},[444,1613,1616],{"href":1614,"rel":1615},"https:\u002F\u002Fgithub.com\u002Fa792883583\u002Fdsh-message-gateway\u002Fblob\u002Fmain\u002Fdocs\u002Farchitecture.md",[448],"dsh-message-gateway architecture guide"," — guide d'architecture, recettes d'extension et sécurité",[488,1619,1620,1625],{},[444,1621,1624],{"href":1622,"rel":1623},"https:\u002F\u002Fgithub.com\u002Fnbd-wtf\u002Fnostr-tools",[448],"nostr-tools"," — bibliothèque Nostr exploitée sous le capot",[488,1627,1628,1633],{},[444,1629,1632],{"href":1630,"rel":1631},"https:\u002F\u002Fgithub.com\u002Fbytedance\u002Fdeer-flow\u002Fblob\u002Fmain\u002Fbackend\u002Fdocs\u002FIM_CHANNEL_CONNECTIONS.md",[448],"deer-flow IM channel connections"," — modèles de référence pour les connexions de messagerie instantanée",[1635,1636,1637],"style",{},"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":425,"searchDepth":1058,"depth":1065,"links":1639},[1640,1641,1645,1652,1653],{"id":476,"depth":1058,"text":477},{"id":593,"depth":1058,"text":594,"children":1642},[1643,1644],{"id":878,"depth":1065,"text":879},{"id":907,"depth":1065,"text":908},{"id":1020,"depth":1058,"text":1021,"children":1646},[1647,1648,1650,1651],{"id":1151,"depth":1065,"text":1152},{"id":1301,"depth":1065,"text":1649},"Activation de l'accès aux dossiers locaux via \u002Fworkspace",{"id":1400,"depth":1065,"text":1401},{"id":1558,"depth":1065,"text":1559},{"id":1596,"depth":1058,"text":1597},{"id":1606,"depth":1058,"text":1607},[1655,1656,1224,1657],"ai-agents","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.","md","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":1664,"robots":1689,"sitemap":1690},[1665,1667],{"@type":1666,"headline":424,"description":1659,"image":1661},"TechArticle",{"@type":1668,"name":424,"description":1659,"image":1661,"step":1669},"HowTo",[1670,1674,1677,1680,1683,1686],{"@type":1671,"name":1672,"text":1673},"HowToStep","Phase 1: Installer le plugin passerelle","Installez le plugin dsh-message-gateway et lancez le service dsh web.",{"@type":1671,"name":1675,"text":1676},"Phase 2: Accéder à Message platforms","Ouvrez l'interface Web DSH et accédez aux paramètres Message platforms.",{"@type":1671,"name":1678,"text":1679},"Phase 3: Configurer la passerelle Buzz","Générez une paire de clés Nostr, saisissez l'URL du relais et les canaux.",{"@type":1671,"name":1681,"text":1682},"Phase 4: Enregistrer l'agent sur le relais","Ajoutez l'assistant DSH au relais Nostr de Buzz à l'aide de buzz-admin.",{"@type":1671,"name":1684,"text":1685},"Phase 5: Assigner l'agent au canal","Ajoutez la clé HEX de l'agent aux canaux désignés avec buzz-cli.",{"@type":1671,"name":1687,"text":1688},"Phase 6: Activer les espaces de travail","Configurez allowWorkspace dans cordis.patch.yml pour autoriser les commandes de dossiers.","index, follow",{"lastmod":1658},11,{"title":1693,"description":1659,"ogTitle":424,"ogDescription":1659,"twitterTitle":424,"twitterDescription":1659},"Plugin Buzz pour DeepSeek Harness: Passerelle Nostr","fr\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",[599,1099,1696,1697,449],"Nostr","Agents IA",null,"D-QQL-ioD6fuh4M5DgpHpBjz2gfDhqq9Js67-mdwt0M",{"id":1701,"title":1702,"author":425,"body":1703,"category":2596,"date":2598,"description":2599,"extension":1660,"image":2600,"imageAlt":2601,"isPublished":1061,"meta":2602,"minRead":2276,"navigation":1061,"path":115,"seo":2636,"stem":2638,"tags":2639,"updatedAt":2635,"__hash__":2643},"article\u002Ffr\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp.md","Exposer Hermes Agent en privé via Cloudflare WARP",{"type":427,"value":1704,"toc":2578},[1705,1719,1729,1733,1736,1748,1752,1760,1764,1768,1817,1821,1958,1962,1996,2000,2003,2069,2072,2108,2111,2138,2142,2152,2157,2195,2284,2288,2293,2310,2319,2398,2403,2449,2453,2498,2513,2517,2561,2565,2575],[430,1706,1707,1708,1711,1712,755,1715,1718],{},"Un défi courant se pose lorsque vous souhaitez accéder à votre ",[441,1709,1710],{},"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 ",[441,1713,1714],{},"Cloudflare WARP",[441,1716,1717],{},"Cloudflare Zero Trust"," vous permet d'exposer globalement le Hermes Agent sans ouvrir le moindre port entrant sur votre pare-feu.",[430,1720,1721,1722,1725,1726,1728],{},"Si vous avez suivi notre guide précédent, '",[444,1723,1724],{"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 ",[441,1727,1714],{}," pour exposer le Hermes Agent à un réseau privé via Internet.",[474,1730,1732],{"id":1731},"comprendre-larchitecture","Comprendre l'architecture",[430,1734,1735],{},"Les composants en jeu :",[533,1737,1738,1743],{},[488,1739,1740,1742],{},[441,1741,1717],{}," : Le tableau de bord chez Cloudflare où vous définissez les règles de routage et les politiques d'accès.",[488,1744,1745,1747],{},[441,1746,1714],{}," : 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.",[876,1749,1751],{"id":1750},"prérequis","Prérequis",[485,1753,1754,1757],{},[488,1755,1756],{},"Un Hermes Agent en cours d'exécution sur votre VPS.",[488,1758,1759],{},"Un compte Cloudflare gratuit.",[474,1761,1763],{"id":1762},"guide-étape-par-étape","Guide étape par étape",[876,1765,1767],{"id":1766},"étape-1-configurer-cloudflare-zero-trust","Étape 1 : Configurer Cloudflare Zero Trust",[533,1769,1770,1778,1785,1796,1803,1810],{},[488,1771,1772,1773,461],{},"Connectez-vous à votre ",[444,1774,1777],{"href":1775,"rel":1776},"https:\u002F\u002Fdash.cloudflare.com\u002F",[448],"Tableau de bord Cloudflare",[488,1779,1780,1781],{},"Cliquez sur 'Zero Trust' dans le menu de gauche.\n",[433,1782],{"alt":1783,"src":1784},"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",[488,1786,1787,1788,1791,1792],{},"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, ",[495,1789,1790],{},"ai-team",").\n",[433,1793],{"alt":1794,"src":1795},"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",[488,1797,1798,1799],{},"Cliquez sur 'Access' puis sur 'Policies' pour créer une politique d'accès définissant qui a accès au réseau.\n",[433,1800],{"alt":1801,"src":1802},"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",[488,1804,1805,1806],{},"Cliquez sur 'Create new policy'.\n",[433,1807],{"alt":1808,"src":1809},"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",[488,1811,1812,1813],{},"Sélectionnez 'Emails' et entrez votre adresse e-mail sous 'Policy rules'.\n",[433,1814],{"alt":1815,"src":1816},"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",[876,1818,1820],{"id":1819},"étape-2-configurer-le-client-cloudflare-warp-sur-le-vps","Étape 2 : Configurer le client Cloudflare WARP sur le VPS",[533,1822,1823,1833,1839,1846,1849,1864,1867,1951],{},[488,1824,1825,1826,575,1829,1832],{},"Exécutez ",[495,1827,1828],{},"sudo apt update",[495,1830,1831],{},"sudo apt install cloudflare-warp"," dans le terminal de votre VPS.",[488,1834,1825,1835,1838],{},[495,1836,1837],{},"warp-cli registration new \u003CTEAM-NAME>"," dans le terminal de votre VPS, ce qui affichera une URL.",[488,1840,1841,1842,1845],{},"Copiez l'URL affichée, qui ressemblera à ",[495,1843,1844],{},"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fwarp",", et collez-la dans votre navigateur pour l'authentification.",[488,1847,1848],{},"L'authentification par e-mail étant utilisée dans la configuration de la politique ci-dessus, entrez votre e-mail pour vous authentifier.",[488,1850,1851,1852,1855,1856,1859,1860,1863],{},"Sur la page '",[441,1853,1854],{},"Success","' (Succès) du navigateur, faites un clic droit et sélectionnez '",[441,1857,1858],{},"Inspect","' (Inspecter) sur le bouton bleu '",[441,1861,1862],{},"Open Cloudflare WARP","'.",[488,1865,1866],{},"Copiez le long jeton (token) qui est indiqué dans le lien du bouton.",[488,1868,1825,1869,1872,1873,1876,1877],{},[495,1870,1871],{},"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.",[1874,1875],"br",{},"Si vous rencontrez l'erreur 'Error: Failed to communicate with the WARP API' sur Ubuntu 26, exécutez les commandes suivantes :",[920,1878,1880],{"className":1029,"code":1879,"language":1031,"meta":425,"style":425},"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",[495,1881,1882,1896,1900,1905,1916,1921,1927],{"__ignoreMap":425},[928,1883,1884,1887,1890,1893],{"class":930,"line":931},[928,1885,1886],{"class":1038},"sudo",[928,1888,1889],{"class":1042}," systemctl",[928,1891,1892],{"class":1042}," restart",[928,1894,1895],{"class":1042}," warp-svc.service\n",[928,1897,1898],{"class":930,"line":1058},[928,1899,1062],{"emptyLinePlaceholder":1061},[928,1901,1902],{"class":930,"line":1065},[928,1903,1904],{"class":1068},"# Check status\n",[928,1906,1907,1909,1911,1914],{"class":930,"line":1072},[928,1908,1886],{"class":1038},[928,1910,1889],{"class":1042},[928,1912,1913],{"class":1042}," status",[928,1915,1895],{"class":1042},[928,1917,1919],{"class":930,"line":1918},5,[928,1920,1062],{"emptyLinePlaceholder":1061},[928,1922,1924],{"class":930,"line":1923},6,[928,1925,1926],{"class":1068},"# Run the warp-cli registration token again\n",[928,1928,1930,1933,1936,1939,1942,1945,1948],{"class":930,"line":1929},7,[928,1931,1932],{"class":1038},"warp-cli",[928,1934,1935],{"class":1042}," --accept-tos",[928,1937,1938],{"class":1042}," registration",[928,1940,1941],{"class":1042}," token",[928,1943,1944],{"class":942},"   \"",[928,1946,1947],{"class":1042},"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fauth?token=\u003Ccopied_token>",[928,1949,1950],{"class":942},"\"\n",[488,1952,1953,1954],{},"Retournez au tableau de bord Cloudflare Zero Trust et cliquez sur 'Devices' (Appareils). Votre appareil VPS devrait maintenant s'afficher.\n",[433,1955],{"alt":1956,"src":1957},"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",[876,1959,1961],{"id":1960},"étape-3-configurer-le-routage-du-trafic","Étape 3 : Configurer le routage du trafic",[533,1963,1964,1971,1978,1985],{},[488,1965,1966,1967],{},"Cliquez sur le profil de votre VPS dans le tableau de bord Devices.\n",[433,1968],{"alt":1969,"src":1970},"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",[488,1972,1973,1974],{},"Faites défiler jusqu'à la section 'Split Tunnels' (Tunnels divisés).\n",[433,1975],{"alt":1976,"src":1977},"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",[488,1979,1980,1981],{},"Cliquez sur the bouton 'Manage' (Gérer) et configurez les paramètres comme indiqué ci-dessous. Remplacez l'adresse IP si nécessaire.\n",[433,1982],{"alt":1983,"src":1984},"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",[488,1986,1987,1988,1991,1992,1995],{},"Exposer l'",[495,1989,1990],{},"address"," (adresse) et le ",[495,1993,1994],{},"host"," (hôte) acheminera le trafic vers vos services sur le même réseau privé.",[876,1997,1999],{"id":1998},"étape-4-configurer-le-pare-feu-sur-le-vps","Étape 4 : Configurer le pare-feu sur le VPS",[430,2001,2002],{},"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.",[920,2004,2006],{"className":1029,"code":2005,"language":1031,"meta":425,"style":425},"sudo ufw enable \nsudo ufw default allow outgoing \nsudo ufw default deny incoming\nsudo ufw allow in from 100.96.0.0\u002F12\n",[495,2007,2008,2021,2038,2052],{"__ignoreMap":425},[928,2009,2010,2012,2015,2018],{"class":930,"line":931},[928,2011,1886],{"class":1038},[928,2013,2014],{"class":1042}," ufw",[928,2016,2017],{"class":1042}," enable",[928,2019,2020],{"class":938}," \n",[928,2022,2023,2025,2027,2030,2033,2036],{"class":930,"line":1058},[928,2024,1886],{"class":1038},[928,2026,2014],{"class":1042},[928,2028,2029],{"class":1042}," default",[928,2031,2032],{"class":1042}," allow",[928,2034,2035],{"class":1042}," outgoing",[928,2037,2020],{"class":938},[928,2039,2040,2042,2044,2046,2049],{"class":930,"line":1065},[928,2041,1886],{"class":1038},[928,2043,2014],{"class":1042},[928,2045,2029],{"class":1042},[928,2047,2048],{"class":1042}," deny",[928,2050,2051],{"class":1042}," incoming\n",[928,2053,2054,2056,2058,2060,2063,2066],{"class":930,"line":1072},[928,2055,1886],{"class":1038},[928,2057,2014],{"class":1042},[928,2059,2032],{"class":1042},[928,2061,2062],{"class":1042}," in",[928,2064,2065],{"class":1042}," from",[928,2067,2068],{"class":1042}," 100.96.0.0\u002F12\n",[430,2070,2071],{},"Autorisez le trafic loopback pour éviter de perturber les services locaux :",[920,2073,2075],{"className":1029,"code":2074,"language":1031,"meta":425,"style":425},"sudo ufw allow in on lo\nsudo ufw allow out on lo\n",[495,2076,2077,2093],{"__ignoreMap":425},[928,2078,2079,2081,2083,2085,2087,2090],{"class":930,"line":931},[928,2080,1886],{"class":1038},[928,2082,2014],{"class":1042},[928,2084,2032],{"class":1042},[928,2086,2062],{"class":1042},[928,2088,2089],{"class":1042}," on",[928,2091,2092],{"class":1042}," lo\n",[928,2094,2095,2097,2099,2101,2104,2106],{"class":930,"line":1058},[928,2096,1886],{"class":1038},[928,2098,2014],{"class":1042},[928,2100,2032],{"class":1042},[928,2102,2103],{"class":1042}," out",[928,2105,2089],{"class":1042},[928,2107,2092],{"class":1042},[430,2109,2110],{},"Rechargez le pare-feu et vérifiez son statut :",[920,2112,2114],{"className":1029,"code":2113,"language":1031,"meta":425,"style":425},"sudo ufw reload \nsudo ufw status verbose\n",[495,2115,2116,2127],{"__ignoreMap":425},[928,2117,2118,2120,2122,2125],{"class":930,"line":931},[928,2119,1886],{"class":1038},[928,2121,2014],{"class":1042},[928,2123,2124],{"class":1042}," reload",[928,2126,2020],{"class":938},[928,2128,2129,2131,2133,2135],{"class":930,"line":1058},[928,2130,1886],{"class":1038},[928,2132,2014],{"class":1042},[928,2134,1913],{"class":1042},[928,2136,2137],{"class":1042}," verbose\n",[876,2139,2141],{"id":2140},"étape-5-exposer-hermes-agent-au-réseau-privé","Étape 5 : Exposer Hermes Agent au réseau privé",[430,2143,2144,2145,2148,2149,461],{},"Nous allons exposer le ",[441,2146,2147],{},"Hermes Agent Web Dashboard"," à notre réseau privé et utiliser le fournisseur d'authentification par défaut, ",[441,2150,2151],{},"Nous Research",[2153,2154,2156],"h4",{"id":2155},"configurer-le-fournisseur-dauthentification","Configurer le fournisseur d'authentification",[533,2158,2159,2168,2175,2182,2189],{},[488,2160,2161,2162,2167],{},"Rendez-vous sur ",[444,2163,2166],{"href":2164,"rel":2165},"https:\u002F\u002Fportal.nousresearch.com",[448],"portal.nousresearch.com"," pour créer un compte.",[488,2169,2170,2171],{},"Sélectionnez 'Local Dashboards' (Tableaux de bord locaux).\n",[433,2172],{"alt":2173,"src":2174},"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",[488,2176,2177,2178],{},"Cliquez sur 'Register Dashboard' (Enregistrer le tableau de bord).\n",[433,2179],{"alt":2180,"src":2181},"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",[488,2183,2184,2185],{},"Entrez l'adresse IP du réseau privé de votre VPS comme 'Dashboard redirect URI' (URI de redirection du tableau de bord) et cliquez sur 'Save' (Enregistrer).\n",[433,2186],{"alt":2187,"src":2188},"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",[488,2190,2191,2192,886],{},"Copiez le 'OAuth client ID' et collez-le dans votre fichier ",[495,2193,2194],{},"config.yaml",[920,2196,2200],{"className":2197,"code":2198,"language":2199,"meta":425,"style":425},"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",[495,2201,2202,2209,2219,2229,2236,2246,2256,2263,2274],{"__ignoreMap":425},[928,2203,2204,2207],{"class":930,"line":931},[928,2205,2206],{"class":1349},"dashboard",[928,2208,1364],{"class":942},[928,2210,2211,2214,2216],{"class":930,"line":1058},[928,2212,2213],{"class":1349},"  theme",[928,2215,1353],{"class":942},[928,2217,2218],{"class":1042}," default\n",[928,2220,2221,2224,2226],{"class":930,"line":1065},[928,2222,2223],{"class":1349},"  show_token_analytics",[928,2225,1353],{"class":942},[928,2227,2228],{"class":1374}," false\n",[928,2230,2231,2234],{"class":930,"line":1072},[928,2232,2233],{"class":1349},"  oauth",[928,2235,1364],{"class":942},[928,2237,2238,2241,2243],{"class":930,"line":1918},[928,2239,2240],{"class":1349},"    client_id",[928,2242,1353],{"class":942},[928,2244,2245],{"class":1042}," agent:cmq02x7ha0002jk0ba3kfnb\n",[928,2247,2248,2251,2253],{"class":930,"line":1923},[928,2249,2250],{"class":1349},"    portal_url",[928,2252,1353],{"class":942},[928,2254,2255],{"class":1042}," https:\u002F\u002Fportal.nousresearch.com\n",[928,2257,2258,2261],{"class":930,"line":1929},[928,2259,2260],{"class":1349},"  basic_auth",[928,2262,1364],{"class":942},[928,2264,2266,2269,2271],{"class":930,"line":2265},8,[928,2267,2268],{"class":1349},"    username",[928,2270,1353],{"class":942},[928,2272,2273],{"class":942}," ''\n",[928,2275,2277,2280,2282],{"class":930,"line":2276},9,[928,2278,2279],{"class":1349},"    password_hash",[928,2281,1353],{"class":942},[928,2283,2273],{"class":942},[2153,2285,2287],{"id":2286},"configurer-systemd-pour-démarrer-automatiquement-le-tableau-de-bord-hermes","Configurer Systemd pour démarrer automatiquement le tableau de bord Hermes",[533,2289,2290],{},[488,2291,2292],{},"Créez un fichier de service :",[920,2294,2298],{"className":2295,"code":2296,"language":2297,"meta":425,"style":425},"language-shell shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","sudo nano \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-dashboard.service\n","shell",[495,2299,2300],{"__ignoreMap":425},[928,2301,2302,2304,2307],{"class":930,"line":931},[928,2303,1886],{"class":1038},[928,2305,2306],{"class":1042}," nano",[928,2308,2309],{"class":1042}," \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-dashboard.service\n",[533,2311,2312],{"start":1058},[488,2313,2314,2315,2318],{},"Collez la configuration suivante, en vous assurant que ",[495,2316,2317],{},"--host 0.0.0.0"," fait partie de la commande :",[920,2320,2324],{"className":2321,"code":2322,"language":2323,"meta":425,"style":425},"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",[495,2325,2326,2331,2336,2341,2345,2350,2355,2360,2365,2370,2376,2381,2386,2392],{"__ignoreMap":425},[928,2327,2328],{"class":930,"line":931},[928,2329,2330],{},"[Unit]\n",[928,2332,2333],{"class":930,"line":1058},[928,2334,2335],{},"Description=Hermes Dashboard\n",[928,2337,2338],{"class":930,"line":1065},[928,2339,2340],{},"After=network.target\n",[928,2342,2343],{"class":930,"line":1072},[928,2344,1062],{"emptyLinePlaceholder":1061},[928,2346,2347],{"class":930,"line":1918},[928,2348,2349],{},"[Service]\n",[928,2351,2352],{"class":930,"line":1923},[928,2353,2354],{},"User=hermes\n",[928,2356,2357],{"class":930,"line":1929},[928,2358,2359],{},"WorkingDirectory=\u002Fhome\u002Fhermes\n",[928,2361,2362],{"class":930,"line":2265},[928,2363,2364],{},"ExecStart=\u002Fhome\u002Fhermes\u002F.local\u002Fbin\u002Fhermes dashboard --host 0.0.0.0\n",[928,2366,2367],{"class":930,"line":2276},[928,2368,2369],{},"Restart=always\n",[928,2371,2373],{"class":930,"line":2372},10,[928,2374,2375],{},"RestartSec=10\n",[928,2377,2378],{"class":930,"line":1691},[928,2379,2380],{},"Environment=PATH=\u002Fhome\u002Fhermes\u002F.local\u002Fbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fbin:\u002Fbin\n",[928,2382,2384],{"class":930,"line":2383},12,[928,2385,1062],{"emptyLinePlaceholder":1061},[928,2387,2389],{"class":930,"line":2388},13,[928,2390,2391],{},"[Install]\n",[928,2393,2395],{"class":930,"line":2394},14,[928,2396,2397],{},"WantedBy=multi-user.target\n",[533,2399,2400],{"start":1065},[488,2401,2402],{},"Activez et démarrez le service :",[920,2404,2406],{"className":2295,"code":2405,"language":2297,"meta":425,"style":425},"sudo systemctl daemon-reload\nsudo systemctl enable hermes-dashboard\nsudo systemctl start hermes-dashboard\nsudo systemctl status hermes-dashboard\n",[495,2407,2408,2417,2428,2439],{"__ignoreMap":425},[928,2409,2410,2412,2414],{"class":930,"line":931},[928,2411,1886],{"class":1038},[928,2413,1889],{"class":1042},[928,2415,2416],{"class":1042}," daemon-reload\n",[928,2418,2419,2421,2423,2425],{"class":930,"line":1058},[928,2420,1886],{"class":1038},[928,2422,1889],{"class":1042},[928,2424,2017],{"class":1042},[928,2426,2427],{"class":1042}," hermes-dashboard\n",[928,2429,2430,2432,2434,2437],{"class":930,"line":1065},[928,2431,1886],{"class":1038},[928,2433,1889],{"class":1042},[928,2435,2436],{"class":1042}," start",[928,2438,2427],{"class":1042},[928,2440,2441,2443,2445,2447],{"class":930,"line":1072},[928,2442,1886],{"class":1038},[928,2444,1889],{"class":1042},[928,2446,1913],{"class":1042},[928,2448,2427],{"class":1042},[876,2450,2452],{"id":2451},"étape-6-installer-le-client-cloudflare-warp-sur-lordinateur","Étape 6 : Installer le client Cloudflare WARP sur l'ordinateur",[533,2454,2455,2463,2466,2473,2480,2487],{},[488,2456,2457,2458,461],{},"Téléchargez le client Cloudflare WARP depuis le ",[444,2459,2462],{"href":2460,"rel":2461},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fwarp-client\u002Fget-started\u002F",[448],"portail de Cloudflare",[488,2464,2465],{},"Ouvrez et lancez le client Cloudflare WARP après l'installation.",[488,2467,2468,2469],{},"Connectez-vous lorsque vous y êtes invité.\n",[433,2470],{"alt":2471,"src":2472},"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",[488,2474,2475,2476],{},"Une page 'Success' (Succès) s'affichera après une connexion réussie.\n",[433,2477],{"alt":2478,"src":2479},"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",[488,2481,2482,2483],{},"Le client WARP devrait maintenant indiquer qu'il est connecté à votre équipe Zero Trust.\n",[433,2484],{"alt":2485,"src":2486},"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",[488,2488,2489,2490,2493,2494],{},"Accédez à votre navigateur web et entrez votre IP privée (par exemple, ",[495,2491,2492],{},"100.96.0.3","). Le Hermes Web Dashboard devrait se charger avec succès.\n",[433,2495],{"alt":2496,"src":2497},"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",[2499,2500,2501],"blockquote",{},[430,2502,2503,2506,2507,2512],{},[441,2504,2505],{},"Conseil de pro pour les utilisateurs macOS :"," Si vous utilisez le client WARP pour accéder à plusieurs comptes Cloudflare, consultez notre guide rapide sur ",[441,2508,2509],{},[444,2510,2511],{"href":399},"Basculer entre plusieurs profils Cloudflare WARP sur macOS"," pour passer d'un compte à l'autre en toute fluidité.",[876,2514,2516],{"id":2515},"étape-7-installer-le-client-cloudflare-warp-sur-les-appareils-ios","Étape 7 : Installer le client Cloudflare WARP sur les appareils iOS",[533,2518,2519,2526,2534,2542,2550],{},[488,2520,2521,2522,2525],{},"Installez ",[441,2523,2524],{},"Cloudflare One"," depuis l'App Store.",[488,2527,2528,2529],{},"Ouvrez l'application Cloudflare One et entrez le nom de votre équipe lorsque vous y êtes invité.\n",[433,2530],{"alt":2531,"src":2532,"width":2533},"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,[488,2535,2536,2537],{},"Connectez-vous en utilisant la même adresse e-mail que celle configurée dans la règle de politique ci-dessus.\n",[433,2538],{"alt":2539,"src":2540,"width":2541},"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,[488,2543,2544,2545],{},"Une fois connecté, cela devrait ressembler à ceci :\n",[433,2546],{"alt":2547,"src":2548,"width":2549},"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,[488,2551,2552,2553,2555,2556],{},"Accédez à votre navigateur web et entrez l'IP privée ",[495,2554,2492],{}," pour accéder au Hermes Web Dashboard sur votre appareil mobile.\n",[433,2557],{"alt":2558,"src":2559,"width":2560},"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,[474,2562,2564],{"id":2563},"conclusion","Conclusion",[430,2566,2567,2568,2570,2571,2574],{},"Avec ",[441,2569,1717],{}," gérant les politiques d'identité et le client ",[441,2572,2573],{},"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.",[1635,2576,2577],{},"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":425,"searchDepth":1058,"depth":1065,"links":2579},[2580,2583,2595],{"id":1731,"depth":1058,"text":1732,"children":2581},[2582],{"id":1750,"depth":1065,"text":1751},{"id":1762,"depth":1058,"text":1763,"children":2584},[2585,2586,2587,2588,2589,2593,2594],{"id":1766,"depth":1065,"text":1767},{"id":1819,"depth":1065,"text":1820},{"id":1960,"depth":1065,"text":1961},{"id":1998,"depth":1065,"text":1999},{"id":2140,"depth":1065,"text":2141,"children":2590},[2591,2592],{"id":2155,"depth":1072,"text":2156},{"id":2286,"depth":1072,"text":2287},{"id":2451,"depth":1065,"text":2452},{"id":2515,"depth":1065,"text":2516},{"id":2563,"depth":1058,"text":2564},[1655,2597],"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.","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":2603,"robots":1689,"sitemap":2634},[2604],{"@type":1668,"headline":1702,"description":2599,"name":1702,"image":2600,"step":2605},[2606,2610,2614,2618,2622,2626,2630],{"@type":1671,"name":2607,"text":2608,"url":2609,"image":1784},"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":1671,"name":2611,"text":2612,"url":2613,"image":1957},"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":1671,"name":2615,"text":2616,"url":2617,"image":1970},"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":1671,"name":2619,"text":2620,"url":2621},"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":1671,"name":2623,"text":2624,"url":2625},"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":1671,"name":2627,"text":2628,"url":2629,"image":2472},"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":1671,"name":2631,"text":2632,"url":2633,"image":2532},"Installer le client Cloudflare WARP sur les appareils iOS","Installez Cloudflare One depuis l'App Store. Ouvrez l'application Cloudflare One et entrez le nom de votre équipe lorsque vous y êtes invité. Connectez-vous en utilisant la même adresse e-mail que celle configurée dans la règle de politique ci-dessus","#step-7",{"lastmod":2635},"2026-09-28",{"title":2637,"description":2599,"ogTitle":1702,"ogDescription":2599,"twitterTitle":1702,"twitterDescription":2599},"Accès sécurisé à Hermes Agent avec Cloudflare Zero Trust","fr\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",[1714,2640,1710,2641,2642],"Zero Trust","Réseau privé","Tutoriel","znaIPQ7_5S4t576NDV1Cm2dwmV4KfgwgNWNih_62HSs",{"id":2645,"title":2646,"author":425,"body":2647,"category":4072,"date":4074,"description":4075,"extension":1660,"image":4076,"imageAlt":4077,"isPublished":1061,"meta":4078,"minRead":3349,"navigation":1061,"path":135,"seo":4085,"stem":4087,"tags":4088,"updatedAt":1698,"__hash__":4092},"article\u002Ffr\u002Farticle\u002Fsync-obsidian-across-devices.md","Comment synchroniser ses coffres Obsidian en sécurité",{"type":427,"value":2648,"toc":4050},[2649,2652,2657,2666,2675,2692,2697,2705,2709,2714,2728,2744,2747,2751,2755,2762,2767,2771,2776,2833,2840,2872,2876,2883,2889,2896,2958,2961,2978,2985,2997,3001,3005,3016,3021,3032,3054,3059,3073,3078,3084,3089,3104,3107,3112,3115,3120,3124,3129,3143,3147,3161,3171,3175,3180,3183,3193,3226,3230,3237,3379,3413,3418,3439,3450,3455,3459,3469,3540,3544,3550,3584,3715,3722,3728,3734,3740,3743,3749,3755,3769,3780,3787,3793,3800,3929,3935,3940,3943,3948,3951,3955,3960,3965,3971,3982,3992,3996,4007,4012,4018,4021,4024,4047],[430,2650,2651],{},"Obsidian est une application de gestion des connaissances orientée local-first (le local d'abord). Chaque note est un fichier markdown stocké sur votre appareil et reste entièrement sous votre contrôle. Cependant, nous souhaitons souvent disposer du même coffre (vault) sur notre ordinateur portable, notre téléphone et nos autres appareils, ou pouvoir y accéder à distance via un navigateur web.",[433,2653],{"src":2654,"alt":2655,"style":2656},"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;",[430,2658,2659,2660,2665],{},"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. ",[444,2661,2664],{"href":2662,"rel":2663},"https:\u002F\u002Fgithub.com\u002Fhjinco\u002Fsynch",[448],"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é.",[430,2667,2668,2669,2674],{},"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. ",[444,2670,2673],{"href":2671,"rel":2672},"https:\u002F\u002Fgithub.com\u002FNystik-gh\u002Fignis",[448],"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ù.",[430,2676,2677,2678,575,2680,2682,2683,2686,2687,2691],{},"Dans ce guide, nous allons installer ",[441,2679,2664],{},[441,2681,2673],{}," sur un ",[441,2684,2685],{},"VPS"," (Serveur Privé Virtuel), en les hébergeant de manière sécurisée dans un réseau privé ",[441,2688,2689],{},[444,2690,1717],{"href":363}," plutôt que de les exposer directement sur l'internet public.",[433,2693],{"src":2694,"alt":2695,"style":2696},"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;",[463,2698],{"description":2699,"image":2700,"image-alt":2701,"label":2702,"min-read":2703,"title":2704,"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",[474,2706,2708],{"id":2707},"synchronisation-sécurisée-des-coffres-obsidian-avec-synch","Synchronisation sécurisée des coffres Obsidian avec Synch",[430,2710,2711,2713],{},[441,2712,2664],{}," offre les fonctionnalités suivantes :",[485,2715,2716,2719,2722,2725],{},[488,2717,2718],{},"Synchronise votre coffre dès que des modifications sont détectées",[488,2720,2721],{},"Chiffre les données du coffre avant leur téléversement",[488,2723,2724],{},"Permet la restauration à partir de l'historique des versions",[488,2726,2727],{},"Comprend une gestion automatique des conflits",[430,2729,2730,2732,2733,2736,2737,2740,2741,2743],{},[441,2731,2664],{}," génère une ",[441,2734,2735],{},"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 ",[441,2738,2739],{},"mot de passe de coffre"," ; ce mot de passe est utilisé pour protéger la ",[441,2742,2735],{}," afin que celle-ci puisse être stockée en toute sécurité sur le serveur et déverrouillée sur d'autres appareils.",[430,2745,2746],{},"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.",[876,2748,2750],{"id":2749},"installer-synch-sur-votre-vps","Installer Synch sur votre VPS",[2153,2752,2754],{"id":2753},"créer-un-nom-de-domaine","Créer un nom de domaine",[430,2756,2757,2758,2761],{},"Créez un enregistrement A dans Cloudflare et réglez le statut du proxy sur ",[441,2759,2760],{},"DNS uniquement"," (en contournant le CDN de Cloudflare).",[433,2763],{"src":2764,"alt":2765,"style":2766},"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;",[2153,2768,2770],{"id":2769},"installer-synch-via-docker-sur-ubuntu","Installer Synch via Docker sur Ubuntu",[2772,2773,2775],"h5",{"id":2774},"cloner-le-dépôt","Cloner le dépôt",[920,2777,2779],{"className":1029,"code":2778,"language":1031,"meta":425,"style":425},"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",[495,2780,2781,2795,2800,2805,2813,2817,2822],{"__ignoreMap":425},[928,2782,2783,2786,2789,2792],{"class":930,"line":931},[928,2784,2785],{"class":1038},"git",[928,2787,2788],{"class":1042}," clone",[928,2790,2791],{"class":1042}," https:\u002F\u002Fgithub.com\u002Fhjinco\u002Fsynch.git",[928,2793,2794],{"class":938},"       \n",[928,2796,2797],{"class":930,"line":1058},[928,2798,2799],{"class":938},"        \n",[928,2801,2802],{"class":930,"line":1065},[928,2803,2804],{"class":1068},"# Accéder au dossier de l'API\n",[928,2806,2807,2810],{"class":930,"line":1072},[928,2808,2809],{"class":959},"cd",[928,2811,2812],{"class":1042}," synch\u002Fapps\u002Fapi\n",[928,2814,2815],{"class":930,"line":1918},[928,2816,2799],{"class":938},[928,2818,2819],{"class":930,"line":1923},[928,2820,2821],{"class":1068},"# Copier le fichier d'environnement d'exemple :\n",[928,2823,2824,2827,2830],{"class":930,"line":1929},[928,2825,2826],{"class":1038},"cp",[928,2828,2829],{"class":1042}," .env.example",[928,2831,2832],{"class":1042}," .env\n",[2772,2834,2836,2837],{"id":2835},"modifier-les-valeurs-du-env","Modifier les valeurs du ",[495,2838,2839],{},".env",[485,2841,2842,2848,2866],{},[488,2843,2844,2847],{},[495,2845,2846],{},"PUBLIC_URL=synch.pafor.me"," : Saisissez le nom de domaine public de votre serveur Synch (le domaine créé à l'étape précédente).",[488,2849,2850,575,2853,2856,2857,2861,2862,2865],{},[495,2851,2852],{},"BETTER_AUTH_SECRET",[495,2854,2855],{},"SYNC_TOKEN_SECRET"," : Générez des clés sécurisées à l'aide de cet ",[444,2858,2860],{"href":2859},"\u002Ffr\u002Ftools\u002Fsecret-key-hex","outil de clé secrète en ligne"," ou en exécutant deux fois ",[495,2863,2864],{},"openssl rand -hex 32"," dans votre terminal.",[488,2867,2868,2871],{},[495,2869,2870],{},"AUTH_ALLOWED_EMAILS"," : Une liste d'adresses e-mail séparées par des virgules autorisées à s'inscrire et à créer des comptes.",[2772,2873,2875],{"id":2874},"ajouter-le-domaine-au-caddyfile","Ajouter le domaine au Caddyfile",[430,2877,2878,2879,461],{},"Les détails de l'intégration du module Cloudflare DNS avec Caddy et son lancement dans un conteneur se trouvent dans notre ",[444,2880,2882],{"href":2881},"\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",[463,2884],{"description":2885,"image":2886,"image-alt":2887,"label":2888,"min-read":469,"title":455,"to":2881},"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",[430,2890,2891,2892,2895],{},"Insérez la directive ",[495,2893,2894],{},"SYNCH_DOMAIN"," dans votre Caddyfile, pointant vers le port 8787 (le port utilisé par le conteneur Synch) :",[920,2897,2901],{"className":2898,"code":2899,"language":2900,"meta":425,"style":425},"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",[495,2902,2903,2908,2916,2920,2924,2938,2943,2954],{"__ignoreMap":425},[928,2904,2905],{"class":930,"line":931},[928,2906,2907],{"class":942},"{\n",[928,2909,2910,2913],{"class":930,"line":1058},[928,2911,2912],{"class":938},"  acme_dns cloudflare {env.CLOUDFLARE_API_TOKEN",[928,2914,2915],{"class":942},"}\n",[928,2917,2918],{"class":930,"line":1065},[928,2919,2915],{"class":938},[928,2921,2922],{"class":930,"line":1072},[928,2923,1062],{"emptyLinePlaceholder":1061},[928,2925,2926,2929,2932,2935],{"class":930,"line":1918},[928,2927,2928],{"class":942},"{",[928,2930,2931],{"class":938},"$SYNCH_DOMAIN",[928,2933,2934],{"class":942},"}",[928,2936,2937],{"class":942}," {\n",[928,2939,2940],{"class":930,"line":1923},[928,2941,2942],{"class":938},"  encode zstd gzip\n",[928,2944,2945,2948,2950],{"class":930,"line":1929},[928,2946,2947],{"class":938},"  reverse_proxy host.docker.internal",[928,2949,1353],{"class":942},[928,2951,2953],{"class":2952},"sbssI","8787\n",[928,2955,2956],{"class":930,"line":2265},[928,2957,2915],{"class":942},[430,2959,2960],{},"Lancez le conteneur :",[920,2962,2964],{"className":1029,"code":2963,"language":1031,"meta":425,"style":425},"docker compose up -d\n",[495,2965,2966],{"__ignoreMap":425},[928,2967,2968,2970,2972,2975],{"class":930,"line":931},[928,2969,1171],{"class":1038},[928,2971,1174],{"class":1042},[928,2973,2974],{"class":1042}," up",[928,2976,2977],{"class":1042}," -d\n",[430,2979,2980,2981,2984],{},"Exécutez la commande ",[495,2982,2983],{},"curl"," suivante pour vérifier sa disponibilité :",[920,2986,2988],{"className":1029,"code":2987,"language":1031,"meta":425,"style":425},"curl https:\u002F\u002Fsynch.pafor.me\u002Fhealth\n",[495,2989,2990],{"__ignoreMap":425},[928,2991,2992,2994],{"class":930,"line":931},[928,2993,2983],{"class":1038},[928,2995,2996],{"class":1042}," https:\u002F\u002Fsynch.pafor.me\u002Fhealth\n",[876,2998,3000],{"id":2999},"connecter-obsidian-à-votre-serveur-synch","Connecter Obsidian à votre serveur Synch",[2153,3002,3004],{"id":3003},"installer-le-plugin-synch-sur-obsidian","Installer le plugin Synch sur Obsidian",[430,3006,3007,3008,3011,3012,3015],{},"Ouvrez les paramètres d'Obsidian, accédez à ",[441,3009,3010],{},"Community plugins"," (Plugins de la communauté) et cliquez sur le bouton ",[441,3013,3014],{},"'Browse'"," (Parcourir) :",[433,3017],{"src":3018,"alt":3019,"style":3020},"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;",[430,3022,3023,3024,3027,3028],{},"Recherchez et installez ",[441,3025,3026],{},"'Synchrun'"," :\n",[433,3029],{"src":3030,"alt":3031,"style":2766},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-install-synchrun-plugin.webp","Installation du plugin Synchrun dans Obsidian",[430,3033,3034,3035,3037,3038,3041,3042,3045,3046,3049,3050,3053],{},"Une fois ",[441,3036,3026],{}," installé, ouvrez les paramètres du plugin et activez ",[441,3039,3040],{},"'Use a self-hosted server'"," (Utiliser un serveur auto-hébergé). Saisissez ensuite ",[495,3043,3044],{},"https:\u002F\u002Fsynch.pafor.me"," dans le champ ",[441,3047,3048],{},"'Server URL'"," (URL du serveur) et cliquez sur ",[441,3051,3052],{},"'Save'"," (Enregistrer).",[433,3055],{"src":3056,"alt":3057,"style":3058},"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;",[430,3060,3061,3062,3065,3066,3069,3070,3072],{},"Cliquez sur le bouton ",[441,3063,3064],{},"'Sign in on this device'"," (Se connecter sur cet appareil) sous ",[441,3067,3068],{},"'Account'"," (Compte). Inscrivez-vous ensuite en utilisant l'adresse e-mail spécifiée dans votre liste ",[495,3071,2870],{}," ; vous serez redirigé vers la page d'autorisation suivante :",[433,3074],{"src":3075,"alt":3076,"style":3077},"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;",[430,3079,3061,3080,3083],{},[441,3081,3082],{},"'Allow Obsidian sign-in'"," (Autoriser la connexion Obsidian) :",[433,3085],{"src":3086,"alt":3087,"style":3088},"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;",[430,3090,3061,3091,3094,3095,3098,3099],{},[441,3092,3093],{},"'Return to Obsidian'"," (Retourner à Obsidian), puis cliquez sur ",[441,3096,3097],{},"'Create vault'"," (Créer un coffre) :\n",[433,3100],{"src":3101,"alt":3102,"style":3103},"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;",[430,3105,3106],{},"Saisissez un nom et un mot de passe sécurisé pour créer votre coffre distant.",[433,3108],{"src":3109,"alt":3110,"style":3111},"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;",[430,3113,3114],{},"Le processus de synchronisation commence immédiatement et peut prendre du temps selon la taille de votre coffre. Une fois terminé, votre utilisation totale du stockage s'affiche.",[433,3116],{"src":3117,"alt":3118,"style":3119},"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;",[474,3121,3123],{"id":3122},"accès-à-obsidian-via-un-navigateur-web-avec-ignis","Accès à Obsidian via un navigateur web avec Ignis",[430,3125,3126,3128],{},[441,3127,2673],{}," 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.",[430,3130,3131,3132,575,3137,3142],{},"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 ",[444,3133,3136],{"href":3134,"rel":3135},"https:\u002F\u002Fignis.thiefling.com\u002Fdocs\u002Fusing\u002Flimitations\u002F",[448],"Limitations",[444,3138,3141],{"href":3139,"rel":3140},"https:\u002F\u002Fignis.thiefling.com\u002Fdocs\u002Fusing\u002Fplugin-compatibility\u002F",[448],"Compatibilité des plugins"," pour obtenir la liste détaillée de compatibilité.",[876,3144,3146],{"id":3145},"configuration-dignis","Configuration d'Ignis",[430,3148,3149,3150,3152,3153,3156,3157,3160],{},"Nous allons installer ",[441,3151,2673],{}," sur notre VPS à l'aide de Docker, en le montant sur le dossier local ",[495,3154,3155],{},".\u002Fvaults",". Ce répertoire de coffres sera synchronisé à l'aide de la ",[441,3158,3159],{},"Synch CLI"," pour extraire les mises à jour de notes depuis le coffre distant configuré précédemment.",[430,3162,3163,3164,3166,3167,461],{},"Comme ",[441,3165,2673],{}," ne dispose pas d'authentification intégrée, il doit être sécurisé derrière un réseau privé ",[441,3168,3169],{},[444,3170,1717],{"href":363},[2153,3172,3174],{"id":3173},"créer-un-enregistrement-dns","Créer un enregistrement DNS",[433,3176],{"src":3177,"alt":3178,"style":3179},"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;",[2153,3181,2875],{"id":3182},"ajouter-le-domaine-au-caddyfile-1",[430,3184,3185,3186,3189,3190,886],{},"Ajoutez ",[495,3187,3188],{},"obsidian.pafor.me"," à votre Caddyfile de la même manière que ",[495,3191,3192],{},"synch.pafor.me",[920,3194,3196],{"className":2898,"code":3195,"language":2900,"meta":425,"style":425},"{$OBSIDIAN_DOMAIN} {\n  encode zstd gzip\n  reverse_proxy host.docker.internal:9898\n}\n",[495,3197,3198,3209,3213,3222],{"__ignoreMap":425},[928,3199,3200,3202,3205,3207],{"class":930,"line":931},[928,3201,2928],{"class":942},[928,3203,3204],{"class":938},"$OBSIDIAN_DOMAIN",[928,3206,2934],{"class":942},[928,3208,2937],{"class":942},[928,3210,3211],{"class":930,"line":1058},[928,3212,2942],{"class":938},[928,3214,3215,3217,3219],{"class":930,"line":1065},[928,3216,2947],{"class":938},[928,3218,1353],{"class":942},[928,3220,3221],{"class":2952},"9898\n",[928,3223,3224],{"class":930,"line":1072},[928,3225,2915],{"class":942},[2153,3227,3229],{"id":3228},"lancer-ignis-avec-docker","Lancer Ignis avec Docker",[430,3231,3232,3233,3236],{},"Enregistrez le code docker compose yml suivant sous le nom ",[495,3234,3235],{},"ignis-docker-compose.yml"," sur le VPS :",[920,3238,3240],{"className":1337,"code":3239,"language":1339,"meta":425,"style":425},"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",[495,3241,3242,3249,3256,3266,3273,3286,3293,3298,3305,3312,3319,3326,3333,3340,3347,3358,3363,3371],{"__ignoreMap":425},[928,3243,3244,3247],{"class":930,"line":931},[928,3245,3246],{"class":1349},"services",[928,3248,1364],{"class":942},[928,3250,3251,3254],{"class":930,"line":1058},[928,3252,3253],{"class":1349},"  ignis",[928,3255,1364],{"class":942},[928,3257,3258,3261,3263],{"class":930,"line":1065},[928,3259,3260],{"class":1349},"    image",[928,3262,1353],{"class":942},[928,3264,3265],{"class":1042}," nobbe\u002Fignis:latest\n",[928,3267,3268,3271],{"class":930,"line":1072},[928,3269,3270],{"class":1349},"    ports",[928,3272,1364],{"class":942},[928,3274,3275,3278,3281,3284],{"class":930,"line":1918},[928,3276,3277],{"class":942},"      -",[928,3279,3280],{"class":942}," \"",[928,3282,3283],{"class":1042},"9898:8080",[928,3285,1950],{"class":942},[928,3287,3288,3291],{"class":930,"line":1923},[928,3289,3290],{"class":1349},"    environment",[928,3292,1364],{"class":942},[928,3294,3295],{"class":930,"line":1929},[928,3296,3297],{"class":1068},"      # correspondre à votre utilisateur hôte (exécutez : id)\n",[928,3299,3300,3302],{"class":930,"line":2265},[928,3301,3277],{"class":942},[928,3303,3304],{"class":1042}," PUID=1000\n",[928,3306,3307,3309],{"class":930,"line":2276},[928,3308,3277],{"class":942},[928,3310,3311],{"class":1042}," PGID=1000\n",[928,3313,3314,3316],{"class":930,"line":2372},[928,3315,3277],{"class":942},[928,3317,3318],{"class":1042}," WS_ORIGINS=https:\u002F\u002Fobsidian.pafor.me\n",[928,3320,3321,3324],{"class":930,"line":1691},[928,3322,3323],{"class":1349},"    volumes",[928,3325,1364],{"class":942},[928,3327,3328,3330],{"class":930,"line":2383},[928,3329,3277],{"class":942},[928,3331,3332],{"class":1042}," .\u002Fvaults:\u002Fvaults\n",[928,3334,3335,3337],{"class":930,"line":2388},[928,3336,3277],{"class":942},[928,3338,3339],{"class":1042}," .\u002Fdata:\u002Fapp\u002Fdata\n",[928,3341,3342,3344],{"class":930,"line":2394},[928,3343,3277],{"class":942},[928,3345,3346],{"class":1042}," obsidian-app:\u002Fapp\u002Fobsidian-app\n",[928,3348,3350,3353,3355],{"class":930,"line":3349},15,[928,3351,3352],{"class":1349},"    restart",[928,3354,1353],{"class":942},[928,3356,3357],{"class":1042}," unless-stopped\n",[928,3359,3361],{"class":930,"line":3360},16,[928,3362,1062],{"emptyLinePlaceholder":1061},[928,3364,3366,3369],{"class":930,"line":3365},17,[928,3367,3368],{"class":1349},"volumes",[928,3370,1364],{"class":942},[928,3372,3374,3377],{"class":930,"line":3373},18,[928,3375,3376],{"class":1349},"  obsidian-app",[928,3378,1364],{"class":942},[485,3380,3381,3392,3406],{},[488,3382,3383,3384,3387,3388,3391],{},"Utilisez le port ",[495,3385,3386],{},"9898"," sur l'hôte, car le port ",[495,3389,3390],{},"8080"," est couramment utilisé par d'autres services.",[488,3393,2980,3394,3397,3398,3401,3402,3405],{},[495,3395,3396],{},"id"," sur votre VPS pour vérifier l' ",[495,3399,3400],{},"UID"," et le ",[495,3403,3404],{},"GID"," de votre utilisateur hôte afin de garantir des permissions système appropriées.",[488,3407,3408,3409,3412],{},"Définissez ",[495,3410,3411],{},"WS_ORIGINS"," pour autoriser uniquement les connexions WebSocket provenant de votre nom de domaine spécifique.",[430,3414,3415,3416,886],{},"Lancez le Docker d' ",[441,3417,2673],{},[920,3419,3421],{"className":1029,"code":3420,"language":1031,"meta":425,"style":425},"docker compose -f ignis-docker-compose.yml up -d\n",[495,3422,3423],{"__ignoreMap":425},[928,3424,3425,3427,3429,3432,3435,3437],{"class":930,"line":931},[928,3426,1171],{"class":1038},[928,3428,1174],{"class":1042},[928,3430,3431],{"class":1042}," -f",[928,3433,3434],{"class":1042}," ignis-docker-compose.yml",[928,3436,2974],{"class":1042},[928,3438,2977],{"class":1042},[430,3440,3441,3442,3445,3446,3449],{},"Lorsque vous naviguez vers votre domaine dans un navigateur web, le ",[441,3443,3444],{},"'Vault Manager'"," s'affiche. Il sera vide car aucun coffre n'est encore configuré. Nous allons installer la ",[441,3447,3448],{},"'Synch CLI'"," dans la section suivante pour synchroniser les contenus de notre coffre distant.",[433,3451],{"src":3452,"alt":3453,"style":3454},"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;",[2153,3456,3458],{"id":3457},"problème-de-pare-feu","Problème de pare-feu",[430,3460,3461,3462,3465,3466,886],{},"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 ",[495,3463,3464],{},"INPUT",". Pour bloquer le trafic public externe et garder les conteneurs privés, ajoutez manuellement les règles suivantes à ",[495,3467,3468],{},"iptables",[920,3470,3472],{"className":1029,"code":3471,"language":1031,"meta":425,"style":425},"# 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",[495,3473,3474,3479,3506,3510,3515],{"__ignoreMap":425},[928,3475,3476],{"class":930,"line":931},[928,3477,3478],{"class":1068},"# Bloquer tout le trafic public externe\n",[928,3480,3481,3483,3486,3489,3492,3495,3498,3501,3504],{"class":930,"line":1058},[928,3482,1886],{"class":1038},[928,3484,3485],{"class":1042}," iptables",[928,3487,3488],{"class":1042}," -I",[928,3490,3491],{"class":1042}," DOCKER-USER",[928,3493,3494],{"class":1042}," -i",[928,3496,3497],{"class":1042}," ext_if",[928,3499,3500],{"class":1042}," -j",[928,3502,3503],{"class":1042}," DROP",[928,3505,2020],{"class":938},[928,3507,3508],{"class":930,"line":1065},[928,3509,1062],{"emptyLinePlaceholder":1061},[928,3511,3512],{"class":930,"line":1072},[928,3513,3514],{"class":1068},"# Autoriser uniquement le trafic provenant de l'IP privée de votre client Cloudflare WARP\n",[928,3516,3517,3519,3521,3523,3525,3527,3529,3532,3535,3537],{"class":930,"line":1918},[928,3518,1886],{"class":1038},[928,3520,3485],{"class":1042},[928,3522,3488],{"class":1042},[928,3524,3491],{"class":1042},[928,3526,3494],{"class":1042},[928,3528,3497],{"class":1042},[928,3530,3531],{"class":1042}," -s",[928,3533,3534],{"class":2952}," 100.96.0.10",[928,3536,3500],{"class":1042},[928,3538,3539],{"class":1042}," ACCEPT\n",[2153,3541,3543],{"id":3542},"configuration-de-la-cli-synch","Configuration de la CLI Synch",[430,3545,3546,3547,3549],{},"La ",[441,3548,3159],{}," 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.",[430,3551,3552,3553,3555,3556,3559,3560,3563,3564,3567,3568,739,3571,575,3574,514,3577,3580,3581,918],{},"Compilez la ",[441,3554,3159],{}," à partir de votre dépôt ",[495,3557,3558],{},"synch"," cloné. La compilation nécessite ",[441,3561,3562],{},"Node.js >= 22.5"," (car la CLI dépend de ",[495,3565,3566],{},"node:sqlite"," et d'API globales du navigateur comme ",[495,3569,3570],{},"fetch",[495,3572,3573],{},"WebSocket",[495,3575,3576],{},"WebCrypto",[441,3578,3579],{},"pnpm"," (puisque le dépôt est structuré comme un espace de travail pnpm utilisant la version ",[495,3582,3583],{},"10.33.0",[920,3585,3587],{"className":1029,"code":3586,"language":1031,"meta":425,"style":425},"# 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",[495,3588,3589,3594,3605,3612,3616,3621,3628,3632,3637,3650,3654,3659,3670,3699,3703,3708],{"__ignoreMap":425},[928,3590,3591],{"class":930,"line":931},[928,3592,3593],{"class":1068},"# Vérifier les versions\n",[928,3595,3596,3599,3602],{"class":930,"line":1058},[928,3597,3598],{"class":1038},"node",[928,3600,3601],{"class":1042}," --version",[928,3603,3604],{"class":1068},"   # doit être >= 22.5\n",[928,3606,3607,3609],{"class":930,"line":1065},[928,3608,3579],{"class":1038},[928,3610,3611],{"class":1042}," --version\n",[928,3613,3614],{"class":930,"line":1072},[928,3615,1062],{"emptyLinePlaceholder":1061},[928,3617,3618],{"class":930,"line":1918},[928,3619,3620],{"class":1068},"# À la racine du dépôt\n",[928,3622,3623,3625],{"class":930,"line":1923},[928,3624,3579],{"class":1038},[928,3626,3627],{"class":1042}," install\n",[928,3629,3630],{"class":930,"line":1929},[928,3631,1062],{"emptyLinePlaceholder":1061},[928,3633,3634],{"class":930,"line":2265},[928,3635,3636],{"class":1068},"# Compiler le paquet de la CLI\n",[928,3638,3639,3641,3644,3647],{"class":930,"line":2276},[928,3640,3579],{"class":1038},[928,3642,3643],{"class":1042}," -C",[928,3645,3646],{"class":1042}," apps\u002Fcli",[928,3648,3649],{"class":1042}," build\n",[928,3651,3652],{"class":930,"line":2372},[928,3653,1062],{"emptyLinePlaceholder":1061},[928,3655,3656],{"class":930,"line":1691},[928,3657,3658],{"class":1068},"# Après une compilation réussie, vous obtenez `apps\u002Fcli\u002Fdist\u002Fsynch.js`. Rendez-le exécutable et placez-le dans votre PATH\n",[928,3660,3661,3664,3667],{"class":930,"line":2383},[928,3662,3663],{"class":1038},"chmod",[928,3665,3666],{"class":1042}," +x",[928,3668,3669],{"class":1042}," apps\u002Fcli\u002Fdist\u002Fsynch.js\n",[928,3671,3672,3675,3678,3680,3683,3686,3689,3691,3694,3697],{"class":930,"line":2388},[928,3673,3674],{"class":1038},"ln",[928,3676,3677],{"class":1042}," -sf",[928,3679,3280],{"class":942},[928,3681,3682],{"class":938},"$PWD",[928,3684,3685],{"class":1042},"\u002Fapps\u002Fcli\u002Fdist\u002Fsynch.js",[928,3687,3688],{"class":942},"\"",[928,3690,3280],{"class":942},[928,3692,3693],{"class":938},"$HOME",[928,3695,3696],{"class":1042},"\u002F.local\u002Fbin\u002Fsynch",[928,3698,1950],{"class":942},[928,3700,3701],{"class":930,"line":2394},[928,3702,1062],{"emptyLinePlaceholder":1061},[928,3704,3705],{"class":930,"line":3349},[928,3706,3707],{"class":1068},"# Vérification\n",[928,3709,3710,3712],{"class":930,"line":3360},[928,3711,3558],{"class":1038},[928,3713,3714],{"class":1042}," --help\n",[430,3716,3717,3718,3721],{},"É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 ",[495,3719,3720],{},"synch login --api-url \u003Cremote-synch-api-url>"," pour définir votre point d'accès API cible.",[430,3723,3724],{},[433,3725],{"alt":3726,"src":3727},"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",[430,3729,1825,3730,3733],{},[495,3731,3732],{},"synch login"," dans votre terminal, et vous recevrez une URL d'authentification :",[430,3735,3736],{},[433,3737],{"alt":3738,"src":3739},"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",[430,3741,3742],{},"Connectez-vous via la page web en utilisant la même adresse e-mail que celle enregistrée avec le plugin Obsidian desktop Synchrun.",[430,3744,3745],{},[433,3746],{"alt":3747,"src":3748},"Connexion web réussie pour l'autorisation Synch CLI","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynch-web-login-success.webp",[430,3750,1825,3751,3754],{},[495,3752,3753],{},"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.",[430,3756,3757,3758,3761,3762,3765,3766,918],{},"L'ID du coffre distant se trouve dans les paramètres du plugin ",[441,3759,3760],{},"Synchrun"," en cliquant sur ",[441,3763,3764],{},"'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. ",[495,3767,3768],{},"123e4567-e89b-12d3-a456-426614174000",[430,3770,3771,3776],{},[433,3772],{"src":3773,"alt":3774,"style":3775},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynchrun-manage-remote-vaults.webp","Gestion des coffres distants dans le plugin Synchrun","max-width: 582px; width: 100%; height: auto;",[433,3777],{"alt":3778,"src":3779},"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",[430,3781,3782,3783,3786],{},"Saisissez le mot de passe de votre coffre lorsque vous y êtes invité pour établir la liaison. Une fois connecté, exécutez ",[495,3784,3785],{},"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.",[430,3788,3789],{},[433,3790],{"alt":3791,"src":3792},"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",[430,3794,3795,3796,3799],{},"Pour automatiser cela, configurez et activez un service systemd pour exécuter ",[495,3797,3798],{},"synch watch"," en continu, garantissant une synchronisation instantanée au démarrage :",[920,3801,3803],{"className":1029,"code":3802,"language":1031,"meta":425,"style":425},"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",[495,3804,3805,3821,3825,3830,3835,3840,3844,3848,3853,3858,3863,3868,3873,3878,3882,3887,3891,3895,3899,3905,3914],{"__ignoreMap":425},[928,3806,3807,3809,3812,3815,3818],{"class":930,"line":931},[928,3808,1886],{"class":1038},[928,3810,3811],{"class":1042}," tee",[928,3813,3814],{"class":1042}," \u002Fetc\u002Fsystemd\u002Fsystem\u002Fsynch-watch.service",[928,3816,3817],{"class":942}," \u003C\u003C",[928,3819,3820],{"class":942},"'EOF'\n",[928,3822,3823],{"class":930,"line":1058},[928,3824,2330],{"class":1042},[928,3826,3827],{"class":930,"line":1065},[928,3828,3829],{"class":1042},"Description=Synch vault watcher\n",[928,3831,3832],{"class":930,"line":1072},[928,3833,3834],{"class":1042},"After=network-online.target\n",[928,3836,3837],{"class":930,"line":1918},[928,3838,3839],{"class":1042},"Wants=network-online.target\n",[928,3841,3842],{"class":930,"line":1923},[928,3843,1062],{"emptyLinePlaceholder":1061},[928,3845,3846],{"class":930,"line":1929},[928,3847,2349],{"class":1042},[928,3849,3850],{"class":930,"line":2265},[928,3851,3852],{"class":1042},"Type=simple\n",[928,3854,3855],{"class":930,"line":2276},[928,3856,3857],{"class":1042},"User=\u003Cusername>\n",[928,3859,3860],{"class":930,"line":2372},[928,3861,3862],{"class":1042},"ExecStart=\u002Fhome\u002F\u003Cusername>\u002F.local\u002Fbin\u002Fsynch watch --vault \u002Fhome\u002F\u003Cusername>\u002Fvaults\u002F\u003Cvault-name>\n",[928,3864,3865],{"class":930,"line":1691},[928,3866,3867],{"class":1042},"WorkingDirectory=\u002Fhome\u002F\u003Cusername>\u002Fvaults\n",[928,3869,3870],{"class":930,"line":2383},[928,3871,3872],{"class":1042},"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",[928,3874,3875],{"class":930,"line":2388},[928,3876,3877],{"class":1042},"Environment=\"HOME=\u002Fhome\u002F\u003Cusername>\"\n",[928,3879,3880],{"class":930,"line":2394},[928,3881,2369],{"class":1042},[928,3883,3884],{"class":930,"line":3349},[928,3885,3886],{"class":1042},"RestartSec=5\n",[928,3888,3889],{"class":930,"line":3360},[928,3890,1062],{"emptyLinePlaceholder":1061},[928,3892,3893],{"class":930,"line":3365},[928,3894,2391],{"class":1042},[928,3896,3897],{"class":930,"line":3373},[928,3898,2397],{"class":1042},[928,3900,3902],{"class":930,"line":3901},19,[928,3903,3904],{"class":942},"EOF\n",[928,3906,3908,3910,3912],{"class":930,"line":3907},20,[928,3909,1886],{"class":1038},[928,3911,1889],{"class":1042},[928,3913,2416],{"class":1042},[928,3915,3917,3919,3921,3923,3926],{"class":930,"line":3916},21,[928,3918,1886],{"class":1038},[928,3920,1889],{"class":1042},[928,3922,2017],{"class":1042},[928,3924,3925],{"class":1042}," --now",[928,3927,3928],{"class":1042}," synch-watch.service\n",[430,3930,3931,3932,3934],{},"Ouvrez ",[495,3933,3188],{}," dans votre navigateur web. Vous constaterez que l'interface utilisateur et la mise en page sont pratiquement identiques à celles de l'application de bureau :",[433,3936],{"src":3937,"alt":3938,"style":3939},"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;",[430,3941,3942],{},"En cliquant sur l'icône des paramètres, vous constaterez que presque toutes les configurations de base sont intactes, bien que vos plugins communautaires devront être réinstallés :",[433,3944],{"src":3945,"alt":3946,"style":3947},"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;",[430,3949,3950],{},"Pour tester l'installation, vous pouvez ajouter une nouvelle note via l'interface web :",[433,3952],{"src":3953,"alt":3954,"style":3947},"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",[430,3956,3957,3958,461],{},"La note est immédiatement synchronisée avec votre application de bureau Obsidian. Notez que les dossiers vides n'apparaissent pas dans ",[441,3959,2673],{},[433,3961],{"src":3962,"alt":3963,"style":3964},"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;",[430,3966,3967,3968,3970],{},"Visualisation de ",[495,3969,3188],{}," sur un navigateur web mobile :",[430,3972,3973,3978],{},[433,3974],{"src":3975,"alt":3976,"style":3977},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-mobile-view-sidebar.webp","Navigation latérale du client web Ignis sur un appareil mobile","max-width: 269px; width: 100%; height: auto;",[433,3979],{"src":3980,"alt":3981,"style":3977},"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",[430,3983,3984,3985,3987,3988,3991],{},"Lorsque vous supprimez une note dans ",[441,3986,2673],{},", elle est déplacée en toute sécurité vers le dossier ",[495,3989,3990],{},"~\u002Fvaults\u002F\u003Cnom-du-coffre>\u002F.trash"," de votre coffre local.",[474,3993,3995],{"id":3994},"dernières-réflexions-sur-les-coffres-auto-hébergés","Dernières réflexions sur les coffres auto-hébergés",[430,3997,3998,3999,575,4001,4003,4004,4006],{},"Ensemble, ",[441,4000,2664],{},[441,4002,2673],{}," 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é ",[441,4005,1717],{}," garantit que vos notes personnelles sont entièrement protégées de l'internet public.",[430,4008,4009,4011],{},[441,4010,2673],{}," 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.",[430,4013,4014,4015,4017],{},"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 ",[441,4016,2735],{}," 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.",[430,4019,4020],{},"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.",[474,4022,4023],{"id":1606},"Références",[485,4025,4026,4033,4040],{},[488,4027,4028],{},[444,4029,4032],{"href":4030,"rel":4031},"https:\u002F\u002Fsynch.run\u002Fself-hosting-docker\u002F",[448],"Déployer Synch avec Docker Compose",[488,4034,4035],{},[444,4036,4039],{"href":4037,"rel":4038},"https:\u002F\u002Fignis.thiefling.com\u002Fdocs\u002Fserver\u002Fdeploy\u002F",[448],"Déployer Ignis avec Docker",[488,4041,4042],{},[444,4043,4046],{"href":4044,"rel":4045},"https:\u002F\u002Fsynch.run\u002Fblog\u002Fencryption-and-decryption\u002F",[448],"Comment fonctionne le chiffrement de bout en bout dans Synch ?",[1635,4048,4049],{},"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":425,"searchDepth":1058,"depth":1065,"links":4051},[4052,4061,4070,4071],{"id":2707,"depth":1058,"text":2708,"children":4053},[4054,4058],{"id":2749,"depth":1065,"text":2750,"children":4055},[4056,4057],{"id":2753,"depth":1072,"text":2754},{"id":2769,"depth":1072,"text":2770},{"id":2999,"depth":1065,"text":3000,"children":4059},[4060],{"id":3003,"depth":1072,"text":3004},{"id":3122,"depth":1058,"text":3123,"children":4062},[4063],{"id":3145,"depth":1065,"text":3146,"children":4064},[4065,4066,4067,4068,4069],{"id":3173,"depth":1072,"text":3174},{"id":3182,"depth":1072,"text":2875},{"id":3228,"depth":1072,"text":3229},{"id":3457,"depth":1072,"text":3458},{"id":3542,"depth":1072,"text":3543},{"id":3994,"depth":1058,"text":3995},{"id":1606,"depth":1058,"text":4023},[4073],"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":4079,"robots":1689,"sitemap":4083},[4080,4082],{"@type":4081,"headline":2646,"description":4075,"image":4076},"Article",{"@type":1668,"name":2646,"description":4075,"image":4076},{"lastmod":4084},"2026-09-16",{"title":4086,"description":4075,"ogTitle":2646,"ogDescription":4075,"twitterTitle":2646,"twitterDescription":4075},"Sync Obsidian auto-hébergée et sécurisée : Synch & Ignis","fr\u002Farticle\u002Fsync-obsidian-across-devices",[4089,4090,4091,2640],"Auto-hébergement","Obsidian","Synchronisation","hHj4q0ZL3891f1Ld3Q04a8KFMEIi9gzuLrgHZG1xpfQ",{"id":4094,"title":455,"author":425,"body":4095,"category":6216,"date":6217,"description":465,"extension":1660,"image":466,"imageAlt":467,"isPublished":1061,"meta":6218,"minRead":3373,"navigation":1061,"path":125,"seo":6240,"stem":6242,"tags":6243,"updatedAt":1698,"__hash__":6247},"article\u002Ffr\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues.md",{"type":427,"value":4096,"toc":6186},[4097,4100,4106,4111,4115,4118,4156,4160,4166,4204,4208,4212,4226,4232,4236,4240,4244,4258,4264,4312,4338,4342,4350,4356,4360,4363,4573,4577,4617,4623,4630,4638,4686,4692,4719,4723,4727,4754,4780,4785,4827,4835,5106,5110,5153,5158,5165,5169,5173,5197,5200,5206,5209,5213,5221,5227,5230,5236,5242,5266,5272,5278,5281,5287,5291,5294,5297,5300,5306,5309,5315,5321,5327,5332,5336,5347,5354,5360,5363,5369,5373,5380,5386,5392,5396,5403,5467,5476,5531,5534,5604,5610,5624,5630,5634,5679,5685,5688,5694,5697,5703,5707,5722,5738,5744,5841,5844,5850,5861,5907,5913,5919,5931,5947,5950,5956,5960,5967,5989,5998,6096,6107,6113,6120,6126,6129,6135,6138,6144,6148,6151,6153,6183],[430,4098,4099],{},"La fragmentation du contexte est un obstacle frustrant lorsque l'on travaille avec plusieurs agents IA. Avec des conversations dispersées dans différents outils, vous finissez par agir comme un routeur humain en copiant les conversations de Claude Code pour les coller dans la CLI de Gemini, puis en copiant de la CLI de Gemini vers Hermes Agent. Cette friction s'intensifie lorsque des collègues humains font partie de la même équipe.",[430,4101,4102],{},[433,4103],{"alt":4104,"src":4105},"L'interface utilisateur de l'espace de travail collaboratif Buzz montrant les canaux de discussion et les agents IA actifs","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-workspace-interface.webp",[430,4107,4108,4110],{},[441,4109,1099],{},", un espace de travail collaboratif open-source, rassemble les équipes humaines et les agents IA dans un environnement unique et unifié. Ici, les collègues humains et les agents IA partagent le même historique de tâches et de projets, se transmettant le travail de manière fluide.",[474,4112,4114],{"id":4113},"quest-ce-que-buzz-de-block-lespace-de-travail-collaboratif-pour-agents-ia","Qu'est-ce que Buzz de Block ? L'espace de travail collaboratif pour agents IA",[430,4116,4117],{},"Buzz est un espace de travail collaboratif open-source de Block (l'entreprise de Jack Dorsey) où les humains et les agents IA partagent les mêmes canaux et projets. Il propose les fonctionnalités clés suivantes :",[485,4119,4120,4126,4132,4138,4144,4150],{},[488,4121,4122,4125],{},[441,4123,4124],{},"Contexte partagé :"," Les canaux sont le lieu où collaborent humains et agents. Tout l'historique des conversations et du projet est contenu dans le canal.",[488,4127,4128,4131],{},[441,4129,4130],{},"Communication d'agent à agent :"," Les agents peuvent communiquer entre eux, même sur des machines différentes. Un agent peut @-mentionner un autre agent pour lui transmettre du travail ou faire vérifier du code.",[488,4133,4134,4137],{},[441,4135,4136],{},"Activation par mention :"," Les agents n'agissent que lorsqu'ils sont @-mentionnés, restant discrets le reste du temps. Une fois mentionné, un agent lit le contexte pertinent dans le canal et se met au travail.",[488,4139,4140,4143],{},[441,4141,4142],{},"Système d'identité unifié :"," Humains et agents partagent le même système d'identité, authentifié par des clés cryptographiques.",[488,4145,4146,4149],{},[441,4147,4148],{},"Commandes déléguées :"," Vous pouvez autoriser vos collègues humains à commander vos agents, permettant à toute l'équipe de briefer et de tirer parti des assistants numériques des uns et des autres.",[488,4151,4152,4155],{},[441,4153,4154],{},"Serveurs auto-hébergés :"," Puisque vous hébergez le serveur, vous gardez le contrôle total de vos données. Vous choisissez qui le rejoint et définissez vos propres règles de fonctionnement.",[474,4157,4159],{"id":4158},"larchitecture-cryptographique-de-buzz-basée-sur-nostr","L'architecture cryptographique de Buzz basée sur Nostr",[430,4161,4162],{},[433,4163],{"alt":4164,"src":4165},"Schéma d'architecture cryptographique basé sur Nostr de l'espace de travail collaboratif Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-nostr-cryptographic-architecture.webp",[485,4167,4168,4174,4180,4186,4192,4198],{},[488,4169,4170,4173],{},[441,4171,4172],{},"Le relais Nostr fait office de serveur :"," Les messages, flux de travail, dépôts et autres événements sont signés cryptographiquement, vérifiés et stockés sur un serveur de relais Nostr. Le protocole Nostr prend en charge nativement la communication via WebSockets et API REST.",[488,4175,4176,4179],{},[441,4177,4178],{},"Identité cryptographique unifiée :"," Humains et agents s'authentifient à l'aide de leurs propres clés cryptographiques. Cette identité reste côté client et n'est jamais stockée sur le serveur.",[488,4181,4182,4185],{},[441,4183,4184],{},"Statut d'agent de premier plan :"," Chaque agent dispose de sa propre identité, de ses adhésions aux canaux et de son journal d'audit. Les agents se connectent à l'espace de travail à l'aide du protocole de communication des agents (ACP).",[488,4187,4188,4191],{},[441,4189,4190],{},"Dépôts Git décentralisés :"," Les dépôts de code sont stockés sur un stockage objet compatible S3, tandis que les tâches, les pull requests et les revues de code sont suivis dans le journal des événements de Nostr. Par conséquent, un dépôt Git Buzz est hébergé sur le relais Nostr plutôt que sur GitHub.",[488,4193,4194,4197],{},[441,4195,4196],{},"L'application Buzz est un client Nostr :"," Buzz est indépendant du relais Nostr ; il s'agit d'une application cliente de bureau ou mobile qui se connecte à l'URL du relais.",[488,4199,4200,4203],{},[441,4201,4202],{},"Pile d'infrastructure :"," Une base de données PostgreSQL gère le stockage des événements et la recherche plein texte, Redis gère la messagerie pub\u002Fsub, et MinIO compatible S3 est utilisé pour le stockage des médias.",[474,4205,4207],{"id":4206},"comment-auto-héberger-le-relais-buzz-de-block-sur-un-vps-linux","Comment auto-héberger le relais Buzz de Block sur un VPS Linux",[876,4209,4211],{"id":4210},"_0-prérequis","0. Prérequis",[485,4213,4214,4217,4220,4223],{},[488,4215,4216],{},"Un VPS Linux",[488,4218,4219],{},"Un domaine qui pointe vers votre serveur",[488,4221,4222],{},"Docker et le plugin Docker Compose",[488,4224,4225],{},"Compte Cloudflare (plan gratuit)",[430,4227,4228,4229,4231],{},"Dans ce guide, nous ferons tourner le relais Nostr sur un VPS Ubuntu derrière un réseau privé ",[444,4230,1702],{"href":363},". La pile est composée de quatre services sous Docker Compose — relay, PostgreSQL, Redis et MinIO — ainsi que Caddy pour le HTTPS.",[463,4233],{"description":4234,"image":2600,"image-alt":4235,"label":2702,"min-read":2703,"title":1702,"to":363},"Apprenez à exposer et à accéder de manière sécurisée à votre Hermes Agent dans le monde entier à l'aide de Cloudflare WARP et Zero Trust sans ouvrir de ports de pare-feu.","Exposer Hermes Agent en toute sécurité à un réseau privé à l'aide de Cloudflare Zero Trust et d'un tunnel WARP",[876,4237,4239],{"id":4238},"_1-dns-cloudflare-et-jeton-api","1. DNS Cloudflare et jeton API",[2153,4241,4243],{"id":4242},"créer-un-jeton-api-cloudflare","Créer un jeton API Cloudflare",[533,4245,4246,4252],{},[488,4247,3061,4248,4251],{},[441,4249,4250],{},"Profile"," dans le coin supérieur droit depuis le menu déroulant de l'icône de l'utilisateur.",[488,4253,4254,4255,461],{},"Cliquez sur ",[441,4256,4257],{},"API Tokens",[430,4259,4260],{},[433,4261],{"alt":4262,"src":4263},"Page de profil utilisateur Cloudflare affichant le menu de création des jetons API","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fcloudflare-profile-api-tokens.webp",[533,4265,4266,4271,4277,4297,4302,4306,4309],{"start":1065},[488,4267,4254,4268,461],{},[441,4269,4270],{},"Create Token",[488,4272,4273,4274,461],{},"Utilisez le modèle ",[441,4275,4276],{},"Edit zone DNS",[488,4278,4279,4280],{},"Configurez le modèle de la manière suivante :\n",[485,4281,4282,4288],{},[488,4283,4284,4287],{},[441,4285,4286],{},"Permissions"," : Zone — DNS — Edit",[488,4289,4290,4293,4294],{},[441,4291,4292],{},"Zone Resources"," : Include — Specific zone — ",[495,4295,4296],{},"example.com",[488,4298,4254,4299,461],{},[441,4300,4301],{},"Continue to summary",[488,4303,4254,4304,461],{},[441,4305,4270],{},[488,4307,4308],{},"Copiez le jeton généré, car il ne s'affichera plus une fois la page fermée.",[488,4310,4311],{},"Testez le jeton généré dans votre terminal pour vous assurer qu'il fonctionne correctement :",[920,4313,4315],{"className":1029,"code":4314,"language":1031,"meta":425,"style":425},"curl \"https:\u002F\u002Fapi.cloudflare.com\u002Fclient\u002Fv4\u002Fuser\u002Ftokens\u002Fverify\" -H \"Authorization: Bearer YOUR_TOKEN_HERE\"\n",[495,4316,4317],{"__ignoreMap":425},[928,4318,4319,4321,4323,4326,4328,4331,4333,4336],{"class":930,"line":931},[928,4320,2983],{"class":1038},[928,4322,3280],{"class":942},[928,4324,4325],{"class":1042},"https:\u002F\u002Fapi.cloudflare.com\u002Fclient\u002Fv4\u002Fuser\u002Ftokens\u002Fverify",[928,4327,3688],{"class":942},[928,4329,4330],{"class":1042}," -H",[928,4332,3280],{"class":942},[928,4334,4335],{"class":1042},"Authorization: Bearer YOUR_TOKEN_HERE",[928,4337,1950],{"class":942},[2153,4339,4341],{"id":4340},"enregistrements-dns","Enregistrements DNS",[485,4343,4344],{},[488,4345,4346,4347,4349],{},"Créez un enregistrement A et configurez-le sur ",[441,4348,2760],{}," (DNS only).",[430,4351,4352],{},[433,4353],{"alt":4354,"src":4355},"Configuration d'un enregistrement DNS A pour le domaine Buzz dans le tableau de bord Cloudflare avec statut de proxy défini sur DNS uniquement","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fcloudflare-dns-a-record-configuration.webp",[876,4357,4359],{"id":4358},"_2-installer-docker-sur-ubuntu","2. Installer Docker sur Ubuntu",[430,4361,4362],{},"Exécutez les commandes suivantes pour installer Docker sur Ubuntu :",[920,4364,4366],{"className":1029,"code":4365,"language":1031,"meta":425,"style":425},"# Add Docker's official GPG key and set up the Docker repository\ncurl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fusr\u002Fshare\u002Fkeyrings\u002Fdocker-archive-keyring.gpg\n\n# Add the official Docker repository\necho \"deb [arch=amd64 signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fdocker-archive-keyring.gpg] https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu $(lsb_release -cs) stable\" | sudo tee \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list > \u002Fdev\u002Fnull\n\n# Update package list\nsudo apt update\n\n# Install Docker Engine, Docker Community Edition, and containerd runtime\nsudo apt install docker-ce docker-ce-cli containerd.io -y\n\n# Start automatically when the system boots\nsudo systemctl enable docker\n\n# Verify docker is installed\ndocker --version\n\nsudo apt install -y docker-compose-plugin\n\n# Verify the compose plugin is installed\ndocker compose version\n\n",[495,4367,4368,4373,4401,4405,4410,4452,4456,4461,4471,4475,4480,4501,4505,4510,4521,4525,4530,4536,4540,4554,4558,4563],{"__ignoreMap":425},[928,4369,4370],{"class":930,"line":931},[928,4371,4372],{"class":1068},"# Add Docker's official GPG key and set up the Docker repository\n",[928,4374,4375,4377,4380,4383,4386,4389,4392,4395,4398],{"class":930,"line":1058},[928,4376,2983],{"class":1038},[928,4378,4379],{"class":1042}," -fsSL",[928,4381,4382],{"class":1042}," https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg",[928,4384,4385],{"class":942}," |",[928,4387,4388],{"class":1038}," sudo",[928,4390,4391],{"class":1042}," gpg",[928,4393,4394],{"class":1042}," --dearmor",[928,4396,4397],{"class":1042}," -o",[928,4399,4400],{"class":1042}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fdocker-archive-keyring.gpg\n",[928,4402,4403],{"class":930,"line":1065},[928,4404,1062],{"emptyLinePlaceholder":1061},[928,4406,4407],{"class":930,"line":1072},[928,4408,4409],{"class":1068},"# Add the official Docker repository\n",[928,4411,4412,4415,4417,4420,4423,4426,4429,4432,4435,4437,4439,4441,4443,4446,4449],{"class":930,"line":1918},[928,4413,4414],{"class":959},"echo",[928,4416,3280],{"class":942},[928,4418,4419],{"class":1042},"deb [arch=amd64 signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fdocker-archive-keyring.gpg] https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu ",[928,4421,4422],{"class":942},"$(",[928,4424,4425],{"class":1038},"lsb_release",[928,4427,4428],{"class":1042}," -cs",[928,4430,4431],{"class":942},")",[928,4433,4434],{"class":1042}," stable",[928,4436,3688],{"class":942},[928,4438,4385],{"class":942},[928,4440,4388],{"class":1038},[928,4442,3811],{"class":1042},[928,4444,4445],{"class":1042}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[928,4447,4448],{"class":942}," >",[928,4450,4451],{"class":1042}," \u002Fdev\u002Fnull\n",[928,4453,4454],{"class":930,"line":1923},[928,4455,1062],{"emptyLinePlaceholder":1061},[928,4457,4458],{"class":930,"line":1929},[928,4459,4460],{"class":1068},"# Update package list\n",[928,4462,4463,4465,4468],{"class":930,"line":2265},[928,4464,1886],{"class":1038},[928,4466,4467],{"class":1042}," apt",[928,4469,4470],{"class":1042}," update\n",[928,4472,4473],{"class":930,"line":2276},[928,4474,1062],{"emptyLinePlaceholder":1061},[928,4476,4477],{"class":930,"line":2372},[928,4478,4479],{"class":1068},"# Install Docker Engine, Docker Community Edition, and containerd runtime\n",[928,4481,4482,4484,4486,4489,4492,4495,4498],{"class":930,"line":1691},[928,4483,1886],{"class":1038},[928,4485,4467],{"class":1042},[928,4487,4488],{"class":1042}," install",[928,4490,4491],{"class":1042}," docker-ce",[928,4493,4494],{"class":1042}," docker-ce-cli",[928,4496,4497],{"class":1042}," containerd.io",[928,4499,4500],{"class":1042}," -y\n",[928,4502,4503],{"class":930,"line":2383},[928,4504,1062],{"emptyLinePlaceholder":1061},[928,4506,4507],{"class":930,"line":2388},[928,4508,4509],{"class":1068},"# Start automatically when the system boots\n",[928,4511,4512,4514,4516,4518],{"class":930,"line":2394},[928,4513,1886],{"class":1038},[928,4515,1889],{"class":1042},[928,4517,2017],{"class":1042},[928,4519,4520],{"class":1042}," docker\n",[928,4522,4523],{"class":930,"line":3349},[928,4524,1062],{"emptyLinePlaceholder":1061},[928,4526,4527],{"class":930,"line":3360},[928,4528,4529],{"class":1068},"# Verify docker is installed\n",[928,4531,4532,4534],{"class":930,"line":3365},[928,4533,1171],{"class":1038},[928,4535,3611],{"class":1042},[928,4537,4538],{"class":930,"line":3373},[928,4539,1062],{"emptyLinePlaceholder":1061},[928,4541,4542,4544,4546,4548,4551],{"class":930,"line":3901},[928,4543,1886],{"class":1038},[928,4545,4467],{"class":1042},[928,4547,4488],{"class":1042},[928,4549,4550],{"class":1042}," -y",[928,4552,4553],{"class":1042}," docker-compose-plugin\n",[928,4555,4556],{"class":930,"line":3907},[928,4557,1062],{"emptyLinePlaceholder":1061},[928,4559,4560],{"class":930,"line":3916},[928,4561,4562],{"class":1068},"# Verify the compose plugin is installed\n",[928,4564,4566,4568,4570],{"class":930,"line":4565},22,[928,4567,1171],{"class":1038},[928,4569,1174],{"class":1042},[928,4571,4572],{"class":1042}," version\n",[876,4574,4576],{"id":4575},"_3-cloner-et-configurer","3. Cloner et configurer",[920,4578,4580],{"className":1029,"code":4579,"language":1031,"meta":425,"style":425},"git clone https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz.git\n\ncd buzz\u002Fdeploy\u002Fcompose\ncp .env.example .env\nnano .env\n",[495,4581,4582,4591,4595,4602,4610],{"__ignoreMap":425},[928,4583,4584,4586,4588],{"class":930,"line":931},[928,4585,2785],{"class":1038},[928,4587,2788],{"class":1042},[928,4589,4590],{"class":1042}," https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz.git\n",[928,4592,4593],{"class":930,"line":1058},[928,4594,1062],{"emptyLinePlaceholder":1061},[928,4596,4597,4599],{"class":930,"line":1065},[928,4598,2809],{"class":959},[928,4600,4601],{"class":1042}," buzz\u002Fdeploy\u002Fcompose\n",[928,4603,4604,4606,4608],{"class":930,"line":1072},[928,4605,2826],{"class":1038},[928,4607,2829],{"class":1042},[928,4609,2832],{"class":1042},[928,4611,4612,4615],{"class":930,"line":1918},[928,4613,4614],{"class":1038},"nano",[928,4616,2832],{"class":1042},[430,4618,4619,4620,4622],{},"Modifiez ",[495,4621,2839],{}," en groupes :",[485,4624,4625],{},[488,4626,4627],{},[441,4628,4629],{},"Domaine :",[920,4631,4636],{"className":4632,"code":4634,"language":4635},[4633],"language-text","BUZZ_DOMAIN=buzz.pafor.me\nRELAY_URL=wss:\u002F\u002Fbuzz.pafor.me\nBUZZ_PAIRING_RELAY_URL=wss:\u002F\u002Fbuzz.pafor.me\u002Fpair\nBUZZ_MEDIA_BASE_URL=https:\u002F\u002Fbuzz.pafor.me\u002Fmedia\nBUZZ_MEDIA_SERVER_DOMAIN=buzz.pafor.me\nBUZZ_CORS_ORIGINS=https:\u002F\u002Fbuzz.pafor.me\n","text",[495,4637,4634],{"__ignoreMap":425},[485,4639,4640,4650],{},[488,4641,4642,4645,4646,4649],{},[441,4643,4644],{},"Clé du propriétaire :"," ",[495,4647,4648],{},"RELAY_OWNER_PUBKEY"," nécessite votre clé publique hexadécimale de 64 caractères. Générez d'abord une identité dans l'application de bureau ('Create a new identity key' → copiez votre identifiant public, qui est au format npub), puis convertissez-le en hexadécimal.",[488,4651,4652,4655],{},[441,4653,4654],{},"Secrets :",[485,4656,4657,4667,4680],{},[488,4658,4659,4660,4663,4664,4666],{},"Générez des secrets à l'aide de cet ",[444,4661,4662],{"href":2859},"outil en ligne"," ou avec ",[495,4665,2864],{}," (exécutez-le sept fois)",[488,4668,4669,4670,579,4673,739,4676,4679],{},"Remplacez chaque espace réservé ",[495,4671,4672],{},"CHANGE_ME",[495,4674,4675],{},"BUZZ_RELAY_PRIVATE_KEY",[495,4677,4678],{},"BUZZ_GIT_HOOK_HMAC_SECRET",", les mots de passe Postgres\u002FRedis\u002FTypesense, et les clés d'accès\u002Fsecrètes S3.",[488,4681,4682,4683,461],{},"Les espaces réservés restants sont la cause la plus fréquente des boucles de redémarrage des conteneurs ; vérifiez les vôtres avec ",[495,4684,4685],{},"grep CHANGE_ME .env",[920,4687,4690],{"className":4688,"code":4689,"language":4635},[4633],"    BUZZ_RELAY_PRIVATE_KEY=CHANGE_ME_64_HEX_PRIVATE_KEY\n    BUZZ_GIT_HOOK_HMAC_SECRET=CHANGE_ME_RANDOM_64_HEX\n    POSTGRES_PASSWORD=CHANGE_ME_RANDOM_PASSWORD\n    REDIS_PASSWORD=CHANGE_ME_RANDOM_PASSWORD\n    TYPESENSE_API_KEY=CHANGE_ME_RANDOM_API_KEY\n    BUZZ_S3_ACCESS_KEY=CHANGE_ME_RANDOM_ACCESS_KEY\n    BUZZ_S3_SECRET_KEY=CHANGE_ME_RANDOM_SECRET_KEY\n",[495,4691,4689],{"__ignoreMap":425},[485,4693,4694],{},[488,4695,4696,4699],{},[441,4697,4698],{},"Autres :",[485,4700,4701,4707],{},[488,4702,3185,4703,4706],{},[495,4704,4705],{},"CLOUDFLARE_API_TOKEN"," comme variable d'environnement et attribuez-lui le jeton API généré précédemment. C'est obligatoire pour Caddy.",[488,4708,4709,4710,739,4712,4715,4716,461],{},"Buzz est livré avec des valeurs par défaut ouvertes — toute personne connaissant l'URL de votre relais peut s'authentifier et s'y joindre. Définissez ",[495,4711,4648],{},[495,4713,4714],{},"BUZZ_REQUIRE_RELAY_MEMBERSHIP=true",", et ",[495,4717,4718],{},"BUZZ_REQUIRE_AUTH_TOKEN=true",[876,4720,4722],{"id":4721},"_4-activer-le-https-with-caddy","4. Activer le HTTPS with Caddy",[2153,4724,4726],{"id":4725},"créer-une-image-caddy-personnalisée-avec-le-module-dns-cloudflare","Créer une image Caddy personnalisée avec le module DNS Cloudflare",[485,4728,4729,4740,4751],{},[488,4730,4731,4732,4735,4736,4739],{},"Nous configurons DNS-01 avec Cloudflare pour Caddy. DNS-01 fonctionne en demandant au plugin d'écrire un enregistrement TXT ",[495,4733,4734],{},"_acme-challenge.buzz.pafor.me"," sur le ",[441,4737,4738],{},"DNS public"," ;",[488,4741,4742,4743,4746,4747,4750],{},"Let's Encrypt consulte ensuite l'enregistrement depuis l'internet public pour vérifier le contrôle du domaine. Cela signifie que ",[495,4744,4745],{},"pafor.me"," doit être une zone publique dans votre compte Cloudflare — et non un simple nom d'hôte privé qui n'existe que dans le DNS privé Zero Trust \u002F WARP. Si ",[495,4748,4749],{},"buzz.pafor.me"," n'est résolu que de manière privée et qu'il n'y a pas de zone publique, DNS-01 échouera, ce qui nécessitera une approche différente.",[488,4752,4753],{},"Ajoutez ce qui suit au Caddyfile :",[920,4755,4757],{"className":1337,"code":4756,"language":1339,"meta":425,"style":425},"{\n  acme_dns cloudflare {env.CLOUDFLARE_API_TOKEN}\n}\n",[495,4758,4759,4763,4776],{"__ignoreMap":425},[928,4760,4761],{"class":930,"line":931},[928,4762,2907],{"class":942},[928,4764,4765,4768,4771,4774],{"class":930,"line":1058},[928,4766,4767],{"class":1042},"  acme_dns cloudflare",[928,4769,4770],{"class":942}," {",[928,4772,4773],{"class":1042},"env.CLOUDFLARE_API_TOKEN",[928,4775,2915],{"class":942},[928,4777,4778],{"class":930,"line":1065},[928,4779,2915],{"class":942},[485,4781,4782],{},[488,4783,4784],{},"Créez un Dockerfile.caddy avec le contenu suivant, requis par compose.caddy.yml :",[920,4786,4788],{"className":1337,"code":4787,"language":1339,"meta":425,"style":425},"FROM caddy:2-builder AS builder\n\nRUN xcaddy build \\\n    --with github.com\u002Fcaddy-dns\u002Fcloudflare\n\nFROM caddy:2-alpine\n\nCOPY --from=builder \u002Fusr\u002Fbin\u002Fcaddy \u002Fusr\u002Fbin\u002Fcaddy\n",[495,4789,4790,4795,4799,4804,4809,4813,4818,4822],{"__ignoreMap":425},[928,4791,4792],{"class":930,"line":931},[928,4793,4794],{"class":1042},"FROM caddy:2-builder AS builder\n",[928,4796,4797],{"class":930,"line":1058},[928,4798,1062],{"emptyLinePlaceholder":1061},[928,4800,4801],{"class":930,"line":1065},[928,4802,4803],{"class":1042},"RUN xcaddy build \\\n",[928,4805,4806],{"class":930,"line":1072},[928,4807,4808],{"class":1042},"    --with github.com\u002Fcaddy-dns\u002Fcloudflare\n",[928,4810,4811],{"class":930,"line":1918},[928,4812,1062],{"emptyLinePlaceholder":1061},[928,4814,4815],{"class":930,"line":1923},[928,4816,4817],{"class":1042},"FROM caddy:2-alpine\n",[928,4819,4820],{"class":930,"line":1929},[928,4821,1062],{"emptyLinePlaceholder":1061},[928,4823,4824],{"class":930,"line":2265},[928,4825,4826],{"class":1042},"COPY --from=builder \u002Fusr\u002Fbin\u002Fcaddy \u002Fusr\u002Fbin\u002Fcaddy\n",[485,4828,4829],{},[488,4830,4619,4831,4834],{},[495,4832,4833],{},"compose.caddy.yml"," pour utiliser l'image avec le module Cloudflare et passer le jeton API Cloudflare :",[920,4836,4838],{"className":1337,"code":4837,"language":1339,"meta":425,"style":425},"services:\n  relay:\n    ports: !reset []\n\n  caddy:\n    build:\n      context: .\n      dockerfile: Dockerfile.caddy\n    image: buzz-caddy:cloudflare\n    depends_on:\n      relay:\n        condition: service_healthy\n    environment:\n      BUZZ_DOMAIN: ${BUZZ_DOMAIN:?set BUZZ_DOMAIN}\n      CLOUDFLARE_API_TOKEN: ${CLOUDFLARE_API_TOKEN:?set CLOUDFLARE_API_TOKEN}\n    ports:\n      - \"${CADDY_HTTP_PORT:-80}:80\"\n      - \"${CADDY_HTTPS_PORT:-443}:443\"\n    volumes:\n      - .\u002FCaddyfile:\u002Fetc\u002Fcaddy\u002FCaddyfile:ro\n      - buzz-caddy-data:\u002Fdata\n      - buzz-caddy-config:\u002Fconfig\n    restart: unless-stopped\n    networks:\n      - buzz-net\n\nvolumes:\n  buzz-caddy-data:\n    labels:\n      com.buzz.volume: caddy-data\n  buzz-caddy-config:\n    labels:\n      com.buzz.volume: caddy-config\n",[495,4839,4840,4846,4853,4865,4869,4876,4883,4893,4903,4912,4919,4926,4936,4942,4952,4962,4968,4979,4990,4996,5003,5010,5017,5026,5034,5042,5047,5054,5062,5070,5081,5089,5096],{"__ignoreMap":425},[928,4841,4842,4844],{"class":930,"line":931},[928,4843,3246],{"class":1349},[928,4845,1364],{"class":942},[928,4847,4848,4851],{"class":930,"line":1058},[928,4849,4850],{"class":1349},"  relay",[928,4852,1364],{"class":942},[928,4854,4855,4857,4859,4862],{"class":930,"line":1065},[928,4856,3270],{"class":1349},[928,4858,1353],{"class":942},[928,4860,4861],{"class":934}," !reset",[928,4863,4864],{"class":942}," []\n",[928,4866,4867],{"class":930,"line":1072},[928,4868,1062],{"emptyLinePlaceholder":1061},[928,4870,4871,4874],{"class":930,"line":1918},[928,4872,4873],{"class":1349},"  caddy",[928,4875,1364],{"class":942},[928,4877,4878,4881],{"class":930,"line":1923},[928,4879,4880],{"class":1349},"    build",[928,4882,1364],{"class":942},[928,4884,4885,4888,4890],{"class":930,"line":1929},[928,4886,4887],{"class":1349},"      context",[928,4889,1353],{"class":942},[928,4891,4892],{"class":2952}," .\n",[928,4894,4895,4898,4900],{"class":930,"line":2265},[928,4896,4897],{"class":1349},"      dockerfile",[928,4899,1353],{"class":942},[928,4901,4902],{"class":1042}," Dockerfile.caddy\n",[928,4904,4905,4907,4909],{"class":930,"line":2276},[928,4906,3260],{"class":1349},[928,4908,1353],{"class":942},[928,4910,4911],{"class":1042}," buzz-caddy:cloudflare\n",[928,4913,4914,4917],{"class":930,"line":2372},[928,4915,4916],{"class":1349},"    depends_on",[928,4918,1364],{"class":942},[928,4920,4921,4924],{"class":930,"line":1691},[928,4922,4923],{"class":1349},"      relay",[928,4925,1364],{"class":942},[928,4927,4928,4931,4933],{"class":930,"line":2383},[928,4929,4930],{"class":1349},"        condition",[928,4932,1353],{"class":942},[928,4934,4935],{"class":1042}," service_healthy\n",[928,4937,4938,4940],{"class":930,"line":2388},[928,4939,3290],{"class":1349},[928,4941,1364],{"class":942},[928,4943,4944,4947,4949],{"class":930,"line":2394},[928,4945,4946],{"class":1349},"      BUZZ_DOMAIN",[928,4948,1353],{"class":942},[928,4950,4951],{"class":1042}," ${BUZZ_DOMAIN:?set BUZZ_DOMAIN}\n",[928,4953,4954,4957,4959],{"class":930,"line":3349},[928,4955,4956],{"class":1349},"      CLOUDFLARE_API_TOKEN",[928,4958,1353],{"class":942},[928,4960,4961],{"class":1042}," ${CLOUDFLARE_API_TOKEN:?set CLOUDFLARE_API_TOKEN}\n",[928,4963,4964,4966],{"class":930,"line":3360},[928,4965,3270],{"class":1349},[928,4967,1364],{"class":942},[928,4969,4970,4972,4974,4977],{"class":930,"line":3365},[928,4971,3277],{"class":942},[928,4973,3280],{"class":942},[928,4975,4976],{"class":1042},"${CADDY_HTTP_PORT:-80}:80",[928,4978,1950],{"class":942},[928,4980,4981,4983,4985,4988],{"class":930,"line":3373},[928,4982,3277],{"class":942},[928,4984,3280],{"class":942},[928,4986,4987],{"class":1042},"${CADDY_HTTPS_PORT:-443}:443",[928,4989,1950],{"class":942},[928,4991,4992,4994],{"class":930,"line":3901},[928,4993,3323],{"class":1349},[928,4995,1364],{"class":942},[928,4997,4998,5000],{"class":930,"line":3907},[928,4999,3277],{"class":942},[928,5001,5002],{"class":1042}," .\u002FCaddyfile:\u002Fetc\u002Fcaddy\u002FCaddyfile:ro\n",[928,5004,5005,5007],{"class":930,"line":3916},[928,5006,3277],{"class":942},[928,5008,5009],{"class":1042}," buzz-caddy-data:\u002Fdata\n",[928,5011,5012,5014],{"class":930,"line":4565},[928,5013,3277],{"class":942},[928,5015,5016],{"class":1042}," buzz-caddy-config:\u002Fconfig\n",[928,5018,5020,5022,5024],{"class":930,"line":5019},23,[928,5021,3352],{"class":1349},[928,5023,1353],{"class":942},[928,5025,3357],{"class":1042},[928,5027,5029,5032],{"class":930,"line":5028},24,[928,5030,5031],{"class":1349},"    networks",[928,5033,1364],{"class":942},[928,5035,5037,5039],{"class":930,"line":5036},25,[928,5038,3277],{"class":942},[928,5040,5041],{"class":1042}," buzz-net\n",[928,5043,5045],{"class":930,"line":5044},26,[928,5046,1062],{"emptyLinePlaceholder":1061},[928,5048,5050,5052],{"class":930,"line":5049},27,[928,5051,3368],{"class":1349},[928,5053,1364],{"class":942},[928,5055,5057,5060],{"class":930,"line":5056},28,[928,5058,5059],{"class":1349},"  buzz-caddy-data",[928,5061,1364],{"class":942},[928,5063,5065,5068],{"class":930,"line":5064},29,[928,5066,5067],{"class":1349},"    labels",[928,5069,1364],{"class":942},[928,5071,5073,5076,5078],{"class":930,"line":5072},30,[928,5074,5075],{"class":1349},"      com.buzz.volume",[928,5077,1353],{"class":942},[928,5079,5080],{"class":1042}," caddy-data\n",[928,5082,5084,5087],{"class":930,"line":5083},31,[928,5085,5086],{"class":1349},"  buzz-caddy-config",[928,5088,1364],{"class":942},[928,5090,5092,5094],{"class":930,"line":5091},32,[928,5093,5067],{"class":1349},[928,5095,1364],{"class":942},[928,5097,5099,5101,5103],{"class":930,"line":5098},33,[928,5100,5075],{"class":1349},[928,5102,1353],{"class":942},[928,5104,5105],{"class":1042}," caddy-config\n",[2153,5107,5109],{"id":5108},"démarrer-les-conteneurs-docker","Démarrer les conteneurs Docker",[920,5111,5113],{"className":1029,"code":5112,"language":1031,"meta":425,"style":425},"docker compose -f compose.yml -f compose.caddy.yml up -d\n\n#Check the Docker status\ndocker compose ps\n",[495,5114,5115,5135,5139,5144],{"__ignoreMap":425},[928,5116,5117,5119,5121,5123,5126,5128,5131,5133],{"class":930,"line":931},[928,5118,1171],{"class":1038},[928,5120,1174],{"class":1042},[928,5122,3431],{"class":1042},[928,5124,5125],{"class":1042}," compose.yml",[928,5127,3431],{"class":1042},[928,5129,5130],{"class":1042}," compose.caddy.yml",[928,5132,2974],{"class":1042},[928,5134,2977],{"class":1042},[928,5136,5137],{"class":930,"line":1058},[928,5138,1062],{"emptyLinePlaceholder":1061},[928,5140,5141],{"class":930,"line":1065},[928,5142,5143],{"class":1068},"#Check the Docker status\n",[928,5145,5146,5148,5150],{"class":930,"line":1072},[928,5147,1171],{"class":1038},[928,5149,1174],{"class":1042},[928,5151,5152],{"class":1042}," ps\n",[433,5154],{"src":5155,"alt":5156,"style":5157},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fdocker-compose-ps-status-terminal.webp","Fenêtre de terminal affichant les conteneurs en cours d'exécution pour les services Buzz via docker compose ps","max-width: 700px; width: 100%; height: auto;",[430,5159,5160,5161,5164],{},"Ouvrez votre navigateur web et accédez à ",[495,5162,5163],{},"http:\u002F\u002Fbuzz.pafor.me"," pour vérifier que le relais fonctionne.",[433,5166],{"src":5167,"alt":5168,"style":3111},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-relay-running-browser-verification.webp","Vérification dans le navigateur montrant la réponse réussie du relais Buzz de Block auto-hébergé",[876,5170,5172],{"id":5171},"étape-5-sauvegarder-dès-le-premier-jour","Étape 5 : Sauvegarder dès le premier jour",[920,5174,5176],{"className":1029,"code":5175,"language":1031,"meta":425,"style":425},"mkdir -p \u002Fbuzz_backups\ncrontab -e\n",[495,5177,5178,5189],{"__ignoreMap":425},[928,5179,5180,5183,5186],{"class":930,"line":931},[928,5181,5182],{"class":1038},"mkdir",[928,5184,5185],{"class":1042}," -p",[928,5187,5188],{"class":1042}," \u002Fbuzz_backups\n",[928,5190,5191,5194],{"class":930,"line":1058},[928,5192,5193],{"class":1038},"crontab",[928,5195,5196],{"class":1042}," -e\n",[430,5198,5199],{},"Ajouter une tâche cron nocturne de sauvegarde de la base de données :",[920,5201,5204],{"className":5202,"code":5203,"language":4635},[4633],"0 3 * * * cd \u002Fhome\u002F\u003Cuser>\u002Fbuzz\u002Fdeploy\u002Fcompose && docker compose exec -T postgres pg_dump -U buzz buzz > \u002Fbuzz_backups\u002Fbuzz-$(date +\\%Y\\%m\\%d).sql\n",[495,5205,5203],{"__ignoreMap":425},[430,5207,5208],{},"Note : Traitez BUZZ_RELAY_PRIVATE_KEY comme permanente. Les événements signés par celle-ci échoueront à la vérification si la clé change ; une base de données restaurée associée à une nouvelle clé n'est pas traitée comme le même relais.",[474,5210,5212],{"id":5211},"configuration-du-client-de-bureau-buzz-et-des-identités-nostr","Configuration du client de bureau Buzz et des identités Nostr",[430,5214,5215,5216,5220],{},"Téléchargez l'application de bureau Buzz depuis ",[444,5217,5218],{"href":5218,"rel":5219},"https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz\u002Freleases",[448]," et lancez-la. Remplissez les détails du profil jusqu'à atteindre la page \"Join or create a community\".",[430,5222,5223],{},[433,5224],{"alt":5225,"src":5226},"Écran de configuration initiale du client de bureau Buzz pour rejoindre ou créer une communauté","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-setup-community.webp",[430,5228,5229],{},"Cliquez sur \"Join a community\" et copiez votre clé publique.",[430,5231,5232],{},[433,5233],{"alt":5234,"src":5235},"Affichage du client Buzz montrant l'identité de clé publique avant de rejoindre la communauté","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-join-community-public-key.webp",[430,5237,5238,5239,5241],{},"Exécutez la commande suivante sur le ",[441,5240,2685],{}," pour vous ajouter en tant que premier membre :",[920,5243,5245],{"className":1029,"code":5244,"language":1031,"meta":425,"style":425},"docker compose exec relay buzz-admin add-member --pubkey npub1yourkeyhere\n",[495,5246,5247],{"__ignoreMap":425},[928,5248,5249,5251,5253,5255,5257,5259,5261,5263],{"class":930,"line":931},[928,5250,1171],{"class":1038},[928,5252,1174],{"class":1042},[928,5254,1177],{"class":1042},[928,5256,1180],{"class":1042},[928,5258,1183],{"class":1042},[928,5260,1186],{"class":1042},[928,5262,1189],{"class":1042},[928,5264,5265],{"class":1042}," npub1yourkeyhere\n",[430,5267,3185,5268,5271],{},[495,5269,5270],{},"wss:\u002F\u002Fbuzz.pafor.me"," comme URL de communauté et cliquez sur \"Next\".",[430,5273,5274],{},[433,5275],{"alt":5276,"src":5277},"Saisie de l'URL du relais communautaire auto-hébergé dans l'application de bureau Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-input-community-url.webp",[430,5279,5280],{},"Saisissez un nom et cliquez sur le bouton Next.",[430,5282,5283],{},[433,5284],{"alt":5285,"src":5286},"Écran de configuration du profil dans l'application Buzz pour saisir le nom d'affichage","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-profile-name-input.webp",[876,5288,5290],{"id":5289},"canaux-et-agents","Canaux et Agents",[430,5292,5293],{},"Les canaux sont des groupes de tâches ou de projets. Créez un canal par tâche ou projet et invitez-y les humains et les agents.",[430,5295,5296],{},"Tout ce qui se trouve dans un canal est partagé automatiquement, éliminant ainsi le besoin de briefer chaque membre individuellement. Chaque agent peut être mentionné à l'aide de @ et lit les messages pertinents. De plus, les agents peuvent se @-mentionner entre eux.",[430,5298,5299],{},"Envoyons un message privé (DM) à un agent préconfiguré",[430,5301,5302],{},[433,5303],{"alt":5304,"src":5305},"Envoi d'un message direct à un agent IA dans le client de bureau collaboratif Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-dm-agent.webp",[430,5307,5308],{},"Créons un canal et ajoutons-y des agents",[430,5310,5311],{},[433,5312],{"alt":5313,"src":5314},"Création d'un nouveau canal de tâche ou de projet dans l'application de bureau Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-create-channel-dialog.webp",[430,5316,5317],{},[433,5318],{"alt":5319,"src":5320},"Ajout de membres humains et d'agents IA au canal nouvellement créé","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-add-agents-to-channel.webp",[430,5322,5323],{},[433,5324],{"alt":5325,"src":5326},"Vue du canal actif affichant l'historique des discussions consolidé et les tâches du projet","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-channel-view.webp",[433,5328],{"src":5329,"alt":5330,"style":5331},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-channel-active-agents.webp","Vue détaillée des agents IA actifs intégrés dans le canal du projet collaboratif","max-width: 367px; width: 100%; height: auto;",[876,5333,5335],{"id":5334},"activer-les-environnements-dexécution-runtimes-dagents","Activer les environnements d'exécution (runtimes) d'agents",[430,5337,5338,5339,5342,5343,5346],{},"Les runtimes prédéfinis s'appuient sur l'auto-découverte qui détecte les binaires de lancement (par exemple ",[495,5340,5341],{},"hermes-acp",") dans les répertoires standards comme ",[495,5344,5345],{},"~\u002F.local\u002Fbin",". Si un outil a été installé dans un emplacement non standard, Buzz ne pourra pas le résoudre.",[430,5348,5349,5350,5353],{},"Pour Kimi Code, l'identifiant de l'agent est kimi, et Buzz recherche son binaire dans ",[495,5351,5352],{},"~\u002F.local\u002Fbin\u002Fkimi",". Un lien symbolique fera l'affaire :",[920,5355,5358],{"className":5356,"code":5357,"language":4635},[4633],"ln -s kimi-cli \u002FUsers\u002F\u003Cuser>\u002F.local\u002Fbin\u002Fkimi\n",[495,5359,5357],{"__ignoreMap":425},[430,5361,5362],{},"Kimi Code apparaît désormais sous les environnements d'exécution des agents.",[430,5364,5365],{},[433,5366],{"alt":5367,"src":5368},"Paramètres de l'application Buzz affichant les runtimes d'agents IA configurés, y compris Kimi","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-settings-agent-runtimes-list.webp",[876,5370,5372],{"id":5371},"projets-et-dépôts","Projets et Dépôts",[430,5374,5375,5376,5379],{},"Activez d'abord la fonctionnalité '",[441,5377,5378],{},"Projects","' dans Settings → Experiments :",[430,5381,5382],{},[433,5383],{"alt":5384,"src":5385},"Activation de la fonctionnalité expérimentale Projects dans l'onglet des paramètres de Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-settings-experiments-projects.webp",[430,5387,5388,5389,5391],{},"Actuellement, un projet doit être créé à l'aide de ",[495,5390,1201],{}," (bien que la création directe de projets à partir de l'interface utilisateur soit prévue pour une version ultérieure).",[2153,5393,5395],{"id":5394},"installer-buzz-cli","Installer buzz-cli",[430,5397,5398,5399,4735,5401,886],{},"Exécutez les commandes suivantes pour installer ",[495,5400,1201],{},[441,5402,2685],{},[920,5404,5406],{"className":1029,"code":5405,"language":1031,"meta":425,"style":425},"sudo apt install cargo\ncd ~\u002Fbuzz\ncargo install --path crates\u002Fbuzz-cli\necho 'export PATH=\"$HOME\u002F.cargo\u002Fbin:$PATH\"' >> ~\u002F.bashrc && source ~\u002F.bashrc\n",[495,5407,5408,5419,5426,5439],{"__ignoreMap":425},[928,5409,5410,5412,5414,5416],{"class":930,"line":931},[928,5411,1886],{"class":1038},[928,5413,4467],{"class":1042},[928,5415,4488],{"class":1042},[928,5417,5418],{"class":1042}," cargo\n",[928,5420,5421,5423],{"class":930,"line":1058},[928,5422,2809],{"class":959},[928,5424,5425],{"class":1042}," ~\u002Fbuzz\n",[928,5427,5428,5431,5433,5436],{"class":930,"line":1065},[928,5429,5430],{"class":1038},"cargo",[928,5432,4488],{"class":1042},[928,5434,5435],{"class":1042}," --path",[928,5437,5438],{"class":1042}," crates\u002Fbuzz-cli\n",[928,5440,5441,5443,5446,5449,5452,5455,5458,5461,5464],{"class":930,"line":1072},[928,5442,4414],{"class":959},[928,5444,5445],{"class":942}," '",[928,5447,5448],{"class":1042},"export PATH=\"$HOME\u002F.cargo\u002Fbin:$PATH\"",[928,5450,5451],{"class":942},"'",[928,5453,5454],{"class":942}," >>",[928,5456,5457],{"class":1042}," ~\u002F.bashrc",[928,5459,5460],{"class":942}," &&",[928,5462,5463],{"class":959}," source",[928,5465,5466],{"class":1042}," ~\u002F.bashrc\n",[430,5468,5469,5470,5472,5473,5475],{},"Générez une paire de clés privée et publique à l'aide de l'outil en ligne ou de ",[495,5471,1201],{},". Cette paire constitue l'identité de ",[495,5474,1201],{}," sur le relais Nostr.",[920,5477,5479],{"className":1029,"code":5478,"language":1031,"meta":425,"style":425},"docker run --rm --entrypoint \u002Fusr\u002Flocal\u002Fbin\u002Fbuzz-admin ghcr.io\u002Fblock\u002Fbuzz:main generate-key\n\n# Use the generated Public Key\ndocker compose exec relay buzz-admin add-member --pubkey generated_Public_key\n",[495,5480,5481,5503,5507,5512],{"__ignoreMap":425},[928,5482,5483,5485,5488,5491,5494,5497,5500],{"class":930,"line":931},[928,5484,1171],{"class":1038},[928,5486,5487],{"class":1042}," run",[928,5489,5490],{"class":1042}," --rm",[928,5492,5493],{"class":1042}," --entrypoint",[928,5495,5496],{"class":1042}," \u002Fusr\u002Flocal\u002Fbin\u002Fbuzz-admin",[928,5498,5499],{"class":1042}," ghcr.io\u002Fblock\u002Fbuzz:main",[928,5501,5502],{"class":1042}," generate-key\n",[928,5504,5505],{"class":930,"line":1058},[928,5506,1062],{"emptyLinePlaceholder":1061},[928,5508,5509],{"class":930,"line":1065},[928,5510,5511],{"class":1068},"# Use the generated Public Key\n",[928,5513,5514,5516,5518,5520,5522,5524,5526,5528],{"class":930,"line":1072},[928,5515,1171],{"class":1038},[928,5517,1174],{"class":1042},[928,5519,1177],{"class":1042},[928,5521,1180],{"class":1042},[928,5523,1183],{"class":1042},[928,5525,1186],{"class":1042},[928,5527,1189],{"class":1042},[928,5529,5530],{"class":1042}," generated_Public_key\n",[430,5532,5533],{},"Configurer la CLI :",[920,5535,5537],{"className":1029,"code":5536,"language":1031,"meta":425,"style":425},"# Copy the Secret key as the BUZZ_PRIVATE_KEY\necho 'export BUZZ_PRIVATE_KEY=\"nsec1...\"'  >> \u002Fhome\u002F\u003Cuser>\u002F.bashrc\n\necho 'export BUZZ_RELAY_URL=\"wss:\u002F\u002Fbuzz.pafor.me\"'  >> \u002Fhome\u002F\u003Cuser>\u002F.bashrc\n",[495,5538,5539,5544,5575,5579],{"__ignoreMap":425},[928,5540,5541],{"class":930,"line":931},[928,5542,5543],{"class":1068},"# Copy the Secret key as the BUZZ_PRIVATE_KEY\n",[928,5545,5546,5548,5550,5553,5555,5558,5561,5564,5567,5570,5572],{"class":930,"line":1058},[928,5547,4414],{"class":959},[928,5549,5445],{"class":942},[928,5551,5552],{"class":1042},"export BUZZ_PRIVATE_KEY=\"nsec1...\"",[928,5554,5451],{"class":942},[928,5556,5557],{"class":942},"  >>",[928,5559,5560],{"class":1042}," \u002Fhome\u002F",[928,5562,5563],{"class":942},"\u003C",[928,5565,5566],{"class":1042},"use",[928,5568,5569],{"class":938},"r",[928,5571,1244],{"class":942},[928,5573,5574],{"class":1042},"\u002F.bashrc\n",[928,5576,5577],{"class":930,"line":1065},[928,5578,1062],{"emptyLinePlaceholder":1061},[928,5580,5581,5583,5585,5588,5590,5592,5594,5596,5598,5600,5602],{"class":930,"line":1072},[928,5582,4414],{"class":959},[928,5584,5445],{"class":942},[928,5586,5587],{"class":1042},"export BUZZ_RELAY_URL=\"wss:\u002F\u002Fbuzz.pafor.me\"",[928,5589,5451],{"class":942},[928,5591,5557],{"class":942},[928,5593,5560],{"class":1042},[928,5595,5563],{"class":942},[928,5597,5566],{"class":1042},[928,5599,5569],{"class":938},[928,5601,1244],{"class":942},[928,5603,5574],{"class":1042},[430,5605,5606,5607,5609],{},"Exécutez la commande suivante pour vérifier que ",[495,5608,1201],{}," est correctement configuré :",[920,5611,5613],{"className":1029,"code":5612,"language":1031,"meta":425,"style":425},"buzz channels list\n",[495,5614,5615],{"__ignoreMap":425},[928,5616,5617,5619,5621],{"class":930,"line":931},[928,5618,1224],{"class":1038},[928,5620,1227],{"class":1042},[928,5622,5623],{"class":1042}," list\n",[430,5625,5626],{},[433,5627],{"alt":5628,"src":5629},"Exécution de commande de terminal vérifiant la configuration de buzz-cli en listant les canaux actifs","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-cli-channels-list-terminal.webp",[2153,5631,5633],{"id":5632},"créer-un-projet-avec-buzz-cli","Créer un projet avec buzz-cli",[920,5635,5637],{"className":1029,"code":5636,"language":1031,"meta":425,"style":425},"# --channel refers to the UUID of the channel\nbuzz repos create --id TestKOA --name 'Display Name' --channel \"bd92b3d1-8fac-441c-a9ac-2b2f3aac5c5b\"\n",[495,5638,5639,5644],{"__ignoreMap":425},[928,5640,5641],{"class":930,"line":931},[928,5642,5643],{"class":1068},"# --channel refers to the UUID of the channel\n",[928,5645,5646,5648,5651,5654,5657,5660,5663,5665,5668,5670,5672,5674,5677],{"class":930,"line":1058},[928,5647,1224],{"class":1038},[928,5649,5650],{"class":1042}," repos",[928,5652,5653],{"class":1042}," create",[928,5655,5656],{"class":1042}," --id",[928,5658,5659],{"class":1042}," TestKOA",[928,5661,5662],{"class":1042}," --name",[928,5664,5445],{"class":942},[928,5666,5667],{"class":1042},"Display Name",[928,5669,5451],{"class":942},[928,5671,1232],{"class":1042},[928,5673,3280],{"class":942},[928,5675,5676],{"class":1042},"bd92b3d1-8fac-441c-a9ac-2b2f3aac5c5b",[928,5678,1950],{"class":942},[430,5680,5681,5682,5684],{},"Un projet ne peut être supprimé que par son propriétaire. Étant donné que le projet \"Display Name\" a été créé par ",[495,5683,1201],{},", qui ne dispose pas de commande de suppression, il ne peut pas être supprimé de cette manière.",[430,5686,5687],{},"Consultez l'application de bureau Buzz pour vérifier que le projet est bien créé.",[430,5689,5690],{},[433,5691],{"alt":5692,"src":5693},"Vue des projets de l'application Buzz confirmant la création réussie du projet","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-project-view.webp",[430,5695,5696],{},"Une fois qu'un projet est disponible dans Projects, d'autres projets peuvent être ajoutés en utilisant le bouton \"+\" dans le coin supérieur droit.",[430,5698,5699],{},[433,5700],{"alt":5701,"src":5702},"Ajout de nouveaux projets de développement à l'aide de l'icône plus dans le client Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-add-project-button.webp",[2153,5704,5706],{"id":5705},"intégrer-des-dépôts-git-existants","Intégrer des dépôts Git existants",[430,5708,2521,5709,5712,5713,5716,5717,886],{},[495,5710,5711],{},"git-credential-nostr"," sur la machine où se trouvent les dépôts Git. Cela nécessite ",[441,5714,5715],{},"git 2.46+"," et la chaîne d'outils Rust. Référez-vous à ce ",[444,5718,5721],{"href":5719,"rel":5720},"https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz\u002Ftree\u002Fmain\u002Fcrates\u002Fgit-credential-nostr",[448],"Readme",[920,5723,5725],{"className":1029,"code":5724,"language":1031,"meta":425,"style":425},"cargo install --path crates\u002Fgit-credential-nostr\n",[495,5726,5727],{"__ignoreMap":425},[928,5728,5729,5731,5733,5735],{"class":930,"line":931},[928,5730,5430],{"class":1038},[928,5732,4488],{"class":1042},[928,5734,5435],{"class":1042},[928,5736,5737],{"class":1042}," crates\u002Fgit-credential-nostr\n",[430,5739,5740,5741,5743],{},"Configurez ",[495,5742,5711],{}," pour l'autorisation de relais Buzz :",[920,5745,5747],{"className":1029,"code":5746,"language":1031,"meta":425,"style":425},"# 1. Register the helper and enable per-path credentials.\ngit config --global credential.helper nostr\ngit config --global credential.useHttpPath true\n\n# 2. Store your nsec in a key file (must be 0600). Replace \"nsec1...\" with your private key\nmkdir -p ~\u002F.nostr\necho \"nsec1...\" > ~\u002F.nostr\u002Fkey && chmod 600 ~\u002F.nostr\u002Fkey\ngit config --global nostr.keyfile ~\u002F.nostr\u002Fkey\n",[495,5748,5749,5754,5770,5783,5787,5792,5801,5828],{"__ignoreMap":425},[928,5750,5751],{"class":930,"line":931},[928,5752,5753],{"class":1068},"# 1. Register the helper and enable per-path credentials.\n",[928,5755,5756,5758,5761,5764,5767],{"class":930,"line":1058},[928,5757,2785],{"class":1038},[928,5759,5760],{"class":1042}," config",[928,5762,5763],{"class":1042}," --global",[928,5765,5766],{"class":1042}," credential.helper",[928,5768,5769],{"class":1042}," nostr\n",[928,5771,5772,5774,5776,5778,5781],{"class":930,"line":1065},[928,5773,2785],{"class":1038},[928,5775,5760],{"class":1042},[928,5777,5763],{"class":1042},[928,5779,5780],{"class":1042}," credential.useHttpPath",[928,5782,1375],{"class":942},[928,5784,5785],{"class":930,"line":1072},[928,5786,1062],{"emptyLinePlaceholder":1061},[928,5788,5789],{"class":930,"line":1918},[928,5790,5791],{"class":1068},"# 2. Store your nsec in a key file (must be 0600). Replace \"nsec1...\" with your private key\n",[928,5793,5794,5796,5798],{"class":930,"line":1923},[928,5795,5182],{"class":1038},[928,5797,5185],{"class":1042},[928,5799,5800],{"class":1042}," ~\u002F.nostr\n",[928,5802,5803,5805,5807,5810,5812,5814,5817,5819,5822,5825],{"class":930,"line":1929},[928,5804,4414],{"class":959},[928,5806,3280],{"class":942},[928,5808,5809],{"class":1042},"nsec1...",[928,5811,3688],{"class":942},[928,5813,4448],{"class":942},[928,5815,5816],{"class":1042}," ~\u002F.nostr\u002Fkey",[928,5818,5460],{"class":942},[928,5820,5821],{"class":1038}," chmod",[928,5823,5824],{"class":2952}," 600",[928,5826,5827],{"class":1042}," ~\u002F.nostr\u002Fkey\n",[928,5829,5830,5832,5834,5836,5839],{"class":930,"line":2265},[928,5831,2785],{"class":1038},[928,5833,5760],{"class":1042},[928,5835,5763],{"class":1042},[928,5837,5838],{"class":1042}," nostr.keyfile",[928,5840,5827],{"class":1042},[430,5842,5843],{},"Créez un dépôt sur le relais Buzz :",[920,5845,5848],{"className":5846,"code":5847,"language":4635},[4633],"buzz repos create --id koa-email-routing --name \"KOA Email Routing\" --clone \"https:\u002F\u002Fbuzz.pafor.me\u002Fgit\u002F\u003Cpub_key>\u002Fkoa-email-routing\" --nostr-relay \"wss:\u002F\u002Fbuzz.pafor.me\"\n",[495,5849,5847],{"__ignoreMap":425},[430,5851,5852,5853,5856,5857,5860],{},"Lors de votre premier ",[495,5854,5855],{},"git push",", vous rencontrerez une erreur ",[495,5858,5859],{},"remote: missing Authorization header",". Pour résoudre ce problème, vous devez lier l'ID du dépôt à un canal Buzz, car l'appartenance à un canal dicte les privilèges d'écriture de Git (ACL) :",[920,5862,5864],{"className":1029,"code":5863,"language":1031,"meta":425,"style":425},"buzz repos bind --id koa-email-routing --channel \u003CCHANNEL_UUID>\n\n# push the code again\ngit push\n",[495,5865,5866,5891,5895,5900],{"__ignoreMap":425},[928,5867,5868,5870,5872,5875,5877,5880,5882,5884,5886,5888],{"class":930,"line":931},[928,5869,1224],{"class":1038},[928,5871,5650],{"class":1042},[928,5873,5874],{"class":1042}," bind",[928,5876,5656],{"class":1042},[928,5878,5879],{"class":1042}," koa-email-routing",[928,5881,1232],{"class":1042},[928,5883,1235],{"class":942},[928,5885,1238],{"class":1042},[928,5887,1241],{"class":938},[928,5889,5890],{"class":942},">\n",[928,5892,5893],{"class":930,"line":1058},[928,5894,1062],{"emptyLinePlaceholder":1061},[928,5896,5897],{"class":930,"line":1065},[928,5898,5899],{"class":1068},"# push the code again\n",[928,5901,5902,5904],{"class":930,"line":1072},[928,5903,2785],{"class":1038},[928,5905,5906],{"class":1042}," push\n",[430,5908,5909,5910,5912],{},"La vérification du projet dans l'application de bureau Buzz affiche les éléments suivants, car l'application requiert ",[441,5911,5715],{}," — le lancement direct de l'application peut charger une version plus ancienne de Git :",[430,5914,5915],{},[433,5916],{"alt":5917,"src":5918},"Le client Buzz affiche une erreur de chargement Git en raison d'une version Git locale obsolète inférieure à 2.46","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-git-version-error.webp",[430,5920,5921,5922,5925,5926,461],{},"Exportez le PATH via ",[495,5923,5924],{},"launchctl setenv PATH \"\u002Fopt\u002Fhomebrew\u002Fbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fbin:\u002Fbin:\u002Fusr\u002Fsbin:\u002Fsbin\""," dans le profil du shell et lancez l'application Buzz depuis le shell. Référez-vous à ce ",[444,5927,5930],{"href":5928,"rel":5929},"https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz\u002Fissues\u002F5348",[448],"ticket",[920,5932,5934],{"className":1029,"code":5933,"language":1031,"meta":425,"style":425},"open -a Buzz\n",[495,5935,5936],{"__ignoreMap":425},[928,5937,5938,5941,5944],{"class":930,"line":931},[928,5939,5940],{"class":1038},"open",[928,5942,5943],{"class":1042}," -a",[928,5945,5946],{"class":1042}," Buzz\n",[430,5948,5949],{},"Consultez à nouveau l'onglet Projects dans l'application Buzz, les détails du dépôt sont maintenant chargés.",[430,5951,5952],{},[433,5953],{"alt":5954,"src":5955},"Interface de bureau Buzz avec les détails du dépôt Git et les journaux de commit chargés avec succès","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-repository-details-loaded.webp",[474,5957,5959],{"id":5958},"synchroniser-les-agents-ia-avec-lapplication-mobile-buzz-via-un-code-qr","Synchroniser les agents IA avec l'application mobile Buzz via un code QR",[430,5961,5962,5963,5966],{},"Le couplage de l'application mobile Buzz accepte uniquement le protocole HTTPS et ",[495,5964,5965],{},"buzz-pair-relay"," n'est pas démarré par défaut sur le VPS.",[920,5968,5970],{"className":1029,"code":5969,"language":1031,"meta":425,"style":425},"cd ~\u002Fbuzz\ncargo install --path crates\u002Fbuzz-pair-relay\n",[495,5971,5972,5978],{"__ignoreMap":425},[928,5973,5974,5976],{"class":930,"line":931},[928,5975,2809],{"class":959},[928,5977,5425],{"class":1042},[928,5979,5980,5982,5984,5986],{"class":930,"line":1058},[928,5981,5430],{"class":1038},[928,5983,4488],{"class":1042},[928,5985,5435],{"class":1042},[928,5987,5988],{"class":1042}," crates\u002Fbuzz-pair-relay\n",[430,5990,5991,5992,5995,5996,886],{},"Ajoutez ce qui suit à ",[495,5993,5994],{},"compose.yml"," pour démarrer le service ",[495,5997,5965],{},[920,5999,6001],{"className":1337,"code":6000,"language":1339,"meta":425,"style":425},"  pair:\n    image: ${BUZZ_IMAGE:-ghcr.io\u002Fblock\u002Fbuzz:main}\n    entrypoint: [\"\u002Fusr\u002Flocal\u002Fbin\u002Fbuzz-pair-relay\"]\n    environment:\n      BUZZ_PAIR_RELAY_BIND_ADDR: 0.0.0.0:5000\n    ports:\n      - \"${BUZZ_PAIR_RELAY_PORT:-5000}:5000\"\n    restart: unless-stopped\n    networks:\n      [buzz-net]\n",[495,6002,6003,6010,6019,6039,6045,6055,6061,6072,6080,6086],{"__ignoreMap":425},[928,6004,6005,6008],{"class":930,"line":931},[928,6006,6007],{"class":1349},"  pair",[928,6009,1364],{"class":942},[928,6011,6012,6014,6016],{"class":930,"line":1058},[928,6013,3260],{"class":1349},[928,6015,1353],{"class":942},[928,6017,6018],{"class":1042}," ${BUZZ_IMAGE:-ghcr.io\u002Fblock\u002Fbuzz:main}\n",[928,6020,6021,6024,6026,6029,6031,6034,6036],{"class":930,"line":1065},[928,6022,6023],{"class":1349},"    entrypoint",[928,6025,1353],{"class":942},[928,6027,6028],{"class":942}," [",[928,6030,3688],{"class":942},[928,6032,6033],{"class":1042},"\u002Fusr\u002Flocal\u002Fbin\u002Fbuzz-pair-relay",[928,6035,3688],{"class":942},[928,6037,6038],{"class":942},"]\n",[928,6040,6041,6043],{"class":930,"line":1072},[928,6042,3290],{"class":1349},[928,6044,1364],{"class":942},[928,6046,6047,6050,6052],{"class":930,"line":1918},[928,6048,6049],{"class":1349},"      BUZZ_PAIR_RELAY_BIND_ADDR",[928,6051,1353],{"class":942},[928,6053,6054],{"class":1042}," 0.0.0.0:5000\n",[928,6056,6057,6059],{"class":930,"line":1923},[928,6058,3270],{"class":1349},[928,6060,1364],{"class":942},[928,6062,6063,6065,6067,6070],{"class":930,"line":1929},[928,6064,3277],{"class":942},[928,6066,3280],{"class":942},[928,6068,6069],{"class":1042},"${BUZZ_PAIR_RELAY_PORT:-5000}:5000",[928,6071,1950],{"class":942},[928,6073,6074,6076,6078],{"class":930,"line":2265},[928,6075,3352],{"class":1349},[928,6077,1353],{"class":942},[928,6079,3357],{"class":1042},[928,6081,6082,6084],{"class":930,"line":2276},[928,6083,5031],{"class":1349},[928,6085,1364],{"class":942},[928,6087,6088,6091,6094],{"class":930,"line":2372},[928,6089,6090],{"class":942},"      [",[928,6092,6093],{"class":1042},"buzz-net",[928,6095,6038],{"class":942},[430,6097,3185,6098,575,6101,6104,6105,886],{},[495,6099,6100],{},"BUZZ_PAIRING_RELAY_URL",[495,6102,6103],{},"BUZZ_PAIR_RELAY_PORT"," au fichier ",[495,6106,2839],{},[920,6108,6111],{"className":6109,"code":6110,"language":4635},[4633],"BUZZ_PAIRING_RELAY_URL=wss:\u002F\u002Fbuzz.pafor.me\u002Fpair\nBUZZ_PAIR_RELAY_PORT=5000\n",[495,6112,6110],{"__ignoreMap":425},[430,6114,6115,6116,6119],{},"Rendez-vous dans la section '",[441,6117,6118],{},"Mobile","' des paramètres de bureau de Buzz :",[430,6121,6122],{},[433,6123],{"alt":6124,"src":6125},"Boîte de dialogue des paramètres dans l'application Buzz affichant l'onglet de configuration des appareils mobiles","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-settings-mobile-tab.webp",[430,6127,6128],{},"Cliquez sur \"Start pairing\" — un code QR est généré ; scannez ce code QR avec l'application Buzz sur votre appareil mobile. Il sera couplé après avoir cliqué sur \"Code Match\".",[430,6130,6131],{},[433,6132],{"alt":6133,"src":6134},"Génération d'un code QR de couplage sécurisé dans le client de bureau pour la synchronisation mobile Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-pairing-qr-code.webp",[430,6136,6137],{},"Les agents sur l'application mobile Buzz sont disponibles uniquement s'ils s'exécutent sur l'application de bureau Buzz. La machine de bureau doit être active pour que les agents fonctionnent.",[430,6139,6140],{},[433,6141],{"alt":6142,"src":6143},"Interface de l'application mobile Buzz présentant les agents IA actifs synchronisés","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-mobile-app-active-agents.webp",[474,6145,6147],{"id":6146},"mot-de-la-fin","Mot de la fin",[430,6149,6150],{},"Bien que Buzz soit encore trop jeune pour les environnements de production à grande échelle, avec plusieurs bogues et limitations de l'interface utilisateur, il s'agit d'une expérience passionnante pour les petites équipes et les développeurs solo. Il offre un aperçu de ce à quoi ressemble réellement un espace de travail collaboratif axé sur l'IA.",[474,6152,4023],{"id":1606},[485,6154,6155,6162,6169,6176],{},[488,6156,6157],{},[444,6158,6161],{"href":6159,"rel":6160},"https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz",[448],"Buzz releases",[488,6163,6164],{},[444,6165,6168],{"href":6166,"rel":6167},"https:\u002F\u002Fblock.xyz\u002Finside\u002Fintroducing-buzz-where-humans-and-agents-work-together",[448],"Introducing Buzz",[488,6170,6171],{},[444,6172,6175],{"href":6173,"rel":6174},"https:\u002F\u002Fwww.hostinger.com\u002Ftutorials\u002Fwhat-is-buzz",[448],"What is buzz",[488,6177,6178],{},[444,6179,6182],{"href":6180,"rel":6181},"https:\u002F\u002Fmiget.com\u002Fblog\u002Fhow-to-self-host-buzz",[448],"How to self-host Buzz (Miget)",[1635,6184,6185],{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}",{"title":425,"searchDepth":1058,"depth":1065,"links":6187},[6188,6189,6190,6204,6213,6214,6215],{"id":4113,"depth":1058,"text":4114},{"id":4158,"depth":1058,"text":4159},{"id":4206,"depth":1058,"text":4207,"children":6191},[6192,6193,6197,6198,6199,6203],{"id":4210,"depth":1065,"text":4211},{"id":4238,"depth":1065,"text":4239,"children":6194},[6195,6196],{"id":4242,"depth":1072,"text":4243},{"id":4340,"depth":1072,"text":4341},{"id":4358,"depth":1065,"text":4359},{"id":4575,"depth":1065,"text":4576},{"id":4721,"depth":1065,"text":4722,"children":6200},[6201,6202],{"id":4725,"depth":1072,"text":4726},{"id":5108,"depth":1072,"text":5109},{"id":5171,"depth":1065,"text":5172},{"id":5211,"depth":1058,"text":5212,"children":6205},[6206,6207,6208],{"id":5289,"depth":1065,"text":5290},{"id":5334,"depth":1065,"text":5335},{"id":5371,"depth":1065,"text":5372,"children":6209},[6210,6211,6212],{"id":5394,"depth":1072,"text":5395},{"id":5632,"depth":1072,"text":5633},{"id":5705,"depth":1072,"text":5706},{"id":5958,"depth":1058,"text":5959},{"id":6146,"depth":1058,"text":6147},{"id":1606,"depth":1058,"text":4023},[1656,1655,1224],"2026-09-08",{"schemaOrg":6219,"robots":1689,"sitemap":6238},[6220,6221],{"@type":1666,"headline":455,"description":465,"image":466},{"@type":1668,"name":455,"description":465,"image":466,"step":6222},[6223,6226,6229,6232,6235],{"@type":1671,"name":6224,"text":6225},"Étape 1: Configuration de Cloudflare","Créer un jeton API Cloudflare et configurer les paramètres DNS.",{"@type":1671,"name":6227,"text":6228},"Étape 2: Installer Docker","Configurer et installer Docker Engine sur le VPS Ubuntu.",{"@type":1671,"name":6230,"text":6231},"Étape 3: Cloner et configurer","Cloner le dépôt et configurer les variables compose.",{"@type":1671,"name":6233,"text":6234},"Étape 4: Intégration de Caddy","Créer une image Caddy personnalisée avec le module de défi Cloudflare DNS.",{"@type":1671,"name":6236,"text":6237},"Étape 5: Sauvegarde automatisée","Configurer une tâche cron pour sauvegarder automatiquement PostgreSQL.",{"lastmod":6239},"2026-09-03",{"title":6241,"description":465,"ogTitle":455,"ogDescription":465,"twitterTitle":455,"twitterDescription":465},"Comment auto-héberger le relay Buzz de Block sur VPS Ubuntu","fr\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",[1696,6244,1099,6245,6246],"Docker","Caddy","Cloudflare","my_-e5EU4v_YuR3HYC8IMTI57lZWOq-Sf9dWjKN1Thk",{"id":6249,"title":6250,"author":1698,"body":6251,"category":8118,"date":8120,"description":8121,"extension":1660,"image":8122,"imageAlt":8123,"isPublished":1061,"meta":8124,"minRead":5044,"navigation":1061,"path":123,"seo":8130,"stem":8131,"tags":8132,"updatedAt":6239,"__hash__":8134},"article\u002Ffr\u002Farticle\u002Fself-hosted-travel-planner-trek.md","Hébergez vos itinéraires de voyage avec TREK et Docker",{"type":427,"value":6252,"toc":8077},[6253,6256,6259,6262,6266,6270,6412,6416,6422,6441,6444,6448,6552,6563,6566,6571,6574,6585,6589,6593,6596,6599,6632,6636,6639,6673,6676,6716,6719,6724,6735,6739,6746,6750,6753,6846,6850,6855,6859,6866,6870,6873,6891,6901,6905,6908,6918,6922,6926,6935,6939,6943,6946,6950,6954,6957,6962,6965,6970,6976,6980,6984,6987,6991,7005,7010,7016,7021,7025,7028,7033,7038,7041,7048,7052,7055,7058,7068,7075,7080,7086,7091,7095,7100,7105,7108,7113,7117,7123,7127,7132,7136,7139,7142,7147,7152,7157,7161,7168,7173,7178,7183,7188,7192,7197,7202,7208,7212,7215,7219,7225,7230,7235,7241,7246,7251,7256,7268,7272,7277,7298,7303,7306,7310,7313,7318,7321,7369,7373,7380,7386,7391,7397,7402,7408,7413,7419,7422,7427,7433,7438,7444,7448,7454,7459,7464,7468,7472,7475,7479,7482,7489,7493,7500,7504,7515,7518,7522,7526,7536,7545,7550,7557,7562,7569,7573,7576,7741,7747,7751,7754,7759,7762,7768,7772,7779,7783,7786,7791,7798,7803,7807,7817,7888,7903,7906,7911,7915,7919,7929,8005,8016,8019,8023,8027,8030,8034,8037,8040,8049,8051,8074],[430,6254,6255],{},"La partie la plus fastidieuse de la planification d'un voyage réside dans la dispersion des informations : les fichiers PDF de réservation de vol, les confirmations d'hôtel, les discussions avec les compagnons de voyage et les listes de lieux à visiter se retrouvent éparpillés. Et au moment de calculer les dépenses totales et de diviser la facture, un effort considérable est nécessaire pour parcourir toutes ces données de voyage.",[430,6257,6258],{},"TREK est un planificateur de voyage open source qui peut être auto-hébergé, regroupant votre itinéraire, vos réservations, votre budget et vos listes de bagages au même endroit. Le serveur MCP intégré permet aux agents d'IA (tels que Claude Desktop) d'interagir et de manipuler directement vos données de voyage.",[430,6260,6261],{},"Ce guide vous accompagnera étape par étape, depuis le déploiement jusqu'à la gestion complète d'un voyage réel du début à la fin.",[876,6263,6265],{"id":6264},"_1-comment-déployer-le-planificateur-de-voyage-trek-avec-docker","1. Comment déployer le planificateur de voyage TREK avec Docker",[2153,6267,6269],{"id":6268},"installer-docker-sur-un-vps-ubuntu","Installer Docker sur un VPS Ubuntu",[920,6271,6273],{"className":1029,"code":6272,"language":1031,"meta":425,"style":425},"# Add Docker's official GPG key and set up the Docker repository\ncurl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fusr\u002Fshare\u002Fkeyrings\u002Fdocker-archive-keyring.gpg\n\n# Add the official Docker repository\necho \"deb [arch=amd64 signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fdocker-archive-keyring.gpg] https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu $(lsb_release -cs) stable\" | sudo tee \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list > \u002Fdev\u002Fnull\n\n# Update package list\nsudo apt update\n\n# Install Docker Engine, Docker Community Edition, and containerd runtime\nsudo apt install docker-ce docker-ce-cli containerd.io -y\n\n# Verify docker is installed\ndocker --version\n\n# Starts automatically when your system boots\nsudo systemctl enable docker\n",[495,6274,6275,6279,6299,6303,6307,6339,6343,6347,6355,6359,6363,6379,6383,6387,6393,6397,6402],{"__ignoreMap":425},[928,6276,6277],{"class":930,"line":931},[928,6278,4372],{"class":1068},[928,6280,6281,6283,6285,6287,6289,6291,6293,6295,6297],{"class":930,"line":1058},[928,6282,2983],{"class":1038},[928,6284,4379],{"class":1042},[928,6286,4382],{"class":1042},[928,6288,4385],{"class":942},[928,6290,4388],{"class":1038},[928,6292,4391],{"class":1042},[928,6294,4394],{"class":1042},[928,6296,4397],{"class":1042},[928,6298,4400],{"class":1042},[928,6300,6301],{"class":930,"line":1065},[928,6302,1062],{"emptyLinePlaceholder":1061},[928,6304,6305],{"class":930,"line":1072},[928,6306,4409],{"class":1068},[928,6308,6309,6311,6313,6315,6317,6319,6321,6323,6325,6327,6329,6331,6333,6335,6337],{"class":930,"line":1918},[928,6310,4414],{"class":959},[928,6312,3280],{"class":942},[928,6314,4419],{"class":1042},[928,6316,4422],{"class":942},[928,6318,4425],{"class":1038},[928,6320,4428],{"class":1042},[928,6322,4431],{"class":942},[928,6324,4434],{"class":1042},[928,6326,3688],{"class":942},[928,6328,4385],{"class":942},[928,6330,4388],{"class":1038},[928,6332,3811],{"class":1042},[928,6334,4445],{"class":1042},[928,6336,4448],{"class":942},[928,6338,4451],{"class":1042},[928,6340,6341],{"class":930,"line":1923},[928,6342,1062],{"emptyLinePlaceholder":1061},[928,6344,6345],{"class":930,"line":1929},[928,6346,4460],{"class":1068},[928,6348,6349,6351,6353],{"class":930,"line":2265},[928,6350,1886],{"class":1038},[928,6352,4467],{"class":1042},[928,6354,4470],{"class":1042},[928,6356,6357],{"class":930,"line":2276},[928,6358,1062],{"emptyLinePlaceholder":1061},[928,6360,6361],{"class":930,"line":2372},[928,6362,4479],{"class":1068},[928,6364,6365,6367,6369,6371,6373,6375,6377],{"class":930,"line":1691},[928,6366,1886],{"class":1038},[928,6368,4467],{"class":1042},[928,6370,4488],{"class":1042},[928,6372,4491],{"class":1042},[928,6374,4494],{"class":1042},[928,6376,4497],{"class":1042},[928,6378,4500],{"class":1042},[928,6380,6381],{"class":930,"line":2383},[928,6382,1062],{"emptyLinePlaceholder":1061},[928,6384,6385],{"class":930,"line":2388},[928,6386,4529],{"class":1068},[928,6388,6389,6391],{"class":930,"line":2394},[928,6390,1171],{"class":1038},[928,6392,3611],{"class":1042},[928,6394,6395],{"class":930,"line":3349},[928,6396,1062],{"emptyLinePlaceholder":1061},[928,6398,6399],{"class":930,"line":3360},[928,6400,6401],{"class":1068},"# Starts automatically when your system boots\n",[928,6403,6404,6406,6408,6410],{"class":930,"line":3365},[928,6405,1886],{"class":1038},[928,6407,1889],{"class":1042},[928,6409,2017],{"class":1042},[928,6411,4520],{"class":1042},[2153,6413,6415],{"id":6414},"générer-la-clé-de-chiffrement","Générer la clé de chiffrement",[430,6417,6418,6419,6421],{},"TREK utilise une clé pour chiffrer les données sensibles. Utilisez la commande suivante ou cet ",[444,6420,4662],{"href":2859}," pour générer votre clé de chiffrement :",[920,6423,6425],{"className":1029,"code":6424,"language":1031,"meta":425,"style":425},"openssl rand -hex 32\n",[495,6426,6427],{"__ignoreMap":425},[928,6428,6429,6432,6435,6438],{"class":930,"line":931},[928,6430,6431],{"class":1038},"openssl",[928,6433,6434],{"class":1042}," rand",[928,6436,6437],{"class":1042}," -hex",[928,6439,6440],{"class":2952}," 32\n",[430,6442,6443],{},"Conservez-la en lieu sûr ; sa perte signifie la perte d'accès à vos données chiffrées.",[2153,6445,6447],{"id":6446},"démarrer-le-conteneur","Démarrer le conteneur",[920,6449,6451],{"className":1029,"code":6450,"language":1031,"meta":425,"style":425},"docker run -d \\\n  --name trek \\\n  -p 3000:3000 \\\n  -e ENCRYPTION_KEY=\"\u003Cgenerated_key>\" \\\n  -e APP_URL=\"https:\u002F\u002Ftrek.pafor.me\" \\\n  -v .\u002Fdata:\u002Fapp\u002Fdata \\\n  -v .\u002Fuploads:\u002Fapp\u002Fuploads \\\n  --restart unless-stopped \\\n  mauriceboe\u002Ftrek:latest\n",[495,6452,6453,6465,6475,6485,6502,6518,6528,6537,6547],{"__ignoreMap":425},[928,6454,6455,6457,6459,6462],{"class":930,"line":931},[928,6456,1171],{"class":1038},[928,6458,5487],{"class":1042},[928,6460,6461],{"class":1042}," -d",[928,6463,6464],{"class":938}," \\\n",[928,6466,6467,6470,6473],{"class":930,"line":1058},[928,6468,6469],{"class":1042},"  --name",[928,6471,6472],{"class":1042}," trek",[928,6474,6464],{"class":938},[928,6476,6477,6480,6483],{"class":930,"line":1065},[928,6478,6479],{"class":1042},"  -p",[928,6481,6482],{"class":1042}," 3000:3000",[928,6484,6464],{"class":938},[928,6486,6487,6490,6493,6495,6498,6500],{"class":930,"line":1072},[928,6488,6489],{"class":1042},"  -e",[928,6491,6492],{"class":1042}," ENCRYPTION_KEY=",[928,6494,3688],{"class":942},[928,6496,6497],{"class":1042},"\u003Cgenerated_key>",[928,6499,3688],{"class":942},[928,6501,6464],{"class":938},[928,6503,6504,6506,6509,6511,6514,6516],{"class":930,"line":1918},[928,6505,6489],{"class":1042},[928,6507,6508],{"class":1042}," APP_URL=",[928,6510,3688],{"class":942},[928,6512,6513],{"class":1042},"https:\u002F\u002Ftrek.pafor.me",[928,6515,3688],{"class":942},[928,6517,6464],{"class":938},[928,6519,6520,6523,6526],{"class":930,"line":1923},[928,6521,6522],{"class":1042},"  -v",[928,6524,6525],{"class":1042}," .\u002Fdata:\u002Fapp\u002Fdata",[928,6527,6464],{"class":938},[928,6529,6530,6532,6535],{"class":930,"line":1929},[928,6531,6522],{"class":1042},[928,6533,6534],{"class":1042}," .\u002Fuploads:\u002Fapp\u002Fuploads",[928,6536,6464],{"class":938},[928,6538,6539,6542,6545],{"class":930,"line":2265},[928,6540,6541],{"class":1042},"  --restart",[928,6543,6544],{"class":1042}," unless-stopped",[928,6546,6464],{"class":938},[928,6548,6549],{"class":930,"line":2276},[928,6550,6551],{"class":1042},"  mauriceboe\u002Ftrek:latest\n",[485,6553,6554],{},[488,6555,6556,6562],{},[441,6557,6558,6561],{},[495,6559,6560],{},"APP_URL"," doit être correctement configuré"," — le flux de découverte OAuth du serveur MCP en dépend. Configurez-le dès le départ avec votre adresse HTTPS publique définitive.",[430,6564,6565],{},"Le premier lancement prend un certain temps pour télécharger l'image :",[433,6567],{"src":6568,"alt":6569,"style":6570},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-docker-pull-image.webp","Journaux de docker pull et run pour TREK","max-width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,6572,6573],{},"Vérifiez que le conteneur fonctionne :",[920,6575,6577],{"className":1029,"code":6576,"language":1031,"meta":425,"style":425},"docker ps\n",[495,6578,6579],{"__ignoreMap":425},[928,6580,6581,6583],{"class":930,"line":931},[928,6582,1171],{"class":1038},[928,6584,5152],{"class":1042},[433,6586],{"src":6587,"alt":6588,"style":6570},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-docker-ps-status.webp","Vérification de l'état du conteneur en cours d'exécution via docker ps",[876,6590,6592],{"id":6591},"_2-configuration-du-routage-de-domaine-et-ssl-avec-le-reverse-proxy-caddy","2. Configuration du routage de domaine et SSL avec le reverse proxy Caddy",[430,6594,6595],{},"Le protocole HTTPS est indispensable pour les clés de sécurité (passkeys) et OAuth pour MCP. Le nom de domaine est hébergé sur Cloudflare, qui fournit un certificat SSL gratuit et une protection DDoS.",[430,6597,6598],{},"Caddy est configuré comme reverse proxy sécurisé pointant vers le port 3000. Voici un exemple de Caddyfile :",[920,6600,6602],{"className":2898,"code":6601,"language":2900,"meta":425,"style":425},"{$TREK_DOMAIN} {\n  encode zstd gzip\n  reverse_proxy host.docker.internal:3000\n}\n",[495,6603,6604,6615,6619,6628],{"__ignoreMap":425},[928,6605,6606,6608,6611,6613],{"class":930,"line":931},[928,6607,2928],{"class":942},[928,6609,6610],{"class":938},"$TREK_DOMAIN",[928,6612,2934],{"class":942},[928,6614,2937],{"class":942},[928,6616,6617],{"class":930,"line":1058},[928,6618,2942],{"class":938},[928,6620,6621,6623,6625],{"class":930,"line":1065},[928,6622,2947],{"class":938},[928,6624,1353],{"class":942},[928,6626,6627],{"class":2952},"3000\n",[928,6629,6630],{"class":930,"line":1072},[928,6631,2915],{"class":942},[876,6633,6635],{"id":6634},"_3-configuration-initiale-et-configuration-de-ladministrateur-sécurisé","3. Configuration initiale et configuration de l'administrateur sécurisé",[430,6637,6638],{},"Il existe deux façons de créer le compte administrateur :",[485,6640,6641,6652],{},[488,6642,6643,6651],{},[441,6644,6645,575,6648],{},[495,6646,6647],{},"ADMIN_EMAIL",[495,6649,6650],{},"ADMIN_PASSWORD"," sont configurés comme variables d'environnement ; ces valeurs sont utilisées directement.",[488,6653,6654],{},[441,6655,6656,6657,6660,6661,6664,6665,6668,6669,6672],{},"TREK crée l'e-mail ",[495,6658,6659],{},"admin@trek.local",", l'identifiant ",[495,6662,6663],{},"admin"," et un ",[495,6666,6667],{},"mot de passe généré de manière aléatoire et affiché dans les logs du conteneur",". Exécutez ",[495,6670,6671],{},"docker logs trek"," pour le récupérer.",[430,6674,6675],{},"Si vous ne trouvez pas le mot de passe dans les logs, réinitialisez-le :",[920,6677,6679],{"className":1029,"code":6678,"language":1031,"meta":425,"style":425},"docker exec -it -e RESET_ADMIN_EMAIL=admin@trek.local -e RESET_ADMIN_PASSWORD='YourNewPassword' trek node server\u002Freset-admin.js\n",[495,6680,6681],{"__ignoreMap":425},[928,6682,6683,6685,6687,6690,6693,6696,6698,6701,6703,6706,6708,6710,6713],{"class":930,"line":931},[928,6684,1171],{"class":1038},[928,6686,1177],{"class":1042},[928,6688,6689],{"class":1042}," -it",[928,6691,6692],{"class":1042}," -e",[928,6694,6695],{"class":1042}," RESET_ADMIN_EMAIL=admin@trek.local",[928,6697,6692],{"class":1042},[928,6699,6700],{"class":1042}," RESET_ADMIN_PASSWORD=",[928,6702,5451],{"class":942},[928,6704,6705],{"class":1042},"YourNewPassword",[928,6707,5451],{"class":942},[928,6709,6472],{"class":1042},[928,6711,6712],{"class":1042}," node",[928,6714,6715],{"class":1042}," server\u002Freset-admin.js\n",[430,6717,6718],{},"Il vous sera demandé de modifier ce mot de passe lors de votre première connexion.",[433,6720],{"src":6721,"alt":6722,"style":6723},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-initial-login-password-prompt.webp","Invite de connexion initiale et de réinitialisation du mot de passe administrateur","max-width: 215px; width:100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,6725,4254,6726,6729,6730],{},[441,6727,6728],{},"Admin"," et mettez à jour l'adresse e-mail :",[433,6731],{"src":6732,"alt":6733,"style":6734},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-admin-email-update-panel.webp","Configuration d'un e-mail personnalisé dans les paramètres d'administration de TREK","max-width: 700px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[2153,6736,6738],{"id":6737},"_31-sauvegardes-backups","3.1 Sauvegardes (Backups)",[430,6740,6741,6742],{},"Configurez les sauvegardes automatiques avec une politique de rétention dans le panneau d'administration :\n",[433,6743],{"src":6744,"alt":6745,"style":6570},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-admin-backup-retention-policy.webp","Configuration des planifications de sauvegarde automatisées et des règles de rétention",[2153,6747,6749],{"id":6748},"_32-stocker-les-fichiers-téléchargés-sur-cloudflare-r2","3.2 Stocker les fichiers téléchargés sur Cloudflare R2",[430,6751,6752],{},"Le stockage des fichiers transférés, des photos et des sauvegardes dans Cloudflare R2 permet de préserver l'espace disque de votre VPS. TREK prend en charge les backends compatibles S3, et Cloudflare R2 s'y prête parfaitement.",[533,6754,6755,6761,6774,6784,6795,6809,6820,6835],{},[488,6756,6757,6758,461],{},"Créez un bucket R2 nommé ",[495,6759,6760],{},"trek",[488,6762,6763,6764,6767,6768,6769],{},"Dans la section ",[441,6765,6766],{},"Account Details",", trouvez votre ID de compte :","\n  ",[433,6770],{"src":6771,"alt":6772,"style":6773},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fcloudflare-r2-account-details-id.webp","Localisation de l'ID de compte Cloudflare dans le portail","max-width: 325px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[488,6775,4254,6776,886,6768,6779],{},[441,6777,6778],{},"Manage API Tokens",[433,6780],{"src":6781,"alt":6782,"style":6783},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fcloudflare-r2-manage-api-tokens-button.webp","Écran de gestion des jetons API du portail Cloudflare","max-width: 282px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[488,6785,4254,6786,6789,6768,6790],{},[441,6787,6788],{},"Create Account API token"," avec des permissions d'écriture\u002Flecture sur le bucket :",[433,6791],{"src":6792,"alt":6793,"style":6794},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fcloudflare-r2-create-token-permissions.webp","Création d'un jeton d'accès R2 avec autorisations de lecture et d'écriture","max-width: 360px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[488,6796,4254,6797,6800,6801,886,6768,6804],{},[441,6798,6799],{},"Storage"," dans le panneau ",[441,6802,6803],{},"ADMINISTRATION",[433,6805],{"src":6806,"alt":6807,"style":6808},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-administration-storage-menu.webp","Navigation vers les paramètres de stockage dans le panneau de configuration de TREK","max-width: 539px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[488,6810,3061,6811,6814,6768,6815],{},[441,6812,6813],{},"Add Backend"," et renseignez le point de terminaison (endpoint), le bucket et les identifiants :",[433,6816],{"src":6817,"alt":6818,"style":6819},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-add-storage-backend-credentials.webp","Configuration du backend de stockage Cloudflare R2 compatible S3","max-width: 445px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[488,6821,4254,6822,6825,6826,6829,6768,6830],{},[441,6823,6824],{},"Apply",", puis sur le bouton ",[441,6827,6828],{},"Test",". Vous devriez voir s'afficher \"Connection OK\" :",[433,6831],{"src":6832,"alt":6833,"style":6834},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-test-storage-backend-connection-ok.webp","Test de connexion de stockage réussi affichant Connection OK","max-width: 677px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[488,6836,6837,6838,886,6768,6841],{},"Basculez toutes les catégories de stockage vers Cloudflare R2 puis cliquez sur ",[441,6839,6840],{},"Save changes",[433,6842],{"src":6843,"alt":6844,"style":6845},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-switch-storage-categories-r2.webp","Routage de toutes les catégories de stockage de fichiers vers Cloudflare R2","max-width: 653px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[2153,6847,6849],{"id":6848},"_33-connexion-par-clé-de-sécurité-passkeys","3.3 Connexion par clé de sécurité (Passkeys)",[430,6851,6852,6853,886],{},"TREK prend en charge les passkeys, l'authentification à deux facteurs (2FA) et l'authentification unique (SSO) via OIDC. Pour utiliser les passkeys, saisissez votre nom de domaine et les origines autorisées dans les paramètres, puis cliquez sur ",[441,6854,1134],{},[433,6856],{"src":6857,"alt":6858,"style":6570},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-passkey-allowed-origins-settings.webp","Enregistrement des origines autorisées pour l'authentification sécurisée par clé d'accès",[430,6860,6861,6862,6865],{},"Si les ",[441,6863,6864],{},"allowed origins"," ne sont pas correctement configurées, l'enregistrement de la passkey échouera.",[2153,6867,6869],{"id":6868},"_34-clé-api-google-maps","3.4 Clé API Google Maps",[430,6871,6872],{},"Une clé Google Maps permet d'enrichir la recherche de lieux avec des notes, des horaires d'ouverture et des photos. Sans cette clé, TREK bascule automatiquement sur OpenStreetMap, mais sans afficher les notes ni les photos.",[430,6874,6875,6876,6881,6882,6885,6886],{},"Suivez ce lien ",[444,6877,6880],{"href":6878,"rel":6879},"https:\u002F\u002Fmapsplatform.google.com\u002Fmaps-demo-key\u002F",[448],"enlace"," et cliquez sur ",[441,6883,6884],{},"Get demo key"," pour en demander une :                                                  ",[433,6887],{"src":6888,"alt":6889,"style":6890},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fgoogle-maps-get-demo-api-key.webp","Demande de clé API Google Maps Platform","max-width: 176px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,6892,6893,6894,6896,6897],{},"Collez la clé dans les paramètres et cliquez sur ",[441,6895,6828],{}," pour confirmer la connexion :\n",[433,6898],{"src":6899,"alt":6900,"style":6570},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-google-maps-key-test-connection.webp","Vérification de la connectivité de la clé API Google Maps dans les paramètres",[2153,6902,6904],{"id":6903},"_35-intégration-de-lia","3.5 Intégration de l'IA",[430,6906,6907],{},"Le modèle d'IA est utilisé pour analyser les e-mails de confirmation et les fichiers PDF de réservation afin de les transformer en réservations structurées.",[430,6909,4254,6910,6913,6914,6917],{},[441,6911,6912],{},"Addons"," dans le menu de gauche et activez ",[441,6915,6916],{},"AI Parsing",". Sélectionnez \"OpenAI\" (ou un autre fournisseur compatible) et renseignez les détails :",[433,6919],{"src":6920,"alt":6921,"style":6570},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-addons-enable-ai-parsing-openai.webp","Activation de l'addon d'analyse IA avec intégration d'OpenAI",[2153,6923,6925],{"id":6924},"_36-accès-mcp","3.6 Accès MCP",[430,6927,6928,6929,6931,6932,886],{},"Dans l'onglet ",[441,6930,6912],{},", activez ",[441,6933,6934],{},"MCP",[433,6936],{"src":6937,"alt":6938,"style":6570},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-addons-enable-mcp.webp","Activation de l'addon de serveur MCP du protocole Model Context",[2153,6940,6942],{"id":6941},"_37-plugins","3.7 Plugins",[430,6944,6945],{},"Les plugins suivants sont recommandés et méritent d'être activés :",[433,6947],{"src":6948,"alt":6949,"style":6570},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-recommended-addons-plugins-activation.webp","Liste des plugins et addons recommandés actifs",[2153,6951,6953],{"id":6952},"_38-créer-votre-utilisateur-quotidien","3.8 Créer votre utilisateur quotidien",[430,6955,6956],{},"Planifiez vos voyages avec un compte utilisateur standard plutôt qu'avec le compte administrateur. Créez un utilisateur classique et connectez-vous avec :",[433,6958],{"src":6959,"alt":6960,"style":6961},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-create-regular-user-form.webp","Création d'un compte utilisateur standard dans le panneau de TREK","max-width: 420px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,6963,6964],{},"Une fois connecté, ajoutez une clé de sécurité ou configurez la double authentification (2FA) pour sécuriser le compte :",[433,6966],{"src":6967,"alt":6968,"style":6969},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-user-security-passkey-2fa-setup.webp","Configuration des paramètres de sécurité de l'utilisateur avec clés d'accès et 2FA","max-width: 381px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,6971,4254,6972,6975],{},[441,6973,6974],{},"+ Add a passkey",", saisissez votre mot de passe actuel et validez :",[433,6977],{"src":6978,"alt":6979,"style":6570},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-add-passkey-confirm-password.webp","Confirmation du mot de passe pour enregistrer une nouvelle clé d'accès matérielle",[876,6981,6983],{"id":6982},"_4-tester-votre-déploiement-importer-des-données-de-voyage-historiques","4. Tester votre déploiement : importer des données de voyage historiques",[430,6985,6986],{},"Une excellente façon de découvrir TREK est de renseigner l'historique de vos précédents voyages.",[2153,6988,6990],{"id":6989},"_41-créer-le-voyage","4.1 Créer le voyage",[430,6992,4254,6993,6996,6997,7000,7001,7004],{},[441,6994,6995],{},"+ New Trip"," et définissez la date de début (",[441,6998,6999],{},"Start Date",") et de fin (",[441,7002,7003],{},"End Date",") sur les dates passées de votre séjour :",[433,7006],{"src":7007,"alt":7008,"style":7009},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-create-new-trip-details.webp","Création d'un nouveau voyage avec des plages de dates personnalisées","max-width: 334px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7011,7012,7013,886],{},"Ajoutez une image de couverture (glissez-déposez une image ou collez-la depuis le presse-papiers) et cliquez sur ",[441,7014,7015],{},"Create New Trip",[433,7017],{"src":7018,"alt":7019,"style":7020},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-trip-cover-image-upload.webp","Configuration d'une image de couverture de voyage de haute qualité","max-width: 608px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[2153,7022,7024],{"id":7023},"_42-importer-les-réservations","4.2 Importer les réservations",[430,7026,7027],{},"Déposez-y tous vos fichiers de vol, de train et d'autres moyens de transport :",[433,7029],{"src":7030,"alt":7031,"style":7032},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-import-travel-booking-files.webp","Zone de glisser-déposer pour importer des fichiers PDF de voyage et réservations","max-width: 570px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[433,7034],{"src":7035,"alt":7036,"style":7037},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-import-booking-pdf-processing-status.webp","Fenêtre de traitement de la réservation téléchargée montrant l'extraction","max-width: 377px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7039,7040],{},"Une fois le modèle d'IA activé, les PDF de confirmation de réservation sont analysés et convertis en réservations structurées.",[430,7042,7043,7044,7047],{},"Vérifiez les résultats de l'analyse et cliquez sur ",[441,7045,7046],{},"Add"," pour enregistrer les détails de la réservation :",[433,7049],{"src":7050,"alt":7051,"style":6570},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-review-parsed-booking-details.webp","Examen des détails de réservation structurés extraits par l'IA",[430,7053,7054],{},"Si une réservation se trouve uniquement dans un e-mail, exportez cet e-mail au format PDF et importez-le ; le même traitement d'extraction automatique s'appliquera.",[430,7056,7057],{},"Les captures d'écran suivantes montrent comment les réservations s'affichent :",[430,7059,7060,7064],{},[433,7061],{"src":7062,"alt":7063,"style":6570},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-trip-bookings-timeline-view.webp","Affichage complet de la chronologie des réservations de voyage",[433,7065],{"src":7066,"alt":7067,"style":6570},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-booking-confirmation-details.webp","Vue détaillée d'une réservation de transport confirmée",[430,7069,7070,7071,7074],{},"Sur la page ",[441,7072,7073],{},"Plan",", tous vos hébergements s'afficheront sur la carte :",[433,7076],{"src":7077,"alt":7078,"style":7079},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-plan-accommodations-map-display.webp","Carte interactive affichant tous les hébergements hôteliers","max-width: 546px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7081,4254,7082,7085],{},[441,7083,7084],{},"Atlas"," dans la barre de menu supérieure pour voir la liste (et la carte) de tous les pays que vous avez visités :",[433,7087],{"src":7088,"alt":7089,"style":7090},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-atlas-countries-visited-summary.webp","Aperçu de l'historique de voyage dans le suivi Atlas personnel","max-width: 407px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[2153,7092,7094],{"id":7093},"_43-ajouter-des-compagnons-de-voyage","4.3 Ajouter des compagnons de voyage",[430,7096,3061,7097,886],{},[441,7098,7099],{},"Share",[433,7101],{"src":7102,"alt":7103,"style":7104},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-trip-share-options-button.webp","Ouverture de la boîte de dialogue de partage de voyage dans TREK","max-width: 224px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7106,7107],{},"En bas de la boîte de dialogue, vous pouvez ajouter des invités :",[433,7109],{"src":7110,"alt":7111,"style":7112},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-trip-add-companions-guests.webp","Ajout de compagnons de voyage et d'invités personnalisés","max-width: 635px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[2153,7114,7116],{"id":7115},"_44-enregistrer-les-dépenses","4.4 Enregistrer les dépenses",[430,7118,4254,7119,7122],{},[441,7120,7121],{},"Add expense"," pour ajouter des dépenses autres que les réservations (comme l'assurance santé, les transports locaux, les cartes SIM) :",[433,7124],{"src":7125,"alt":7126,"style":6570},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-add-custom-expense-form.webp","Saisie de données de dépenses détaillées dans le formulaire de dépenses",[433,7128],{"src":7129,"alt":7130,"style":7131},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-expenses-list-billing-split.webp","Détail du partage des frais et registre de suivi des coûts","max-width: 526px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[2153,7133,7135],{"id":7134},"_45-etapes-de-voyage","4.5 Etapes de voyage",[430,7137,7138],{},"Cette fonctionnalité nécessite l'installation du plugin Trip Segment.",[430,7140,7141],{},"Les longs voyages se découpent de manière harmonieuse en étapes, chaque tronçon affichant ses propres réservations, lieux et coûts :",[433,7143],{"src":7144,"alt":7145,"style":7146},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-trip-segments-overview-display.webp","Division d'un itinéraire complexe en segments de voyage","max-width: 465px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[433,7148],{"src":7149,"alt":7150,"style":7151},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-trip-segment-itinerary-details.webp","Segment de voyage actif affichant les lieux et les horaires","max-width: 596px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[433,7153],{"src":7154,"alt":7155,"style":7156},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-trip-segments-interactive-map.webp","Cartographie des différentes étapes du voyage sur la chronologie","max-width: 605px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[2153,7158,7160],{"id":7159},"_46-créer-un-journal-de-voyage-journey-et-consulter-votre-atlas","4.6 Créer un journal de voyage (Journey) et consulter votre atlas",[430,7162,7163,7164,7167],{},"Regroupez vos voyages dans un ",[441,7165,7166],{},"Journey"," (journal de bord) et rédigez des récits à partager avec vos amis :",[433,7169],{"src":7170,"alt":7171,"style":7172},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-create-new-journey-group.webp","Consolidation de plusieurs voyages dans un parcours visuel (Journey)","max-width: 441px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[433,7174],{"src":7175,"alt":7176,"style":7177},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-journey-timeline-story-writing.webp","Rédaction d'histoires visuelles dans le panneau des parcours","max-width: 443px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[433,7179],{"src":7180,"alt":7181,"style":7182},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-journey-gallery-media-grid.webp","Collection de médias et grille de galerie au sein d'un parcours","max-width: 440px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[433,7184],{"src":7185,"alt":7186,"style":7187},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-journey-public-share-link.webp","Génération de liens de partage publics pour des parcours collaboratifs","max-width: 532px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[876,7189,7191],{"id":7190},"_5-concevoir-des-itinéraires-personnalisés-et-des-listes-de-bagages","5. Concevoir des itinéraires personnalisés et des listes de bagages",[430,7193,4254,7194,7196],{},[441,7195,6995],{},", saisissez un nom et définissez les dates :",[433,7198],{"src":7199,"alt":7200,"style":7201},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-planning-new-trip-setup.webp","Boîte de dialogue initiale pour créer un voyage sans date","max-width: 432px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7203,7204,7207],{},[441,7205,7206],{},"Si vous n'avez pas encore arrêté vos dates, laissez les deux champs vides."," Un champ indiquant le \"nombre de jours\" apparaîtra (jusqu'à 365). Planifiez d'abord, programmez les dates plus tard.",[2153,7209,7211],{"id":7210},"_51-ajouter-des-lieux","5.1 Ajouter des lieux",[430,7213,7214],{},"C'est l'étape la plus chronophage de toute planification, et TREK propose plusieurs approches pour l'accélérer :",[433,7216],{"src":7217,"alt":7218,"style":6570},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-add-places-methods-overview.webp","Méthodes multicanaux pour ajouter de nouveaux lieux aux itinéraires",[430,7220,7221,7224],{},[441,7222,7223],{},"1. Faites un clic droit sur la carte"," pour créer un lieu à cet endroit précis (l'adresse est automatiquement récupérée par géocodage inversé) :",[433,7226],{"src":7227,"alt":7228,"style":7229},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-right-click-map-location.webp","Clic droit sur la carte pour localiser précisément des emplacements","max-width: 632px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[433,7231],{"src":7232,"alt":7233,"style":7234},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-right-click-reverse-geocode-address.webp","Géocodage inversé automatique des coordonnées cartographiques sélectionnées","max-width: 628px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7236,7237,7240],{},[441,7238,7239],{},"2. Cliquez sur + Add Place\u002FActivity"," et recherchez par nom :",[433,7242],{"src":7243,"alt":7244,"style":7245},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-search-place-by-name-input.webp","Recherche de lieux réels à l'aide d'entrées de texte","max-width: 642px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[433,7247],{"src":7248,"alt":7249,"style":7250},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-select-place-search-results-list.webp","Affichage des résultats de recherche de lieux avec superposition d'adresses","max-width: 594px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[433,7252],{"src":7253,"alt":7254,"style":7255},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-place-details-rich-info-card.webp","Fiche d'information complète sur le lieu avec avis et évaluations","max-width: 568px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7257,7258,857,7261,1514,7264,7267],{},[441,7259,7260],{},"3. Collez une URL Google Maps",[495,7262,7263],{},"maps.app.goo.gl\u002F…",[495,7265,7266],{},"maps.google.com\u002F…",") dans le champ de recherche. TREK en extrait le nom, l'adresse et les coordonnées :",[433,7269],{"src":7270,"alt":7271,"style":6834},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-paste-google-maps-share-link.webp","Analyse des emplacements directement à partir de liens de partage Google Maps collés",[433,7273],{"src":7274,"alt":7275,"style":7276},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-google-maps-parsed-location.webp","Extraction réussie de coordonnées à partir de l'URL Google Maps","max-width: 543px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7278,7279,7282,7283,7286,7287,575,7290,7293,7294,7297],{},[441,7280,7281],{},"4. Importation en lot"," — la méthode la plus simple. Si vous avez déjà une liste de lieux à visiter sur Google Maps, exportez-la au format ",[495,7284,7285],{},".gpx"," (les formats ",[495,7288,7289],{},".kml",[495,7291,7292],{},".kmz"," fonctionnent également) et cliquez sur ",[441,7295,7296],{},"Import file"," dans le panneau latéral droit pour tout importer d'un coup :",[433,7299],{"src":7300,"alt":7301,"style":7302},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-bulk-import-places-gpx-file.webp","Importation en masse de lieux à l'aide de fichiers GPX ou KML","max-width: 389px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7304,7305],{},"Ajoutez d'abord tout ce qui vous intéresse, sans vous soucier de savoir si cela rentre dans votre emploi du temps. Vous attribuerez les lieux aux différents jours par la suite.",[2153,7307,7309],{"id":7308},"_52-programmes-quotidiens-et-notes","5.2 Programmes quotidiens et notes",[430,7311,7312],{},"Le programme quotidien organise les lieux jour par jour, dans l'ordre. Il s'agit d'une liste repliable pour chaque journée, entièrement gérable par glisser-déposer :",[433,7314],{"src":7315,"alt":7316,"style":7317},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-day-plan-drag-drop-ordering.webp","Personnalisation des itinéraires quotidiens par glisser-déposer","max-width: 496px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7319,7320],{},"Les détails pratiques qui font la différence :",[485,7322,7323,7333,7343,7353],{},[488,7324,7325,7328,7329],{},[441,7326,7327],{},"Transports entre les arrêts"," : l'icône de bus en haut à gauche d'une journée permet d'ajouter un trajet (train, bus ou avion à l'intérieur de la même journée) :\n",[433,7330],{"src":7331,"alt":7332,"style":6570},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-day-plan-commuting-transport-button.webp","Enregistrement du transport de liaison entre les segments de la journée",[488,7334,7335,7338,7339],{},[441,7336,7337],{},"Notes journalières"," : l'icône de bloc-notes en bas à gauche permet d'associer des notes agrémentées d'une icône — \"départ matinal aujourd'hui\", \"réservation obligatoire pour ce musée\" :\n",[433,7340],{"src":7341,"alt":7342,"style":6570},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-day-plan-icon-tagged-notes-button.webp","Ajout de notes personnalisées étiquetées par des icônes très visibles",[488,7344,7345,7348,7349],{},[441,7346,7347],{},"Créneaux horaires"," : glissez un lieu depuis le panneau latéral droit vers une journée, puis attribuez-lui un horaire. Les lieux ayant des horaires définis sont reliés automatiquement sur la carte :\n",[433,7350],{"src":7351,"alt":7352,"style":6570},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-day-plan-timed-places-routing.webp","Calcul automatique des itinéraires de transport entre des lieux planifiés",[488,7354,7355,7356,7361,7362,7365,7366,461],{},"Veuillez consulter la ",[444,7357,7360],{"href":7358,"rel":7359},"https:\u002F\u002Fgithub.com\u002Fliketrek\u002FTREK\u002Fwiki\u002FDay-Plans-and-Notes",[448],"page wiki des Programmes Quotidiens et Notes"," pour en savoir plus sur l'",[441,7363,7364],{},"Optimisation d'itinéraires"," et la ",[441,7367,7368],{},"Météo",[2153,7370,7372],{"id":7371},"_53-collections-listes-de-lieux-réutilisables","5.3 Collections : listes de lieux réutilisables",[430,7374,7375,7376,7379],{},"Les Collections permettent de conserver des listes de lieux indépendamment de tout voyage. Elles peuvent être partagées avec des amies et réutilisées pour un futur séjour. Les lieux étant ",[441,7377,7378],{},"copiés"," dans les voyages, l'édition d'une étape au sein d'un itinéraire n'affectera jamais votre collection de base, et inversement.",[430,7381,4254,7382,7385],{},[441,7383,7384],{},"Collections"," dans la barre de menu supérieure :",[433,7387],{"src":7388,"alt":7389,"style":7390},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-collections-dashboard-view.webp","Accès aux collections d'utilisateurs personnalisées pour les lieux enregistrés","max-width: 495px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7392,4254,7393,7396],{},[441,7394,7395],{},"+ New list"," pour en créer une :",[433,7398],{"src":7399,"alt":7400,"style":7401},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-collections-create-new-list.webp","Création de listes personnalisées dans les collections d'utilisateurs","max-width: 269px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7403,4254,7404,7407],{},[441,7405,7406],{},"+ Add a place"," et renseignez les détails :",[433,7409],{"src":7410,"alt":7411,"style":7412},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-collections-add-place-manually-form.webp","Saisie manuelle dans le formulaire pour remplir les listes de collections","max-width: 271px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7414,7415,7418],{},[441,7416,7417],{},"Note :"," la recherche à l'intérieur de la fenêtre \"Add a place\" ne semble pas fonctionner, vous devrez donc saisir les informations manuellement.",[430,7420,7421],{},"Si les coordonnées géographiques des lieux sont fournies, ils s'afficheront sur la carte :",[433,7423],{"src":7424,"alt":7425,"style":7426},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-collections-map-places-display.webp","Visualisation des lieux de collections personnalisées sur une carte interactive","max-width: 592px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7428,7429,7430,886],{},"Pour organiser vos lieux avec des étiquettes (labels), cliquez sur l'icône de la ",[441,7431,7432],{},"case à cocher",[433,7434],{"src":7435,"alt":7436,"style":7437},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-collections-select-places-tickbox.webp","Mode de sélection pour le marquage en masse de lieux enregistrés","max-width: 662px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7439,7440,7441,886],{},"Sélectionnez les lieux à regrouper, puis cliquez sur ",[441,7442,7443],{},"Assign label",[433,7445],{"src":7446,"alt":7447,"style":7276},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-collections-group-assign-label.webp","Attribution d'étiquettes descriptives aux lieux de collection sélectionnés",[430,7449,4254,7450,7453],{},[441,7451,7452],{},"Manage labels"," pour créer d'abord les étiquettes :",[433,7455],{"src":7456,"alt":7457,"style":7458},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-collections-manage-custom-labels.webp","Création et gestion d'étiquettes personnalisées","max-width: 411px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7460,7461,7462,886],{},"Sélectionnez une étiquette et cliquez sur ",[441,7463,7443],{},[433,7465],{"src":7466,"alt":7467,"style":7090},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-collections-confirm-label-selection.webp","Application d'étiquettes personnalisées à des groupes de lieux",[2153,7469,7471],{"id":7470},"_54-coûts-et-budget","5.4 Coûts et budget",[430,7473,7474],{},"Il est possible d'ajouter d'autres dépenses pour le voyage sur l'onglet 'Costs'.",[433,7476],{"src":7477,"alt":7478,"style":7317},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-costs-budget-overall-expenses-list.webp","Tableau des dépenses complet et registre de règlement des comptes",[430,7480,7481],{},"Les paiements effectués par vos compagnons de voyage peuvent être renseignés et divisés sur cette même page.",[430,7483,7484,7485,7488],{},"Le panneau de règlement s'appuie sur un algorithme glouton (greedy) pour calculer le ",[441,7486,7487],{},"nombre minimal de transferts d'argent"," nécessaires pour équilibrer les comptes.",[876,7490,7492],{"id":7491},"_6-exploiter-model-context-protocol-mcp-pour-une-planification-assistée-par-ia","6. Exploiter Model Context Protocol (MCP) pour une planification assistée par IA",[430,7494,7495,7496,7499],{},"TREK intègre son propre ",[441,7497,7498],{},"serveur MCP (Model Context Protocol)",", permettant aux agents d'IA de lire et de modifier directement vos données de voyage — à l'aide de plus de 150 outils et 30 ressources dédiés aux voyages, lieux, budgets, bagages, réservations et à la collaboration.",[2153,7501,7503],{"id":7502},"_61-cloudflare-zero-trust","6.1 Cloudflare Zero Trust",[430,7505,7506,7507,7509,7510,461],{},"Étant donné que TREK s'exécute derrière un réseau ",[444,7508,1717],{"href":363},", vous devrez ajouter votre domaine à la liste d'inclusion des Split Tunnels. Sinon, vous rencontrerez des problèmes d'autorisation OAuth. Référez-vous à cette page d'issue GitHub : ",[444,7511,7514],{"href":7512,"rel":7513},"https:\u002F\u002Fgithub.com\u002Fliketrek\u002FTREK\u002Fissues\u002F1463",[448],"ticket github",[463,7516],{"description":2599,"image":2600,"image-alt":2601,"label":2702,"min-read":7517,"title":1702,"to":363},"9",[433,7519],{"src":7520,"alt":7521,"style":6570},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fcloudflare-zero-trust-split-tunnels-domain.webp","Ajout de domaines personnalisés aux Split Tunnels de Cloudflare Warp",[2153,7523,7525],{"id":7524},"_62-claude-desktop","6.2 Claude Desktop",[430,7527,4254,7528,7531,7532],{},[441,7529,7530],{},"+ New Client"," pour créer un nouveau client d'agent d'IA :\n",[433,7533],{"src":7534,"alt":7535,"style":6570},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-register-new-mcp-client.webp","Enregistrement d'un nouveau jeton client personnalisé dans les paramètres",[430,7537,7538,7539,6881,7542,886],{},"Sélectionnez l'onglet ",[441,7540,7541],{},"Claude Desktop",[441,7543,7544],{},"Register Client",[433,7546],{"src":7547,"alt":7548,"style":7549},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-mcp-claude-desktop-client-credentials.webp","Génération d'identifiants client pour Claude Desktop","max-width: 354px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7551,7552,7553,7556],{},"Un couple d'ID de client et de secret de client s'affiche. Copiez-les en lieu sûr, puis cliquez sur ",[441,7554,7555],{},"Client Configuration"," pour faire apparaître les paramètres MCP :",[433,7558],{"src":7559,"alt":7560,"style":7561},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-mcp-client-configuration-block.webp","Récupération du bloc de configuration préformaté du serveur MCP","max-width: 508px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7563,7564,7565,7568],{},"Dans Claude Desktop, cliquez sur ",[441,7566,7567],{},"Edit Config"," pour ouvrir le fichier de configuration des serveurs MCP locaux :",[433,7570],{"src":7571,"alt":7572,"style":6570},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fclaude-desktop-mcp-config-json.webp","Édition du fichier json de configuration MCP locale de Claude Desktop",[430,7574,7575],{},"Collez la configuration de TREK en remplaçant les valeurs fictives par vos identifiants :",[920,7577,7579],{"className":2898,"code":7578,"language":2900,"meta":425,"style":425},"  \"mcpServers\": {\n    \"trek\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"mcp-remote\",\n        \"https:\u002F\u002Ftrek.pafor.me\u002Fmcp\",\n        \"--static-oauth-client-info\",\n        \"{\\\"client_id\\\": \\\"\u003Cyour_client_id>\\\", \\\"client_secret\\\": \\\"\u003Cyour_client_secret>\\\"}\"\n      ]\n    }\n  },\n",[495,7580,7581,7596,7609,7631,7645,7657,7668,7679,7724,7729,7734],{"__ignoreMap":425},[928,7582,7583,7586,7589,7591,7594],{"class":930,"line":931},[928,7584,7585],{"class":942},"  \"",[928,7587,7588],{"class":1042},"mcpServers",[928,7590,3688],{"class":942},[928,7592,7593],{"class":938},": ",[928,7595,2907],{"class":942},[928,7597,7598,7601,7603,7605,7607],{"class":930,"line":1058},[928,7599,7600],{"class":942},"    \"",[928,7602,6760],{"class":934},[928,7604,3688],{"class":942},[928,7606,1353],{"class":942},[928,7608,2937],{"class":942},[928,7610,7611,7614,7617,7619,7621,7623,7626,7628],{"class":930,"line":1065},[928,7612,7613],{"class":942},"      \"",[928,7615,7616],{"class":1038},"command",[928,7618,3688],{"class":942},[928,7620,1353],{"class":942},[928,7622,3280],{"class":942},[928,7624,7625],{"class":1042},"npx",[928,7627,3688],{"class":942},[928,7629,7630],{"class":942},",\n",[928,7632,7633,7635,7638,7640,7642],{"class":930,"line":1072},[928,7634,7613],{"class":942},[928,7636,7637],{"class":1038},"args",[928,7639,3688],{"class":942},[928,7641,1353],{"class":942},[928,7643,7644],{"class":942}," [\n",[928,7646,7647,7650,7653,7655],{"class":930,"line":1918},[928,7648,7649],{"class":942},"        \"",[928,7651,7652],{"class":1042},"mcp-remote",[928,7654,3688],{"class":942},[928,7656,7630],{"class":942},[928,7658,7659,7661,7664,7666],{"class":930,"line":1923},[928,7660,7649],{"class":942},[928,7662,7663],{"class":1042},"https:\u002F\u002Ftrek.pafor.me\u002Fmcp",[928,7665,3688],{"class":942},[928,7667,7630],{"class":942},[928,7669,7670,7672,7675,7677],{"class":930,"line":1929},[928,7671,7649],{"class":942},[928,7673,7674],{"class":1042},"--static-oauth-client-info",[928,7676,3688],{"class":942},[928,7678,7630],{"class":942},[928,7680,7681,7683,7685,7688,7691,7693,7695,7697,7700,7702,7704,7706,7709,7711,7713,7715,7718,7720,7722],{"class":930,"line":2265},[928,7682,7649],{"class":942},[928,7684,2928],{"class":1042},[928,7686,7687],{"class":938},"\\\"",[928,7689,7690],{"class":1042},"client_id",[928,7692,7687],{"class":938},[928,7694,7593],{"class":1042},[928,7696,7687],{"class":938},[928,7698,7699],{"class":1042},"\u003Cyour_client_id>",[928,7701,7687],{"class":938},[928,7703,739],{"class":1042},[928,7705,7687],{"class":938},[928,7707,7708],{"class":1042},"client_secret",[928,7710,7687],{"class":938},[928,7712,7593],{"class":1042},[928,7714,7687],{"class":938},[928,7716,7717],{"class":1042},"\u003Cyour_client_secret>",[928,7719,7687],{"class":938},[928,7721,2934],{"class":1042},[928,7723,1950],{"class":942},[928,7725,7726],{"class":930,"line":2276},[928,7727,7728],{"class":942},"      ]\n",[928,7730,7731],{"class":930,"line":2372},[928,7732,7733],{"class":942},"    }\n",[928,7735,7736,7739],{"class":930,"line":1691},[928,7737,7738],{"class":942},"  }",[928,7740,7630],{"class":938},[430,7742,7743,7744,886],{},"Redémarrez Claude Desktop ; le serveur TREK s'affiche désormais comme connecté sous l'onglet ",[441,7745,7746],{},"Local MCP servers",[433,7748],{"src":7749,"alt":7750,"style":6570},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fclaude-desktop-mcp-trek-server-connected.webp","Vérification de l'état de la connexion active de TREK dans l'interface Claude",[430,7752,7753],{},"Lancez maintenant une invite (prompt) :",[433,7755],{"src":7756,"alt":7757,"style":7758},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fclaude-desktop-mcp-natural-language-prompt.webp","Saisie de requêtes en langage naturel dans Claude pour manipuler les données de voyage","max-width: 550px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7760,7761],{},"Ajoutons une dépense en langage naturel :",[920,7763,7766],{"className":7764,"code":7765,"language":4635,"meta":425},[4633],"For the West Europe trip, the Grab from KLIA1 to the hotel cost RM115.90 on 26\u002F4\u002F2025. Please add it as an expense without split to the trip.\n",[495,7767,7765],{"__ignoreMap":425},[433,7769],{"src":7770,"alt":7771,"style":6570},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fclaude-desktop-mcp-add-expense-response.webp","Claude utilise des outils pour enregistrer automatiquement une dépense",[430,7773,7774,7775,7778],{},"En consultant la page ",[441,7776,7777],{},"Costs",", on constate que la dépense a bien été créée avec la mention \"Personne n'a payé pour l'instant\", car aucun payeur n'a été spécifié :",[433,7780],{"src":7781,"alt":7782,"style":6734},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-costs-page-mcp-parsed-expense.webp","Confirmation de la dépense d'IA nouvellement analysée dans la vue des coûts",[430,7784,7785],{},"L'ajout d'éléments à la liste de bagages s'effectue exactement de la même manière :",[433,7787],{"src":7788,"alt":7789,"style":7790},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fclaude-desktop-mcp-add-packing-items.webp","Claude ajoute des éléments de bagage à l'aide de requêtes en langage naturel","max-width: 631px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7792,7793,7794,7797],{},"Actualisez l'onglet ",[441,7795,7796],{},"Packing List"," : les trois éléments y figurent désormais :",[433,7799],{"src":7800,"alt":7801,"style":7802},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Ftrek-packing-list-mcp-parsed-items.webp","Confirmation des articles de bagage nouvellement analysés sur la page Liste de bagages","max-width: 312px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[2153,7804,7806],{"id":7805},"_63-gemini-cli-enregistrement-dynamique","6.3 Gemini CLI (enregistrement dynamique)",[430,7808,7809,7810,7813,7814,886],{},"Gemini CLI prend en charge l'",[441,7811,7812],{},"enregistrement dynamique",", ce qui signifie qu'aucun client préalablement enregistré n'est requis. Ajoutez ceci à ",[495,7815,7816],{},".gemini\u002Fsettings.json",[920,7818,7820],{"className":2898,"code":7819,"language":2900,"meta":425,"style":425},"    \"trek\": {\n      \"httpUrl\": \"https:\u002F\u002Ftrek.pafor.me\u002Fmcp\",\n      \"oauth\": {\n        \"enabled\": true\n      }\n    }\n",[495,7821,7822,7834,7853,7866,7879,7884],{"__ignoreMap":425},[928,7823,7824,7826,7828,7830,7832],{"class":930,"line":931},[928,7825,7600],{"class":942},[928,7827,6760],{"class":1042},[928,7829,3688],{"class":942},[928,7831,7593],{"class":938},[928,7833,2907],{"class":942},[928,7835,7836,7838,7841,7843,7845,7847,7849,7851],{"class":930,"line":1058},[928,7837,7613],{"class":942},[928,7839,7840],{"class":934},"httpUrl",[928,7842,3688],{"class":942},[928,7844,1353],{"class":942},[928,7846,3280],{"class":942},[928,7848,7663],{"class":1042},[928,7850,3688],{"class":942},[928,7852,7630],{"class":942},[928,7854,7855,7857,7860,7862,7864],{"class":930,"line":1065},[928,7856,7613],{"class":942},[928,7858,7859],{"class":934},"oauth",[928,7861,3688],{"class":942},[928,7863,1353],{"class":942},[928,7865,2937],{"class":942},[928,7867,7868,7870,7873,7875,7877],{"class":930,"line":1072},[928,7869,7649],{"class":942},[928,7871,7872],{"class":1038},"enabled",[928,7874,3688],{"class":942},[928,7876,1353],{"class":942},[928,7878,1375],{"class":942},[928,7880,7881],{"class":930,"line":1918},[928,7882,7883],{"class":942},"      }\n",[928,7885,7886],{"class":930,"line":1923},[928,7887,7733],{"class":942},[430,7889,1825,7890,7893,7894,7897,7898],{},[495,7891,7892],{},"gemini"," dans votre terminal et cliquez sur ",[441,7895,7896],{},"Approve"," lorsque l'invite d'autorisation apparaît :\n",[433,7899],{"src":7900,"alt":7901,"style":7902},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fmcp-client-oauth-authorization-prompt.webp","Approbation de l'accès OAuth pour le serveur MCP TREK","max-width: 488px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,7904,7905],{},"Commencez ensuite par une invite simple :",[433,7907],{"src":7908,"alt":7909,"style":7910},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fgemini-cli-mcp-prompt-itinerary.webp","Saisie de requêtes dans Gemini CLI pour récupérer des itinéraires de voyage","max-width: 415px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[433,7912],{"src":7913,"alt":7914,"style":7182},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fgemini-cli-mcp-display-itinerary.webp","Gemini CLI affichant avec succès des informations de voyage structurées",[2153,7916,7918],{"id":7917},"_64-kimi-cli-enregistrement-dynamique","6.4 Kimi CLI (enregistrement dynamique)",[430,7920,7921,7922,7925,7926,886],{},"Même démarche — ajoutez ceci au fichier ",[495,7923,7924],{},"mcp.json"," dans le dossier ",[495,7927,7928],{},"\u002FUsers\u002F\u003Cuser>\u002F.kimi\u002F",[920,7930,7932],{"className":2898,"code":7931,"language":2900,"meta":425,"style":425},"    \"trek\": {\n      \"type\": \"http\",\n      \"url\": \"https:\u002F\u002Ftrek.pafor.me\u002Fmcp\",\n      \"auth\": \"oauth\"\n    }\n",[495,7933,7934,7946,7966,7984,8001],{"__ignoreMap":425},[928,7935,7936,7938,7940,7942,7944],{"class":930,"line":931},[928,7937,7600],{"class":942},[928,7939,6760],{"class":1042},[928,7941,3688],{"class":942},[928,7943,7593],{"class":938},[928,7945,2907],{"class":942},[928,7947,7948,7950,7953,7955,7957,7959,7962,7964],{"class":930,"line":1058},[928,7949,7613],{"class":942},[928,7951,7952],{"class":934},"type",[928,7954,3688],{"class":942},[928,7956,1353],{"class":942},[928,7958,3280],{"class":942},[928,7960,7961],{"class":1042},"http",[928,7963,3688],{"class":942},[928,7965,7630],{"class":942},[928,7967,7968,7970,7972,7974,7976,7978,7980,7982],{"class":930,"line":1065},[928,7969,7613],{"class":942},[928,7971,860],{"class":934},[928,7973,3688],{"class":942},[928,7975,1353],{"class":942},[928,7977,3280],{"class":942},[928,7979,7663],{"class":1042},[928,7981,3688],{"class":942},[928,7983,7630],{"class":942},[928,7985,7986,7988,7991,7993,7995,7997,7999],{"class":930,"line":1072},[928,7987,7613],{"class":942},[928,7989,7990],{"class":934},"auth",[928,7992,3688],{"class":942},[928,7994,1353],{"class":942},[928,7996,3280],{"class":942},[928,7998,7859],{"class":1042},[928,8000,1950],{"class":942},[928,8002,8003],{"class":930,"line":1918},[928,8004,7733],{"class":942},[430,8006,1825,8007,8010,8011,3027,8013],{},[495,8008,8009],{},"kimi mcp auth trek"," dans le terminal et cliquez sur ",[441,8012,7896],{},[433,8014],{"src":7900,"alt":7901,"style":8015},"max-width: 453px; width: 100%; height: auto; border-radius: 8px; margin: 1.5rem auto; display: block;",[430,8017,8018],{},"Une fois l'autorisation validée, les outils disponibles s'affichent :",[433,8020],{"src":8021,"alt":8022,"style":6570},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002Fkimi-cli-mcp-authorized-tools-list.webp","Kimi CLI affichant les outils disponibles après une autorisation réussie",[876,8024,8026],{"id":8025},"_7-expérience-mobile","7. Expérience mobile",[430,8028,8029],{},"TREK est une PWA (progressive web app) sur les appareils mobiles. Un service worker met en cache les cartes et les données d'API, de sorte que votre itinéraire reste accessible hors ligne. Cependant, les notifications push peuvent accuser un léger retard par rapport à une application native.",[876,8031,8033],{"id":8032},"réflexions-finales","Réflexions finales",[430,8035,8036],{},"La connexion d'agents d'IA via MCP évite la pénible saisie manuelle des réservations de vols et d'hôtels. De plus, les agents peuvent proposer des points d'intérêt adaptés à vos dates et saisons de voyage. Un seul échange avec un agent d'IA peut couvrir l'ensemble du flux : de la recherche d'idées à l'élaboration de l'itinéraire, jusqu'au suivi du budget et à la liste de bagages.",[430,8038,8039],{},"On relève toutefois quelques légers désagréments techniques. Par exemple, lors de l'importation de réservations depuis des fichiers PDF, la devise par défaut est celle du voyage plutôt que celle réellement payée. De même, lors de la création d'une nouvelle liste dans les Collections, toute image de couverture ajoutée disparaît à la sauvegarde, même s'il est possible de la rajouter manuellement lors de l'édition ultérieure.",[430,8041,8042,8043,8048],{},"Il existe une légère barrière technique puisque vous devez l'héberger sur votre propre serveur. TREK est avant tout conçu pour les grands voyageurs exigeants quant à l'organisation de leurs données. Nous vous suggérons d'essayer la démo officielle sur ",[444,8044,8047],{"href":8045,"rel":8046},"https:\u002F\u002Fdemo.liketrek.com\u002F",[448],"demo.liketrek.com"," avant d'envisager de l'auto-héberger.",[876,8050,1607],{"id":1606},[485,8052,8053,8060,8067],{},[488,8054,8055],{},[444,8056,8059],{"href":8057,"rel":8058},"https:\u002F\u002Fgithub.com\u002Fliketrek\u002FTREK\u002Fwiki\u002FQuick-Start",[448],"Prise en main de TREK",[488,8061,8062],{},[444,8063,8066],{"href":8064,"rel":8065},"https:\u002F\u002Fgithub.com\u002Fliketrek\u002FTREK\u002Fwiki\u002FTroubleshooting",[448],"Dépannage de TREK",[488,8068,8069],{},[444,8070,8073],{"href":8071,"rel":8072},"https:\u002F\u002Fgithub.com\u002Fliketrek\u002FTREK\u002Fwiki\u002FMCP-Scopes",[448],"Périmètres de sécurité (Scopes) MCP de TREK",[1635,8075,8076],{},"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 .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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}",{"title":425,"searchDepth":1058,"depth":1065,"links":8078},[8079,8084,8085,8095,8103,8109,8115,8116,8117],{"id":6264,"depth":1065,"text":6265,"children":8080},[8081,8082,8083],{"id":6268,"depth":1072,"text":6269},{"id":6414,"depth":1072,"text":6415},{"id":6446,"depth":1072,"text":6447},{"id":6591,"depth":1065,"text":6592},{"id":6634,"depth":1065,"text":6635,"children":8086},[8087,8088,8089,8090,8091,8092,8093,8094],{"id":6737,"depth":1072,"text":6738},{"id":6748,"depth":1072,"text":6749},{"id":6848,"depth":1072,"text":6849},{"id":6868,"depth":1072,"text":6869},{"id":6903,"depth":1072,"text":6904},{"id":6924,"depth":1072,"text":6925},{"id":6941,"depth":1072,"text":6942},{"id":6952,"depth":1072,"text":6953},{"id":6982,"depth":1065,"text":6983,"children":8096},[8097,8098,8099,8100,8101,8102],{"id":6989,"depth":1072,"text":6990},{"id":7023,"depth":1072,"text":7024},{"id":7093,"depth":1072,"text":7094},{"id":7115,"depth":1072,"text":7116},{"id":7134,"depth":1072,"text":7135},{"id":7159,"depth":1072,"text":7160},{"id":7190,"depth":1065,"text":7191,"children":8104},[8105,8106,8107,8108],{"id":7210,"depth":1072,"text":7211},{"id":7308,"depth":1072,"text":7309},{"id":7371,"depth":1072,"text":7372},{"id":7470,"depth":1072,"text":7471},{"id":7491,"depth":1065,"text":7492,"children":8110},[8111,8112,8113,8114],{"id":7502,"depth":1072,"text":7503},{"id":7524,"depth":1072,"text":7525},{"id":7805,"depth":1072,"text":7806},{"id":7917,"depth":1072,"text":7918},{"id":8025,"depth":1065,"text":8026},{"id":8032,"depth":1065,"text":8033},{"id":1606,"depth":1065,"text":1607},[8119,1655],"travel","2026-09-01","Découvrez comment déployer TREK avec Docker, le sécuriser via Cloudflare R2 et Caddy, et exploiter des agents d'IA avec MCP pour planifier sans aucun effort.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosted%20travel%20planner%20TREK\u002FFR-Self-hosted-travel-planner-TREK.webp","Une illustration 3D minimaliste haut de gamme du tableau de bord du planificateur de voyage auto-hébergé TREK sur un fond parchemin chaleureux.",{"schemaOrg":8125,"robots":1689,"sitemap":8129},[8126,8127],{"@type":1668,"headline":6250,"description":8121},{"@type":4081,"headline":8128,"description":8121},"Comment héberger TREK: Le meilleur planificateur via IA",{"lastmod":8120},{"title":8128,"description":8121,"ogTitle":6250,"ogDescription":8121,"twitterTitle":6250,"twitterDescription":8121},"fr\u002Farticle\u002Fself-hosted-travel-planner-trek",[6244,8133,6245,6246,6934],"TREK","6zGi1YvkxDKYaZRzLVjeNulLRsOL8rfOXrTdUcjqm7A",{"id":8136,"title":8137,"author":425,"body":8138,"category":8692,"date":8693,"description":8694,"extension":1660,"image":8695,"imageAlt":8696,"isPublished":1061,"meta":8697,"minRead":1918,"navigation":1061,"path":117,"seo":8701,"stem":8703,"tags":8704,"updatedAt":1698,"__hash__":8708},"article\u002Ffr\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts.md","Comment les compétences d'agents IA remplacent les scripts",{"type":427,"value":8139,"toc":8685},[8140,8154,8158,8161,8257,8260,8288,8295,8299,8314,8331,8335,8346,8506,8510,8592,8596,8604,8624,8631,8646,8657,8660,8666,8669,8674,8682],[430,8141,8142,8143,575,8146,8149,8150,8153],{},"Lorsque l'on démarre une nouvelle application avec le framework Nuxt, il faut passer par des étapes fastidieuses telles que l'installation de modules et la mise en place de configurations comme ",[495,8144,8145],{},"nuxt.config.ts",[495,8147,8148],{},"wrangler.jsonc",". Un script peut résoudre ce problème, mais il atteint ses limites à mesure que les variations augmentent. C'est pourquoi nous avons exploré et remplacé les scripts par une ",[441,8151,8152],{},"compétence d'agent"," (agent skill).",[474,8155,8157],{"id":8156},"ce-pour-quoi-les-scripts-shell-traditionnels-sont-doués","Ce pour quoi les scripts shell traditionnels sont doués",[430,8159,8160],{},"Un script est idéal pour exécuter une suite d'instructions fixes et séquentielles avec des décisions codées en dur.",[920,8162,8164],{"className":1029,"code":8163,"language":1031,"meta":425,"style":425},"#!\u002Fusr\u002Fbin\u002Fenv bash\nset -e\n\nnpx nuxi@latest init \"$1\" --template minimal --packageManager pnpm --no-gitInit -M @nuxt\u002Fui,@nuxthub\u002Fcore,@vueuse\u002Fnuxt\n\ncd \"$1\"\n\ncp ~\u002Ftemplates\u002Fnuxt.config.ts .\ncp ~\u002Ftemplates\u002Fwrangler.jsonc .\n",[495,8165,8166,8171,8178,8182,8221,8225,8235,8239,8248],{"__ignoreMap":425},[928,8167,8168],{"class":930,"line":931},[928,8169,8170],{"class":1068},"#!\u002Fusr\u002Fbin\u002Fenv bash\n",[928,8172,8173,8176],{"class":930,"line":1058},[928,8174,8175],{"class":959},"set",[928,8177,5196],{"class":1042},[928,8179,8180],{"class":930,"line":1065},[928,8181,1062],{"emptyLinePlaceholder":1061},[928,8183,8184,8186,8189,8192,8194,8198,8200,8203,8206,8209,8212,8215,8218],{"class":930,"line":1072},[928,8185,7625],{"class":1038},[928,8187,8188],{"class":1042}," nuxi@latest",[928,8190,8191],{"class":1042}," init",[928,8193,3280],{"class":942},[928,8195,8197],{"class":8196},"sHdIc","$1",[928,8199,3688],{"class":942},[928,8201,8202],{"class":1042}," --template",[928,8204,8205],{"class":1042}," minimal",[928,8207,8208],{"class":1042}," --packageManager",[928,8210,8211],{"class":1042}," pnpm",[928,8213,8214],{"class":1042}," --no-gitInit",[928,8216,8217],{"class":1042}," -M",[928,8219,8220],{"class":1042}," @nuxt\u002Fui,@nuxthub\u002Fcore,@vueuse\u002Fnuxt\n",[928,8222,8223],{"class":930,"line":1918},[928,8224,1062],{"emptyLinePlaceholder":1061},[928,8226,8227,8229,8231,8233],{"class":930,"line":1923},[928,8228,2809],{"class":959},[928,8230,3280],{"class":942},[928,8232,8197],{"class":8196},[928,8234,1950],{"class":942},[928,8236,8237],{"class":930,"line":1929},[928,8238,1062],{"emptyLinePlaceholder":1061},[928,8240,8241,8243,8246],{"class":930,"line":2265},[928,8242,2826],{"class":1038},[928,8244,8245],{"class":1042}," ~\u002Ftemplates\u002Fnuxt.config.ts",[928,8247,4892],{"class":1042},[928,8249,8250,8252,8255],{"class":930,"line":2276},[928,8251,2826],{"class":1038},[928,8253,8254],{"class":1042}," ~\u002Ftemplates\u002Fwrangler.jsonc",[928,8256,4892],{"class":1042},[430,8258,8259],{},"Ce script fonctionne jusqu'à ce que les situations suivantes se produisent :",[485,8261,8262,8268,8278],{},[488,8263,8264,8267],{},[441,8265,8266],{},"Valeurs par défaut figées."," Le script intègre de manière fixe le module Nuxt UI ; que se passe-t-il si nous voulons le module Ant Design UI ? Chaque nouvelle option de module nécessite un autre argument de la part de l'utilisateur.",[488,8269,8270,8273,8274,8277],{},[441,8271,8272],{},"Incapacité à lire l'intention de l'utilisateur."," \"Construis-moi un blog\" a besoin de ",[495,8275,8276],{},"@nuxt\u002Fcontent"," ; \"construis-moi un site web avec des newsletters\" nécessite Cloudflare D1 + Drizzle. Un script ne peut pas faire la différence — chaque variation nécessite un nouveau script.",[488,8279,8280,8283,8284,8287],{},[441,8281,8282],{},"Obsolescence silencieuse."," Les conventions de Nuxt changent d'une version majeure à l'autre. Nuxt 4 a modifié le répertoire source en ",[495,8285,8286],{},"app\u002F",". Un script écrit pour Nuxt 3 configure silencieusement une mauvaise structure sans jamais alerter l'utilisateur.",[430,8289,8290,8291,8294],{},"L'",[441,8292,8293],{},"initialisation d'application"," (app scaffolding) est un problème de décision, pas d'exécution. Le script ne passera pas à l'échelle lorsque le nombre de décisions augmentera.",[474,8296,8298],{"id":8297},"pourquoi-utiliser-une-compétence-dagent-ia-plutôt-que-des-scripts-traditionnels","Pourquoi utiliser une compétence d'agent IA plutôt que des scripts traditionnels ?",[430,8300,8301,8302,8305,8306,8309,8310,8313],{},"Une compétence d'agent (agent skill) n'est pas un ensemble de codes qui s'exécutent, mais un ",[441,8303,8304],{},"ensemble de connaissances que l'agent IA suit",". Elle contient un fichier ",[495,8307,8308],{},"SKILL.md"," et puede regrouper tous les autres fichiers nécessaires à la tâche (tels que des documents de référence, des modèles et des scripts exécutables). L'article ",[444,8311,8312],{"href":351},"Compétences des agents d'IA : guide complet de création"," explique le fonctionnement d'une compétence d'agent. Une compétence conserve la rigueur d'un script tout en y ajoutant le jugement raisonnable qui lui fait défaut :",[485,8315,8316,8319,8322,8325,8328],{},[488,8317,8318],{},"Déduit l'intention de l'utilisateur pour déterminer si l'application a besoin d'une base de données.",[488,8320,8321],{},"Décide quels modules optionnels sont nécessaires à partir de la liste spécifiée. Par exemple, Nuxt Content, i18n et analytics sont activés uniquement à la demande de l'utilisateur.",[488,8323,8324],{},"S'adapte à l'écosystème actuel en utilisant le dernier framework Nuxt, NuxtHub pour les liaisons Cloudflare et Wrangler pour le déploiement.",[488,8326,8327],{},"Reprend l'exécution lorsqu'une étape échoue.",[488,8329,8330],{},"Valide le projet par rapport à une liste de contrôle finale avant de le livrer.",[474,8332,8334],{"id":8333},"les-coulisses-de-notre-compétence-dinitialisation-nuxt-cloudflare","Les coulisses de notre compétence d'initialisation Nuxt & Cloudflare",[430,8336,8337,8338,8345],{},"La compétence, ",[444,8339,8342],{"href":8340,"rel":8341},"https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fscaffold-nuxt-cloudflare-app-skill",[448],[495,8343,8344],{},"scaffold-nuxt-cloudflare-app-skill",", guide à travers une initialisation orientée production :",[533,8347,8348,8379,8398,8422,8451,8486,8492],{},[488,8349,8350,8353,8354],{},[441,8351,8352],{},"Clarifier tout ce"," qui ne peut pas être déduit :\n",[485,8355,8356,8367,8370],{},[488,8357,8358,8359,8362,8363,8366],{},"Le kit UI (",[441,8360,8361],{},"Nuxt UI"," par défaut ou ",[441,8364,8365],{},"Antdv Next",") ;",[488,8368,8369],{},"Si une base de données est requise (comme Cloudflare D1) ;",[488,8371,8372,8373,1514,8376,8378],{},"Les modules supplémentaires comme ",[495,8374,8375],{},"@nuxtjs\u002Fi18n",[495,8377,8276],{}," pour les fonctionnalités de CMS.",[488,8380,8381,755,8384,8387,8388,8390,8391,8394,8395,461],{},[441,8382,8383],{},"Initialise l'application de base",[495,8385,8386],{},"pnpm dlx nuxi@latest init"," pour obtenir la dernière version de Nuxt avec ",[495,8389,3579],{}," comme gestionnaire de paquets. Elle configure ensuite les listes d'autorisation de build natif afin que l'environnement de build de Cloudflare puisse compiler ",[495,8392,8393],{},"better-sqlite3","\u002F",[495,8396,8397],{},"sharp",[488,8399,8400,579,8403,1514,8406,739,8409,739,8412,739,8415,739,8418,8421],{},[441,8401,8402],{},"Installe les modules à partir d'une table de décision",[495,8404,8405],{},"@nuxt\u002Fui",[495,8407,8408],{},"@antdv-next\u002Fnuxt",[495,8410,8411],{},"@nuxt\u002Fimage",[495,8413,8414],{},"@nuxtjs\u002Fseo",[495,8416,8417],{},"@nuxthub\u002Fcore",[495,8419,8420],{},"@vueuse\u002Fnuxt",", plus Drizzle\u002FD1, Nuxt Content et i18n uniquement s'ils sont sélectionnés.",[488,8423,8424,3027,8427],{},[441,8425,8426],{},"Organise la structure des répertoires",[485,8428,8429,8433,8438,8443,8448],{},[488,8430,8431],{},[495,8432,8286],{},[488,8434,8435],{},[495,8436,8437],{},"server\u002F",[488,8439,8440],{},[495,8441,8442],{},"shared\u002F",[488,8444,8445],{},[495,8446,8447],{},"tests\u002F",[488,8449,8450],{},"fichiers de configuration à la racine.",[488,8452,8453,3027,8458],{},[441,8454,8455,8456],{},"Configure ",[495,8457,8145],{},[485,8459,8460,8469,8476,8481],{},[488,8461,8462,8394,8465,8468],{},[495,8463,8464],{},"site.url",[495,8466,8467],{},"site.name"," pour le référencement (SEO)",[488,8470,8471,8472,8475],{},"Bloc ",[495,8473,8474],{},"hub"," de NuxtHub pour Cloudflare",[488,8477,8478],{},[495,8479,8480],{},"routeRules",[488,8482,8483],{},[495,8484,8485],{},"compatibilityDate",[488,8487,8488],{},[441,8489,8455,8490],{},[495,8491,8148],{},[488,8493,8494,8497,8498,8501,8502,8505],{},[441,8495,8496],{},"Configure Vitest et ESLint",", puis exécute une ",[441,8499,8500],{},"liste de contrôle finale"," incluant ",[495,8503,8504],{},"pnpm install && pnpm dev"," avant de considérer le travail comme terminé.",[474,8507,8509],{"id":8508},"scripts-shell-vs-compétences-dagents-ia-comparaison-directe","Scripts shell vs compétences d'agents IA : comparaison directe",[602,8511,8512,8524],{},[605,8513,8514],{},[608,8515,8516,8518,8521],{},[611,8517],{},[611,8519,8520],{},"Script",[611,8522,8523],{},"Compétence",[631,8525,8526,8537,8548,8559,8570,8581],{},[608,8527,8528,8531,8534],{},[636,8529,8530],{},"Intention de l'utilisateur",[636,8532,8533],{},"❌ valeurs figées",[636,8535,8536],{},"✅ s'adapte à la demande",[608,8538,8539,8542,8545],{},[636,8540,8541],{},"Prise de décision",[636,8543,8544],{},"uniquement via flags codés",[636,8546,8547],{},"✅ évaluée à l'exécution",[608,8549,8550,8553,8556],{},[636,8551,8552],{},"Changements de version",[636,8554,8555],{},"réécriture manuelle",[636,8557,8558],{},"✅ vérifie l'état actuel",[608,8560,8561,8564,8567],{},[636,8562,8563],{},"Gestion des erreurs",[636,8565,8566],{},"s'arrête",[636,8568,8569],{},"✅ corrige et continue",[608,8571,8572,8575,8578],{},[636,8573,8574],{},"Validation du résultat",[636,8576,8577],{},"❌",[636,8579,8580],{},"✅ liste de contrôle finale",[608,8582,8583,8586,8589],{},[636,8584,8585],{},"Coût de maintenance",[636,8587,8588],{},"multiplication des flags, mises à jour de version",[636,8590,8591],{},"modification du Markdown, pas du code",[474,8593,8595],{"id":8594},"comment-installer-les-compétences-dagents-ia-avec-la-cli-npx-skills","Comment installer les compétences d'agents IA avec la CLI npx skills",[430,8597,8598,8599,886],{},"L'installation se fait en une seule commande avec la ",[444,8600,8603],{"href":8601,"rel":8602},"https:\u002F\u002Fgithub.com\u002Fvercel-labs\u002Fskills",[448],"CLI skills",[920,8605,8607],{"className":1029,"code":8606,"language":1031,"meta":425,"style":425},"npx skills add https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fscaffold-nuxt-cloudflare-app-skill.git -g\n",[495,8608,8609],{"__ignoreMap":425},[928,8610,8611,8613,8616,8618,8621],{"class":930,"line":931},[928,8612,7625],{"class":1038},[928,8614,8615],{"class":1042}," skills",[928,8617,1052],{"class":1042},[928,8619,8620],{"class":1042}," https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fscaffold-nuxt-cloudflare-app-skill.git",[928,8622,8623],{"class":1042}," -g\n",[430,8625,8626,8627],{},"La CLI clone le dépôt, trouve la compétence et demande auquel des 77 agents pris en charge elle doit être attribuée :\n",[433,8628],{"alt":8629,"src":8630},"Interface en ligne de commande montrant l'installation de la compétence d'initialisation Nuxt via la commande CLI npx skills add","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20AI%20Agent%20Skills%20Replace%20Nuxt%20App%20Scaffolding%20Scripts\u002Fnpx-skills-add-scaffold-nuxt-installation.webp",[430,8632,8633,8634,8637,8638,8641,8642],{},"Nous avons choisi ",[441,8635,8636],{},"Symlink"," (la méthode recommandée), qui installe la compétence une seule fois dans ",[495,8639,8640],{},"~\u002F.agents\u002Fskills"," et pointe chaque agent sélectionné vers cette copie unique.\n",[433,8643],{"alt":8644,"src":8645},"Écran de terminal affichant le résumé d'installation et la configuration du lien symbolique pour les compétences d'agents centralisées","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20AI%20Agent%20Skills%20Replace%20Nuxt%20App%20Scaffolding%20Scripts\u002Fnpx-skills-installation-summary-details.webp",[485,8647,8648],{},[488,8649,8650],{},[896,8651,8652,8653,8656],{},"Veuillez vous référer à cet article, ",[444,8654,8655],{"href":359},"Résoudre la fragmentation des compétences d'agents via npx skills",", pour savoir comment centraliser les compétences d'agents dans une source unique de vérité.",[430,8658,8659],{},"L'ouverture de Claude Code confirme que la compétence est correctement installée.",[430,8661,8662],{},[433,8663],{"alt":8664,"src":8665},"Interface de ligne de commande Claude Code montrant la commande slash scaffold-nuxt nouvellement installée, active et prête à l'emploi","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20AI%20Agent%20Skills%20Replace%20Nuxt%20App%20Scaffolding%20Scripts\u002Fclaude-code-scaffold-nuxt-slash-command-active.webp",[430,8667,8668],{},"À partir de là, un prompt en langage naturel suffit :",[2499,8670,8671],{},[430,8672,8673],{},"\"Scaffold a new Nuxt app deployed to Cloudflare Workers — Nuxt UI, a blog section, and a D1 database\"",[430,8675,8676,8677,8681],{},"La compétence est open source ; visitez le ",[444,8678,8680],{"href":8340,"rel":8679},[448],"dépôt GitHub"," et essayez-la.",[1635,8683,8684],{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}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":425,"searchDepth":1058,"depth":1065,"links":8686},[8687,8688,8689,8690,8691],{"id":8156,"depth":1058,"text":8157},{"id":8297,"depth":1058,"text":8298},{"id":8333,"depth":1058,"text":8334},{"id":8508,"depth":1058,"text":8509},{"id":8594,"depth":1058,"text":8595},[1655],"2026-08-25","Créez des apps Nuxt sur Cloudflare. Découvrez pourquoi nous remplaçons les scripts de build fragiles par des compétences d'agent IA robustes et adaptables.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20AI%20Agent%20Skills%20Replace%20Nuxt%20App%20Scaffolding%20Scripts\u002FFR-How-AI-Agent-Skills-Replace-Nuxt-App-Scaffolding-Scripts.webp","Nuxt sur Cloudflare : Compétences d'Agent vs Scripts - Comparatif des scripts de build fragiles et des compétences d'agent IA robustes.",{"schemaOrg":8698,"robots":1689,"sitemap":8700},[8699],{"@type":1666,"headline":8137,"description":8694,"image":8695},{"lastmod":8693},{"title":8702,"description":8694,"ogTitle":8137,"ogDescription":8694,"twitterTitle":8137,"twitterDescription":8694},"Nuxt sur Cloudflare : Compétences d'Agent vs Scripts","fr\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",[8705,6246,8706,8707],"Nuxt","AI Agent","Scaffolding","L3XNlWuzIMEx715tNvP-ddd768fOTZeveQq-XWUx8yY",{"id":8710,"title":8711,"author":1698,"body":8712,"category":9474,"date":9476,"description":9477,"extension":1660,"image":9478,"imageAlt":9479,"isPublished":1061,"meta":9480,"minRead":2276,"navigation":1061,"path":141,"seo":9485,"stem":9486,"tags":9487,"updatedAt":1698,"__hash__":9489},"article\u002Ffr\u002Farticle\u002Fuse-cloudflare-as-ai-memory.md","Bâtir un système de mémoire IA persistant sur Cloudflare",{"type":427,"value":8713,"toc":9456},[8714,8718,8721,8724,8728,8731,8745,8749,8756,8770,8773,8776,8820,8824,8906,8910,8935,9032,9043,9047,9052,9092,9116,9120,9125,9192,9197,9201,9234,9240,9278,9282,9314,9318,9326,9330,9360,9364,9406,9408,9411,9414,9417,9419,9453],[474,8715,8717],{"id":8716},"limportance-dune-mémoire-ia-persistante-pour-les-agents","L'importance d'une mémoire IA persistante pour les agents",[430,8719,8720],{},"À mesure que les assistants IA s'intègrent dans notre quotidien, nous sommes fréquemment confrontés au problème du contexte vide (blank context). Les décisions prises la semaine précédente sont oubliées, nous obligeant à ressaisir continuellement les détails de notre stack technologique et à redéfinir nos préférences utilisateur.",[430,8722,8723],{},"Plutôt que de repartir de zéro à chaque session, nous devons mettre en place un système de mémoire évolutif qui assimile continuellement les choix de l'utilisateur et élimine le besoin de répéter sans cesse le contexte.",[474,8725,8727],{"id":8726},"mémoire-ia-auto-hébergée-vs-systèmes-de-mémoire-intégrés","Mémoire IA auto-hébergée vs. Systèmes de mémoire intégrés",[430,8729,8730],{},"De nombreux agents IA intègrent désormais leur propre mémoire, mais nous n'utilisons rarement qu'un seul outil pour toutes nos tâches. Nous sollicitons Claude pour l'architecture et la conception d'un projet, Kimi pour le code, et ChatGPT pour la recherche de fond. Le contexte n'est pas partagé entre ces différents outils ; il reste cloisonné au sein de chaque agent.",[430,8732,8733,8734,8739,8740,8744],{},"Du point de vue de l'ingénierie logicielle, nous évitons les boîtes noires. Nous exigeons un système de mémoire IA observable, auditable et totalement sous notre contrôle. Le projet open source ",[444,8735,8738],{"href":8736,"rel":8737},"https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fsecond-brain-cloudflare\u002Ftree\u002Fmain",[448],"Second Brain"," (un fork de ",[444,8741,8742],{"href":8742,"rel":8743},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare",[448],") offre une solution de mémoire persistante et auto-hébergée compatible avec le protocole MCP (Model Context Protocol). N'importe quel agent IA compatible (comme Claude, ChatGPT ou Kimi Code) peut ainsi exploiter et alimenter ce contexte unique y compris en local.",[474,8746,8748],{"id":8747},"comment-bâtir-un-second-brain-de-mémoire-ia-sur-cloudflare","Comment bâtir un Second Brain de mémoire IA sur Cloudflare",[430,8750,8751,8752,8755],{},"Le système de mémoire de Second Brain est déployé sur ",[441,8753,8754],{},"Cloudflare Workers",", offrant une infrastructure d'exécution serverless hautement distribuée à l'échelle mondiale. Cela garantit que la recherche de souvenirs (recall) et les autres opérations s'exécutent avec une latence minimale, totalement invisible dans la boucle de réflexion de l'IA.",[430,8757,8758,8759,8762,8763,8766,8767,8769],{},"La génération d'embeddings vectoriels repose sur le modèle dédié de ",[441,8760,8761],{},"Workers AI",". Ces embeddings sont ensuite stockés dans ",[441,8764,8765],{},"Cloudflare Vectorize",", une base de datos vectorielle globale performante. ",[441,8768,8765],{}," effectue une recherche de similarité cosinus (cosine similarity) pour identifier les souvenirs sémantiquement proches de la requête.",[430,8771,8772],{},"Second Brain intègre également des mécanismes de déduplication et de fusion intelligente. Tout contenu présentant une similarité inférieure à 85 % est enregistré ; au-delà, il est ignoré ou marqué comme doublon potentiel. Les textes de plus de 1 600 caractères sont découpés proprement selon les phrases ou les sauts de ligne, avec un chevauchement (overlap) de 200 caractères pour éviter toute perte de contexte. Chaque segment est ensuite vectorisé pour garantir des correspondances ultra-précises.",[430,8774,8775],{},"Les outils suivants sont exposés sous forme d'interfaces MCP exploitables par vos agents IA :",[485,8777,8778,8784,8790,8796,8802,8808,8814],{},[488,8779,8780,8783],{},[495,8781,8782],{},"remember"," : stocker des idées, des décisions, des préférences ou du contexte projet.",[488,8785,8786,8789],{},[495,8787,8788],{},"append"," : ajouter des précisions à un souvenir existant.",[488,8791,8792,8795],{},[495,8793,8794],{},"update"," : remplacer intégralement un souvenir.",[488,8797,8798,8801],{},[495,8799,8800],{},"recall"," : rechercher des souvenirs par leur sens sémantique plutôt que par des mots-clés exacts.",[488,8803,8804,8807],{},[495,8805,8806],{},"list_recent"," : lister les derniers souvenirs enregistrés.",[488,8809,8810,8813],{},[495,8811,8812],{},"forget"," : supprimer définitivement un souvenir.",[488,8815,8816,8819],{},[495,8817,8818],{},"link\u002Fconnections"," : lier des souvenirs associés entre eux (fonctionnalité de graphe v2).",[876,8821,8823],{"id":8822},"configuration-de-second-brain-sur-cloudflare","Configuration de Second Brain sur Cloudflare",[533,8825,8826,8843,8850,8857,8864,8871,8882,8889,8892,8899],{},[488,8827,4254,8828,8831,8832,8837,8838,8842],{},[495,8829,8830],{},"Deploy to Cloudflare"," depuis la page du ",[444,8833,8836],{"href":8834,"rel":8835},"https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fsecond-brain-cloudflare",[448],"Github repo",". [[",[433,8839],{"alt":8840,"src":8841},"Page GitHub avec le bouton Deploy to Cloudflare mis en évidence","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fdeploy-to-cloudflare-button.webp","]]",[488,8844,8845,8846],{},"Remplissez le formulaire de création du Cloudflare Worker.\n",[433,8847],{"alt":8848,"src":8849},"Formulaire de configuration du déploiement de Cloudflare Workers","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-worker-deployment-form.webp",[488,8851,8852,8853],{},"Saisissez '384' pour Dimensions, sélectionnez 'cosine' pour Metric, puis cliquez sur le bouton Deploy.\n",[433,8854],{"alt":8855,"src":8856},"Écran de configuration de la création de base de données Cloudflare Vectorize","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-vectorize-configuration.webp",[488,8858,8859,8860],{},"Voici un aperçu de l'interface d'administration de Second Brain déployé sur Cloudflare Worker.\n",[433,8861],{"alt":8862,"src":8863},"Tableau de bord général du worker Second Brain déployé","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-worker-second-brain-overview.webp",[488,8865,8866,8867],{},"Accédez à l'onglet 'Settings', puis cliquez sur l'icône d'édition de la variable 'AUTH_TOKEN' afin de définir votre jeton de sécurité.\n",[433,8868],{"alt":8869,"src":8870},"Paramètres des variables de Cloudflare Worker mettant en évidence AUTH_TOKEN","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-worker-auth-token-settings.webp",[488,8872,8873,8874,8878],{},"Cliquez sur le lien 'Rotate' pour pouvoir saisir une nouvelle valeur. ",[433,8875],{"alt":8876,"src":8877},"Écran de modification et de rotation de la variable AUTH_TOKEN","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-worker-auth-token-rotate.webp",[433,8879],{"alt":8880,"src":8881},"Saisie de la chaîne aléatoire générée dans le champ de valeur AUTH_TOKEN","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-worker-auth-token-value-input.webp",[488,8883,8884,8885,8888],{},"Lancez la commande ",[495,8886,8887],{},"openssl rand -base64 32"," dans votre terminal macOS pour générer une clé d'accès aléatoire et collez-la dans le champ de saisie 'Value'.",[488,8890,8891],{},"Cliquez sur le bouton 'Deploy' pour appliquer et enregistrer la nouvelle valeur de 'AUTH_TOKEN'.",[488,8893,8894,8895],{},"Ouvrez l'URL de votre worker Second Brain dans votre navigateur web.\n",[433,8896],{"alt":8897,"src":8898},"Écran de connexion de l'interface web de Second Brain avec champ de saisie Bearer Token","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fsecond-brain-web-ui-login.webp",[488,8900,8901,8902,8905],{},"Saisissez le jeton 'AUTH_TOKEN' créé dans le champ ",[495,8903,8904],{},"Bearer token"," puis cliquez sur le bouton 'Connect' pour accéder à l'interface web (Web UI).",[876,8907,8909],{"id":8908},"intégration-de-claude-desktop-via-mcp","Intégration de Claude Desktop via MCP",[533,8911,8912,8919,8926],{},[488,8913,8914,8915],{},"Cliquez sur 'Customize' dans Claude Desktop.\n",[433,8916],{"alt":8917,"src":8918},"Interface de Claude Desktop pointant vers le bouton Customize","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-customize-button.webp",[488,8920,8921,8922],{},"Cliquez sur 'Developer' pour éditer manuellement le fichier de configuration des serveurs MCP.\n",[433,8923],{"alt":8924,"src":8925},"Menu des paramètres développeur de Claude Desktop pour accéder à la configuration MCP","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-developer-menu.webp",[488,8927,8928,8929,8931,8932,886],{},"Ajoutez la configuration suivante à la section ",[495,8930,7588],{}," de votre fichier ",[495,8933,8934],{},"claude_desktop_config.json",[920,8936,8938],{"className":2898,"code":8937,"language":2900,"meta":425,"style":425},"    \"second-brain\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"mcp-remote\",\n        \"https:\u002F\u002F\u003Cyour-worker-url>\u002Fmcp\",\n        \"--header\",\n        \"Authorization: Bearer \u003Cyour-token>\"\n      ]\n    }\n",[495,8939,8940,8953,8971,8983,8993,9004,9015,9024,9028],{"__ignoreMap":425},[928,8941,8942,8944,8947,8949,8951],{"class":930,"line":931},[928,8943,7600],{"class":942},[928,8945,8946],{"class":1042},"second-brain",[928,8948,3688],{"class":942},[928,8950,7593],{"class":938},[928,8952,2907],{"class":942},[928,8954,8955,8957,8959,8961,8963,8965,8967,8969],{"class":930,"line":1058},[928,8956,7613],{"class":942},[928,8958,7616],{"class":934},[928,8960,3688],{"class":942},[928,8962,1353],{"class":942},[928,8964,3280],{"class":942},[928,8966,7625],{"class":1042},[928,8968,3688],{"class":942},[928,8970,7630],{"class":942},[928,8972,8973,8975,8977,8979,8981],{"class":930,"line":1065},[928,8974,7613],{"class":942},[928,8976,7637],{"class":934},[928,8978,3688],{"class":942},[928,8980,1353],{"class":942},[928,8982,7644],{"class":942},[928,8984,8985,8987,8989,8991],{"class":930,"line":1072},[928,8986,7649],{"class":942},[928,8988,7652],{"class":1042},[928,8990,3688],{"class":942},[928,8992,7630],{"class":942},[928,8994,8995,8997,9000,9002],{"class":930,"line":1918},[928,8996,7649],{"class":942},[928,8998,8999],{"class":1042},"https:\u002F\u002F\u003Cyour-worker-url>\u002Fmcp",[928,9001,3688],{"class":942},[928,9003,7630],{"class":942},[928,9005,9006,9008,9011,9013],{"class":930,"line":1923},[928,9007,7649],{"class":942},[928,9009,9010],{"class":1042},"--header",[928,9012,3688],{"class":942},[928,9014,7630],{"class":942},[928,9016,9017,9019,9022],{"class":930,"line":1929},[928,9018,7649],{"class":942},[928,9020,9021],{"class":1042},"Authorization: Bearer \u003Cyour-token>",[928,9023,1950],{"class":942},[928,9025,9026],{"class":930,"line":2265},[928,9027,7728],{"class":942},[928,9029,9030],{"class":930,"line":2276},[928,9031,7733],{"class":942},[430,9033,9034,9038,9039],{},[433,9035],{"alt":9036,"src":9037},"JSON de configuration de Claude Desktop MCP contenant le serveur Second Brain","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-mcp-config-json.webp","\n4. Redémarrez Claude Desktop et vérifiez la liste des 'Local MCP servers'. Le statut doit indiquer 'running'.\n",[433,9040],{"alt":9041,"src":9042},"Claude Desktop affichant le statut actif pour le serveur Second Brain MCP","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-mcp-status-running.webp",[876,9044,9046],{"id":9045},"intégration-de-claude-code-via-mcp","Intégration de Claude Code via MCP",[485,9048,9049],{},[488,9050,9051],{},"Exécutez la commande suivante pour ajouter le serveur MCP :",[920,9053,9055],{"className":2295,"code":9054,"language":2297,"meta":425,"style":425},"claude mcp add --transport http second-brain https:\u002F\u002F\u003Cyour-worker-url>\u002Fmcp\n",[495,9056,9057],{"__ignoreMap":425},[928,9058,9059,9062,9065,9067,9070,9073,9076,9079,9081,9084,9087,9089],{"class":930,"line":931},[928,9060,9061],{"class":1038},"claude",[928,9063,9064],{"class":1042}," mcp",[928,9066,1052],{"class":1042},[928,9068,9069],{"class":1042}," --transport",[928,9071,9072],{"class":1042}," http",[928,9074,9075],{"class":1042}," second-brain",[928,9077,9078],{"class":1042}," https:\u002F\u002F",[928,9080,5563],{"class":942},[928,9082,9083],{"class":1042},"your-worker-ur",[928,9085,9086],{"class":938},"l",[928,9088,1244],{"class":942},[928,9090,9091],{"class":1042},"\u002Fmcp\n",[485,9093,9094,9100],{},[488,9095,9096,9097,461],{},"Claude Code détectera automatiquement que le point de terminaison (endpoint) requiert une authentification OAuth et ouvrira une page de connexion dans votre navigateur pour valider votre ",[495,9098,9099],{},"AUTH_TOKEN",[488,9101,9102,9103,9106,9107,9110,9111,461],{},"Créez un fichier ",[495,9104,9105],{},"CLAUDE.md"," dans le répertoire ",[495,9108,9109],{},"~\u002F.claude"," et ajoutez-y les instructions détaillées issues de ",[444,9112,9115],{"href":9113,"rel":9114},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare\u002Fblob\u002Fmain\u002FAI_Instructions\u002FCLAUDE_INSTRUCTIONS.md",[448],"CLAUDE_INSTRUCTIONS.md",[876,9117,9119],{"id":9118},"intégration-de-gemini-cli-via-mcp","Intégration de Gemini CLI via MCP",[533,9121,9122],{},[488,9123,9124],{},"Ajoutez la configuration de serveur MCP suivante à votre fichier '.\u002F.gemini\u002Fsettings.json' :",[920,9126,9128],{"className":2898,"code":9127,"language":2900,"meta":425,"style":425},"    \"second-brain\": {\n      \"httpUrl\": \"https:\u002F\u002F\u003Cyour-worker-url>\u002Fmcp\",\n      \"oauth\": {\n        \"enabled\": true\n      }\n    }\n",[495,9129,9130,9142,9160,9172,9184,9188],{"__ignoreMap":425},[928,9131,9132,9134,9136,9138,9140],{"class":930,"line":931},[928,9133,7600],{"class":942},[928,9135,8946],{"class":1042},[928,9137,3688],{"class":942},[928,9139,7593],{"class":938},[928,9141,2907],{"class":942},[928,9143,9144,9146,9148,9150,9152,9154,9156,9158],{"class":930,"line":1058},[928,9145,7613],{"class":942},[928,9147,7840],{"class":934},[928,9149,3688],{"class":942},[928,9151,1353],{"class":942},[928,9153,3280],{"class":942},[928,9155,8999],{"class":1042},[928,9157,3688],{"class":942},[928,9159,7630],{"class":942},[928,9161,9162,9164,9166,9168,9170],{"class":930,"line":1065},[928,9163,7613],{"class":942},[928,9165,7859],{"class":934},[928,9167,3688],{"class":942},[928,9169,1353],{"class":942},[928,9171,2937],{"class":942},[928,9173,9174,9176,9178,9180,9182],{"class":930,"line":1072},[928,9175,7649],{"class":942},[928,9177,7872],{"class":1038},[928,9179,3688],{"class":942},[928,9181,1353],{"class":942},[928,9183,1375],{"class":942},[928,9185,9186],{"class":930,"line":1918},[928,9187,7883],{"class":942},[928,9189,9190],{"class":930,"line":1923},[928,9191,7733],{"class":942},[533,9193,9194],{"start":1058},[488,9195,9196],{},"Démarrez l'interface Gemini CLI.",[876,9198,9200],{"id":9199},"tester-second-brain-avec-les-agents-ia","Tester Second Brain avec les agents IA",[533,9202,9203,9213,9227],{},[488,9204,9205,9206,9208,9209],{},"En commençant par configurer une simple palette de marque dans ",[441,9207,7541],{},", Second Brain n'est pas sollicité par défaut.\n",[433,9210],{"alt":9211,"src":9212},"Premier test dans Claude Desktop sans la couche de mémoire Second Brain active","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-first-run-brand-palette.webp",[488,9214,9215,9216,9219,9220,9222,9223],{},"En utilisant le mot-clé générique 'remember', seuls les outils locaux ",[495,9217,9218],{},"memory_user-edits"," de ",[441,9221,7541],{}," s'exécutent, ignorant la couche distante de Second Brain.\n",[433,9224],{"alt":9225,"src":9226},"Claude Desktop basculant vers les modifications locales intégrées au lieu de Second Brain","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-remember-built-in-tool-fallback.webp",[488,9228,9229,9230,9233],{},"En soumettant l'instruction suivante à ",[441,9231,9232],{},"Claude Code",", le serveur Second Brain est immédiatement appelé :",[920,9235,9238],{"className":9236,"code":9237,"language":4635},[4633],"Remember Our brand palette uses `#1a1a2e` as primary, `#16213e` as secondary, and `#e94560` as accent. Never use pure black.\"\n",[495,9239,9237],{"__ignoreMap":425},[430,9241,9242,9246,9247,3027,9250,9254,9255,9258,9259,9261,9262,9266,9267,9270,9271,9254,9275],{},[433,9243],{"alt":9244,"src":9245},"Fenêtre de terminal de Claude Code affichant le déclenchement réussi de Second Brain MCP","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-code-second-brain-mcp-called.webp","\n4. Nous pouvons instantanément vérifier l'enregistrement des codes couleurs au sein de la base ",[441,9248,9249],{},"Second Brain sur Cloudflare",[433,9251],{"alt":9252,"src":9253},"Vérification des codes couleur de marque enregistrés dans la base de données de Second Brain","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fsecond-brain-web-ui-color-verification.webp","\n- ",[896,9256,9257],{},"Si Claude Code a réagi correctement, c'est parce que son fichier de directives CLAUDE_INSTRUCTIONS.md contient explicitement les termes liés à 'Second Brain'.","\n5. Pour obtenir le même résultat dans ",[441,9260,7541],{},", vous devez mentionner explicitement 'Second Brain' dans vos prompts pour forcer l'écriture ou la lecture de cette couche mémoire.\n",[433,9263],{"alt":9264,"src":9265},"Déclenchement de Second Brain dans Claude Desktop en mentionnant explicitement les mots-clés","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-second-brain-explicit-trigger.webp","\n6. De la même manière, le mot-clé 'Second Brain' doit être mentionné dans vos échanges avec le ",[441,9268,9269],{},"Gemini CLI"," pour déclencher l'appel MCP associé.\n",[433,9272],{"alt":9273,"src":9274},"Fenêtre de terminal de Gemini CLI montrant des appels réussis vers Second Brain MCP","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fgemini-cli-second-brain-trigger.webp",[896,9276,9277],{},"L'ajout de directives adaptées dans votre fichier GEMINI.md (similaires à celles de CLAUDE_INSTRUCTIONS.md) permettra de solliciter Second Brain de manière totalement transparente.",[876,9279,9281],{"id":9280},"extensions-pour-navigateurs-web","Extensions pour navigateurs web",[485,9283,9284,9287],{},[488,9285,9286],{},"Des extensions officielles sont disponibles pour Google Chrome, Mozilla Firefox et Microsoft Edge.",[488,9288,9289,9290],{},"Elles permettent de :\n",[485,9291,9292,9298,9304],{},[488,9293,9294,9297],{},[441,9295,9296],{},"Capturer la page actuelle"," — sauvegarde le titre et l'adresse URL directement dans votre Second Brain.",[488,9299,9300,9303],{},[441,9301,9302],{},"Capturer un extrait de texte"," — sélectionnez n'importe quelle ligne de texte sur une page avant de cliquer sur l'extension pour l'enregistrer avec les métadonnées de la page.",[488,9305,9306,9309,9310,9313],{},[441,9307,9308],{},"Ajouter une note libre"," — saisissez du contexte ou des ",[495,9311,9312],{},"#hashtags"," directement depuis la popup de l'extension ; les tags sont automatiquement extraits et catégorisés.",[876,9315,9317],{"id":9316},"synchroniser-ses-connaissances-personnelles-avec-le-plugin-obsidian","Synchroniser ses connaissances personnelles avec le plugin Obsidian",[485,9319,9320,9323],{},[488,9321,9322],{},"Un plugin Obsidian dédié permet de synchroniser de manière bidirectionnelle les notes de votre coffre (Vault) local vers votre Second Brain hébergé sur Cloudflare.",[488,9324,9325],{},"Vous pouvez choisir de ne synchroniser que les notes associées à un tag spécifique.",[2153,9327,9329],{"id":9328},"installer-le-plugin-obsidian","Installer le plugin Obsidian",[533,9331,9332,9339,9346,9353],{},[488,9333,9334,9335],{},"Ouvrez Obsidian → Settings → Community Plugins\n",[433,9336],{"alt":9337,"src":9338},"Panneau de configuration d'Obsidian naviguant vers la section Community Plugins","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-settings-community-plugins.webp",[488,9340,9341,9342],{},"Cliquez sur le bouton 'Browse'.\n",[433,9343],{"alt":9344,"src":9345},"Page de recherche des plugins d'Obsidian affichant le bouton Browse","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-community-plugins-browse.webp",[488,9347,9348,9349],{},"Recherchez 'Second Brain Sync'.\n",[433,9350],{"alt":9351,"src":9352},"Recherche du plugin Second Brain Sync dans la bibliothèque d'extensions d'Obsidian","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-community-plugins-search-second-brain.webp",[488,9354,9355,9356],{},"Cliquez sur 'Install' puis sur 'Enable'.\n",[433,9357],{"alt":9358,"src":9359},"Installation et activation du plugin Second Brain Sync dans Obsidian","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-plugin-install-and-enable.webp",[2153,9361,9363],{"id":9362},"configurer-le-plugin-obsidian","Configurer le plugin Obsidian",[533,9365,9366,9369,9376,9383,9390,9399],{},[488,9367,9368],{},"Ouvrez Obsidian → Settings → Second Brain Sync",[488,9370,9371,9372],{},"Renseignez l'adresse de votre Worker ('URL') et votre jeton de sécurité ('Auth token').\n",[433,9373],{"alt":9374,"src":9375},"Saisie de l'URL du Worker et du jeton d'autorisation dans les paramètres d'Obsidian","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-plugin-configuration-credentials.webp",[488,9377,9378,9379],{},"Cliquez sur le bouton 'Test' pour valider la bonne communication avec votre serveur.\n",[433,9380],{"alt":9381,"src":9382},"Test de connexion réussi du plugin Obsidian vers la base de données","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-plugin-connection-test-success.webp",[488,9384,9385,9386],{},"Ajustez les préférences de synchronisation. Définissez le tag de déclenchement ('Sync tag') et cochez 'Auto-sync on save'.\n",[433,9387],{"alt":9388,"src":9389},"Configuration du Sync Tag et activation de l'auto-synchronisation à l'enregistrement dans Obsidian","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-plugin-sync-behavior-settings.webp",[488,9391,9392,9393,1791,9395],{},"Créez une nouvelle note dans Obsidian et associez-y le tag configuré (par exemple ",[495,9394,8946],{},[433,9396],{"alt":9397,"src":9398},"Création d'une nouvelle note dans Obsidian tagguée avec second-brain pour la synchronisation","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-note-with-sync-tag.webp",[488,9400,9401,9402],{},"Dès l'enregistrement, la note est instantanément synchronisée avec votre instance Cloudflare.\n",[433,9403],{"alt":9404,"src":9405},"Vérification de la note Obsidian synchronisée avec succès dans l'interface web de Second Brain","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fsecond-brain-web-ui-synced-note-verification.webp",[474,9407,2564],{"id":2563},[430,9409,9410],{},"Second Brain offre une réponse open source élégante à l'une de nos plus grandes frustrations avec les IA : l'absence de mémoire à long terme. En s'appuyant sur l'infrastructure robuste de Cloudflare, il déploie une couche de mémoire sémantique auto-hébergée, globale et à très faible latence. Grâce aux interfaces MCP, cette base de connaissances devient nativement transportable entre tous vos assistants virtuels.",[430,9412,9413],{},"L'intégration d'Obsidian pousse l'expérience encore plus loin en jetant un pont entre la prise de notes structurée et l'exécution d'agents. Vos notes personnelles se métamorphosent ainsi en un contexte exploitable par l'IA à la demande.",[430,9415,9416],{},"En fusionnant auto-hébergement, recherche vectorielle sémantique et protocoles ouverts (MCP), Second Brain jette les bases concrètes de ce que doit être un véritable écosystème d'agents IA au service de l'utilisateur.",[474,9418,1607],{"id":1606},[485,9420,9421,9427,9433,9440,9447],{},[488,9422,9423],{},[444,9424,9425],{"href":9425,"rel":9426},"https:\u002F\u002Fwww.thesecondbrain.dev\u002F",[448],[488,9428,9429],{},[444,9430,9431],{"href":9431,"rel":9432},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare\u002Fwiki\u002FHow-It-Works",[448],[488,9434,9435],{},[444,9436,9439],{"href":9437,"rel":9438},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare\u002Fwiki\u002FConnect-to-AI-Clients",[448],"Connect to AI Clients",[488,9441,9442],{},[444,9443,9446],{"href":9444,"rel":9445},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare\u002Fwiki\u002FObsidian-Plugin",[448],"Second Brain Obsidian Plugin",[488,9448,9449],{},[444,9450,9451],{"href":9451,"rel":9452},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-obsidian-plugin",[448],[1635,9454,9455],{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":425,"searchDepth":1058,"depth":1065,"links":9457},[9458,9459,9460,9472,9473],{"id":8716,"depth":1058,"text":8717},{"id":8726,"depth":1058,"text":8727},{"id":8747,"depth":1058,"text":8748,"children":9461},[9462,9463,9464,9465,9466,9467,9468],{"id":8822,"depth":1065,"text":8823},{"id":8908,"depth":1065,"text":8909},{"id":9045,"depth":1065,"text":9046},{"id":9118,"depth":1065,"text":9119},{"id":9199,"depth":1065,"text":9200},{"id":9280,"depth":1065,"text":9281},{"id":9316,"depth":1065,"text":9317,"children":9469},[9470,9471],{"id":9328,"depth":1072,"text":9329},{"id":9362,"depth":1072,"text":9363},{"id":2563,"depth":1058,"text":2564},{"id":1606,"depth":1058,"text":1607},[9475,1655],"cloudflare","2026-08-07","Découvrez comment créer une mémoire IA persistante et auto-hébergée sur Cloudflare avec Second Brain et MCP. Partagez votre contexte entre Claude et Obsidian.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002FFR-Use-Cloudflare-as-AI-memory.webp","Un système de mémoire IA persistant et auto-hébergé sur Cloudflare Workers et Vectorize avec support MCP et synchronisation Obsidian.",{"schemaOrg":9481,"robots":1689,"sitemap":9484},[9482],{"@type":1666,"headline":9483,"description":9477},"Mémoire IA persistante auto-hébergée avec Cloudflare & MCP",{"lastmod":9476},{"title":9483,"description":9477,"ogTitle":8711,"ogDescription":9477,"twitterTitle":8711,"twitterDescription":9477},"fr\u002Farticle\u002Fuse-cloudflare-as-ai-memory",[6246,6934,9488,8738,4090],"Mémoire IA","ueDwSZvKuSqGS2apgI6d6XyxbLzPRakfdalGtokWIRs",{"id":9491,"title":2511,"author":425,"body":9492,"category":10007,"date":10008,"description":10009,"extension":1660,"image":10010,"imageAlt":10011,"isPublished":1061,"meta":10012,"minRead":1072,"navigation":1061,"path":133,"seo":10016,"stem":10017,"tags":10018,"updatedAt":1698,"__hash__":10021},"article\u002Ffr\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac.md",{"type":427,"value":9493,"toc":10000},[9494,9498,9501,9508,9512,9518,9521,9524,9528,9531,9538,9554,9848,9960,9962,9965,9967,9997],[474,9495,9497],{"id":9496},"quest-ce-que-cloudflare-warp","Qu'est-ce que Cloudflare WARP ?",[430,9499,9500],{},"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.",[430,9502,9503,9504,9507],{},"Elle crée un tunnel chiffré basé sur le protocole ",[441,9505,9506],{},"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.",[474,9509,9511],{"id":9510},"pourquoi-avons-nous-besoin-de-cloudflare-warp","Pourquoi avons-nous besoin de Cloudflare WARP ?",[430,9513,9514,9515,461],{},"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'",[441,9516,9517],{},"Accès Réseau Zero Trust (ZTNA)",[430,9519,9520],{},"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.",[430,9522,9523],{},"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.",[474,9525,9527],{"id":9526},"prise-en-charge-de-plusieurs-profils-warp-sur-un-seul-appareil","Prise en charge de plusieurs profils WARP sur un seul appareil",[430,9529,9530],{},"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.",[430,9532,9533,9534,9537],{},"Pour y parvenir sur macOS, nous pouvons utiliser un fichier de profil MDM ",[495,9535,9536],{},".mobileconfig"," afin de définir et d'enregistrer les différents environnements WARP.",[485,9539,9540,9551],{},[488,9541,9542,9550],{},[444,9543,9546,9547,9549],{"href":9544,"rel":9545},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fstatic\u002Fmdm\u002Fmultiple-orgs\u002FCloudflareWARP.mobileconfig",[448],"Download a sample ",[495,9548,9536],{}," file"," directement depuis Cloudflare.",[488,9552,9553],{},"Voici un exemple de ce à quoi ressemble cette configuration :",[920,9555,9559],{"className":9556,"code":9557,"language":9558,"meta":425,"style":425},"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",[495,9560,9561,9566,9571,9576,9581,9586,9591,9596,9601,9606,9611,9616,9621,9626,9631,9636,9641,9646,9651,9656,9661,9666,9671,9676,9681,9686,9691,9696,9700,9704,9709,9713,9718,9722,9728,9734,9740,9746,9752,9758,9764,9770,9776,9782,9788,9794,9800,9806,9812,9818,9824,9830,9836,9842],{"__ignoreMap":425},[928,9562,9563],{"class":930,"line":931},[928,9564,9565],{},"\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n",[928,9567,9568],{"class":930,"line":1058},[928,9569,9570],{},"\u003C!DOCTYPE plist PUBLIC \"-\u002F\u002FApple\u002F\u002FDTD PLIST 1.0\u002F\u002FEN\" \"http:\u002F\u002Fwww.apple.com\u002FDTDs\u002FPropertyList-1.0.dtd\">\n",[928,9572,9573],{"class":930,"line":1065},[928,9574,9575],{},"\u003Cplist version=\"1.0\">\n",[928,9577,9578],{"class":930,"line":1072},[928,9579,9580],{},"\u003Cdict>\n",[928,9582,9583],{"class":930,"line":1918},[928,9584,9585],{},"  \u003Ckey>PayloadContent\u003C\u002Fkey>\n",[928,9587,9588],{"class":930,"line":1923},[928,9589,9590],{},"  \u003Carray>\n",[928,9592,9593],{"class":930,"line":1929},[928,9594,9595],{},"    \u003Cdict>\n",[928,9597,9598],{"class":930,"line":2265},[928,9599,9600],{},"      \u003Ckey>PayloadDisplayName\u003C\u002Fkey>\n",[928,9602,9603],{"class":930,"line":2276},[928,9604,9605],{},"      \u003Cstring>Warp Configuration\u003C\u002Fstring>\n",[928,9607,9608],{"class":930,"line":2372},[928,9609,9610],{},"      \u003Ckey>PayloadIdentifier\u003C\u002Fkey>\n",[928,9612,9613],{"class":930,"line":1691},[928,9614,9615],{},"      \u003Cstring>com.cloudflare.warp.CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n",[928,9617,9618],{"class":930,"line":2383},[928,9619,9620],{},"      \u003Ckey>PayloadOrganization\u003C\u002Fkey>\n",[928,9622,9623],{"class":930,"line":2388},[928,9624,9625],{},"      \u003Cstring>Cloudflare Ltd.\u003C\u002Fstring>\n",[928,9627,9628],{"class":930,"line":2394},[928,9629,9630],{},"      \u003Ckey>PayloadType\u003C\u002Fkey>\n",[928,9632,9633],{"class":930,"line":3349},[928,9634,9635],{},"      \u003Cstring>com.cloudflare.warp\u003C\u002Fstring>\n",[928,9637,9638],{"class":930,"line":3360},[928,9639,9640],{},"      \u003Ckey>PayloadUUID\u003C\u002Fkey>\n",[928,9642,9643],{"class":930,"line":3365},[928,9644,9645],{},"      \u003Cstring>CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n",[928,9647,9648],{"class":930,"line":3373},[928,9649,9650],{},"      \u003Ckey>PayloadVersion\u003C\u002Fkey>\n",[928,9652,9653],{"class":930,"line":3901},[928,9654,9655],{},"      \u003Cinteger>1\u003C\u002Finteger>\n",[928,9657,9658],{"class":930,"line":3907},[928,9659,9660],{},"      \u003Ckey>configs\u003C\u002Fkey>\n",[928,9662,9663],{"class":930,"line":3916},[928,9664,9665],{},"      \u003Carray>\n",[928,9667,9668],{"class":930,"line":4565},[928,9669,9670],{},"        \u003Cdict>\n",[928,9672,9673],{"class":930,"line":5019},[928,9674,9675],{},"          \u003Ckey>organization\u003C\u002Fkey>\n",[928,9677,9678],{"class":930,"line":5028},[928,9679,9680],{},"          \u003Cstring>your-team-name-1\u003C\u002Fstring>\n",[928,9682,9683],{"class":930,"line":5036},[928,9684,9685],{},"          \u003Ckey>display_name\u003C\u002Fkey>\n",[928,9687,9688],{"class":930,"line":5044},[928,9689,9690],{},"          \u003Cstring>Team 1\u003C\u002Fstring>\n",[928,9692,9693],{"class":930,"line":5049},[928,9694,9695],{},"        \u003C\u002Fdict>\n",[928,9697,9698],{"class":930,"line":5056},[928,9699,9670],{},[928,9701,9702],{"class":930,"line":5064},[928,9703,9675],{},[928,9705,9706],{"class":930,"line":5072},[928,9707,9708],{},"          \u003Cstring>your-team-name-2\u003C\u002Fstring>\n",[928,9710,9711],{"class":930,"line":5083},[928,9712,9685],{},[928,9714,9715],{"class":930,"line":5091},[928,9716,9717],{},"          \u003Cstring>Team 2\u003C\u002Fstring>\n",[928,9719,9720],{"class":930,"line":5098},[928,9721,9695],{},[928,9723,9725],{"class":930,"line":9724},34,[928,9726,9727],{},"      \u003C\u002Farray>\n",[928,9729,9731],{"class":930,"line":9730},35,[928,9732,9733],{},"    \u003C\u002Fdict>\n",[928,9735,9737],{"class":930,"line":9736},36,[928,9738,9739],{},"  \u003C\u002Farray>\n",[928,9741,9743],{"class":930,"line":9742},37,[928,9744,9745],{},"  \u003Ckey>PayloadDisplayName\u003C\u002Fkey>\n",[928,9747,9749],{"class":930,"line":9748},38,[928,9750,9751],{},"  \u003Cstring>Cloudflare WARP\u003C\u002Fstring>\n",[928,9753,9755],{"class":930,"line":9754},39,[928,9756,9757],{},"  \u003Ckey>PayloadIdentifier\u003C\u002Fkey>\n",[928,9759,9761],{"class":930,"line":9760},40,[928,9762,9763],{},"  \u003Cstring>cloudflare_warp\u003C\u002Fstring>\n",[928,9765,9767],{"class":930,"line":9766},41,[928,9768,9769],{},"  \u003Ckey>PayloadOrganization\u003C\u002Fkey>\n",[928,9771,9773],{"class":930,"line":9772},42,[928,9774,9775],{},"  \u003Cstring>Cloudflare, Ltd.\u003C\u002Fstring>\n",[928,9777,9779],{"class":930,"line":9778},43,[928,9780,9781],{},"  \u003Ckey>PayloadRemovalDisallowed\u003C\u002Fkey>\n",[928,9783,9785],{"class":930,"line":9784},44,[928,9786,9787],{},"  \u003Cfalse\u002F>\n",[928,9789,9791],{"class":930,"line":9790},45,[928,9792,9793],{},"  \u003Ckey>PayloadScope\u003C\u002Fkey>\n",[928,9795,9797],{"class":930,"line":9796},46,[928,9798,9799],{},"  \u003Cstring>System\u003C\u002Fstring>\n",[928,9801,9803],{"class":930,"line":9802},47,[928,9804,9805],{},"  \u003Ckey>PayloadType\u003C\u002Fkey>\n",[928,9807,9809],{"class":930,"line":9808},48,[928,9810,9811],{},"  \u003Cstring>Configuration\u003C\u002Fstring>\n",[928,9813,9815],{"class":930,"line":9814},49,[928,9816,9817],{},"  \u003Ckey>PayloadUUID\u003C\u002Fkey>\n",[928,9819,9821],{"class":930,"line":9820},50,[928,9822,9823],{},"  \u003Cstring>2B7763B8-64F6-41EB-AA5E-7761651B8131\u003C\u002Fstring>\n",[928,9825,9827],{"class":930,"line":9826},51,[928,9828,9829],{},"  \u003Ckey>PayloadVersion\u003C\u002Fkey>\n",[928,9831,9833],{"class":930,"line":9832},52,[928,9834,9835],{},"  \u003Cinteger>1\u003C\u002Finteger>\n",[928,9837,9839],{"class":930,"line":9838},53,[928,9840,9841],{},"\u003C\u002Fdict>\n",[928,9843,9845],{"class":930,"line":9844},54,[928,9846,9847],{},"\u003C\u002Fplist>\n",[485,9849,9850,9860,9872,9882,9888,9905,9917,9936,9951],{},[488,9851,9852,9853,575,9856,9859],{},"Remplacez ",[495,9854,9855],{},"your-team-name-1",[495,9857,9858],{},"your-team-name-2"," par vos noms d'équipe Cloudflare Zero Trust respectifs.",[488,9861,2980,9862,9865,9866,9869,9870,461],{},[495,9863,9864],{},"uuidgen"," dans votre Terminal pour générer des UUID uniques, et utilisez-les pour remplacer les valeurs ",[495,9867,9868],{},"PayloadUUID"," temporaires dans le fichier ",[495,9871,9536],{},[488,9873,9874,9875,9878,9879,9881],{},"Assurez-vous que la chaîne ",[495,9876,9877],{},"PayloadIdentifier"," contient également le ",[495,9880,9868],{}," mis à jour pour que le profil reste distinct.",[488,9883,9884,9885,9887],{},"Enregistrez votre fichier ",[495,9886,9536],{}," modifié.",[488,9889,9890,9891,9894,9895,9898,9899,9901],{},"Ouvrez les ",[441,9892,9893],{},"Réglages Système"," sur votre Mac, recherchez ",[441,9896,9897],{},"Profils",", puis sélectionnez-le.",[1874,9900],{},[433,9902],{"alt":9903,"src":9904},"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",[488,9906,4254,9907,9910,9911,9913],{},[441,9908,9909],{},"Installer, afficher ou supprimer..."," pour commencer à ajouter votre nouveau profil de configuration.",[1874,9912],{},[433,9914],{"alt":9915,"src":9916},"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",[488,9918,9919,9920,9922,9923,9925,9926,9928,9932],{},"Cliquez sur l'icône ",[441,9921,711],{}," (plus) dans le coin inférieur gauche et sélectionnez votre fichier ",[495,9924,9536],{}," enregistré.",[1874,9927],{},[433,9929],{"alt":9930,"src":9931},"Bouton plus (+) des profils macOS pour ajouter un nouveau profil","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-profiles-add-profile.webp",[433,9933],{"alt":9934,"src":9935},"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",[488,9937,9938,9939,6881,9941,9944,9945,9947],{},"Sélectionnez ",[441,9940,1714],{},[441,9942,9943],{},"Installer"," pour appliquer la configuration.",[1874,9946],{},[433,9948],{"alt":9949,"src":9950},"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",[488,9952,9953,9954,9956],{},"Redémarrez votre client Cloudflare WARP. Vous devriez maintenant voir le sélecteur multi-profil dans l'interface utilisateur :",[1874,9955],{},[433,9957],{"alt":9958,"src":9959},"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",[474,9961,2564],{"id":2563},[430,9963,9964],{},"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.",[474,9966,4023],{"id":1606},[485,9968,9969,9976,9983,9990],{},[488,9970,9971],{},[444,9972,9975],{"href":9973,"rel":9974},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fteam-and-resources\u002Fdevices\u002Fcloudflare-one-client\u002Fdeployment\u002Fmdm-deployment\u002F#prepare-file-for-mdm-deployment",[448],"Managed Deployment Preparation",[488,9977,9978],{},[444,9979,9982],{"href":9980,"rel":9981},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fteam-and-resources\u002Fdevices\u002Fcloudflare-one-client\u002Fdeployment\u002Fmdm-deployment\u002Fswitch-organizations\u002F",[448],"Switch Between Zero Trust Organizations",[488,9984,9985],{},[444,9986,9989],{"href":9987,"rel":9988},"https:\u002F\u002Fblog.cloudflare.com\u002Fintroducing-warp-connector-paving-the-path-to-any-to-any-connectivity-2\u002F",[448],"Introducing WARP Connector: Paving the Path to Any-to-Any Connectivity",[488,9991,9992],{},[444,9993,9996],{"href":9994,"rel":9995},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fteam-and-resources\u002Fdevices\u002Fcloudflare-one-client\u002F",[448],"Cloudflare One Client Documentation",[1635,9998,9999],{},"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":425,"searchDepth":1058,"depth":1065,"links":10001},[10002,10003,10004,10005,10006],{"id":9496,"depth":1058,"text":9497},{"id":9510,"depth":1058,"text":9511},{"id":9526,"depth":1058,"text":9527},{"id":2563,"depth":1058,"text":2564},{"id":1606,"depth":1058,"text":4023},[2597,9475],"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":10013,"robots":1689,"sitemap":10015},[10014],{"@type":1668,"headline":2511,"description":10009},{"lastmod":10008},{"title":10011,"description":10009,"ogTitle":2511,"ogDescription":10009,"twitterTitle":2511,"twitterDescription":10009},"fr\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",[10019,1714,10020,2640],"macOS","MDM","jJik-19rQGXNPJD_47FtTwK_qZTlpBhn9RktaRCaTsE",{"id":10023,"title":8312,"author":425,"body":10024,"category":10397,"date":10398,"description":10399,"extension":1660,"image":10400,"imageAlt":10401,"isPublished":1061,"meta":10402,"minRead":1918,"navigation":1061,"path":109,"seo":10406,"stem":10407,"tags":10408,"updatedAt":1698,"__hash__":10413},"article\u002Ffr\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them.md",{"type":427,"value":10025,"toc":10387},[10026,10030,10040,10050,10111,10117,10121,10124,10133,10139,10143,10197,10208,10214,10217,10271,10275,10278,10285,10288,10299,10303,10348,10351,10368,10370,10381,10384],[474,10027,10029],{"id":10028},"quest-ce-quune-compétence-dagent-dia","Qu'est-ce qu'une compétence d'agent d'IA ?",[430,10031,10032,10033,10036,10037,10039],{},"Une compétence d'agent (agent skill) is un ",[441,10034,10035],{},"ensemble d'instructions"," réutilisable — une procédure standardisée qui indique à un agent comment accomplir efficacement un type de tâche spécifique. Elle se compose d'un seul fichier Markdown, ",[495,10038,8308],{},", et peut regrouper tous les autres fichiers requis par la tâche, tels que des documents de référence, des modèles ou des scripts exécutables.",[430,10041,10042,10043,886],{},"Prenons l'exemple de la compétence ",[444,10044,10047],{"href":10045,"rel":10046},"https:\u002F\u002Fgithub.com\u002Fmattpocock\u002Fskills\u002Fblob\u002F733d312884b3878a9a9cff693c5886943753a741\u002Fskills\u002Fproductivity\u002Fgrill-me\u002FSKILL.md",[448],[495,10048,10049],{},"grill-me",[920,10051,10053],{"className":2197,"code":10052,"language":2199,"meta":425,"style":425},"---\nname: grill-me\ndescription: Interview the user relentlessly about a plan or design until reaching shared understanding, resolving each branch of the decision tree. Use when user wants to stress-test a plan, get grilled on their design, or mentions \"grill me\".\n---\n\nInterview me relentlessly about every aspect of this plan until we reach a shared understanding. Walk down each branch of the design tree, resolving dependencies between decisions one-by-one. For each question, provide your recommended answer.\n\nAsk the questions one at a time.\n\nIf a question can be answered by exploring the codebase, explore the codebase instead.\n",[495,10054,10055,10060,10070,10080,10084,10088,10093,10097,10102,10106],{"__ignoreMap":425},[928,10056,10057],{"class":930,"line":931},[928,10058,10059],{"class":1038},"---\n",[928,10061,10062,10065,10067],{"class":930,"line":1058},[928,10063,10064],{"class":1349},"name",[928,10066,1353],{"class":942},[928,10068,10069],{"class":1042}," grill-me\n",[928,10071,10072,10075,10077],{"class":930,"line":1065},[928,10073,10074],{"class":1349},"description",[928,10076,1353],{"class":942},[928,10078,10079],{"class":1042}," Interview the user relentlessly about a plan or design until reaching shared understanding, resolving each branch of the decision tree. Use when user wants to stress-test a plan, get grilled on their design, or mentions \"grill me\".\n",[928,10081,10082],{"class":930,"line":1072},[928,10083,10059],{"class":1038},[928,10085,10086],{"class":930,"line":1918},[928,10087,1062],{"emptyLinePlaceholder":1061},[928,10089,10090],{"class":930,"line":1923},[928,10091,10092],{"class":1042},"Interview me relentlessly about every aspect of this plan until we reach a shared understanding. Walk down each branch of the design tree, resolving dependencies between decisions one-by-one. For each question, provide your recommended answer.\n",[928,10094,10095],{"class":930,"line":1929},[928,10096,1062],{"emptyLinePlaceholder":1061},[928,10098,10099],{"class":930,"line":2265},[928,10100,10101],{"class":1042},"Ask the questions one at a time.\n",[928,10103,10104],{"class":930,"line":2276},[928,10105,1062],{"emptyLinePlaceholder":1061},[928,10107,10108],{"class":930,"line":2372},[928,10109,10110],{"class":1042},"If a question can be answered by exploring the codebase, explore the codebase instead.\n",[430,10112,10113,10114,10116],{},"Un fichier ",[495,10115,8308],{}," contient un court bloc de métadonnées et un corps d'instructions. Les métadonnées se composent du nom et de la description de la compétence, que l'agent d'IA charge au démarrage.",[474,10118,10120],{"id":10119},"comment-fonctionnent-les-compétences-dagent-dia-la-divulgation-progressive","Comment fonctionnent les compétences d'agent d'IA : la divulgation progressive",[430,10122,10123],{},"Au départ, seuls le nom et la description de la compétence sont chargés dans le contexte. Lorsque la requête de l'utilisateur correspond à la description d'une compétence, le corps des instructions est chargé dans ce même contexte.",[430,10125,10126,10127,10132],{},"Voyons comment la compétence ",[444,10128,10130],{"href":10045,"rel":10129},[448],[495,10131,10049],{}," est utilisée.",[430,10134,10135],{},[433,10136],{"alt":10137,"src":10138},"Diagramme de séquence illustrant le mécanisme de divulgation progressive pour l'exécution des compétences d'un agent IA","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FAI%20Agent%20Skills%20What%20They%20Are%20%26%20How%20to%20Create%20Them\u002Fai-agent-skill-progressive-disclosure-sequence-diagram.webp",[876,10140,10142],{"id":10141},"étape-par-étape","Étape par étape",[533,10144,10145,10151,10157,10163,10169,10181,10191],{},[488,10146,10147,10150],{},[441,10148,10149],{},"Requête (Request)"," — L'utilisateur demande quelque chose à l'agent (\"interroge-moi sur la conception de mon workflow\").",[488,10152,10153,10156],{},[441,10154,10155],{},"Invite de sélection (Selection prompt)"," — La requête de l'utilisateur, accompagnée des descriptions de toutes les compétences disponibles, est envoyée au LLM.",[488,10158,10159,10162],{},[441,10160,10161],{},"Sélection du LLM"," — Le LLM compare la requête à chaque description et renvoie la ou les compétences correspondantes.",[488,10164,10165,10168],{},[441,10166,10167],{},"Confirmation"," — L'agent présente la compétence proposée à l'utilisateur, qui confirme (ou rejette\u002Fajuste) ce choix.",[488,10170,10171,10174,10175,10178,10179,461],{},[441,10172,10173],{},"Instructions chargées"," — L'agent récupère les instructions ",[896,10176,10177],{},"complètes"," de la compétence confirmée : le corps du fichier ",[495,10180,8308],{},[488,10182,10183,10186,10187,10190],{},[441,10184,10185],{},"Invite d'exécution (Execution prompt)"," — La requête de l'utilisateur ",[441,10188,10189],{},"ainsi que les instructions de la compétence sélectionnée"," sont envoyées au LLM.",[488,10192,10193,10196],{},[441,10194,10195],{},"Réponse"," — Le LLM produit le résultat, qui correspond à la première question de l'interrogatoire.",[430,10198,10199,10200,10207],{},"Utilisons maintenant ",[444,10201,10204],{"href":10202,"rel":10203},"https:\u002F\u002Fgithub.com\u002Fcoleam00\u002Fexcalidraw-diagram-skill",[448],[495,10205,10206],{},"excalidraw-diagram-skill"," pour illustrer l'utilisation d'une compétence accompagnée d'un document de référence :",[430,10209,10210],{},[433,10211],{"alt":10212,"src":10213},"Diagramme de séquence montrant un agent IA exécutant une compétence chargée avec des fichiers de référence et des modèles externes","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FAI%20Agent%20Skills%20What%20They%20Are%20%26%20How%20to%20Create%20Them\u002Fai-agent-skill-with-reference-files-sequence-diagram.webp",[876,10215,10142],{"id":10216},"étape-par-étape-1",[533,10218,10219,10224,10229,10238,10242,10254,10262],{},[488,10220,10221,10223],{},[441,10222,10149],{}," — L'utilisateur demande quelque chose à l'agent (\"dessine le workflow du processus de déploiement\").",[488,10225,10226,10156],{},[441,10227,10228],{},"Invite de sélection",[488,10230,10231,10233,10234,10237],{},[441,10232,10161],{}," — Le LLM compare la requête à chaque description et renvoie la ou les compétences correspondantes. Ici, \"dessine le workflow\" correspond à la description de ",[495,10235,10236],{},"excalidraw-diagram",", elle est donc sélectionnée.",[488,10239,10240,10168],{},[441,10241,10167],{},[488,10243,10244,10174,10246,10178,10248,10250,10251,10253],{},[441,10245,10173],{},[896,10247,10177],{},[495,10249,8308],{}," et tous les fichiers référencés (pour ",[495,10252,10236],{},", cela inclut la palette de couleurs, le schéma JSON et les modèles d'éléments).",[488,10255,10256,10186,10259,10261],{},[441,10257,10258],{},"Invite d'exécution",[441,10260,10189],{}," sont envoyées au LLM. Le modèle dispose désormais de la méthodologie détaillée requise.",[488,10263,10264,10266,10267,10270],{},[441,10265,10195],{}," — Le LLM produit le résultat (un fichier JSON ",[495,10268,10269],{},".excalidraw","), que l'agent renvoie à l'utilisateur.",[474,10272,10274],{"id":10273},"compétences-dagent-dia-vs-outils-et-mcp","Compétences d'agent d'IA vs. Outils et MCP",[430,10276,10277],{},"Les compétences ne remplacent pas les invites (prompts), les outils ou le protocole MCP (Model Context Protocol). Les outils et les intégrations MCP étendent la portée d'un agent vers des systèmes externes — interroger une base de données, appeler une API, etc. Les compétences renforcent le savoir-faire de l'agent pour mener à bien une tâche.",[430,10279,10280,10281,10284],{},"Un MCP tel que le ",[444,10282,10283],{"href":395},"Configuration de NetSuite MCP sur ChatGPT et Claude"," permet à un agent de répondre aux questions des utilisateurs en accédant aux données financières et opérationnelles en direct dans NetSuite. Ensuite, une compétence de rapport opérationnel NetSuite guidera l'agent sur la manière de rédiger ce rapport et de présenter la réponse sous forme de rapport à l'utilisateur.",[430,10286,10287],{},"Quelques cas d'usage des compétences :",[485,10289,10290,10293,10296],{},[488,10291,10292],{},"Workflows multi-étapes",[488,10294,10295],{},"Traitement de documents, comme l'extraction de données à partir de fichiers PDF",[488,10297,10298],{},"Normes de génération de code",[474,10300,10302],{"id":10301},"comment-créer-des-compétences-dagent-dia","Comment créer des compétences d'agent d'IA",[533,10304,10305,10315,10329,10338],{},[488,10306,10307,10310,10311,10314],{},[441,10308,10309],{},"Créez un dossier"," nommé d'après la compétence (par ex. ",[495,10312,10313],{},"netsuite-operation-report\u002F",").",[488,10316,10317,10322,10323,10325,10326,10328],{},[441,10318,10319,10320],{},"Rédigez ",[495,10321,8308],{}," avec un ",[495,10324,10064],{},", une ",[495,10327,10074],{}," précise et un corps d'instructions concis (moins de 200 mots).",[488,10330,10331,10334,10335,10337],{},[441,10332,10333],{},"Ajoutez les ressources"," nécessaires à la tâche — documents de référence, modèles, scripts. Gardez ",[495,10336,8308],{}," court et redirigez vers les détails.",[488,10339,10340,10343,10344,10347],{},[441,10341,10342],{},"Installez-la"," là où les agents pourront la découvrir. Reportez-vous à ",[444,10345,10346],{"href":359},"Centralisation des compétences pour les agents"," pour savoir comment gérer les compétences sur plusieurs agents.",[430,10349,10350],{},"Quelques conseils pour rédiger de bonnes compétences :",[485,10352,10353,10356,10362,10365],{},[488,10354,10355],{},"Rédigez la description pour le déclencheur (trigger) du modèle, pas pour l'humain.",[488,10357,10358,10359,10361],{},"Gardez le fichier ",[495,10360,8308],{}," léger — moins de 200 mots. Placez le cas général dans le corps et laissez les cas particuliers dans des documents de référence.",[488,10363,10364],{},"Utilisez des scripts pour tout ce qui est déterministe. Ne demandez pas au LLM de faire de l'arithmétique.",[488,10366,10367],{},"Versionnez-la. Enregistrez-la dans git.",[474,10369,2564],{"id":2563},[430,10371,10372,10373,10376,10377,10380],{},"Contrairement aux outils et au protocole MCP, qui définissent ",[896,10374,10375],{},"à quoi se connecter",", les compétences d'agent regroupent ",[896,10378,10379],{},"la manière d'effectuer le travail",". Elles constituent un complément essentiel, et non un remplacement.",[430,10382,10383],{},"En s'appuyant sur la divulgation progressive, les compétences maintiennent la fenêtre de contexte de votre agent propre et performante — en chargeant les instructions détaillées, les documents de référence et les scripts exécutables uniquement lorsque la requête d'un utilisateur les déclenche.",[1635,10385,10386],{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":425,"searchDepth":1058,"depth":1065,"links":10388},[10389,10390,10394,10395,10396],{"id":10028,"depth":1058,"text":10029},{"id":10119,"depth":1058,"text":10120,"children":10391},[10392,10393],{"id":10141,"depth":1065,"text":10142},{"id":10216,"depth":1065,"text":10142},{"id":10273,"depth":1058,"text":10274},{"id":10301,"depth":1058,"text":10302},{"id":2563,"depth":1058,"text":2564},[1655],"2026-06-26","Découvrez les compétences d'agent d'IA, le fonctionnement de la divulgation progressive, et apprenez à concevoir des workflows robustes et réutilisables.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FAI%20Agent%20Skills%20What%20They%20Are%20%26%20How%20to%20Create%20Them\u002FFR-AI-Agent-Skills-What-They-Are-%26-How-to-Create-Them.webp","Guide des compétences d'agent d'IA : créer des workflows",{"schemaOrg":10403,"robots":1689,"sitemap":10405},[10404],{"@type":1668,"headline":8312,"description":10399},{"lastmod":10398},{"title":10401,"description":10399,"ogTitle":8312,"ogDescription":10399,"twitterTitle":8312,"twitterDescription":10399},"fr\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",[10409,10410,10411,10412],"Agents d'IA","Compétences d'Agent","Flux de Travail Réutilisables","Tutoriel d'IA","2XGu8Y0A8faBTw10jjfqHu5KPotU3utOb8ytkxAnZ8Q",{"id":10415,"title":1724,"author":425,"body":10416,"category":11008,"date":11009,"description":11010,"extension":1660,"image":11011,"imageAlt":11012,"isPublished":1061,"meta":11013,"minRead":1923,"navigation":1061,"path":121,"seo":11027,"stem":11029,"tags":11030,"updatedAt":1698,"__hash__":11034},"article\u002Ffr\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server.md",{"type":427,"value":10417,"toc":10997},[10418,10422,10425,10428,10432,10436,10439,10452,10458,10461,10486,10493,10520,10526,10531,10545,10557,10563,10568,10584,10588,10591,10610,10616,10619,10630,10640,10651,10681,10685,10695,10705,10715,10728,10735,10745,10751,10779,10795,10799,10805,10817,10822,10853,10857,10860,10874,10880,10943,10945,10989,10991,10994],[474,10419,10421],{"id":10420},"pourquoi-héberger-lagent-hermes-sur-un-vps-distant","Pourquoi héberger l'Agent Hermes sur un VPS distant ?",[430,10423,10424],{},"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.",[430,10426,10427],{},"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.",[474,10429,10431],{"id":10430},"comment-configurer-lagent-hermes-sur-un-vps-linux","Comment configurer l'Agent Hermes sur un VPS Linux",[876,10433,10435],{"id":10434},"étape-1-connexion-à-votre-vps","Étape 1 : Connexion à votre VPS",[430,10437,10438],{},"Ouvrez votre terminal et connectez-vous en SSH à votre machine distante :",[920,10440,10442],{"className":1029,"code":10441,"language":1031,"meta":425,"style":425},"ssh root@your_server_ip\n",[495,10443,10444],{"__ignoreMap":425},[928,10445,10446,10449],{"class":930,"line":931},[928,10447,10448],{"class":1038},"ssh",[928,10450,10451],{"class":1042}," root@your_server_ip\n",[430,10453,10454],{},[433,10455],{"alt":10456,"src":10457},"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",[430,10459,10460],{},"Assurez-vous que les paquets de votre serveur sont à jour :",[920,10462,10464],{"className":1029,"code":10463,"language":1031,"meta":425,"style":425},"sudo apt update && sudo apt upgrade -y\n",[495,10465,10466],{"__ignoreMap":425},[928,10467,10468,10470,10472,10475,10477,10479,10481,10484],{"class":930,"line":931},[928,10469,1886],{"class":1038},[928,10471,4467],{"class":1042},[928,10473,10474],{"class":1042}," update",[928,10476,5460],{"class":942},[928,10478,4388],{"class":1038},[928,10480,4467],{"class":1042},[928,10482,10483],{"class":1042}," upgrade",[928,10485,4500],{"class":1042},[430,10487,10488,10489,10492],{},"Ajoutez un nouvel utilisateur, ",[495,10490,10491],{},"hermes",", ou le nom de votre choix :",[920,10494,10496],{"className":1029,"code":10495,"language":1031,"meta":425,"style":425},"sudo adduser hermes \nsudo passwd hermes\n",[495,10497,10498,10510],{"__ignoreMap":425},[928,10499,10500,10502,10505,10508],{"class":930,"line":931},[928,10501,1886],{"class":1038},[928,10503,10504],{"class":1042}," adduser",[928,10506,10507],{"class":1042}," hermes",[928,10509,2020],{"class":938},[928,10511,10512,10514,10517],{"class":930,"line":1058},[928,10513,1886],{"class":1038},[928,10515,10516],{"class":1042}," passwd",[928,10518,10519],{"class":1042}," hermes\n",[430,10521,10522,10523,886],{},"Désactivez la connexion par mot de passe pour l'utilisateur ",[495,10524,10525],{},"root",[533,10527,10528],{},[488,10529,10530],{},"Ouvrez le fichier de configuration SSH :",[920,10532,10534],{"className":1029,"code":10533,"language":1031,"meta":425,"style":425},"sudo nano \u002Fetc\u002Fssh\u002Fsshd_config\n",[495,10535,10536],{"__ignoreMap":425},[928,10537,10538,10540,10542],{"class":930,"line":931},[928,10539,1886],{"class":1038},[928,10541,2306],{"class":1042},[928,10543,10544],{"class":1042}," \u002Fetc\u002Fssh\u002Fsshd_config\n",[533,10546,10547],{"start":1058},[488,10548,10549,10550,10553,10554,886],{},"Repérez la ligne ",[495,10551,10552],{},"PermitRootLogin"," et remplacez sa valeur par ",[495,10555,10556],{},"no",[920,10558,10561],{"className":10559,"code":10560,"language":4635,"meta":425},[4633],"PermitRootLogin no\n",[495,10562,10560],{"__ignoreMap":425},[533,10564,10565],{"start":1065},[488,10566,10567],{},"Enregistrez le fichier et redémarrez le service SSH :",[920,10569,10571],{"className":1029,"code":10570,"language":1031,"meta":425,"style":425},"sudo systemctl restart ssh\n",[495,10572,10573],{"__ignoreMap":425},[928,10574,10575,10577,10579,10581],{"class":930,"line":931},[928,10576,1886],{"class":1038},[928,10578,1889],{"class":1042},[928,10580,1892],{"class":1042},[928,10582,10583],{"class":1042}," ssh\n",[876,10585,10587],{"id":10586},"étape-2-installer-lagent-hermes","Étape 2 : Installer l'Agent Hermes",[430,10589,10590],{},"Exécutez la commande suivante :",[920,10592,10594],{"className":1029,"code":10593,"language":1031,"meta":425,"style":425},"curl -fsSL https:\u002F\u002Fhermes-agent.nousresearch.com\u002Finstall.sh | bash\n",[495,10595,10596],{"__ignoreMap":425},[928,10597,10598,10600,10602,10605,10607],{"class":930,"line":931},[928,10599,2983],{"class":1038},[928,10601,4379],{"class":1042},[928,10603,10604],{"class":1042}," https:\u002F\u002Fhermes-agent.nousresearch.com\u002Finstall.sh",[928,10606,4385],{"class":942},[928,10608,10609],{"class":1038}," bash\n",[430,10611,10612],{},[433,10613],{"alt":10614,"src":10615},"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",[430,10617,10618],{},"Une fois installé, vérifiez l'installation en saisissant :",[920,10620,10622],{"className":1029,"code":10621,"language":1031,"meta":425,"style":425},"hermes --version\n",[495,10623,10624],{"__ignoreMap":425},[928,10625,10626,10628],{"class":930,"line":931},[928,10627,10491],{"class":1038},[928,10629,3611],{"class":1042},[430,10631,1825,10632,10635,10636],{},[495,10633,10634],{},"hermes setup"," pour configurer l'Agent Hermes :\n",[433,10637],{"alt":10638,"src":10639},"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",[430,10641,10642,10643,10646,10647],{},"Sélectionnez un fournisseur de LLM, commencez par ",[495,10644,10645],{},"DeepSeek"," et ajoutez-en d'autres plus tard.\n",[433,10648],{"alt":10649,"src":10650},"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",[430,10652,10653,10654,3027,10656,10660,10664,10665,10668,10669,10664,10673,10676,10677],{},"Saisissez la clé API ",[495,10655,10645],{},[433,10657],{"alt":10658,"src":10659},"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",[433,10661],{"alt":10662,"src":10663},"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 ",[495,10666,10667],{},"local machine"," pour exécuter l'Agent Hermes :\n",[433,10670],{"alt":10671,"src":10672},"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",[495,10674,10675],{},"Telegram"," dans les canaux. D'autres canaux pourront être configurés ultérieurement.\n",[433,10678],{"alt":10679,"src":10680},"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",[876,10682,10684],{"id":10683},"étape-3-intégration-avec-telegram","Étape 3 : Intégration avec Telegram",[430,10686,9938,10687,10690,10691],{},[495,10688,10689],{},"[2]"," pour utiliser un bot Telegram.\n",[433,10692],{"alt":10693,"src":10694},"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",[430,10696,10697,10698,10700,10701],{},"Allez sur ",[495,10699,10675],{}," et recherchez 'BotFather'.\n",[433,10702],{"alt":10703,"src":10704},"Recherche de BotFather dans l'application Telegram","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-search-botfather.webp",[430,10706,4254,10707,10710,10711],{},[495,10708,10709],{},"Open"," pour ouvrir 'BotFather'.\n",[433,10712],{"alt":10713,"src":10714},"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",[430,10716,4254,10717,10720,10721,1791,10724],{},[495,10718,10719],{},"Create a New Bot"," (ou tapez ",[495,10722,10723],{},"\u002Fnewbot",[433,10725],{"alt":10726,"src":10727},"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",[430,10729,10730,10731],{},"Renseignez les noms et créez le bot.\n",[433,10732],{"alt":10733,"src":10734},"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",[430,10736,4254,10737,10740,10741],{},[495,10738,10739],{},"Copy"," pour copier le jeton (token) et collez-le dans votre terminal.\n",[433,10742],{"alt":10743,"src":10744},"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",[430,10746,10747,10748,10750],{},"Trouvez l'identifiant (ID) de votre compte utilisateur ",[495,10749,10675],{}," et ajoutez-le à la liste des utilisateurs autorisés ('Allowed user list') :",[485,10752,10753,10763,10776],{},[488,10754,10755,10756,10758,10759],{},"Recherchez '@raw_data_bot' sur ",[495,10757,10675],{},".\n",[433,10760],{"alt":10761,"src":10762},"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",[488,10764,4254,10765,10768,10769,10758,10772],{},[495,10766,10767],{},"RawDataBot"," puis sur le bouton Start. Votre ID d'utilisateur s'affichera à côté de ",[495,10770,10771],{},"P.S. Your ID:",[433,10773],{"alt":10774,"src":10775},"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",[488,10777,10778],{},"Copiez cet ID utilisateur et collez-le dans le terminal.",[430,10780,10781,10782,10786,10787,10791],{},"Puisque nous exécutons l'agent dans le cloud, nous voulons que le service démarre automatiquement.\n",[433,10783],{"alt":10784,"src":10785},"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",[433,10788],{"alt":10789,"src":10790},"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",[433,10792],{"alt":10793,"src":10794},"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",[474,10796,10798],{"id":10797},"tester-votre-agent-hermes-avec-le-bot-telegram","Tester votre Agent Hermes avec le bot Telegram",[430,10800,10801,10802,886],{},"Exécutez la commande suivante pour démarrer ",[495,10803,10804],{},"hermes gateway",[920,10806,10808],{"className":1029,"code":10807,"language":1031,"meta":425,"style":425},"hermes gateway\n",[495,10809,10810],{"__ignoreMap":425},[928,10811,10812,10814],{"class":930,"line":931},[928,10813,10491],{"class":1038},[928,10815,10816],{"class":1042}," gateway\n",[430,10818,10697,10819,10821],{},[495,10820,10675],{}," et ajoutez le bot créé, '@tech_cloud_hermes_bot', à vos discussions.",[485,10823,10824,10834,10844],{},[488,10825,10826,10827,10829,10830],{},"Saisissez '\u002Fnew' dans ",[495,10828,10675],{}," pour démarrer une nouvelle session de l'Agent Hermes.\n",[433,10831],{"alt":10832,"src":10833},"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",[488,10835,10836,10837,10839,10840],{},"Saisir ",[495,10838,1495],{}," listera toutes les commandes disponibles.\n",[433,10841],{"alt":10842,"src":10843},"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",[488,10845,10836,10846,10848,10849],{},[495,10847,1525],{}," affichera la liste des LLM disponibles.\n",[433,10850],{"alt":10851,"src":10852},"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",[474,10854,10856],{"id":10855},"exécuter-la-passerelle-hermes-en-arrière-plan","Exécuter la passerelle Hermes en arrière-plan",[430,10858,10859],{},"Créez le fichier de service :",[920,10861,10863],{"className":2295,"code":10862,"language":2297,"meta":425,"style":425},"sudo nano \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-gateway.service\n",[495,10864,10865],{"__ignoreMap":425},[928,10866,10867,10869,10871],{"class":930,"line":931},[928,10868,1886],{"class":1038},[928,10870,2306],{"class":1042},[928,10872,10873],{"class":1042}," \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-gateway.service\n",[430,10875,10876,10877,10879],{},"Collez le contenu suivant en remplaçant ",[495,10878,10491],{}," dans '\u002Fhome\u002Fhermes' par votre nom d'utilisateur :",[920,10881,10883],{"className":2321,"code":10882,"language":2323,"meta":425,"style":425},"[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",[495,10884,10885,10889,10894,10898,10902,10906,10910,10914,10919,10923,10927,10931,10935,10939],{"__ignoreMap":425},[928,10886,10887],{"class":930,"line":931},[928,10888,2330],{},[928,10890,10891],{"class":930,"line":1058},[928,10892,10893],{},"Description=Hermes Gateway\n",[928,10895,10896],{"class":930,"line":1065},[928,10897,2340],{},[928,10899,10900],{"class":930,"line":1072},[928,10901,1062],{"emptyLinePlaceholder":1061},[928,10903,10904],{"class":930,"line":1918},[928,10905,2349],{},[928,10907,10908],{"class":930,"line":1923},[928,10909,2354],{},[928,10911,10912],{"class":930,"line":1929},[928,10913,2359],{},[928,10915,10916],{"class":930,"line":2265},[928,10917,10918],{},"ExecStart=\u002Fhome\u002Fhermes\u002F.local\u002Fbin\u002Fhermes gateway\n",[928,10920,10921],{"class":930,"line":2276},[928,10922,2369],{},[928,10924,10925],{"class":930,"line":2372},[928,10926,2375],{},[928,10928,10929],{"class":930,"line":1691},[928,10930,2380],{},[928,10932,10933],{"class":930,"line":2383},[928,10934,1062],{"emptyLinePlaceholder":1061},[928,10936,10937],{"class":930,"line":2388},[928,10938,2391],{},[928,10940,10941],{"class":930,"line":2394},[928,10942,2397],{},[430,10944,2402],{},[920,10946,10948],{"className":2295,"code":10947,"language":2297,"meta":425,"style":425},"sudo systemctl daemon-reload\nsudo systemctl enable hermes-gateway\nsudo systemctl start hermes-gateway\nsudo systemctl status hermes-gateway\n",[495,10949,10950,10958,10969,10979],{"__ignoreMap":425},[928,10951,10952,10954,10956],{"class":930,"line":931},[928,10953,1886],{"class":1038},[928,10955,1889],{"class":1042},[928,10957,2416],{"class":1042},[928,10959,10960,10962,10964,10966],{"class":930,"line":1058},[928,10961,1886],{"class":1038},[928,10963,1889],{"class":1042},[928,10965,2017],{"class":1042},[928,10967,10968],{"class":1042}," hermes-gateway\n",[928,10970,10971,10973,10975,10977],{"class":930,"line":1065},[928,10972,1886],{"class":1038},[928,10974,1889],{"class":1042},[928,10976,2436],{"class":1042},[928,10978,10968],{"class":1042},[928,10980,10981,10983,10985,10987],{"class":930,"line":1072},[928,10982,1886],{"class":1038},[928,10984,1889],{"class":1042},[928,10986,1913],{"class":1042},[928,10988,10968],{"class":1042},[474,10990,2564],{"id":2563},[430,10992,10993],{},"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.",[1635,10995,10996],{},"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":425,"searchDepth":1058,"depth":1065,"links":10998},[10999,11000,11005,11006,11007],{"id":10420,"depth":1058,"text":10421},{"id":10430,"depth":1058,"text":10431,"children":11001},[11002,11003,11004],{"id":10434,"depth":1065,"text":10435},{"id":10586,"depth":1065,"text":10587},{"id":10683,"depth":1065,"text":10684},{"id":10797,"depth":1058,"text":10798},{"id":10855,"depth":1058,"text":10856},{"id":2563,"depth":1058,"text":2564},[1655],"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":11014,"robots":1689,"sitemap":11026},[11015],{"@type":1668,"name":1724,"description":11010,"image":11011,"step":11016},[11017,11020,11023],{"@type":1671,"name":10435,"text":11018,"image":10457,"url":11019},"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":1671,"name":10587,"text":11021,"image":10615,"url":11022},"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":1671,"name":10684,"text":11024,"image":10694,"url":11025},"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":11009},{"title":11028,"description":11010,"ogTitle":1724,"ogDescription":11010,"twitterTitle":1724,"twitterDescription":11010},"Installation de l'Agent Hermes sur VPS : Guide Bot Telegram","fr\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",[1710,11031,11032,11033,8706],"VPS Setup","Telegram Bot","Linux VPS","ltX16FxH5jYLt4zWAFs695bl7w6OVVG9Zy8qmwtstkM",{"id":11036,"title":11037,"author":1698,"body":11038,"category":11476,"date":11477,"description":11478,"extension":1660,"image":11479,"imageAlt":11480,"isPublished":1061,"meta":11481,"minRead":2276,"navigation":1061,"path":131,"seo":11485,"stem":11487,"tags":11488,"updatedAt":1698,"__hash__":11492},"article\u002Ffr\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude.md","Guide du connecteur IA NetSuite: Configuration du MCP",{"type":427,"value":11039,"toc":11462},[11040,11043,11058,11062,11073,11089,11093,11224,11228,11282,11286,11338,11342,11346,11352,11357,11361,11367,11379,11383,11393,11409,11413,11419,11424,11428,11434,11437,11439],[430,11041,11042],{},"Oracle NetSuite est depuis longtemps une plateforme de planification des ressources de l'entreprise (ERP) basée sur le cloud pour les petites et moyennes entreprises. Cependant, l'interface utilisateur de son site web est tristement célèbre pour sa courbe d'apprentissage abrupte, sa navigation fastidieuse et ses structures de reporting rigides.",[430,11044,11045,11046,11049,11050,11053,11054,11057],{},"Avec la récente publication du ",[441,11047,11048],{},"NetSuite AI Connector Service",", les utilisateurs peuvent s'appuyer sur le ",[441,11051,11052],{},"Model Context Protocol (MCP)"," et les ",[441,11055,11056],{},"assistants d'IA (intelligence artificielle)"," pour poser directement des questions en langage naturel et obtenir des réponses en temps réel à partir de leurs données financières et opérationnelles.",[474,11059,11061],{"id":11060},"comment-fonctionne-le-connecteur-dia-netsuite-mcp","Comment fonctionne le connecteur d'IA NetSuite MCP",[430,11063,11064,11065,11068,11069,11072],{},"Le ",[441,11066,11067],{},"MCP de NetSuite"," expose un ensemble d'outils à l'",[441,11070,11071],{},"IA",", tels que l'exécution de requêtes SuiteQL, la lecture de recherches enregistrées (Saved Searches) et de rapports, ou encore l'exécution d'opérations sur les fiches d'informations (comme la création d'une nouvelle fiche client). Tous ces outils sont régis par les autorisations natives basées sur les rôles de NetSuite.",[430,11074,11075,11076,11078,11079,11081,11082,11085,11086,11088],{},"Lorsqu'un utilisateur pose une question en langage naturel, l'",[441,11077,11071],{}," utilise le ",[441,11080,11052],{}," pour traduire la demande en opérations structurées que NetSuite comprend. ",[441,11083,11084],{},"NetSuite"," exécute les opérations en utilisant les autorisations de l'utilisateur, et les résultats sont renvoyés à l'",[441,11087,11071],{}," pour analyse et présentation.",[474,11090,11092],{"id":11091},"guide-de-configuration-du-connecteur-ia-netsuite","Guide de configuration du connecteur IA NetSuite",[533,11094,11095,11147,11161,11170,11177,11184,11205],{},[488,11096,11097,11098,575,11101,11104],{},"Activez ",[441,11099,11100],{},"Server SuiteScript",[441,11102,11103],{},"REST Web Services",[533,11105,11106,11116,11142],{},[488,11107,11108,11109,10758,11112],{},"Allez dans ",[896,11110,11111],{},"Configuration > Société > Activer les fonctionnalités",[433,11113],{"alt":11114,"src":11115},"Interface de configuration des Fonctionnalités d'Oracle NetSuite sous Configuration de l'entreprise","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-setup-company-enable-features.webp",[488,11117,11118,11119,3027,11122],{},"Dans l'onglet secondaire ",[441,11120,11121],{},"SuiteCloud",[485,11123,11124,11133],{},[488,11125,11126,11127,10758,11129],{},"Sous SuiteScript, cochez la case ",[441,11128,11100],{},[433,11130],{"alt":11131,"src":11132},"Activation de SuiteScript de serveur dans l'onglet SuiteCloud de NetSuite","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-enable-features-server-suitescript.webp",[488,11134,11135,11136,10758,11138],{},"Sous SuiteTalk (services Web), cochez la case ",[441,11137,11103],{},[433,11139],{"alt":11140,"src":11141},"Activation des services web REST dans l'onglet SuiteCloud de NetSuite","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-enable-features-rest-web-services.webp",[488,11143,4254,11144,461],{},[441,11145,11146],{},"Enregistrer",[488,11148,11149,11150,11153,11154,10758,11157],{},"Installez d'abord ",[441,11151,11152],{},"NetSuite MCP Standard Tools",". Cliquez sur ",[896,11155,11156],{},"Personnalisation > Développement SuiteCloud > SuiteApp Marketplace",[433,11158],{"alt":11159,"src":11160},"Navigation vers le marché d'applications SuiteApp Marketplace sous Personnalisation dans NetSuite","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-suiteapp-marketplace-navigation.webp",[488,11162,11163,11164,10758,11166],{},"Recherchez ",[441,11165,11152],{},[433,11167],{"alt":11168,"src":11169},"Recherche de NetSuite MCP Standard Tools sur le marché d'applications","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-suiteapp-marketplace-search-mcp-tools.webp",[488,11171,11172,11173],{},"Une fois l'installation terminée, vous verrez le statut 'Installé' à droite.\n",[433,11174],{"alt":11175,"src":11176},"NetSuite MCP Standard Tools affiché comme installé sur le marché d'applications","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-suiteapp-installed-status-mcp-tools.webp",[488,11178,11179,11180],{},"Suivez les mêmes instructions pour installer 'NetSuite AI Connector Service Companion'.\n",[433,11181],{"alt":11182,"src":11183},"NetSuite AI Connector Service Companion affiché comme installé","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-suiteapp-installed-ai-connector-companion.webp",[488,11185,11186,11187],{},"Configurer une fiche d'intégration\n",[533,11188,11189,11198],{},[488,11190,11108,11191,10758,11194],{},[896,11192,11193],{},"Configuration > Intégration > Gérer les intégrations",[433,11195],{"alt":11196,"src":11197},"Navigation vers Gérer les intégrations dans le menu de configuration de NetSuite","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-integration-manage-integrations-navigation.webp",[488,11199,11200,11201],{},"Créez une fiche d'intégration pour ChatGPT, et nous y reviendrons avec le token_id réel :\n",[433,11202],{"alt":11203,"src":11204},"Création d'une nouvelle fiche d'intégration dans NetSuite pour ChatGPT","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-create-integration-record-chatgpt.webp",[488,11206,11207,11208,11212,11216,11220],{},"Créez un rôle personnalisé pour MCP avec les permissions minimales et attribuez-le aux utilisateurs. Par exemple :\n",[433,11209],{"alt":11210,"src":11211},"Configuration des autorisations de rôle personnalisées pour NetSuite MCP - Partie 1","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-custom-role-mcp-permissions-1.webp",[433,11213],{"alt":11214,"src":11215},"Configuration des autorisations de rôle personnalisées pour NetSuite MCP - Partie 2","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-custom-role-mcp-permissions-2.webp",[433,11217],{"alt":11218,"src":11219},"Configuration des autorisations de rôle personnalisées pour NetSuite MCP - Partie 3","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-custom-role-mcp-permissions-3.webp",[433,11221],{"alt":11222,"src":11223},"Configuration des autorisations de rôle personnalisées pour NetSuite MCP - Partie 4","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-custom-role-mcp-permissions-4.webp",[474,11225,11227],{"id":11226},"comment-intégrer-netsuite-mcp-à-chatgpt","Comment intégrer NetSuite MCP à ChatGPT",[533,11229,11230,11237,11244,11251,11261,11268,11275],{},[488,11231,11232,11233],{},"Cliquez sur 'Settings' (Paramètres).\n",[433,11234],{"alt":11235,"src":11236},"Navigation vers les Paramètres dans l'interface utilisateur de ChatGPT","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fchatgpt-settings-navigation.webp",[488,11238,11239,11240],{},"Cliquez sur 'Apps' (Applications) > 'Advanced settings' (Paramètres avancés).\n",[433,11241],{"alt":11242,"src":11243},"Navigation vers Applications et Paramètres avancés dans ChatGPT","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fchatgpt-apps-advanced-settings.webp",[488,11245,11246,11247],{},"Activez le 'Developer mode' (Mode développeur), puis cliquez sur 'Create app' (Créer une application).\n",[433,11248],{"alt":11249,"src":11250},"Activation du mode développeur et clic sur Créer une application dans ChatGPT","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fchatgpt-developer-mode-create-app.webp",[488,11252,11253,11254,10758,11257],{},"Saisissez les détails. Pour la connexion (Connection), saisissez ",[495,11255,11256],{},"https:\u002F\u002F\u003Caccount_id>.suitetalk.api.netsuite.com\u002Fservices\u002Fmcp\u002Fv1\u002Fall",[433,11258],{"alt":11259,"src":11260},"Saisie de l'URL de connexion NetSuite MCP pour créer l'application dans ChatGPT","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fchatgpt-create-app-netsuite-mcp-connection.webp",[488,11262,11263,11264],{},"Cliquez sur 'Create'. Une fois l'intégration réussie, vous verrez s'afficher la fenêtre contextuelle suivante.\n",[433,11265],{"alt":11266,"src":11267},"Confirmation contextuelle de l'intégration de NetSuite MCP dans ChatGPT","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fchatgpt-netsuite-mcp-integrated-popup.webp",[488,11269,11270,11271],{},"Cliquez sur 'Sign in with NetSuite MCP' (Se connecter avec NetSuite MCP).\n",[433,11272],{"alt":11273,"src":11274},"Invitation de ChatGPT à se connecter avec les outils standard NetSuite MCP","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fchatgpt-sign-in-with-netsuite-mcp.webp",[488,11276,11277,11278],{},"Cliquez sur le bouton 'Continue' pour accorder les autorisations.\n",[433,11279],{"alt":11280,"src":11281},"Octroi des autorisations de connexion pour NetSuite MCP dans l'écran d'autorisation de ChatGPT","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fchatgpt-grant-permissions-netsuite-mcp.webp",[474,11283,11285],{"id":11284},"comment-intégrer-netsuite-mcp-à-claude-ai","Comment intégrer NetSuite MCP à Claude AI",[533,11287,11288,11295,11302,11309,11324,11331],{},[488,11289,11290,11291],{},"Cliquez sur 'Customize' (Personnaliser).\n",[433,11292],{"alt":11293,"src":11294},"Clic sur l'option Personnaliser dans l'interface utilisateur de Claude AI","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fclaude-ai-customize-navigation.webp",[488,11296,11297,11298],{},"Cliquez sur 'Connect your apps' (Connecter vos applications).\n",[433,11299],{"alt":11300,"src":11301},"Clic sur Connecter vos applications dans les paramètres de personnalisation de Claude AI","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fclaude-ai-connect-your-apps.webp",[488,11303,11304,11305],{},"Recherchez 'NetSuite'.\n",[433,11306],{"alt":11307,"src":11308},"Recherche de l'application NetSuite dans Claude AI","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fclaude-ai-search-netsuite-app.webp",[488,11310,11311,11312,11315,11316,11319,11320],{},"Cliquez sur 'NetSuite' et saisissez l'URL du serveur : ",[495,11313,11314],{},"https:\u002F\u002F\u003Caccount_id>.suitetalk.api.netsuite.com\u002Fservices\u002Fmcp\u002Fv1\u002Fsuiteapp\u002Fcom.netsuite.mcpstandardtools",". Remplacez ",[495,11317,11318],{},"\u003Caccount_id>"," par votre ID de compte réel.\n",[433,11321],{"alt":11322,"src":11323},"Saisie de l'URL de connexion au serveur NetSuite MCP dans Claude AI","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fclaude-ai-netsuite-mcp-server-url-setup.webp",[488,11325,11326,11327],{},"Cliquez sur le bouton 'Continue'.\n",[433,11328],{"alt":11329,"src":11330},"Clic sur Continuer pour authentifier le serveur NetSuite MCP dans Claude AI","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fclaude-ai-netsuite-mcp-continue-authentication.webp",[488,11332,11333,11334],{},"Cliquez 'Continue' pour authentifier le connecteur.\n",[433,11335],{"alt":11336,"src":11337},"Vérification d'authentification finale pour le connecteur NetSuite MCP dans Claude AI","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fclaude-ai-netsuite-mcp-authenticate-connector.webp",[474,11339,11341],{"id":11340},"cas-dusage-de-lia-netsuite","Cas d'usage de l'IA NetSuite",[876,11343,11345],{"id":11344},"cas-dusage-dans-chatgpt-afficher-les-factures-en-souffrance-de-plus-de-30-jours-dans-netsuite","Cas d'usage dans ChatGPT : Afficher les factures en souffrance de plus de 30 jours dans NetSuite",[430,11347,11348],{},[433,11349],{"alt":11350,"src":11351},"ChatGPT exécutant une requête SuiteQL pour afficher les factures NetSuite en retard","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fchatgpt-netsuite-overdue-invoices-query-result.webp",[485,11353,11354],{},[488,11355,11356],{},"ChatGPT a créé la requête SuiteQL et l'a exécutée. C'est extrêmement pratique et cela fait gagner beaucoup de temps par rapport à la création d'un rapport via l'interface utilisateur web de NetSuite.",[876,11358,11360],{"id":11359},"cas-dusage-dans-chatgpt-et-claude-pouvez-vous-tracer-les-ventes-des-30-derniers-jours-sous-forme-de-graphique-linéaire","Cas d'usage dans ChatGPT et Claude : Pouvez-vous tracer les ventes des 30 derniers jours sous forme de graphique linéaire ?",[430,11362,11363],{},[433,11364],{"alt":11365,"src":11366},"Échec de ChatGPT lors de la génération d'un graphique de ventes à partir de données NetSuite","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fchatgpt-failed-render-netsuite-sales-line-graph.webp",[485,11368,11369,11372],{},[488,11370,11371],{},"ChatGPT n'a pas pu générer le graphique linéaire.",[488,11373,11374,11375],{},"J'ai essayé sur Claude et cela a fonctionné. La différence réside probablement dans les capacités respectives des grands modèles de langage (LLM).\n",[433,11376],{"alt":11377,"src":11378},"Claude AI réussissant à générer un graphique linéaire visuel des ventes NetSuite","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fclaude-ai-successfully-rendered-netsuite-sales-line-graph.webp",[876,11380,11382],{"id":11381},"cas-dusage-dans-claude-créer-une-fiche-client","Cas d'usage dans Claude : Créer une fiche client",[430,11384,11385,11389],{},[433,11386],{"alt":11387,"src":11388},"Invitation de Claude AI à créer un nouveau dossier client dans NetSuite","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fclaude-ai-create-netsuite-customer-record-prompt.webp",[433,11390],{"alt":11391,"src":11392},"Confirmation par Claude AI de la création réussie du dossier client NetSuite","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fclaude-ai-create-netsuite-customer-record-success.webp",[485,11394,11395,11402],{},[488,11396,11397,11398],{},"Une double vérification sur l'interface utilisateur web de NetSuite confirme que la fiche a bien été créée.\n",[433,11399],{"alt":11400,"src":11401},"Vérification du dossier client nouvellement créé dans l'interface web de NetSuite","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-ui-verify-new-customer-record-created.webp",[488,11403,11404,11405],{},"L'exécution dans ChatGPT montre que la fiche est disponible :\n",[433,11406],{"alt":11407,"src":11408},"ChatGPT confirmant que la nouvelle fiche client NetSuite est disponible","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fchatgpt-verify-netsuite-customer-record-available.webp",[876,11410,11412],{"id":11411},"cas-dusage-dans-claude-exécuter-une-requête-suiteql","Cas d'usage dans Claude : Exécuter une requête SuiteQL",[430,11414,11415],{},[433,11416],{"alt":11417,"src":11418},"Claude AI exécutant et affichant directement les résultats d'une requête SuiteQL NetSuite","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fclaude-ai-run-suiteql-query-result.webp",[485,11420,11421],{},[488,11422,11423],{},"La requête SuiteQL peut être exécutée directement.",[474,11425,11427],{"id":11426},"dernières-réflexions-sur-le-connecteur-ia-netsuite","Dernières réflexions sur le connecteur IA NetSuite",[430,11429,11430,11431,11433],{},"Le principal avantage de l'utilisation du MCP s'adresse aux utilisateurs n'ayant pas les compétences techniques pour concevoir des rapports complexes. Ces derniers peuvent simplement utiliser le langage naturel pour interroger les données et demander à l'",[441,11432,11071],{}," de présenter le rapport exactement comme ils le souhaitent.",[430,11435,11436],{},"Afin de prévenir les attaques par injection de prompts et l'utilisation abusive des opérations d'écriture, n'accordez des droits d'écriture que pour certaines fiches et transactions spécifiques. Lorsque l'IA utilise le MCP pour mettre à jour ou créer une fiche d'information, elle l'exécute sous la forme d'un script SuiteScript côté serveur, contournant ainsi intégralement les scripts côté client ou les validations de formulaires.",[474,11438,1607],{"id":1606},[485,11440,11441,11448,11455],{},[488,11442,11443],{},[444,11444,11447],{"href":11445,"rel":11446},"https:\u002F\u002Fdocs.oracle.com\u002Fen\u002Fcloud\u002Fsaas\u002Fnetsuite\u002Fns-online-help\u002Farticle_0902023450.html#subsect_90090238176",[448],"Installation de la SuiteApp MCP Standard Tools",[488,11449,11450],{},[444,11451,11454],{"href":11452,"rel":11453},"https:\u002F\u002Fdocs.oracle.com\u002Fen\u002Fcloud\u002Fsaas\u002Fnetsuite\u002Fns-online-help\u002Farticle_4160616848.html#subsect_0419123151",[448],"FAQ sur le service NetSuite AI Connector",[488,11456,11457],{},[444,11458,11461],{"href":11459,"rel":11460},"https:\u002F\u002Fdocs.oracle.com\u002Fen\u002Fcloud\u002Fsaas\u002Fnetsuite\u002Fns-online-help\u002Fsection_0714082142.html#bridgehead_0804033331",[448],"Se connecter au service NetSuite AI Connector",{"title":425,"searchDepth":1058,"depth":1065,"links":11463},[11464,11465,11466,11467,11468,11474,11475],{"id":11060,"depth":1058,"text":11061},{"id":11091,"depth":1058,"text":11092},{"id":11226,"depth":1058,"text":11227},{"id":11284,"depth":1058,"text":11285},{"id":11340,"depth":1058,"text":11341,"children":11469},[11470,11471,11472,11473],{"id":11344,"depth":1065,"text":11345},{"id":11359,"depth":1065,"text":11360},{"id":11381,"depth":1065,"text":11382},{"id":11411,"depth":1065,"text":11412},{"id":11426,"depth":1058,"text":11427},{"id":1606,"depth":1058,"text":1607},[1655],"2026-06-13","Configurez le connecteur IA NetSuite (MCP) avec ChatGPT et Claude. Découvrez comment interroger vos données ERP et automatiser des tâches en langage naturel.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002FFR-Setup-NetSuite-MCP-on-ChatGPT-%26-Claude.webp","Miniature de l'intégration IA de NetSuite MCP avec un arrière-plan d'entreprise bleu foncé et les logos de ChatGPT et Claude connectés à la base de données cloud NetSuite",{"schemaOrg":11482,"robots":1689,"sitemap":11484},[11483],{"@type":1666,"headline":11037,"description":11478},{"lastmod":11477},{"title":11486,"description":11478,"ogTitle":11037,"ogDescription":11478,"twitterTitle":11037,"twitterDescription":11478},"Intégration IA NetSuite MCP: Connecter ChatGPT et Claude","fr\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",[11084,6934,11489,11490,11491],"ChatGPT","Claude","AI","j2qxlAxDTbBP7Abhuz82oPMeMlwVFxA3FvQIJoI9gDk",{"id":11494,"title":11495,"author":1698,"body":11496,"category":11687,"date":11688,"description":11689,"extension":1660,"image":11690,"imageAlt":11691,"isPublished":1061,"meta":11692,"minRead":1923,"navigation":1061,"path":137,"seo":11696,"stem":11697,"tags":11698,"updatedAt":1698,"__hash__":11702},"article\u002Ffr\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis.md","Test de Claude Fable 5 : Analyse Financière Comparative",{"type":427,"value":11497,"toc":11685},[11498,11509,11520,11523,11529,11545,11555,11561,11567,11573,11594,11603,11617,11625,11643,11646,11657,11666,11669,11682],[430,11499,11500,11501,11504,11505],{},"Le 9 juin 2026, Anthropic a lancé ",[441,11502,11503],{},"Claude Fable 5",", un modèle de classe Mythos doté de mesures de protection avancées dans certains domaines comme la cybersécurité, la distillation, la chimie et la biologie.\n",[433,11506],{"alt":11507,"src":11508},"Annonce officielle du lancement de Claude Fable 5 d'Anthropic et des capacités du modèle","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FTesting%20Claude%20Fable%205%20in%20Financial%20Analysis\u002Fclaude-fable-5-launch-announcement.webp",[430,11510,11511,11512,11515,11516],{},"Anthropic a publié des chiffres montrant que Fable 5 devance Opus 4.8 et GPT-5.5 sur plusieurs critères de référence clés. Dans le benchmark ",[441,11513,11514],{},"GDPval-AA (travail intellectuel)",", il devance nettement Opus 4.8, GPT 5.5 et Gemini 3.1 Pro.\n",[433,11517],{"alt":11518,"src":11519},"Comparaison des benchmarks de Claude Fable 5 incluant le score de travail intellectuel GDPval-AA","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FTesting%20Claude%20Fable%205%20in%20Financial%20Analysis\u002Fclaude-fable-5-benchmarks-gdpval-aa.webp",[430,11521,11522],{},"Selon Claude, « Fable 5 affiche de solides performances sur des tâches analytiques complexes ».",[430,11524,11525],{},[433,11526],{"alt":11527,"src":11528},"Déclaration officielle des performances de Claude Fable 5 sur des tâches analytiques complexes","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FTesting%20Claude%20Fable%205%20in%20Financial%20Analysis\u002Fclaude-fable-5-analytical-performance-statement.webp",[430,11530,11531,11532,11535,11536,11539,11540,461],{},"Nous avons décidé de tester ",[441,11533,11534],{},"Fable 5"," en effectuant une analyse comparative de 'Space Exploration Technologies Corporation (SpaceX)' à des fins de recherche en investissement, en utilisant la compétence '",[441,11537,11538],{},"comps-analysis","'. Le fichier 'skill.md' provient du ",[444,11541,11544],{"href":11542,"rel":11543},"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Ffinancial-services\u002Fblob\u002Fmain\u002Fplugins\u002Fagent-plugins\u002Fmarket-researcher\u002Fskills\u002Fcomps-analysis\u002FSKILL.md",[448],"répertoire de services financiers d'Anthropic sur GitHub",[430,11546,11547,11551],{},[433,11548],{"alt":11549,"src":11550},"Initialisation de la compétence d'analyse financière comparative de SpaceX dans le chat Claude","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FTesting%20Claude%20Fable%205%20in%20Financial%20Analysis\u002Fspacex-comps-analysis-skill-initiation.webp",[433,11552],{"alt":11553,"src":11554},"Claude Fable 5 en cours d'exécution de l'analyse comparative financière de SpaceX","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FTesting%20Claude%20Fable%205%20in%20Financial%20Analysis\u002Fspacex-comps-analysis-running-progress.webp",[430,11556,11557],{},[433,11558],{"alt":11559,"src":11560},"Résultat final du flux de travail de l'analyse comparative financière automatisée de SpaceX","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FTesting%20Claude%20Fable%205%20in%20Financial%20Analysis\u002Fspacex-comps-analysis-skill-results-terminal.webp",[430,11562,11563,11564,11566],{},"La tâche a duré environ 25 minutes. Claude n'a posé aucune question de clarification, sauf pour demander l'autorisation d'accéder à des sites Web externes. De manière impressionnante, ",[441,11565,11534],{}," s'est révélé capable de trouver lui-même des entreprises comparables pour l'analyse.",[430,11568,11569],{},[433,11570],{"alt":11571,"src":11572},"Claude Fable 5 demandant l'autorisation explicite d'accéder à des sources web externes","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FTesting%20Claude%20Fable%205%20in%20Financial%20Analysis\u002Fclaude-fable-5-external-site-access-permission.webp",[430,11574,11575,11579,11580,11583,11584,575,11589,461],{},[433,11576],{"alt":11577,"src":11578},"Liste des entreprises comparables à SpaceX identifiées de manière autonome par Claude Fable 5","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FTesting%20Claude%20Fable%205%20in%20Financial%20Analysis\u002Fclaude-fable-5-spacex-comps-excel-memo.webp","\n*",[441,11581,11582],{},"Veuillez noter :"," Ce test est réalisé à des fins de recherche et d'éducation et ne constitue en aucun cas un conseil en investissement. Les fichiers originaux générés peuvent être téléchargés ici : ",[444,11585,11588],{"href":11586,"rel":11587},"https:\u002F\u002Ftechvoyage.dev\u002FSpaceX_Comps_Analysis_2026-06-10.xlsx",[448],"SpaceX_Comps_Analysis_2026-06-10.xlsx",[444,11590,11593],{"href":11591,"rel":11592},"https:\u002F\u002Ftechvoyage.dev\u002FSpaceX_Comps_Memo_2026-06-10.pdf",[448],"SpaceX_Comps_Memo_2026-06-10.pdf",[430,11595,11596,11597,11600,11601,461],{},"Lorsque nous avons testé la même compétence avec ",[441,11598,11599],{},"Qwen deep research",", nous avons dû saisir manuellement les entreprises comparables. Les chiffres numériques différaient légèrement de ceux de ",[441,11602,11534],{},[430,11604,11605,11609,11613],{},[433,11606],{"alt":11607,"src":11608},"Initialisation de l'analyse financière comparative de SpaceX avec Qwen deep research","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FTesting%20Claude%20Fable%205%20in%20Financial%20Analysis\u002Fqwen-deep-research-spacex-comps-initiation.webp",[433,11610],{"alt":11611,"src":11612},"Saisie manuelle des entreprises concurrentes dans Qwen deep research pour l'analyse de SpaceX","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FTesting%20Claude%20Fable%205%20in%20Financial%20Analysis\u002Fqwen-deep-research-spacex-comps-running.webp",[433,11614],{"alt":11615,"src":11616},"Aperçu du rapport final de performance de SpaceX généré de manière statistique par Qwen","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FTesting%20Claude%20Fable%205%20in%20Financial%20Analysis\u002Fqwen-deep-research-spacex-comps-report-preview.webp",[430,11618,11619,11620,461],{},"*Le rapport généré par Qwen peut être téléchargé ici : ",[444,11621,11624],{"href":11622,"rel":11623},"https:\u002F\u002Ftechvoyage.dev\u002FThe_SpaceX_Comp_Analysis_A_Statistical_Benchmark_of_Growth_Efficiency_and_Valuation_Against_Public_Peers.pdf",[448],"The_SpaceX_Comp_Analysis_A_Statistical_Benchmark_of_Growth_Efficiency_and_Valuation_Against_Public_Peers.pdf",[430,11626,11627,11628,11631,11632,10758,11635,11639],{},"Bien que les rapports de Claude et Qwen aient été produits selon la même méthodologie spécifiée dans la compétence, les chiffres variaient car Claude et Qwen se basaient sur des sources différentes. Par exemple, Claude Fable 5 a utilisé ",[441,11629,11630],{},"Stock Analysis"," alors que Qwen s'est appuyé sur ",[441,11633,11634],{},"SEC.gov",[433,11636],{"alt":11637,"src":11638},"Données financières extraites du site Stock Analysis par le modèle Claude Fable 5","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FTesting%20Claude%20Fable%205%20in%20Financial%20Analysis\u002Fclaude-fable-5-data-source-stock-analysis.webp",[433,11640],{"alt":11641,"src":11642},"Documents de la SEC et portail de données de SEC.gov exploités par Qwen deep research","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FTesting%20Claude%20Fable%205%20in%20Financial%20Analysis\u002Fqwen-deep-research-data-source-sec-gov.webp",[430,11644,11645],{},"Le rapport de Qwen contenait également beaucoup plus d'informations sur le modèle d'affaires, la structure du capital et les opérations.",[430,11647,11648,11649,11652,11653],{},"Après avoir comparé les rapports, nous avons décidé de faire une nouvelle tentative avec la commande ",[495,11650,11651],{},"\u002Fresearch"," dans l'application de bureau de Claude.\n",[433,11654],{"alt":11655,"src":11656},"Utilisation de la nouvelle commande de recherche dans l'application de bureau de Claude pour l'analyse de marché","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FTesting%20Claude%20Fable%205%20in%20Financial%20Analysis\u002Fclaude-desktop-research-command-spacex.webp",[430,11658,11659,11660,11665],{},"Le rapport d'analyse nouvellement généré, ",[444,11661,11664],{"href":11662,"rel":11663},"https:\u002F\u002Ftechvoyage.dev\u002FSpaceX_Analysis.pdf",[448],"SpaceX_Analysis.pdf",", comprenait des sections de recommandations et de mises en garde supplémentaires. Par rapport à la recherche approfondie de Qwen, il manquait toujours d'informations détaillées sur l'entreprise, telles que le fonctionnement opérationnel et la structure du capital.",[430,11667,11668],{},"Fable 5 vaut-il son prix premium ? C'est possible pour des tâches complexes et longues ainsi que pour le codage autonome. Mais pour certains travaux intellectuels, comme l'analyse d'entreprises, son rapport qualité-prix n'est peut-être pas encore optimal.",[430,11670,11671,11672,11674,11675,10758,11678],{},"Enfin, nous avons testé les performances de ",[441,11673,11534],{}," en traduction. Étrangement, le modèle est repassé automatiquement à ",[441,11676,11677],{},"Opus 4.8",[433,11679],{"alt":11680,"src":11681},"L'application de bureau de Claude basculant automatiquement le modèle de Fable 5 vers Opus 4.8","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FTesting%20Claude%20Fable%205%20in%20Financial%20Analysis\u002Fclaude-fable-5-translation-opus-switching.webp",[430,11683,11684],{},"Cela signifie-t-il que toute conversion à contexte long sera réversée vers Opus 4.8 ? Est-ce une simple anomalie temporaire d'utilisation avant le 22 juin ? Ou le système est-il simplement assez intelligent pour déterminer que la traduction ne nécessite pas un modèle aussi puissant ?",{"title":425,"searchDepth":1058,"depth":1065,"links":11686},[],[1655],"2026-06-11","Nous testons le nouveau Claude Fable 5 d'Anthropic face à Qwen Deep Research pour l'analyse financière. Cette mise à niveau en vaut-elle vraiment la peine ?","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FTesting%20Claude%20Fable%205%20in%20Financial%20Analysis\u002FFR-Testing-Claude-Fable-5-in-Financial-Analysis.webp","Claude Fable 5 vs Qwen : Test d'analyse financière IA",{"schemaOrg":11693,"robots":1689,"sitemap":11695},[11694],{"@type":1666,"headline":11495,"description":11689},{"lastmod":11688},{"title":11691,"description":11689,"ogTitle":11495,"ogDescription":11689,"twitterTitle":11495,"twitterDescription":11689},"fr\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",[11503,11699,11700,11701],"Analyse Financière","Qwen Deep Research","Benchmarks IA","1WsaWIDJjgfMfQhSGQHSWNIAnXVqPcuZgmTL_ismmOc",{"id":11704,"title":11705,"author":1698,"body":11706,"category":11914,"date":11915,"description":11916,"extension":1660,"image":11917,"imageAlt":11918,"isPublished":1061,"meta":11919,"minRead":1918,"navigation":1061,"path":139,"seo":11923,"stem":11924,"tags":11925,"updatedAt":1698,"__hash__":11926},"article\u002Ffr\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2.md","Guide complet de Browser et Scheduler dans Antigravity 2",{"type":427,"value":11707,"toc":11909},[11708,11722,11726,11732,11741,11756,11762,11765,11776,11780,11783,11790,11797,11808,11811,11817,11828,11834,11844,11857,11867,11877,11880,11886,11888,11898],[430,11709,11710,11711,575,11714,11717,11718,11721],{},"Les commandes ",[495,11712,11713],{},"\u002Fbrowser",[495,11715,11716],{},"\u002Fschedule"," dans ",[441,11719,11720],{},"Google Antigravity 2"," redéfinissent notre façon d'interagir avec l'AI. Ces deux commandes transforment Antigravity en une plateforme d'automatisation proactive capable d'interagir avec le web en direct et d'exécuter des flux de travail récurrents.",[474,11723,11725],{"id":11724},"browser-run","Browser Run",[430,11727,11728,11729,11731],{},"La commande ",[495,11730,11713],{}," force l'utilisation du navigateur Chrome pour accomplir une tâche. Les utilisateurs gardent le contrôle sur le moment et la manière dont les agents accèdent au web pendant le flux de travail. Des captures d'écran et des clips vidéo sont pris pendant le processus.",[430,11733,11734,11737],{},[441,11735,11736],{},"Cas d'usage :",[433,11738],{"alt":11739,"src":11740},"Utilisation de la commande \u002Fbrowser pour soumettre un congé maladie","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Browser%20and%20Scheduler%20in%20Antigravity%202\u002Fbrowser-command-sick-leave-prompt.webp",[430,11742,11743,11744,11748,11752],{},"Voici les résultats générés par l'agent :\n",[433,11745],{"alt":11746,"src":11747},"Le sous-agent d'automatisation du navigateur démarre la tâche de soumission du congé maladie","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Browser%20and%20Scheduler%20in%20Antigravity%202\u002Fbrowser-automation-subagent-delegation.webp",[433,11749],{"alt":11750,"src":11751},"L'automatiseur de navigateur configure Chrome avec le débogage à distance et les autorisations","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Browser%20and%20Scheduler%20in%20Antigravity%202\u002Fbrowser-automation-permissions-and-chrome-setup.webp",[433,11753],{"alt":11754,"src":11755},"Le sous-agent du navigateur fait une pause sur une page de connexion demandant les informations d'identification","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Browser%20and%20Scheduler%20in%20Antigravity%202\u002Fbrowser-automation-login-wall-encountered.webp",[430,11757,11758],{},[433,11759],{"alt":11760,"src":11761},"Le sous-agent du navigateur attend que l'utilisateur termine le processus de connexion","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Browser%20and%20Scheduler%20in%20Antigravity%202\u002Fbrowser-automation-waiting-for-user-login.webp",[430,11763,11764],{},"Antigravity a été capable d'ouvrir la page et de soumettre le formulaire. Lorsqu'une connexion est requise, l'agent attend que vous vous soyez connecté au site web.",[430,11766,11767,11772,11773,11775],{},[11768,11769],"video",{"alt":11770,"src":11771,"controls":1061},"Vidéo du sous-agent de navigateur exécutant le processus de soumission de congé maladie","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Browser%20and%20Scheduler%20in%20Antigravity%202\u002Fbrowser-automation-sick-leave-process.webm","\nLa commande ",[495,11774,11713],{}," est utile lorsque nous avons besoin de la documentation web la plus récente, de journaux de modifications (changelogs), pour tester des applications web ou vérifier l'état d'API afin de mener à bien une tâche.",[474,11777,11779],{"id":11778},"schedule-task","Schedule Task",[430,11781,11782],{},"Antigravity 2 intègre une fonctionnalité de planification de tâches. Nous allons la tester en saisissant automatiquement une feuille de temps (timesheet) toutes les 10 minutes.",[430,11784,11785,11786],{},"Cliquez sur 'Scheduled Tasks' (Tâches planifiées) :\n",[433,11787],{"alt":11788,"src":11789},"Option de menu Tâches planifiées dans la barre latérale","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Browser%20and%20Scheduler%20in%20Antigravity%202\u002Fscheduled-tasks-menu-item.webp",[430,11791,11792,11793],{},"Cliquez sur le bouton '+ New' pour créer une nouvelle tâche planifiée :\n",[433,11794],{"alt":11795,"src":11796},"Vue des tâches planifiées vide avec un bouton pour une nouvelle tâche","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Browser%20and%20Scheduler%20in%20Antigravity%202\u002Fscheduled-tasks-empty-state-new-button.webp",[430,11798,11799,11800,11804],{},"Remplissez le formulaire et planifiez la tâche pour qu'elle s'exécute toutes les 10 minutes :\n",[433,11801],{"alt":11802,"src":11803},"Formulaire de nouvelle tâche planifiée rempli pour la saisie automatique des feuilles de temps","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Browser%20and%20Scheduler%20in%20Antigravity%202\u002Fscheduled-tasks-new-task-form.webp",[433,11805],{"alt":11806,"src":11807},"Tâche active de saisie automatique des feuilles de temps dans la liste des tâches planifiées","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Browser%20and%20Scheduler%20in%20Antigravity%202\u002Fscheduled-tasks-active-task-list.webp",[430,11809,11810],{},"La tâche a été déclenchée, mais elle s'est soldée par une erreur.",[430,11812,11813],{},[433,11814],{"alt":11815,"src":11816},"Message d'erreur indiquant qu'aucun modèle disponible n'a été trouvé pour le niveau flash","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Browser%20and%20Scheduler%20in%20Antigravity%202\u002Fscheduled-tasks-error-no-models.webp",[430,11818,11819,11820,11823,11824,11827],{},"Nous avons essayé d'ajouter des valeurs 'env' au fichier ",[495,11821,11822],{},"sidecar.json"," (situé dans ",[495,11825,11826],{},".gemini\u002Fconfig\u002Fsidecars\u002Fauto-timesheet-entry","), mais nous avons obtenu la même erreur.",[920,11829,11832],{"className":11830,"code":11831,"language":4635},[4633],"    \"env\": {\n        \"GEMINI_MODEL\": \"gemini-3.5-flash\",\n        \"GOOGLE_CLOUD_PROJECT\": \"your-gcp-project-id\"\n    }\n",[495,11833,11831],{"__ignoreMap":425},[430,11835,11836,11837,11840,11841,461],{},"En inspectant les journaux des tâches planifiées dans ",[495,11838,11839],{},".gemini\u002Fantigravity\u002Fsidecar_data\u002F",", nous pouvons voir ",[495,11842,11843],{},"[schedule] Triggering command: \"agentapi\" [new-conversation]",[430,11845,11846,11847,11852,11853,11856],{},"La réponse à notre problème publié sur le ",[444,11848,11851],{"href":11849,"rel":11850},"https:\u002F\u002Fdiscuss.ai.google.dev\u002Ft\u002Fscheduled-tasks-in-antigravity-2-ended-with-errors\u002F168013",[448],"Forum Build with Google AI"," suggère qu'une clé API est requise pour ",[495,11854,11855],{},"agentapi",". Nous avons essayé d'utiliser la clé API, mais sans succès.",[430,11858,11859,11860,11862,11863],{},"Nous avons réessayé avec la commande ",[495,11861,11716],{}," directement dans la zone de discussion.\n",[433,11864],{"alt":11865,"src":11866},"Utilisation de la commande \u002Fschedule pour lancer la tâche d'automatisation des feuilles de temps","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Browser%20and%20Scheduler%20in%20Antigravity%202\u002Fschedule-command-timesheet-prompt.webp",[430,11868,11869,11870,11872,11873],{},"Les tâches planifiées à l'aide de la commande ",[495,11871,11716],{}," n'apparaissent pas dans le menu 'Scheduled Tasks'.\n",[433,11874],{"alt":11875,"src":11876},"Liste des tâches planifiées n'affichant pas les tâches créées via la commande CLI","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Browser%20and%20Scheduler%20in%20Antigravity%202\u002Fscheduled-tasks-list-missing-cli-task.webp",[430,11878,11879],{},"La tâche cron a bien été déclenchée.",[430,11881,11882],{},[433,11883],{"alt":11884,"src":11885},"Journal de la tâche cron confirmant son déclenchement","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Browser%20and%20Scheduler%20in%20Antigravity%202\u002Fcron-job-triggered-log.webp",[474,11887,8033],{"id":8032},[430,11889,11710,11890,575,11892,11894,11895,11897],{},[495,11891,11713],{},[495,11893,11716],{}," dans Antigravity 2 ne sont pas de simples fonctionnalités isolées ; leur combinaison crée un outil extrêmement puissant. Par exemple, vous pouvez planifier un agent pour qu'il utilise ",[495,11896,11713],{}," afin de parcourir les sites d'actualités et d'informations tous les lundis matin à 6h00, synthétiser les informations et vous livrer un briefing quotidien complet.",[430,11899,11900,11901,11904,11905,11908],{},"D'autres commandes, comme ",[495,11902,11903],{},"\u002Fgrill-me"," (mentionnée dans l'article ",[444,11906,11907],{"href":419},"Antigravity 2 en action : agents d'IA, skills et MCP","), peuvent être utilisées lors de la conception de nouvelles tâches planifiées. Elle incite l'agent à demander aux utilisateurs de clarifier les ambiguïtés et d'anticiper les cas limites avant de finaliser la conception.",{"title":425,"searchDepth":1058,"depth":1065,"links":11910},[11911,11912,11913],{"id":11724,"depth":1058,"text":11725},{"id":11778,"depth":1058,"text":11779},{"id":8032,"depth":1058,"text":8033},[1655],"2026-06-07","Découvrez comment les commandes \u002Fbrowser et \u002Fschedule transforment Google Antigravity 2 en une puissante plateforme d’automatisation IA.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Browser%20and%20Scheduler%20in%20Antigravity%202\u002FFR-Use-Browser-and-Scheduler-in-Antigravity-2.webp","Google Antigravity 2 : Automatisation avec Browser & Schedule",{"schemaOrg":11920,"robots":1689,"sitemap":11922},[11921],{"@type":1666,"headline":11918,"description":11916},{"lastmod":11915},{"title":11918,"description":11916,"ogTitle":11705,"ogDescription":11916,"twitterTitle":11705,"twitterDescription":11916},"fr\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",[],"9uSqmu-FiD00AZ0q03hkSOob1nDRd0mvuNxxvhmSvvk",{"id":11928,"title":11907,"author":425,"body":11929,"category":12256,"date":12257,"description":12258,"extension":1660,"image":12259,"imageAlt":12260,"isPublished":1061,"meta":12261,"minRead":1918,"navigation":1061,"path":143,"seo":12265,"stem":12266,"tags":12267,"updatedAt":1698,"__hash__":12268},"article\u002Ffr\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2.md",{"type":427,"value":11930,"toc":12246},[11931,11934,11941,11945,11951,11954,11959,11965,11968,11974,11980,11986,11997,12002,12006,12014,12018,12024,12030,12036,12039,12045,12051,12056,12061,12064,12068,12076,12082,12086,12092,12098,12104,12107,12111,12114,12118,12124,12130,12136,12139,12219,12225,12236,12240,12243],[430,11932,11933],{},"Antigravity 2, en tant qu'application de bureau orientée agents, permet aux utilisateurs d'orchestrer une équipe de sous-agents pour générer un briefing quotidien à partir d'e-mails et d'agendas, ou pour créer, tester et déployer une application. Mais à quoi cela ressemble-t-il concrètement dans la pratique ?",[430,11935,11936,11937,11940],{},"Découvrons ce qu'Antigravity 2 peut faire pour vous — des commandes et compétences intégrées à la manière dont les intégrations comme les serveurs Firebase Model Context Protocol (MCP) transforment les développeurs en architectes full-stack. Veuillez vous référer à cet article, ",[444,11938,11939],{"href":391},"Prise en main de Google Antigravity 2 : Installation",", pour l'installation et la configuration des skills et des serveurs MCP.",[474,11942,11944],{"id":11943},"commandes-intégrées","Commandes intégrées",[876,11946,11948],{"id":11947},"goal",[495,11949,11950],{},"\u002Fgoal",[430,11952,11953],{},"Avec cette commande, vous demandez à l'agent de s'exécuter jusqu'à ce qu'une tâche spécifique soit entièrement accomplie.",[430,11955,11956],{},[441,11957,11958],{},"Cas d'utilisation :",[430,11960,11961],{},[433,11962],{"alt":11963,"src":11964},"Invite de commande goal Antigravity 2 pour créer un jeu Textris","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FWhat%20can%20we%20do%20with%20Antigravity%202\u002Fantigravity-goal-command-prompt.webp",[430,11966,11967],{},"Lorsque nous demandons des sous-agents dynamiques, trois agents sont générés pour mener à bien la tâche.",[430,11969,11970],{},[433,11971],{"alt":11972,"src":11973},"Antigravity 2 générant des sous-agents pour accomplir des tâches de manière autonome","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FWhat%20can%20we%20do%20with%20Antigravity%202\u002Fantigravity-spawning-subagents-1.webp",[430,11975,11976],{},[433,11977],{"alt":11978,"src":11979},"Progression détaillée des sous-agents Antigravity 2 exécutant les étapes","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FWhat%20can%20we%20do%20with%20Antigravity%202\u002Fantigravity-spawning-subagents-2.webp",[430,11981,11982],{},[433,11983],{"alt":11984,"src":11985},"Achèvement des tâches autonomes par les sous-agents Antigravity 2","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FWhat%20can%20we%20do%20with%20Antigravity%202\u002Fantigravity-spawning-subagents-3.webp",[430,11987,11988,11989,3027,11993],{},"Pour jouer au jeu Textris généré en HTML, veuillez cliquer sur ce ",[444,11990,11992],{"href":11991},"\u002Ftextris","lien",[11768,11994],{"alt":11995,"src":11996,"controls":1061},"AI generated Textris game in HTML","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FWhat%20can%20we%20do%20with%20Antigravity%202\u002Fai-generated-textri-game-html.webm",[430,11998,11728,11999,12001],{},[495,12000,11950],{}," crée un plan, l'exécute étape par étape et vous signale sa progression à chaque phase. De plus, l'agent gérera lui-même la fenêtre de contexte sans dépasser les limites. Cette approche est particulièrement adaptée aux tâches de longue haleine, telles que l'optimisation des performances ou la refactorisation de modules, qui nécessitent plusieurs cycles d'itération.",[876,12003,12004],{"id":10049},[495,12005,11903],{},[430,12007,12008,12009,12013],{},"Cette commande déclenche la skill ",[444,12010,10049],{"href":12011,"rel":12012},"https:\u002F\u002Fgithub.com\u002Fmattpocock\u002Fskills\u002Fblob\u002Fmain\u002Fskills\u002Fproductivity\u002Fgrill-me\u002FSKILL.md",[448],", créée par Matt Pocock. Elle est concise et redoutablement efficace. Son principe est de vous questionner sous divers angles, clarifier les cas limites, harmoniser les structures et finaliser le plan avant sa mise en œuvre.",[430,12015,12016],{},[441,12017,11958],{},[430,12019,12020],{},[433,12021],{"alt":12022,"src":12023},"Déclenchement de la commande grill-me pour l'architecture Cloudflare dans Antigravity 2","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FWhat%20can%20we%20do%20with%20Antigravity%202\u002Fantigravity-grill-me-command-prompt.webp",[430,12025,12026],{},[433,12027],{"alt":12028,"src":12029},"Session de questions interactive utilisant la compétence grill-me","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FWhat%20can%20we%20do%20with%20Antigravity%202\u002Fantigravity-grill-me-interaction-1.webp",[430,12031,12032],{},[433,12033],{"alt":12034,"src":12035},"Clarification des cas particuliers et structuration du plan avec grill-me","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FWhat%20can%20we%20do%20with%20Antigravity%202\u002Fantigravity-grill-me-interaction-2.webp",[430,12037,12038],{},"Elle prend en charge la sélection multiple :",[430,12040,12041],{},[433,12042],{"alt":12043,"src":12044},"Utilisation des capacités de sélection multiple lors du processus grill-me","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FWhat%20can%20we%20do%20with%20Antigravity%202\u002Fantigravity-grill-me-multi-select-1.webp",[430,12046,12047],{},[433,12048],{"alt":12049,"src":12050},"Finalisation des choix avec la fonction de sélection multiple de grill-me","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FWhat%20can%20we%20do%20with%20Antigravity%202\u002Fantigravity-grill-me-multi-select-2.webp",[430,12052,11728,12053,12055],{},[495,12054,11903],{}," est particulièrement impressionnante. Elle couvre la quasi-totalité des aspects de la conception d'architecture pour un déploiement sur Cloudflare. Cela la rend idéale pour concevoir l'architecture d'une application, effectuer des refactorisations multi-domaines ou d'autres tâches potentiellement complexes.",[876,12057,12058],{"id":425},[495,12059,12060],{},"@\u002F ",[430,12062,12063],{},"Cette commande n'apparaît pas dans la liste des commandes disponibles, mais elle s'avère parfois indispensable pour notre fenêtre de contexte. Elle sert à ajouter un dossier ou des fichiers (autres que les médias) dans l'espace de discussion.",[474,12065,12067],{"id":12066},"skills-compétences","Skills (Compétences)",[430,12069,12070,12071,12073,12074,461],{},"Saisissez ",[495,12072,8394],{}," pour ouvrir le menu contextuel et sélectionner une skill. Testons ",[495,12075,10236],{},[430,12077,12078],{},[433,12079],{"alt":12080,"src":12081},"Sélection de la compétence de diagramme Excalidraw dans la fenêtre contextuelle Antigravity","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FWhat%20can%20we%20do%20with%20Antigravity%202\u002Fantigravity-skill-selection-excalidraw.webp",[430,12083,12084],{},[441,12085,11958],{},[430,12087,12088],{},[433,12089],{"alt":12090,"src":12091},"Fourniture d'instructions pour générer un diagramme Excalidraw","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FWhat%20can%20we%20do%20with%20Antigravity%202\u002Fantigravity-excalidraw-diagram-prompt.webp",[430,12093,12094],{},[433,12095],{"alt":12096,"src":12097},"Génération réussie d'un diagramme d'architecture Excalidraw","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FWhat%20can%20we%20do%20with%20Antigravity%202\u002Fantigravity-excalidraw-diagram-generation.webp",[430,12099,12100],{},[433,12101],{"alt":12102,"src":12103},"Antigravity architecture diagram","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FWhat%20can%20we%20do%20with%20Antigravity%202\u002Fantigravity-architecture.webp",[430,12105,12106],{},"La skill a été exécutée avec succès après quelques validations d'autorisations.",[474,12108,12110],{"id":12109},"serveurs-mcp","Serveurs MCP",[430,12112,12113],{},"Lorsque l'agent conçoit un backend, vous devez généralement ouvrir une console web, créer une base de données, copier des clés API et les recoller. En exploitant directement les serveurs MCP dans Antigravity, l'agent dispose de \"mains\" pour manipuler votre infrastructure cloud.",[430,12115,12116],{},[441,12117,11958],{},[430,12119,12120],{},[433,12121],{"alt":12122,"src":12123},"Instruction au serveur MCP de créer une application web Firebase","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FWhat%20can%20we%20do%20with%20Antigravity%202\u002Fantigravity-mcp-server-firebase-prompt.webp",[430,12125,12126],{},[433,12127],{"alt":12128,"src":12129},"Antigravity utilisant les serveurs MCP pour manipuler l'infrastructure Firebase","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FWhat%20can%20we%20do%20with%20Antigravity%202\u002Fantigravity-mcp-server-firebase-execution-1.webp",[430,12131,12132],{},[433,12133],{"alt":12134,"src":12135},"Création réussie d'une application Firebase via les serveurs MCP Antigravity","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FWhat%20can%20we%20do%20with%20Antigravity%202\u002Fantigravity-mcp-server-firebase-execution-2.webp",[430,12137,12138],{},"L'agent a réussi à créer l'application web dans Firebase via les serveurs MCP. Examinons le dépôt.",[920,12140,12142],{"className":1029,"code":12141,"language":1031,"meta":425,"style":425},"Create a new public GitHub repository called ‘to-do-app-techvoyage’. Then push all the current project files to it with the commit message ‘Initial commit — to-do-app’.\n",[495,12143,12144],{"__ignoreMap":425},[928,12145,12146,12149,12152,12155,12158,12161,12164,12167,12170,12173,12176,12179,12182,12185,12188,12191,12194,12197,12200,12202,12205,12208,12211,12213,12216],{"class":930,"line":931},[928,12147,12148],{"class":1038},"Create",[928,12150,12151],{"class":1042}," a",[928,12153,12154],{"class":1042}," new",[928,12156,12157],{"class":1042}," public",[928,12159,12160],{"class":1042}," GitHub",[928,12162,12163],{"class":1042}," repository",[928,12165,12166],{"class":1042}," called",[928,12168,12169],{"class":1042}," ‘to-do-app-techvoyage’.",[928,12171,12172],{"class":1042}," Then",[928,12174,12175],{"class":1042}," push",[928,12177,12178],{"class":1042}," all",[928,12180,12181],{"class":1042}," the",[928,12183,12184],{"class":1042}," current",[928,12186,12187],{"class":1042}," project",[928,12189,12190],{"class":1042}," files",[928,12192,12193],{"class":1042}," to",[928,12195,12196],{"class":1042}," it",[928,12198,12199],{"class":1042}," with",[928,12201,12181],{"class":1042},[928,12203,12204],{"class":1042}," commit",[928,12206,12207],{"class":1042}," message",[928,12209,12210],{"class":1042}," ‘Initial",[928,12212,12204],{"class":1042},[928,12214,12215],{"class":1042}," —",[928,12217,12218],{"class":1042}," to-do-app’.\n",[430,12220,12221],{},[433,12222],{"alt":12223,"src":12224},"L'agent pousse automatiquement les fichiers du projet vers un nouveau référentiel GitHub","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FWhat%20can%20we%20do%20with%20Antigravity%202\u002Fantigravity-github-repository-push.webp",[430,12226,12227,12228,12231,12232,461],{},"Le dépôt ",[495,12229,12230],{},"to-do-app-techvoyage"," est accessible sur GitHub via ce ",[444,12233,11992],{"href":12234,"rel":12235},"https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fto-do-app-techvoyage",[448],[474,12237,12239],{"id":12238},"dernières-réflexions","Dernières réflexions",[430,12241,12242],{},"Bien que MCP et les Skills dans Antigravity 2 — propulsés par Gemini 3.5 Flash — offrent une rapidité fulgurante, le flux agentique se heurte actuellement à des interruptions constantes pour validation d'autorisations et à l'absence de points de restauration (checkpoints) pour les retours en arrière (rollbacks). En attendant l'introduction de cette fonctionnalité de checkpoints, des commits Git fréquents restent votre filet de sécurité obligatoire.",[1635,12244,12245],{},"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);}",{"title":425,"searchDepth":1058,"depth":1065,"links":12247},[12248,12253,12254,12255],{"id":11943,"depth":1058,"text":11944,"children":12249},[12250,12251,12252],{"id":11947,"depth":1065,"text":11950},{"id":10049,"depth":1065,"text":11903},{"id":425,"depth":1065,"text":12060},{"id":12066,"depth":1058,"text":12067},{"id":12109,"depth":1058,"text":12110},{"id":12238,"depth":1058,"text":12239},[1655],"2026-06-06","Découvrez Antigravity 2, une application de bureau axée sur les agents. Apprenez à orchestrer des sous-agents d'IA, utiliser des skills et exploiter MCP.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FWhat%20can%20we%20do%20with%20Antigravity%202\u002FFR-What-can-we-do-with-Antigravity-2.webp","Tutoriel Antigravity 2 : agents d'IA, skills et serveurs MCP",{"schemaOrg":12262,"robots":1689,"sitemap":12264},[12263],{"@type":1666,"headline":11907,"description":12258},{"lastmod":12257},{"title":12260,"description":12258,"ogTitle":11907,"ogDescription":12258,"twitterTitle":11907,"twitterDescription":12258},"fr\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",[],"fHJ1pvFlRNmOGAryLYEFp_OqK_uX-gDA20iF1trWdfo",{"id":12270,"title":11939,"author":1698,"body":12271,"category":12949,"date":12950,"description":12951,"extension":1660,"image":12952,"imageAlt":12953,"isPublished":1061,"meta":12954,"minRead":1072,"navigation":1061,"path":129,"seo":12958,"stem":12959,"tags":12960,"updatedAt":1698,"__hash__":12961},"article\u002Ffr\u002Farticle\u002Fsetup-antigravity-2.md",{"type":427,"value":12272,"toc":12938},[12273,12284,12286,12289,12300,12303,12307,12316,12322,12329,12335,12342,12352,12354,12358,12365,12371,12374,12380,12384,12387,12400,12414,12421,12432,12442,12456,12458,12462,12465,12478,12481,12786,12796,12802,12812,12818,12824,12830,12832,12836,12846,12863,12869,12875,12892,12895,12901,12903,12907,12910,12916,12919,12925,12927,12929,12932,12935],[430,12274,12275,12276,12279,12280,12283],{},"Lors de la Google I\u002FO 2026, Google a annoncé ",[441,12277,12278],{},"Antigravity 2",", une application de bureau autonome qui place l'",[441,12281,12282],{},"agent"," au cœur de l'interface utilisateur. Il vous suffit de décrire l'objectif à atteindre, et l'agent génère un plan, le découpe en sous-tâches gérables et les exécute.",[876,12285,1751],{"id":1750},[430,12287,12288],{},"Avant de commencer, vous aurez besoin de :",[485,12290,12291,12294,12297],{},[488,12292,12293],{},"Un ordinateur (macOS est utilisé dans ce guide)",[488,12295,12296],{},"Un navigateur web moderne",[488,12298,12299],{},"Un compte Gmail",[12301,12302],"hr",{},[474,12304,12306],{"id":12305},"_1-installer-antigravity-2","1. Installer Antigravity 2",[430,12308,12309,12310,12315],{},"Téléchargez Antigravity 2 depuis ",[444,12311,12314],{"href":12312,"rel":12313},"https:\u002F\u002Fantigravity.google\u002Fdownload",[448],"antigravity.google"," et installez-le sur votre ordinateur. Lors du premier lancement, vous serez invité à vous connecter avec votre compte Gmail.",[430,12317,12318],{},[433,12319],{"alt":12320,"src":12321},"Écran de connexion au compte Google lors du premier lancement d'Antigravity 2","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-gmail-login.webp",[430,12323,12324,12325,12328],{},"Une fois connecté, vous remarquerez un ",[441,12326,12327],{},"bouton vocal"," dans le champ de saisie, vous permettant d'enregistrer des requêtes vocales au lieu de les taper.",[430,12330,12331],{},[433,12332],{"alt":12333,"src":12334},"Bouton d'enregistrement vocal dans le champ de saisie d'Antigravity 2","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-voice-input-field.webp",[430,12336,12337,12338,12341],{},"Antigravity 2 introduit également le concept de ",[441,12339,12340],{},"Projet"," (Project), qui peut englober plusieurs dossiers locaux et fonctionner avec ses propres paramètres d'agent et autorisations spécifiques.",[430,12343,12344,12348],{},[433,12345],{"alt":12346,"src":12347},"Menu de sélection et de configuration des projets dans Antigravity 2","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-project-menu.webp",[433,12349],{"alt":12350,"src":12351},"Création d'un nouveau projet IA avec chemin de dossier dans Antigravity 2","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-project-creation.webp",[12301,12353],{},[474,12355,12357],{"id":12356},"_2-configurer-les-serveurs-mcp-et-les-plugins","2. Configurer les serveurs MCP et les plugins",[430,12359,12360,12361,12364],{},"Tous les serveurs MCP (Model Context Protocol), plugins et compétences (skills) sont gérés dans la section ",[441,12362,12363],{},"Customizations"," (Personnalisations) du menu des paramètres :",[430,12366,12367],{},[433,12368],{"alt":12369,"src":12370},"Onglet de personnalisation pour la gestion des serveurs MCP et des compétences","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-settings-customizations.webp",[430,12372,12373],{},"Actuellement, les seuls plugins disponibles sont ceux de Google, mais nous espérons que d'autres seront publiés à l'avenir.",[430,12375,12376],{},[433,12377],{"alt":12378,"src":12379},"Liste des plugins officiels Google et intégrations dans Antigravity 2","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-google-plugins-list.webp",[2153,12381,12383],{"id":12382},"ajouter-un-serveur-mcp-disponible","Ajouter un serveur MCP disponible",[430,12385,12386],{},"Pour installer un serveur MCP préconfiguré (par exemple, GitHub) :",[533,12388,12389,12394],{},[488,12390,4254,12391,461],{},[441,12392,12393],{},"Add MCP+",[488,12395,12396,12397,461],{},"Sélectionnez le ",[441,12398,12399],{},"GitHub MCP Server",[430,12401,12402,12406,12410],{},[433,12403],{"alt":12404,"src":12405},"Ajout d'un serveur MCP préconfiguré en cliquant sur le bouton Add MCP plus","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-add-mcp-button.webp",[433,12407],{"alt":12408,"src":12409},"Sélection de GitHub MCP Server dans la liste des intégrations disponibles","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-select-github-mcp.webp",[433,12411],{"alt":12412,"src":12413},"Assistant de configuration et d'autorisation du serveur MCP GitHub","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-github-mcp-setup.webp",[430,12415,12416,12417],{},"La configuration du serveur MCP GitHub s'est terminée par une erreur :\n",[433,12418],{"alt":12419,"src":12420},"Erreur de configuration lors de l'installation du serveur MCP GitHub","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-github-mcp-error.webp",[430,12422,3163,12423,12425,12426,12428,12429,12431],{},[495,12424,2785],{}," est déjà installé sur macOS, nous pouvons contourner ce problème en exécutant la commande ",[495,12427,2785],{}," directement dans la conversation. Cependant, nous devons d'abord ajouter explicitement la commande ",[495,12430,2785],{}," aux autorisations d'Antigravity.",[430,12433,12434,12438],{},[433,12435],{"alt":12436,"src":12437},"Boîte de dialogue de demande d'autorisation pour la commande git","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-add-git-permission-1.webp",[433,12439],{"alt":12440,"src":12441},"Octroi de l'autorisation d'exécution de la commande git dans les paramètres","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-add-git-permission-2.webp",[430,12443,12444,12445,12447,12448,12452],{},"Testons la requête pour voir si la commande ",[495,12446,2785],{}," fonctionne désormais :\n",[433,12449],{"alt":12450,"src":12451},"Envoi d'une requête git status dans la boîte de dialogue de l'agent IA","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-git-command-test-1.webp",[433,12453],{"alt":12454,"src":12455},"Exécution réussie de la commande git status directement dans le chat","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-git-command-test-2.webp",[12301,12457],{},[474,12459,12461],{"id":12460},"_3-ajouter-des-serveurs-mcp-personnalisés","3. Ajouter des serveurs MCP personnalisés",[430,12463,12464],{},"Si le serveur MCP de votre choix ne figure pas dans la liste par défaut, vous pouvez l'ajouter en modifiant directement le fichier de configuration MCP. La configuration se trouve à l'emplacement suivant :",[920,12466,12468],{"className":1029,"code":12467,"language":1031,"meta":425,"style":425},"~\u002F.gemini\u002Fconfig\u002Fmcp_config.json\n",[495,12469,12470],{"__ignoreMap":425},[928,12471,12472,12475],{"class":930,"line":931},[928,12473,12474],{"class":942},"~",[928,12476,12477],{"class":938},"\u002F.gemini\u002Fconfig\u002Fmcp_config.json\n",[430,12479,12480],{},"Ajoutons quelques serveurs MCP Cloudflare à titre d'exemple. Comme Cloudflare prend en charge l'enregistrement dynamique des clients, il nous suffit d'activer l'OAuth. Ajoutez le code suivant à votre configuration JSON :",[920,12482,12484],{"className":2898,"code":12483,"language":2900,"meta":425,"style":425},"    \"cloudflare-api\": {\n      \"serverUrl\": \"https:\u002F\u002Fmcp.cloudflare.com\u002Fmcp\",\n      \"oauth\": {\n        \"enabled\": true\n      }\n    },\n    \"cloudflare-docs\": {\n      \"serverUrl\": \"https:\u002F\u002Fdocs.mcp.cloudflare.com\u002Fmcp\"\n    },\n    \"cloudflare-bindings\": {\n      \"serverUrl\": \"https:\u002F\u002Fbindings.mcp.cloudflare.com\u002Fmcp\",\n      \"oauth\": {\n        \"enabled\": true\n      }\n    },\n    \"cloudflare-builds\": {\n      \"serverUrl\": \"https:\u002F\u002Fbuilds.mcp.cloudflare.com\u002Fmcp\",\n      \"oauth\": {\n        \"enabled\": true\n      }\n    },\n    \"cloudflare-observability\": {\n      \"serverUrl\": \"https:\u002F\u002Fobservability.mcp.cloudflare.com\u002Fmcp\",\n      \"oauth\": {\n        \"enabled\": true\n      }\n    }\n",[495,12485,12486,12499,12519,12531,12543,12547,12554,12567,12584,12590,12603,12622,12634,12646,12650,12656,12669,12688,12700,12712,12716,12722,12735,12754,12766,12778,12782],{"__ignoreMap":425},[928,12487,12488,12490,12493,12495,12497],{"class":930,"line":931},[928,12489,7600],{"class":942},[928,12491,12492],{"class":1042},"cloudflare-api",[928,12494,3688],{"class":942},[928,12496,7593],{"class":938},[928,12498,2907],{"class":942},[928,12500,12501,12503,12506,12508,12510,12512,12515,12517],{"class":930,"line":1058},[928,12502,7613],{"class":942},[928,12504,12505],{"class":934},"serverUrl",[928,12507,3688],{"class":942},[928,12509,1353],{"class":942},[928,12511,3280],{"class":942},[928,12513,12514],{"class":1042},"https:\u002F\u002Fmcp.cloudflare.com\u002Fmcp",[928,12516,3688],{"class":942},[928,12518,7630],{"class":942},[928,12520,12521,12523,12525,12527,12529],{"class":930,"line":1065},[928,12522,7613],{"class":942},[928,12524,7859],{"class":934},[928,12526,3688],{"class":942},[928,12528,1353],{"class":942},[928,12530,2937],{"class":942},[928,12532,12533,12535,12537,12539,12541],{"class":930,"line":1072},[928,12534,7649],{"class":942},[928,12536,7872],{"class":1038},[928,12538,3688],{"class":942},[928,12540,1353],{"class":942},[928,12542,1375],{"class":942},[928,12544,12545],{"class":930,"line":1918},[928,12546,7883],{"class":942},[928,12548,12549,12552],{"class":930,"line":1923},[928,12550,12551],{"class":942},"    }",[928,12553,7630],{"class":938},[928,12555,12556,12558,12561,12563,12565],{"class":930,"line":1929},[928,12557,7600],{"class":942},[928,12559,12560],{"class":1042},"cloudflare-docs",[928,12562,3688],{"class":942},[928,12564,7593],{"class":938},[928,12566,2907],{"class":942},[928,12568,12569,12571,12573,12575,12577,12579,12582],{"class":930,"line":2265},[928,12570,7613],{"class":942},[928,12572,12505],{"class":934},[928,12574,3688],{"class":942},[928,12576,1353],{"class":942},[928,12578,3280],{"class":942},[928,12580,12581],{"class":1042},"https:\u002F\u002Fdocs.mcp.cloudflare.com\u002Fmcp",[928,12583,1950],{"class":942},[928,12585,12586,12588],{"class":930,"line":2276},[928,12587,12551],{"class":942},[928,12589,7630],{"class":938},[928,12591,12592,12594,12597,12599,12601],{"class":930,"line":2372},[928,12593,7600],{"class":942},[928,12595,12596],{"class":1042},"cloudflare-bindings",[928,12598,3688],{"class":942},[928,12600,7593],{"class":938},[928,12602,2907],{"class":942},[928,12604,12605,12607,12609,12611,12613,12615,12618,12620],{"class":930,"line":1691},[928,12606,7613],{"class":942},[928,12608,12505],{"class":934},[928,12610,3688],{"class":942},[928,12612,1353],{"class":942},[928,12614,3280],{"class":942},[928,12616,12617],{"class":1042},"https:\u002F\u002Fbindings.mcp.cloudflare.com\u002Fmcp",[928,12619,3688],{"class":942},[928,12621,7630],{"class":942},[928,12623,12624,12626,12628,12630,12632],{"class":930,"line":2383},[928,12625,7613],{"class":942},[928,12627,7859],{"class":934},[928,12629,3688],{"class":942},[928,12631,1353],{"class":942},[928,12633,2937],{"class":942},[928,12635,12636,12638,12640,12642,12644],{"class":930,"line":2388},[928,12637,7649],{"class":942},[928,12639,7872],{"class":1038},[928,12641,3688],{"class":942},[928,12643,1353],{"class":942},[928,12645,1375],{"class":942},[928,12647,12648],{"class":930,"line":2394},[928,12649,7883],{"class":942},[928,12651,12652,12654],{"class":930,"line":3349},[928,12653,12551],{"class":942},[928,12655,7630],{"class":938},[928,12657,12658,12660,12663,12665,12667],{"class":930,"line":3360},[928,12659,7600],{"class":942},[928,12661,12662],{"class":1042},"cloudflare-builds",[928,12664,3688],{"class":942},[928,12666,7593],{"class":938},[928,12668,2907],{"class":942},[928,12670,12671,12673,12675,12677,12679,12681,12684,12686],{"class":930,"line":3365},[928,12672,7613],{"class":942},[928,12674,12505],{"class":934},[928,12676,3688],{"class":942},[928,12678,1353],{"class":942},[928,12680,3280],{"class":942},[928,12682,12683],{"class":1042},"https:\u002F\u002Fbuilds.mcp.cloudflare.com\u002Fmcp",[928,12685,3688],{"class":942},[928,12687,7630],{"class":942},[928,12689,12690,12692,12694,12696,12698],{"class":930,"line":3373},[928,12691,7613],{"class":942},[928,12693,7859],{"class":934},[928,12695,3688],{"class":942},[928,12697,1353],{"class":942},[928,12699,2937],{"class":942},[928,12701,12702,12704,12706,12708,12710],{"class":930,"line":3901},[928,12703,7649],{"class":942},[928,12705,7872],{"class":1038},[928,12707,3688],{"class":942},[928,12709,1353],{"class":942},[928,12711,1375],{"class":942},[928,12713,12714],{"class":930,"line":3907},[928,12715,7883],{"class":942},[928,12717,12718,12720],{"class":930,"line":3916},[928,12719,12551],{"class":942},[928,12721,7630],{"class":938},[928,12723,12724,12726,12729,12731,12733],{"class":930,"line":4565},[928,12725,7600],{"class":942},[928,12727,12728],{"class":1042},"cloudflare-observability",[928,12730,3688],{"class":942},[928,12732,7593],{"class":938},[928,12734,2907],{"class":942},[928,12736,12737,12739,12741,12743,12745,12747,12750,12752],{"class":930,"line":5019},[928,12738,7613],{"class":942},[928,12740,12505],{"class":934},[928,12742,3688],{"class":942},[928,12744,1353],{"class":942},[928,12746,3280],{"class":942},[928,12748,12749],{"class":1042},"https:\u002F\u002Fobservability.mcp.cloudflare.com\u002Fmcp",[928,12751,3688],{"class":942},[928,12753,7630],{"class":942},[928,12755,12756,12758,12760,12762,12764],{"class":930,"line":5028},[928,12757,7613],{"class":942},[928,12759,7859],{"class":934},[928,12761,3688],{"class":942},[928,12763,1353],{"class":942},[928,12765,2937],{"class":942},[928,12767,12768,12770,12772,12774,12776],{"class":930,"line":5036},[928,12769,7649],{"class":942},[928,12771,7872],{"class":1038},[928,12773,3688],{"class":942},[928,12775,1353],{"class":942},[928,12777,1375],{"class":942},[928,12779,12780],{"class":930,"line":5044},[928,12781,7883],{"class":942},[928,12783,12784],{"class":930,"line":5049},[928,12785,7733],{"class":942},[430,12787,12788,12789,12791,12792,12795],{},"Revenez à la section ",[441,12790,12363],{}," de l'application et cliquez sur le bouton ",[441,12793,12794],{},"Refresh"," (Actualiser). Vous verrez maintenant les serveurs MCP Cloudflare s'afficher, en attente d'autorisation.",[430,12797,12798],{},[433,12799],{"alt":12800,"src":12801},"Serveurs MCP Cloudflare listés en attente d'autorisation","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-cloudflare-mcp-pending.webp",[430,12803,4254,12804,12807,12808,12811],{},[441,12805,12806],{},"Authenticate"," à côté du serveur MCP. Cela ouvrira une page d'authentification dans votre navigateur web. Une fois authentifié, un code d'autorisation (",[441,12809,12810],{},"auth code",") sera généré.",[430,12813,12814],{},[433,12815],{"alt":12816,"src":12817},"Navigateur web affichant le code d'autorisation OAuth dynamique","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-cloudflare-auth-code.webp",[430,12819,12820,12821,461],{},"Copiez ce code d'autorisation, collez-le dans le champ de saisie d'Antigravity, puis cliquez sur ",[441,12822,12823],{},"Submit",[430,12825,12826],{},[433,12827],{"alt":12828,"src":12829},"Envoi du code de vérification OAuth dans l'interface d'Antigravity","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-cloudflare-auth-submit.webp",[12301,12831],{},[474,12833,12835],{"id":12834},"_4-ajouter-des-compétences-personnalisées","4. Ajouter des compétences personnalisées",[430,12837,12838,12839,12842,12843,461],{},"Actuellement, l'ajout de compétences personnalisées (skills) ",[441,12840,12841],{},"ne peut pas"," se faire directement via l'interface de l'application de bureau. Elles doivent être ajoutées directement dans le dossier ",[495,12844,12845],{},"~\u002F.gemini\u002Fconfig\u002Fskills",[430,12847,12848,12849,12852,12853,12859,12860,12862],{},"Puisque nous utilisons la CLI ",[495,12850,12851],{},"npx skills"," pour centraliser toutes les compétences de nos agents, toute nouvelle compétence ajoutée peut être mise à disposition de tous les agents, y compris Antigravity. ",[896,12854,12855,12856,10314],{},"(Pour en savoir plus, consultez notre article : ",[444,12857,12858],{"href":359},"Résoudre la fragmentation des compétences des agents IA avec npx skills","\nAu départ, lorsque vous tapez ",[495,12861,8394],{}," dans la zone de conversation, la liste des compétences apparaît vide :",[430,12864,12865],{},[433,12866],{"alt":12867,"src":12868},"Boîte de commande affichant une liste de compétences vide lors de la saisie du raccourci slash","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-empty-skills-list.webp",[430,12870,12871,12872,12874],{},"Il semble qu'Antigravity 2 ne lise pas automatiquement le dossier global des compétences (",[495,12873,8640],{},"). Pour corriger cela, nous devons créer un lien symbolique pointant vers le répertoire de configuration d'Antigravity :",[920,12876,12878],{"className":1029,"code":12877,"language":1031,"meta":425,"style":425},"ln -s ~\u002F.agents\u002Fskills\u002Fexcalidraw-diagram ~\u002F.gemini\u002Fconfig\u002Fskills\u002Fexcalidraw-diagram\n",[495,12879,12880],{"__ignoreMap":425},[928,12881,12882,12884,12886,12889],{"class":930,"line":931},[928,12883,3674],{"class":1038},[928,12885,3531],{"class":1042},[928,12887,12888],{"class":1042}," ~\u002F.agents\u002Fskills\u002Fexcalidraw-diagram",[928,12890,12891],{"class":1042}," ~\u002F.gemini\u002Fconfig\u002Fskills\u002Fexcalidraw-diagram\n",[430,12893,12894],{},"Une fois le lien créé, la compétence devient disponible dans l'application !",[430,12896,12897],{},[433,12898],{"alt":12899,"src":12900},"Compétence de diagramme Excalidraw s'affichant dans la liste de commandes","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-excalidraw-skill-available.webp",[12301,12902],{},[474,12904,12906],{"id":12905},"_5-tester-une-tâche-simple","5. Tester une tâche simple",[430,12908,12909],{},"Maintenant que tout est configuré, lançons un test.",[430,12911,12912],{},[433,12913],{"alt":12914,"src":12915},"Envoi d'une tâche de test pour l'affichage des bases de données D1","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-test-simple-task-prompt.webp",[430,12917,12918],{},"Comme illustré ci-dessous, le modèle détecte et utilise avec succès le serveur MCP Cloudflare nouvellement ajouté pour traiter la demande.",[430,12920,12921],{},[433,12922],{"alt":12923,"src":12924},"Agent IA exécutant avec succès le listage des bases de données D1 via MCP","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002Fantigravity-test-task-success.webp",[12301,12926],{},[474,12928,12239],{"id":12238},[430,12930,12931],{},"Antigravity 2 représente une transition majeure d'un IDE traditionnel vers une application de bureau accessible, permettant aux utilisateurs du quotidien de devenir les chefs d'orchestre de n'importe quelle tâche.",[430,12933,12934],{},"Cependant, Antigravity 2 a encore besoin de quelques ajustements. En cas de dysfonctionnement, le débogage peut s'avérer frustrant en raison d'une gestion des erreurs trop vague. De plus, la documentation officielle manque de soin — probablement générée par IA — car plusieurs références et chemins de fichiers sont actuellement incorrects.",[1635,12936,12937],{},"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}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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"title":425,"searchDepth":1058,"depth":1065,"links":12939},[12940,12941,12942,12945,12946,12947,12948],{"id":1750,"depth":1065,"text":1751},{"id":12305,"depth":1058,"text":12306},{"id":12356,"depth":1058,"text":12357,"children":12943},[12944],{"id":12382,"depth":1072,"text":12383},{"id":12460,"depth":1058,"text":12461},{"id":12834,"depth":1058,"text":12835},{"id":12905,"depth":1058,"text":12906},{"id":12238,"depth":1058,"text":12239},[1655],"2026-06-05","Découvrez les nouveautés de Google Antigravity 2. Lisez notre guide pratique pour installer l'application, tester les tâches des agents IA et ajouter manuellement des serveurs MCP personnalisés.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20Antigravity%202.0\u002FFR-Setup-Antigravity-2.0.webp","Test et configuration de Google Antigravity 2 : agents IA, MCP et plugins",{"schemaOrg":12955,"robots":1689,"sitemap":12957},[12956],{"@type":1666,"headline":12953,"description":12951},{"lastmod":12950},{"title":12953,"description":12951,"ogTitle":11939,"ogDescription":12951,"twitterTitle":11939,"twitterDescription":12951},"fr\u002Farticle\u002Fsetup-antigravity-2",[],"Ya5i_63UYYqoMRPjCkCT8ykwDWI1qAvGf7rHGO5yH4U",{"id":12963,"title":8655,"author":1698,"body":12964,"category":13379,"date":13380,"description":13381,"extension":1660,"image":13382,"imageAlt":13383,"isPublished":1061,"meta":13384,"minRead":1918,"navigation":1061,"path":113,"seo":13390,"stem":13391,"tags":13392,"updatedAt":1698,"__hash__":13393},"article\u002Ffr\u002Farticle\u002Fcentralised-the-skills-for-agents.md",{"type":427,"value":12965,"toc":13369},[12966,12977,12980,13003,13018,13022,13032,13048,13058,13065,13068,13090,13096,13107,13124,13133,13143,13147,13154,13175,13178,13184,13194,13200,13203,13223,13232,13236,13242,13314,13320,13324,13360,13366],[430,12967,12968,12969,12972,12973,12976],{},"Si vous utilisez plusieurs agents IA ou interfaces en ligne de commande (CLIs) sur votre machine — que ce soit Hermes, Claude Code, Codex, Antigravity, Kimi ou d'autres outils compatibles —, vous avez probablement déjà rencontré ce problème frustrant : ",[441,12970,12971],{},"la fragmentation des compétences"," (skills). Chaque agent ou CLI gère son propre dossier ",[495,12974,12975],{},"skills"," indépendant, ce qui entraîne des installations en doublon, des dérives de versions et une surcharge de maintenance.",[430,12978,12979],{},"Dans le cadre de nos travaux avec les agents IA, nous étions constamment confrontés aux limites suivantes :",[485,12981,12982,12988,12994],{},[488,12983,12984,12987],{},[441,12985,12986],{},"Multiplication des installations"," : Devoir installer une nouvelle compétence pour un agent, puis la réinstaller encore et encore pour tous les autres.",[488,12989,12990,12993],{},[441,12991,12992],{},"Dérive des versions"," (version drift) : Personnaliser ou corriger une compétence pour un agent, oublier de mettre à jour les autres, et se retrouver avec des agents aux comportements incohérents.",[488,12995,12996,12999,13000,13002],{},[441,12997,12998],{},"Gestion fastidieuse des compétences"," : Devoir inspecter chaque dossier ",[495,13001,12975],{}," de chaque agent sur l'ensemble du système pour savoir quelles compétences étaient réellement disponibles.",[430,13004,13005,13006,13008,13009,13011,13012,461],{},"La CLI ",[495,13007,12851],{},", un outil open-source créé par Vercel, résout ce problème en vous permettant de gérer un dossier ",[495,13010,12975],{}," unique et centralisé, partagé de manière transparente par tous vos agents. N'hésitez pas à consulter le ",[444,13013,13015,13016],{"href":8601,"rel":13014},[448],"dépôt GitHub de ",[495,13017,12851],{},[474,13019,13021],{"id":13020},"un-dossier-centralisé","Un dossier centralisé",[430,13023,13024,13025,13027,13028,13031],{},"Le concept est d'une grande simplicité : si nous faisons pointer le dossier ",[495,13026,12975],{}," de chaque agent vers le ",[441,13029,13030],{},"même dossier physique",", le problème de la fragmentation disparaît instantanément.",[430,13033,13034,13035,13037,13038,13040,13041,13044,13045,13047],{},"Lorsque vous installez une compétence avec la CLI ",[495,13036,12851],{},", celle-ci est téléchargée dans le dossier centralisé de votre machine (",[495,13039,8640],{},"). La CLI crée ensuite un ",[441,13042,13043],{},"lien symbolique"," (un symlink, qui agit comme un pointeur transparent) reliant le dossier ",[495,13046,12975],{}," de chaque agent à ce dossier centralisé.",[430,13049,13050,13051,13054,13055,13057],{},"Par exemple, lorsque Claude Code recherche ses compétences dans ",[495,13052,13053],{},"~\u002F.claude\u002Fskills\u002F",", il est redirigé de manière invisible vers ",[495,13056,8640],{},". Si vous ajustez une compétence dans ce dossier centralisé, absolument tous vos agents bénéficient immédiatement de la mise à jour. Finies les copies manuelles, les scripts de synchronisation complexes et le gaspillage d'espace disque !",[474,13059,13061,13062,13064],{"id":13060},"installer-npx-skills-et-ajouter-une-compétence","Installer ",[495,13063,12851],{}," et ajouter une compétence",[430,13066,13067],{},"Lancez la commande suivante pour commencer et ajouter votre toute première compétence :",[920,13069,13071],{"className":1029,"code":13070,"language":1031,"meta":425,"style":425},"npx skills add https:\u002F\u002Fgithub.com\u002Fcoleam00\u002Fexcalidraw-diagram-skill --skill excalidraw-diagram\n",[495,13072,13073],{"__ignoreMap":425},[928,13074,13075,13077,13079,13081,13084,13087],{"class":930,"line":931},[928,13076,7625],{"class":1038},[928,13078,8615],{"class":1042},[928,13080,1052],{"class":1042},[928,13082,13083],{"class":1042}," https:\u002F\u002Fgithub.com\u002Fcoleam00\u002Fexcalidraw-diagram-skill",[928,13085,13086],{"class":1042}," --skill",[928,13088,13089],{"class":1042}," excalidraw-diagram\n",[430,13091,13092],{},[433,13093],{"alt":13094,"src":13095},"Utilisation de la commande npx skills add pour installer une compétence depuis GitHub","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FCentralised%20the%20skills%20for%20agents\u002Fnpx-skills-add-command.webp",[430,13097,13098,13099,13102,13103],{},"La CLI vous demandera si vous souhaitez effectuer cette configuration pour un projet spécifique ou de manière globale. Nous vous recommandons généralement de choisir l'option ",[441,13100,13101],{},"global"," pour que tous vos agents compatibles puissent y accéder d'un coup :\n",[433,13104],{"alt":13105,"src":13106},"Sélection de l'option d'installation globale dans l'interface CLI npx skills","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FCentralised%20the%20skills%20for%20agents\u002Fnpx-skills-install-global-prompt.webp",[430,13108,13109,13110,13112,13113,3027,13116,13120],{},"Ensuite, veillez à bien sélectionner ",[495,13111,8636],{}," pour garantir une ",[441,13114,13115],{},"source unique de vérité",[433,13117],{"alt":13118,"src":13119},"Choix de la méthode de lien symbolique pour la synchronisation des compétences","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FCentralised%20the%20skills%20for%20agents\u002Fnpx-skills-symlink-option.webp",[433,13121],{"alt":13122,"src":13123},"Confirmation de la réussite de l'installation et de la création du lien symbolique dans la CLI","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FCentralised%20the%20skills%20for%20agents\u002Fnpx-skills-installation-completed.webp",[430,13125,13126,13127,3027,13129],{},"Une fois l'opération terminée, nous pouvons vérifier que la compétence est bien installée dans le dossier centralisé à l'emplacement ",[495,13128,8640],{},[433,13130],{"alt":13131,"src":13132},"Vérification des compétences installées dans le répertoire centralisé","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FCentralised%20the%20skills%20for%20agents\u002Fnpx-skills-directory-verification.webp",[430,13134,13135,13136,13138,13139],{},"Lancez maintenant la CLI de Kimi (or tout autre agent) : la compétence ",[495,13137,10236],{}," est disponible et prête à l'emploi !\n",[433,13140],{"alt":13141,"src":13142},"Kimi CLI affichant les compétences centralisées chargées et prêtes","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FCentralised%20the%20skills%20for%20agents\u002Fkimi-cli-skills-integration.webp",[474,13144,13146],{"id":13145},"créer-une-compétence-à-partir-de-zéro","Créer une compétence à partir de zéro",[430,13148,13149,13150,13153],{},"Pour concevoir vos propres compétences sur mesure, vous pouvez utiliser l'outil ",[495,13151,13152],{},"skill-creator"," d'Anthropic. Installez-le comme suit :",[920,13155,13157],{"className":1029,"code":13156,"language":1031,"meta":425,"style":425},"npx skills add https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fskills --skill skill-creator\n",[495,13158,13159],{"__ignoreMap":425},[928,13160,13161,13163,13165,13167,13170,13172],{"class":930,"line":931},[928,13162,7625],{"class":1038},[928,13164,8615],{"class":1042},[928,13166,1052],{"class":1042},[928,13168,13169],{"class":1042}," https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fskills",[928,13171,13086],{"class":1042},[928,13173,13174],{"class":1042}," skill-creator\n",[430,13176,13177],{},"Ensuite, dans Kimi ou tout autre agent, saisissez le prompt suivant :",[920,13179,13182],{"className":13180,"code":13181,"language":4635},[4633],"Use the skill-creator to help me build a skill for creating a product landing page\n",[495,13183,13181],{"__ignoreMap":425},[430,13185,13186,13187,13189,13190],{},"Kimi (ou votre agent) détectera automatiquement ",[495,13188,13152],{}," et vous guidera étape par étape dans sa création :\n",[433,13191],{"alt":13192,"src":13193},"Exécution de l'assistant interactif skill-creator dans Kimi CLI","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FCentralised%20the%20skills%20for%20agents\u002Fkimi-cli-skill-creator-setup.webp",[474,13195,13197,13198],{"id":13196},"autres-commandes-utiles-de-npx-skills","Autres commandes utiles de ",[495,13199,12851],{},[430,13201,13202],{},"Voici d'autres commandes très pratiques :",[485,13204,13205,13211,13217],{},[488,13206,13207,13210],{},[495,13208,13209],{},"npx skills ls -g"," : Lister toutes les compétences installées globalement",[488,13212,13213,13216],{},[495,13214,13215],{},"npx skills update"," : Mettre à jour toutes vos compétences en une seule commande",[488,13218,13219,13222],{},[495,13220,13221],{},"npx skills remove"," : Désinstaller ou supprimer une compétence de manière interactive",[430,13224,13225,13226,13231],{},"Veuillez vous référer au ",[444,13227,13015,13229],{"href":8601,"rel":13228},[448],[495,13230,12851],{}," pour découvrir d'autres commandes et ressources.",[474,13233,13235],{"id":13234},"aller-encore-plus-loin","Aller encore plus loin",[430,13237,13238,13239,13241],{},"Puisque toutes vos compétences sont désormais réunies au même endroit (",[495,13240,8640],{},"), vous pouvez l'initialiser en tant que dépôt Git et le pousser vers GitHub ou GitLab.",[920,13243,13245],{"className":1029,"code":13244,"language":1031,"meta":425,"style":425},"cd ~\u002F.agents\u002Fskills\ngit init\ngit add .\ngit commit -m \"Initial skills folder\"\ngit remote add origin https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fskills\ngit push -u origin main\n",[495,13246,13247,13254,13261,13269,13285,13300],{"__ignoreMap":425},[928,13248,13249,13251],{"class":930,"line":931},[928,13250,2809],{"class":959},[928,13252,13253],{"class":1042}," ~\u002F.agents\u002Fskills\n",[928,13255,13256,13258],{"class":930,"line":1058},[928,13257,2785],{"class":1038},[928,13259,13260],{"class":1042}," init\n",[928,13262,13263,13265,13267],{"class":930,"line":1065},[928,13264,2785],{"class":1038},[928,13266,1052],{"class":1042},[928,13268,4892],{"class":1042},[928,13270,13271,13273,13275,13278,13280,13283],{"class":930,"line":1072},[928,13272,2785],{"class":1038},[928,13274,12204],{"class":1042},[928,13276,13277],{"class":1042}," -m",[928,13279,3280],{"class":942},[928,13281,13282],{"class":1042},"Initial skills folder",[928,13284,1950],{"class":942},[928,13286,13287,13289,13292,13294,13297],{"class":930,"line":1918},[928,13288,2785],{"class":1038},[928,13290,13291],{"class":1042}," remote",[928,13293,1052],{"class":1042},[928,13295,13296],{"class":1042}," origin",[928,13298,13299],{"class":1042}," https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fskills\n",[928,13301,13302,13304,13306,13309,13311],{"class":930,"line":1923},[928,13303,2785],{"class":1038},[928,13305,12175],{"class":1042},[928,13307,13308],{"class":1042}," -u",[928,13310,13296],{"class":1042},[928,13312,13313],{"class":1042}," main\n",[430,13315,13316,13317,461],{},"Désormais, vous disposez d'un historique complet de toutes les modifications apportées à vos compétences, ce qui vous permet de revenir facilement en arrière en cas de problème. De plus, vous pouvez synchroniser sans effort vos compétences sur plusieurs machines (par exemple, entre votre ordinateur portable et votre poste fixe) avec un simple ",[495,13318,13319],{},"git pull",[474,13321,13323],{"id":13322},"quelques-points-de-vigilance-sécurité-et-risques","Quelques points de vigilance (Sécurité et risques)",[485,13325,13326,13332,13338,13348,13354],{},[488,13327,13328,13331],{},[441,13329,13330],{},"Compatibilité variable"," : Toutes les plateformes d'agents ne prennent pas encore en charge l'ensemble des fonctionnalités (comme les hooks personnalisés ou des autorisations d'outils spécifiques). Une compétence peut parfaitement fonctionner avec un agent et présenter des limites avec un autre.",[488,13333,13334,13337],{},[441,13335,13336],{},"Confiance des sources"," : N'installez que des compétences provenant de sources fiables.",[488,13339,13340,13343,13344,13347],{},[441,13341,13342],{},"Vérification du code"," : Si vous utilisez une compétence tierce ou personnalisée, examinez attentivement ses fichiers (notamment le dossier ",[495,13345,13346],{},"scripts\u002F",") avant d'autoriser votre agent à l'exécuter.",[488,13349,13350,13353],{},[441,13351,13352],{},"Principe de moindre privilège"," : Évitez de donner à une compétence plus de permissions ou d'accès aux outils que ce qui est strictement nécessaire à son fonctionnement.",[488,13355,13356,13359],{},[441,13357,13358],{},"Ne stockez jamais de secrets en dur"," : Gardez vos clés d'API et autres secrets confidentiels en dehors des fichiers de compétences.",[430,13361,13362,13363,13365],{},"Mettre en place une \"source unique de vérité\" centralisée à l'aide de ",[495,13364,12851],{}," a épargné bien des frustrations et des tâches redondantes à notre équipe. Nous vous conseillons vivement d'essayer : la puissance de l'IA grandit à mesure que s'enrichissent vos compétences !",[1635,13367,13368],{},"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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}",{"title":425,"searchDepth":1058,"depth":1065,"links":13370},[13371,13372,13374,13375,13377,13378],{"id":13020,"depth":1058,"text":13021},{"id":13060,"depth":1058,"text":13373},"Installer npx skills et ajouter une compétence",{"id":13145,"depth":1058,"text":13146},{"id":13196,"depth":1058,"text":13376},"Autres commandes utiles de npx skills",{"id":13234,"depth":1058,"text":13235},{"id":13322,"depth":1058,"text":13323},[1655],"2026-06-04","Vous utilisez plusieurs agents IA comme Claude Code ou Kimi ? Apprenez à centraliser vos compétences dans un dossier unique et partagé grâce à npx skills.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FCentralised%20the%20skills%20for%20agents\u002FR%C3%A9soudre-la-fragmentation-des-comp%C3%A9tences-d%27agents-via-npx-skills.webp","Résoudre la fragmentation des compétences d'agents IA avec npx skills",{"schemaOrg":13385,"robots":1689,"sitemap":13388},[13386],{"@type":1666,"headline":13387,"description":13381},"Résoudre la fragmentation des compétences d'agents IA via npx skills",{"lastmod":13389},"2026-06-03",{"title":13387,"description":13381,"ogTitle":8655,"ogDescription":13381,"twitterTitle":8655,"twitterDescription":13381},"fr\u002Farticle\u002Fcentralised-the-skills-for-agents",[],"pD4H-xWfVB3xRBY_V-fD98MVcq_BxyIYRHDUgiLEw0E",{"id":13395,"title":13396,"author":1698,"body":13397,"category":13633,"date":13634,"description":13635,"extension":1660,"image":13636,"imageAlt":13637,"isPublished":1061,"meta":13638,"minRead":2265,"navigation":1061,"path":119,"seo":13643,"stem":13644,"tags":13645,"updatedAt":1698,"__hash__":13646},"article\u002Ffr\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare.md","Sécurisez votre coffre NodeWarden via Cloudflare",{"type":427,"value":13398,"toc":13624},[13399,13402,13405,13419,13423,13430,13432,13436,13439,13443,13473,13477,13480,13547,13551,13554,13617,13621],[430,13400,13401],{},"Dès l'instant où votre instance NodeWarden est exposée publiquement sur Internet, elle commence à attirer des milliers de bots automatisés qui scannent les vulnérabilités 24h\u002F24 et 7j\u002F7. Pour protéger vos données sensibles, vous devez verrouiller votre instance NodeWarden au maximum.",[430,13403,13404],{},"Pour sécuriser votre instance NodeWarden, vous pouvez utiliser l'une de ces deux fonctionnalités de Cloudflare :",[485,13406,13407,13413],{},[488,13408,13409,13412],{},[441,13410,13411],{},"Cloudflare IP Access Rules (Règles d'accès IP) :"," Permet de bloquer, d'imposer un défi de sécurité (challenge) ou d'autoriser le trafic en fonction d'adresses IP ou de pays spécifiques.",[488,13414,13415,13418],{},[441,13416,13417],{},"Cloudflare Zero Trust (Recommandé) :"," Agit comme une passerelle sécurisée qui rend votre instance NodeWarden complètement invisible au public, ne laissant passer que les utilisateurs autorisés.",[2153,13420,13422],{"id":13421},"pourquoi-nous-recommandons-cloudflare-zero-trust","Pourquoi nous recommandons Cloudflare Zero Trust",[430,13424,13425,13426,13429],{},"Nous vous conseillons vivement d'utiliser Cloudflare Zero Trust, car les règles d'accès IP sont liées à des adresses IP ou à des pays. Cela signifie que vous devez mettre à jour manuellement vos règles à chaque fois que vous voyagez ou si vous avez une IP dynamique. Cloudflare Zero Trust, en revanche, repose sur votre ",[441,13427,13428],{},"identité"," et non sur votre emplacement géographique — vous offrant un accès à NodeWarden à la fois transparent et sécurisé.",[12301,13431],{},[474,13433,13435],{"id":13434},"guide-de-configuration","Guide de Configuration",[430,13437,13438],{},"Suivez ces étapes pour configurer Cloudflare Zero Trust pour NodeWarden.",[876,13440,13442],{"id":13441},"phase-1-pour-commencer","Phase 1 : Pour commencer",[533,13444,13445,13452,13459,13466],{},[488,13446,13447,13448],{},"Dans votre tableau de bord Cloudflare, cliquez sur 'Zero Trust' dans le menu de gauche.\n",[433,13449],{"alt":13450,"src":13451},"Barre latérale du tableau de bord Cloudflare affichant l'option Zero Trust sélectionnée dans le menu de navigation.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-dashboard-zero-trust-sidebar.webp",[488,13453,13454,13455],{},"Cliquez sur 'Access controls' puis sur 'Applications'.\n",[433,13456],{"alt":13457,"src":13458},"Menu de navigation Cloudflare Zero Trust avec la section Contrôles d'accès développée.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-zero-trust-access-controls-menu.webp",[488,13460,13461,13462],{},"Il se peut qu'on vous demande de choisir un forfait ('Choose a plan').\n",[433,13463],{"alt":13464,"src":13465},"Écran de configuration du compte Cloudflare Zero Trust invitant l'utilisateur à choisir un forfait d'abonnement.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-zero-trust-choose-plan-setup.webp",[488,13467,13468,13469],{},"Cliquez sur le bouton 'Choose a plan' et choisissez 'Zero Trust Free'.\n",[433,13470],{"alt":13471,"src":13472},"La page des détails du forfait Zero Trust Free sur Cloudflare, mettant en évidence le bouton Sélectionner le forfait.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-zero-trust-free-plan-selection.webp",[876,13474,13476],{"id":13475},"phase-2-sécurisez-votre-interface-web","Phase 2 : Sécurisez votre interface web",[430,13478,13479],{},"Tout d'abord, nous allons créer une application pour protéger le tableau de bord web de NodeWarden.",[533,13481,13482,13489,13496,13503,13510,13517,13524,13527,13534,13537],{},[488,13483,13484,13485],{},"Cliquez sur 'Create new application' pour créer la première application.\n",[433,13486],{"alt":13487,"src":13488},"Tableau de bord des applications Cloudflare Access présentant le bouton Créer une nouvelle application.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-create-new-application.webp",[488,13490,13491,13492],{},"Choisissez 'Self-hosted and private'.\n",[433,13493],{"alt":13494,"src":13495},"La fenêtre modale Ajouter une application dans Cloudflare Access avec le type d'application Auto-hébergée et privée sélectionné.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-add-self-hosted-application.webp",[488,13497,13498,13499],{},"Entrez le nom de domaine de NodeWarden.\n",[433,13500],{"alt":13501,"src":13502},"Écran de configuration de l'application Cloudflare Access affichant le nom d'hôte public défini sur warden.techvoyage.dev.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-application-public-hostname.webp",[488,13504,13505,13506],{},"Cliquez sur 'Create new policy' pour créer une politique.\n",[433,13507],{"alt":13508,"src":13509},"Page des politiques Cloudflare Access indiquant qu'aucune politique n'a été ajoutée et un bouton pour créer une nouvelle politique.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-no-policies-create-button.webp",[488,13511,13512,13513],{},"Sélectionnez 'Emails' et entrez un e-mail sous 'Policy rules'.\n",[433,13514],{"alt":13515,"src":13516},"Écran de configuration de la règle de politique Cloudflare Access avec une adresse e-mail spécifiée comme critère d'inclusion.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-policy-rule-email.webp",[488,13518,13519,13520],{},"Entrez un nom et sélectionnez 'Allow' sous 'Policy details'.\n",[433,13521],{"alt":13522,"src":13523},"Écran des détails de la politique Cloudflare Access affichant le nom de la politique NodeWarden-Web et l'action définie sur Autoriser.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-policy-details-allow.webp",[488,13525,13526],{},"Cliquez sur 'Save Policy' pour créer la politique.",[488,13528,13529,13530],{},"Entrez un nom et sélectionnez '1 month' dans la section 'Details'.\n",[433,13531],{"alt":13532,"src":13533},"Résumé de la configuration finale pour une application Cloudflare Access nommée NodeWarden-Web avec une durée de session d'un mois.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-application-final-details.webp",[488,13535,13536],{},"Cliquez sur 'Create' pour créer l'application.",[488,13538,13539,13542,13543],{},[441,13540,13541],{},"Testez-le :"," Ouvrez le domaine dans le navigateur web, vous verrez 'Cloudflare Access' vous demander une adresse e-mail.\n",[433,13544],{"alt":13545,"src":13546},"Un aperçu de l'écran de connexion Cloudflare Access pour NodeWarden-Web, demandant une adresse e-mail.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-login-screen-preview.webp",[876,13548,13550],{"id":13549},"phase-3-autoriser-la-synchronisation-des-clients-bitwarden-contournement-de-lapi","Phase 3 : Autoriser la synchronisation des clients BitWarden (Contournement de l'API)",[430,13552,13553],{},"Les applications de bureau et mobiles BitWarden ne peuvent pas traiter l'écran de connexion par e-mail de Cloudflare. Nous devons donc créer une deuxième application permettant au trafic de contourner (bypass) cet écran de connexion, spécifiquement pour la synchronisation de l'API.",[533,13555,13556,13566,13581,13586,13593,13600,13603,13610],{},[488,13557,13558,13559,13562,13563,461],{},"Retournez dans Applications et cliquez sur ",[441,13560,13561],{},"Create new application",", en choisissant à nouveau ",[441,13564,13565],{},"Self-hosted and private",[488,13567,13568,13569,13572,13573,13576,13577],{},"Entrez 'api\u002F",[896,13570,13571],{},"', 'identity\u002F","', 'notifications\u002F",[896,13574,13575],{},"' et 'icons\u002F","' dans les Destinations.\n",[433,13578],{"alt":13579,"src":13580},"Configuration de plusieurs noms d'hôte publics pour le contournement de l'API dans Cloudflare Access, incluant les chemins api, identity, notifications et icons.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-api-bypass-destinations.webp",[488,13582,13583,13584],{},"Cliquez sur 'Create new policy' pour créer la politique.\n",[433,13585],{"alt":13508,"src":13509},[488,13587,13588,13589],{},"Sélectionnez 'Everyone' sous 'Policy rules'.\n",[433,13590],{"alt":13591,"src":13592},"Configuration de la règle de politique Cloudflare Access avec Tout le monde sélectionné pour permettre un accès large à des chemins spécifiques.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-policy-rule-everyone.webp",[488,13594,13595,13596],{},"Entrez un nom et sélectionnez 'Bypass' sous 'Policy details'.\n",[433,13597],{"alt":13598,"src":13599},"Détails de la politique Cloudflare Access pour NodeWarden-API avec l'action définie sur Contourner.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-policy-details-bypass.webp",[488,13601,13602],{},"Cliquez sur 'Save Policy' pour sauvegarder.",[488,13604,13605,13606],{},"Entrez un nom et sélectionnez '1 month' pour 'Session Duration'.\n",[433,13607],{"alt":13608,"src":13609},"Écran de configuration finale pour l'application NodeWarden-API dans Cloudflare Access.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-api-application-final-details.webp",[488,13611,13612,13613],{},"Vous devriez maintenant avoir 2 applications créées.\n",[433,13614],{"alt":13615,"src":13616},"Le tableau de bord des applications Cloudflare Access affichant les deux applications Web et API créées avec succès.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-applications-list-final.webp",[474,13618,13620],{"id":13619},"le-mot-de-la-fin","Le mot de la fin",[430,13622,13623],{},"N'oubliez pas que Cloudflare n'est que votre bouclier extérieur. Pour conserver un coffre-fort (vault) véritablement sécurisé, assurez-vous de toujours utiliser un mot de passe maître robuste, d'activer l'authentification à double facteur (2FA) et de bien protéger votre compte Cloudflare.",{"title":425,"searchDepth":1058,"depth":1065,"links":13625},[13626,13627,13632],{"id":13421,"depth":1072,"text":13422},{"id":13434,"depth":1058,"text":13435,"children":13628},[13629,13630,13631],{"id":13441,"depth":1065,"text":13442},{"id":13475,"depth":1065,"text":13476},{"id":13549,"depth":1065,"text":13550},{"id":13619,"depth":1058,"text":13620},[2597,9475],"2026-05-27","Dès l'instant où votre instance NodeWarden est exposée publiquement sur Internet, elle commence à attirer des milliers de bots automatisés qui scannent les vulnérabilités 24h\u002F24 et 7j\u002F7.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fsecuriser-nodewarden-integration-cloudflare-guide.webp","Vignette d'un guide étape par étape pour sécuriser un coffre-fort NodeWarden avec l'intégration Cloudflare, illustrant un coffre numérique cadenassé et une baie de serveurs sécurisée.",{"schemaOrg":13639,"robots":1689,"sitemap":13642},[13640],{"@type":1666,"headline":13641,"description":13635},"Arrêtez d'exposer votre coffre-fort : Sécurisez NodeWarden avec Cloudflare",{"lastmod":13634},{"title":13641,"description":13635,"ogTitle":13641,"ogDescription":13635,"twitterTitle":13641,"twitterDescription":13635},"fr\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare",[],"x38CQRDbgqbw7quR-hfyfj7bKLNktMFR_X3b2HISUII",{"id":13648,"title":13649,"author":1698,"body":13650,"category":14207,"date":14208,"description":14209,"extension":1660,"image":14210,"imageAlt":14211,"isPublished":1061,"meta":14212,"minRead":2265,"navigation":1061,"path":127,"seo":14217,"stem":14218,"tags":14219,"updatedAt":1698,"__hash__":14220},"article\u002Ffr\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare.md","Auto-héberger un coffre de mots de passe type BitWarden",{"type":427,"value":13651,"toc":14192},[13652,13659,13663,13846,13850,13866,13870,13900,13904,13934,13938,13965,13969,14012,14016,14052,14056,14059,14063,14092,14096,14119,14123,14126,14143,14148,14151,14154,14168,14172,14185,14187],[430,13653,13654,13655,13658],{},"Vos mots de passe constituent votre propriété numérique la plus critique. Les garder en sécurité signifie les garder entre vos propres mains. En auto-hébergeant votre gestionnaire de mots de passe, vous prenez le contrôle de votre propre sécurité. ",[441,13656,13657],{},"Bitwarden","​ est largement considéré comme l'un des gestionnaires de mots de passe les plus fiables, et son code source est disponible sous la licence AGPL-3.0. NodeWarden est un serveur non officiel compatible avec Bitwarden, écrit en Typescript, qui peut être déployé gratuitement sur Cloudflare.",[474,13660,13662],{"id":13661},"comparaison-des-fonctionnalités-avec-le-serveur-bitwarden-officiel","Comparaison des fonctionnalités avec le serveur Bitwarden officiel",[602,13664,13665,13680],{},[605,13666,13667],{},[608,13668,13669,13672,13674,13677],{},[611,13670,13671],{},"Fonctionnalité",[611,13673,13657],{},[611,13675,13676],{},"NodeWarden",[611,13678,13679],{},"Remarques",[631,13681,13682,13698,13713,13725,13737,13752,13768,13783,13798,13810,13822,13835],{},[608,13683,13684,13687,13690,13692],{},[636,13685,13686],{},"Coffre-fort Web (Web Vault)",[636,13688,13689],{},"✅",[636,13691,13689],{},[636,13693,13694,13697],{},[441,13695,13696],{},"Interface originale du coffre-fort web","​",[608,13699,13700,13706,13708,13710],{},[636,13701,13702,13703],{},"Synchronisation complète ",[495,13704,13705],{},"\u002Fapi\u002Fsync",[636,13707,13689],{},[636,13709,13689],{},[636,13711,13712],{},"Compatibilité optimisée pour les clients officiels",[608,13714,13715,13718,13720,13722],{},[636,13716,13717],{},"Upload \u002F téléchargement de pièces jointes",[636,13719,13689],{},[636,13721,13689],{},[636,13723,13724],{},"Cloudflare R2 ou KV",[608,13726,13727,13730,13732,13734],{},[636,13728,13729],{},"Send (Envoi)",[636,13731,13689],{},[636,13733,13689],{},[636,13735,13736],{},"Supporte l'envoi de texte et de fichiers",[608,13738,13739,13742,13744,13746],{},[636,13740,13741],{},"Import \u002F Export",[636,13743,13689],{},[636,13745,13689],{},[636,13747,13748,13749,13697],{},"Supporte l'importation de Bitwarden JSON \u002F CSV \u002F ",[441,13750,13751],{},"ZIP avec pièces jointes",[608,13753,13754,13759,13761,13763],{},[636,13755,13756,13697],{},[441,13757,13758],{},"Centre de sauvegarde cloud",[636,13760,8577],{},[636,13762,13689],{},[636,13764,13765,13697],{},[441,13766,13767],{},"Sauvegarde planifiée vers WebDAV \u002F E3",[608,13769,13770,13773,13776,13778],{},[636,13771,13772],{},"Indice de mot de passe (web)",[636,13774,13775],{},"⚠️ Limité",[636,13777,13689],{},[636,13779,13780,13697],{},[441,13781,13782],{},"Aucun email requis",[608,13784,13785,13788,13790,13792],{},[636,13786,13787],{},"TOTP \u002F Steam TOTP",[636,13789,13689],{},[636,13791,13689],{},[636,13793,13794,13795],{},"Inclut le support ",[495,13796,13797],{},"steam:\u002F\u002F",[608,13799,13800,13803,13805,13807],{},[636,13801,13802],{},"Multi-utilisateurs",[636,13804,13689],{},[636,13806,13689],{},[636,13808,13809],{},"Inscription sur invitation",[608,13811,13812,13815,13817,13819],{},[636,13813,13814],{},"Organisations \u002F Collections \u002F Rôles",[636,13816,13689],{},[636,13818,8577],{},[636,13820,13821],{},"Non implémenté",[608,13823,13824,13827,13829,13832],{},[636,13825,13826],{},"Connexion 2FA",[636,13828,13689],{},[636,13830,13831],{},"⚠️ Partiel",[636,13833,13834],{},"Actuellement seulement TOTP au niveau de l'utilisateur",[608,13836,13837,13840,13842,13844],{},[636,13838,13839],{},"SSO \u002F SCIM \u002F Annuaire d'entreprise",[636,13841,13689],{},[636,13843,8577],{},[636,13845,13821],{},[474,13847,13849],{"id":13848},"ce-dont-nous-avons-besoin","Ce dont nous avons besoin :",[533,13851,13852,13857,13863],{},[488,13853,13854],{},[441,13855,13856],{},"Un compte GitHub",[488,13858,13859,13862],{},[441,13860,13861],{},"Un compte Cloudflare","​ (Gratuit) avec le stockage R2 activé.",[488,13864,13865],{},"_Optionnel :_Un nom de domaine personnalisé géré dans Cloudflare.",[474,13867,13869],{"id":13868},"phase-1-préparer-le-code","Phase 1 : Préparer le code",[533,13871,13872,13891],{},[488,13873,13874,13875,13879,13880,13884,13885,13887],{},"Forkez le dépôt NodeWarden depuis ",[444,13876,13877],{"href":13877,"rel":13878},"https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fnodewarden",[448]," depuis le dépôt original ",[444,13881,13882],{"href":13882,"rel":13883},"https:\u002F\u002Fgithub.com\u002Fshuaiplus\u002Fnodewarden",[448]," GitHub.",[1874,13886],{},[433,13888],{"alt":13889,"src":13890},"Créer un fork du dépôt NodeWarden sur GitHub","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Ffork-nodewarden-repo.webp",[488,13892,13893,13894,13896],{},"Activez le workflow « Sync Upstream ».",[1874,13895],{},[433,13897],{"alt":13898,"src":13899},"Activer le workflow Sync Upstream dans GitHub Actions","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fenable-sync-upstream.webp",[474,13901,13903],{"id":13902},"phase-2-déployer-sur-cloudflare","Phase 2 : Déployer sur Cloudflare",[533,13905,13906,13915,13928],{},[488,13907,13908,13909,13911],{},"Créez une application Worker dans Cloudflare.",[1874,13910],{},[433,13912],{"alt":13913,"src":13914},"Création d'une nouvelle application Worker dans le tableau de bord Cloudflare","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fcreate-cloudflare-worker.webp",[488,13916,13917,13918,13920,13924],{},"Sélectionnez « Continue with GitHub » pour déployer l'application.",[1874,13919],{},[433,13921],{"alt":13922,"src":13923},"Déploiement de l'application NodeWarden en se connectant à GitHub","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fdeploy-github-repo.webp",[433,13925],{"alt":13926,"src":13927},"État d'avancement de la construction et du déploiement du Worker Cloudflare","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-deploy-status.webp",[488,13929,13930,13931,461],{},"Attendez quelques instants que Cloudflare compile et déploie votre application. Il vous fournira une URL par défaut de type ",[495,13932,13933],{},"worker.dev",[876,13935,13937],{"id":13936},"optionnel-ajouter-un-domaine-personnalisé","(Optionnel) Ajouter un domaine personnalisé :",[485,13939,13940,13946,13952],{},[488,13941,13942,13943,461],{},"Dans les paramètres de votre Cloudflare Worker, allez dans l'onglet ",[441,13944,13945],{},"Settings",[488,13947,13948,13949,461],{},"Cliquez sur ",[441,13950,13951],{},"+ Add",[488,13953,13954,13955,13957,13961],{},"Tapez le domaine de votre choix et suivez les instructions.",[1874,13956],{},[433,13958],{"alt":13959,"src":13960},"Accès aux paramètres de domaine personnalisé dans Cloudflare Worker","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fworker-settings-custom-domain.webp",[433,13962],{"alt":13963,"src":13964},"Ajout d'un domaine personnalisé au Worker Cloudflare","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fadd-custom-domain.webp",[474,13966,13968],{"id":13967},"phase-3-sécuriser-votre-serveur-le-secret-jwt","Phase 3 : Sécuriser votre serveur (Le secret JWT)",[533,13970,13971,13974,13987,14006],{},[488,13972,13973],{},"Allez sur votre navigateur web et entrez votre nom de domaine personnalisé ou le domaine 'worker.dev' généré.",[488,13975,13976,13977,13980,13981,13983],{},"Le message '",[441,13978,13979],{},"JWT_SECRET is missing","' s'affichera.",[1874,13982],{},[433,13984],{"alt":13985,"src":13986},"Message d'erreur JWT_SECRET is missing sur le serveur NodeWarden","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fjwt-secret-missing-error.webp",[488,13988,13989,13990,13992,13993,1863,13996,13998,14002],{},"Copiez la clé secrète générée et retournez dans l'onglet Settings (Paramètres) de votre NodeWarden Worker, puis cliquez sur le bouton '",[441,13991,13951],{},"' dans la section '",[441,13994,13995],{},"Variables and Secrets",[1874,13997],{},[433,13999],{"alt":14000,"src":14001},"Section Variables et Secrets dans les paramètres du Worker Cloudflare","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fworker-variables-secrets.webp",[433,14003],{"alt":14004,"src":14005},"Ajout du secret JWT généré aux variables du Worker Cloudflare","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fadd-jwt-secret.webp",[488,14007,14008,14009,1863],{},"Collez le secret généré et cliquez sur le bouton '",[441,14010,14011],{},"Deploy \u002F Save",[474,14013,14015],{"id":14014},"phase-4-créer-votre-compte-administrateur","Phase 4 : Créer votre compte Administrateur",[533,14017,14018,14027,14040,14049],{},[488,14019,14020,14021,14023],{},"Retournez sur votre navigateur web et rafraîchissez la page, vous obtiendrez la page de connexion suivante.",[1874,14022],{},[433,14024],{"alt":14025,"src":14026},"Page de connexion du serveur NodeWarden","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fnodewarden-login.webp",[488,14028,14029,14030,14033,14034,14036],{},"Cliquez sur '",[441,14031,14032],{},"Create Account","' pour créer le compte admin.",[1874,14035],{},[433,14037],{"alt":14038,"src":14039},"Cliquer sur le bouton Create Account sur la page de connexion NodeWarden","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fcreate-account-button.webp",[488,14041,14042,14043,14045],{},"Connectez-vous avec le compte admin créé pour accéder au tableau de bord (Dashboard).",[1874,14044],{},[433,14046],{"alt":14047,"src":14048},"Aperçu du tableau de bord d'administration NodeWarden","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fnodewarden-dashboard.webp",[488,14050,14051],{},"Le serveur est maintenant déployé et fonctionnel. Nous allons commencer à configurer les clients Bitwarden.",[474,14053,14055],{"id":14054},"phase-5-connecter-vos-appareils","Phase 5 : Connecter vos appareils",[430,14057,14058],{},"Vous pouvez utiliser les applications officielles Bitwarden sur tous vos appareils.",[2153,14060,14062],{"id":14061},"extension-chrome","Extension Chrome",[533,14064,14065,14068,14071,14080,14089],{},[488,14066,14067],{},"Installez l'extension Bitwarden pour Chrome.",[488,14069,14070],{},"Ouvrez l'extension.",[488,14072,14073,14074,14076],{},"Cliquez sur le lien à côté de 'Accessing:' au bas de la fenêtre contextuelle.",[1874,14075],{},[433,14077],{"alt":14078,"src":14079},"Sélection de l'option auto-hébergé dans l'extension Bitwarden pour Chrome","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fbitwarden-extension-self-hosted.webp",[488,14081,14082,14083,14085],{},"Entrez le nom de domaine du serveur NodeWarden.",[1874,14084],{},[433,14086],{"alt":14087,"src":14088},"Saisie de l'URL du serveur dans l'extension Bitwarden pour Chrome","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fbitwarden-extension-domain.webp",[488,14090,14091],{},"Enregistrez les paramètres et connectez-vous avec votre compte.",[876,14093,14095],{"id":14094},"application-ios","Application iOS",[533,14097,14098,14101,14110],{},[488,14099,14100],{},"Installez l'application Bitwarden depuis l'App Store.",[488,14102,14103,14104,14106],{},"Ouvrez l'application et cliquez sur '' à côté de 'Logging in on:'.",[1874,14105],{},[433,14107],{"alt":14108,"src":14109},"Accès aux paramètres auto-hébergés dans l'application Bitwarden pour iOS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fbitwarden-ios-self-hosted.webp",[488,14111,14112,14113,14115],{},"Entrez le nom de domaine du serveur NodeWarden et cliquez sur le bouton '✓'.",[1874,14114],{},[433,14116],{"alt":14117,"src":14118},"Configuration de l'URL du serveur dans l'application Bitwarden pour iOS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fbitwarden-ios-domain.webp",[876,14120,14122],{"id":14121},"autres-clients","Autres Clients",[430,14124,14125],{},"NodeWarden a été testé et confirmé compatible avec ces clients officiels Bitwarden :",[485,14127,14128,14131,14134,14137,14140],{},[488,14129,14130],{},"✅ Windows (bureau)",[488,14132,14133],{},"✅ Applications mobiles Android\u002FiOS",[488,14135,14136],{},"✅ Extensions de navigateur",[488,14138,14139],{},"✅ Linux (bureau)",[488,14141,14142],{},"⚠️ macOS (bureau) (non entièrement vérifié)",[14144,14145,14147],"h1",{"id":14146},"sauvegarde-du-coffre-fort","Sauvegarde du Coffre-fort",[430,14149,14150],{},"NodeWarden vous permet de sauvegarder votre coffre-fort sur un ordinateur local ou sur un stockage distant (WebDAV ou stockage compatible S3).",[430,14152,14153],{},"Pour automatiser les sauvegardes distantes :",[485,14155,14156,14159],{},[488,14157,14158],{},"Configurez les détails du stockage distant dans le tableau de bord de NodeWarden.",[488,14160,14161,14162,14164],{},"Assurez-vous que la tâche Cron est configurée dans les paramètres de votre Cloudflare Worker pour la sauvegarde distante automatique.",[1874,14163],{},[433,14165],{"alt":14166,"src":14167},"Configuration des déclencheurs Cron pour les sauvegardes automatiques de la voûte dans Cloudflare","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-worker-cron.webp",[14144,14169,14171],{"id":14170},"dernières-recommandations-de-sécurité","Dernières recommandations de sécurité",[485,14173,14174,14177,14180],{},[488,14175,14176],{},"Sécurisez l'accès à votre compte Cloudflare, sinon vos données pourraient être compromises. Activez immédiatement l'authentification à deux facteurs (2FA) ou un Passkey sur votre compte Cloudflare.",[488,14178,14179],{},"Hébergez NodeWarden sur un compte Cloudflare dédié. Ne partagez pas les ressources avec d'autres applications web pour minimiser les risques de sécurité.",[488,14181,14182],{},[444,14183,14184],{"href":371},"Sécuriser NodeWarden avec Cloudflare",[14144,14186,4023],{"id":1606},[485,14188,14189],{},[488,14190,14191],{},"Guide de démarrage officiel de NodeWarden",{"title":425,"searchDepth":1058,"depth":1065,"links":14193},[14194,14195,14196,14197,14200,14201,14202],{"id":13661,"depth":1058,"text":13662},{"id":13848,"depth":1058,"text":13849},{"id":13868,"depth":1058,"text":13869},{"id":13902,"depth":1058,"text":13903,"children":14198},[14199],{"id":13936,"depth":1065,"text":13937},{"id":13967,"depth":1058,"text":13968},{"id":14014,"depth":1058,"text":14015},{"id":14054,"depth":1058,"text":14055,"children":14203},[14204,14205,14206],{"id":14061,"depth":1072,"text":14062},{"id":14094,"depth":1065,"text":14095},{"id":14121,"depth":1065,"text":14122},[2597,9475],"2026-05-25","Vos mots de passe constituent votre propriété numérique la plus critique.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fserveur-auto-heberge-bitwarden.webp","Miniature du tutoriel sur l'auto-hébergement d'un serveur compatible Bitwarden, montrant un coffre-fort numérique et une baie de serveurs.",{"schemaOrg":14213,"robots":1689,"sitemap":14216},[14214],{"@type":1666,"headline":14215,"description":14209},"Comment sécuriser vos mots de passe dans votre propre coffre-fort en auto-hébergeant un serveur compatible Bitwarden",{"lastmod":14208},{"title":14215,"description":14209,"ogTitle":14215,"ogDescription":14209,"twitterTitle":14215,"twitterDescription":14209},"fr\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare",[],"rshizV322tVDj_vS1QA1X87-Gyj6BNlapJW7-ntqS0U",1792489971656]