[{"data":1,"prerenderedAt":6422},["ShallowReactive",2],{"published-article-paths":3,"search-navigation":348,"\u002Ftw\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them":421,"\u002Ftw\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them-surround":861},[4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112,114,116,118,120,122,124,126,128,130,132,134,136,138,140,142,144,146,148,150,152,154,156,158,160,162,164,166,168,170,172,174,176,178,180,182,184,186,188,190,192,194,196,198,200,202,204,206,208,210,212,214,216,218,220,222,224,226,228,230,232,234,236,238,240,242,244,246,248,250,252,254,256,258,260,262,264,266,268,270,272,274,276,278,280,282,284,286,288,290,292,294,296,298,300,302,304,306,308,310,312,314,316,318,320,322,324,326,328,330,332,334,336,338,340,342,344,346],{"path":5},"\u002Fde\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":7},"\u002Fde\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":9},"\u002Fde\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":11},"\u002Fde\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":13},"\u002Fde\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":15},"\u002Fde\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":17},"\u002Fde\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":19},"\u002Fde\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":21},"\u002Fde\u002Farticle\u002Fsetup-antigravity-2",{"path":23},"\u002Fde\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":25},"\u002Fde\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":27},"\u002Fde\u002Farticle\u002Fsync-obsidian-across-devices",{"path":29},"\u002Fde\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":31},"\u002Fde\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":33},"\u002Fde\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":35},"\u002Fde\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":37},"\u002Fen\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":39},"\u002Fen\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":41},"\u002Fen\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":43},"\u002Fen\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":45},"\u002Fen\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":47},"\u002Fen\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare",{"path":49},"\u002Fen\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":51},"\u002Fen\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":53},"\u002Fen\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":55},"\u002Fen\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare",{"path":57},"\u002Fen\u002Farticle\u002Fsetup-antigravity-2",{"path":59},"\u002Fen\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":61},"\u002Fen\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":63},"\u002Fen\u002Farticle\u002Fsync-obsidian-across-devices",{"path":65},"\u002Fen\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":67},"\u002Fen\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":69},"\u002Fen\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":71},"\u002Fen\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":73},"\u002Fes\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":75},"\u002Fes\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":77},"\u002Fes\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":79},"\u002Fes\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":81},"\u002Fes\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":83},"\u002Fes\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare",{"path":85},"\u002Fes\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":87},"\u002Fes\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":89},"\u002Fes\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":91},"\u002Fes\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare",{"path":93},"\u002Fes\u002Farticle\u002Fsetup-antigravity-2",{"path":95},"\u002Fes\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":97},"\u002Fes\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":99},"\u002Fes\u002Farticle\u002Fsync-obsidian-across-devices",{"path":101},"\u002Fes\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":103},"\u002Fes\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":105},"\u002Fes\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":107},"\u002Fes\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":109},"\u002Ffr\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":111},"\u002Ffr\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":113},"\u002Ffr\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":115},"\u002Ffr\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":117},"\u002Ffr\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":119},"\u002Ffr\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare",{"path":121},"\u002Ffr\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":123},"\u002Ffr\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":125},"\u002Ffr\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":127},"\u002Ffr\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare",{"path":129},"\u002Ffr\u002Farticle\u002Fsetup-antigravity-2",{"path":131},"\u002Ffr\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":133},"\u002Ffr\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":135},"\u002Ffr\u002Farticle\u002Fsync-obsidian-across-devices",{"path":137},"\u002Ffr\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":139},"\u002Ffr\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":141},"\u002Ffr\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":143},"\u002Ffr\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":145},"\u002Fid\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":147},"\u002Fid\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":149},"\u002Fid\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":151},"\u002Fid\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":153},"\u002Fid\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":155},"\u002Fid\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare",{"path":157},"\u002Fid\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":159},"\u002Fid\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":161},"\u002Fid\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":163},"\u002Fid\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare",{"path":165},"\u002Fid\u002Farticle\u002Fsetup-antigravity-2",{"path":167},"\u002Fid\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":169},"\u002Fid\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":171},"\u002Fid\u002Farticle\u002Fsync-obsidian-across-devices",{"path":173},"\u002Fid\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":175},"\u002Fid\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":177},"\u002Fid\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":179},"\u002Fid\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":181},"\u002Fja\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":183},"\u002Fja\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":185},"\u002Fja\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":187},"\u002Fja\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":189},"\u002Fja\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":191},"\u002Fja\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":193},"\u002Fja\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":195},"\u002Fja\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":197},"\u002Fja\u002Farticle\u002Fsetup-antigravity-2",{"path":199},"\u002Fja\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":201},"\u002Fja\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":203},"\u002Fja\u002Farticle\u002Fsync-obsidian-across-devices",{"path":205},"\u002Fja\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":207},"\u002Fja\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":209},"\u002Fja\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":211},"\u002Fja\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":213},"\u002Fpt\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":215},"\u002Fpt\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":217},"\u002Fpt\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":219},"\u002Fpt\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":221},"\u002Fpt\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":223},"\u002Fpt\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare",{"path":225},"\u002Fpt\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":227},"\u002Fpt\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":229},"\u002Fpt\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":231},"\u002Fpt\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare",{"path":233},"\u002Fpt\u002Farticle\u002Fsetup-antigravity-2",{"path":235},"\u002Fpt\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":237},"\u002Fpt\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":239},"\u002Fpt\u002Farticle\u002Fsync-obsidian-across-devices",{"path":241},"\u002Fpt\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":243},"\u002Fpt\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":245},"\u002Fpt\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":247},"\u002Fpt\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":249},"\u002Ftw\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":251},"\u002Ftw\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":253},"\u002Ftw\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":255},"\u002Ftw\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":257},"\u002Ftw\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":259},"\u002Ftw\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":261},"\u002Ftw\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":263},"\u002Ftw\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":265},"\u002Ftw\u002Farticle\u002Fsetup-antigravity-2",{"path":267},"\u002Ftw\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":269},"\u002Ftw\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":271},"\u002Ftw\u002Farticle\u002Fsync-obsidian-across-devices",{"path":273},"\u002Ftw\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":275},"\u002Ftw\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":277},"\u002Ftw\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":279},"\u002Ftw\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":281},"\u002Fvi\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":283},"\u002Fvi\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":285},"\u002Fvi\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":287},"\u002Fvi\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":289},"\u002Fvi\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":291},"\u002Fvi\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare",{"path":293},"\u002Fvi\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":295},"\u002Fvi\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":297},"\u002Fvi\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":299},"\u002Fvi\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare",{"path":301},"\u002Fvi\u002Farticle\u002Fsetup-antigravity-2",{"path":303},"\u002Fvi\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":305},"\u002Fvi\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":307},"\u002Fvi\u002Farticle\u002Fsync-obsidian-across-devices",{"path":309},"\u002Fvi\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":311},"\u002Fvi\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":313},"\u002Fvi\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":315},"\u002Fvi\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"path":317},"\u002Fzh\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"path":319},"\u002Fzh\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"path":321},"\u002Fzh\u002Farticle\u002Fcentralised-the-skills-for-agents",{"path":323},"\u002Fzh\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"path":325},"\u002Fzh\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"path":327},"\u002Fzh\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"path":329},"\u002Fzh\u002Farticle\u002Fself-hosted-travel-planner-trek",{"path":331},"\u002Fzh\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"path":333},"\u002Fzh\u002Farticle\u002Fsetup-antigravity-2",{"path":335},"\u002Fzh\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"path":337},"\u002Fzh\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"path":339},"\u002Fzh\u002Farticle\u002Fsync-obsidian-across-devices",{"path":341},"\u002Fzh\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"path":343},"\u002Fzh\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"path":345},"\u002Fzh\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"path":347},"\u002Fzh\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",[349,353,357,361,365,369,373,377,381,385,389,393,397,401,405,409,413,417],{"title":350,"path":351,"stem":352},"AI Agent Skills: What They Are & How to Create Them","\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them","en\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",{"title":354,"path":355,"stem":356},"Bringing Buzz to DeepSeek Harness: Taught to Speak Nostr","\u002Farticle\u002Fbringing-buzz-to-deepseek-harness","en\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",{"title":358,"path":359,"stem":360},"Solving AI Agent Skills Fragmentation with npx skills","\u002Farticle\u002Fcentralised-the-skills-for-agents","en\u002Farticle\u002Fcentralised-the-skills-for-agents",{"title":362,"path":363,"stem":364},"How to Expose Hermes Agent Privately with Cloudflare WARP","\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp","en\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",{"title":366,"path":367,"stem":368},"How AI Agent Skills Replace Nuxt App Scaffolding Scripts","\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts","en\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",{"title":370,"path":371,"stem":372},"Stop Exposing Your Vault: Secure NodeWarden with Cloudflare","\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare","en\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare",{"title":374,"path":375,"stem":376},"How to Deploy Hermes Agent on a Linux VPS","\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server","en\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",{"title":378,"path":379,"stem":380},"Self-Host Your Travel Itineraries with TREK and Docker","\u002Farticle\u002Fself-hosted-travel-planner-trek","en\u002Farticle\u002Fself-hosted-travel-planner-trek",{"title":382,"path":383,"stem":384},"Self-Host Block's Buzz: Shared AI Agent Workspace","\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues","en\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",{"title":386,"path":387,"stem":388},"How to Self-Host a BitWarden Compatible Server Nodewarden","\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare","en\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare",{"title":390,"path":391,"stem":392},"Google Antigravity 2 Hands-On: Setup & First Impressions","\u002Farticle\u002Fsetup-antigravity-2","en\u002Farticle\u002Fsetup-antigravity-2",{"title":394,"path":395,"stem":396},"NetSuite AI Connector Guide: MCP Setup & Use Cases","\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude","en\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",{"title":398,"path":399,"stem":400},"Switch Between Multiple Cloudflare WARP Orgs on Mac","\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac","en\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",{"title":402,"path":403,"stem":404},"How to Sync Obsidian Vaults Across Devices Securely","\u002Farticle\u002Fsync-obsidian-across-devices","en\u002Farticle\u002Fsync-obsidian-across-devices",{"title":406,"path":407,"stem":408},"Testing Claude Fable 5: A Financial Analysis Review","\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis","en\u002Farticle\u002Ftesting-claude-fable-5-in-financial-analysis",{"title":410,"path":411,"stem":412},"Guide to Browser and Scheduler in Antigravity 2","\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2","en\u002Farticle\u002Fuse-browser-and-scheduler-in-antigravity-2",{"title":414,"path":415,"stem":416},"Build a Persistent AI Memory System on Cloudflare","\u002Farticle\u002Fuse-cloudflare-as-ai-memory","en\u002Farticle\u002Fuse-cloudflare-as-ai-memory",{"title":418,"path":419,"stem":420},"Antigravity 2 in Action: AI Agents, Skills, and MCP","\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2","en\u002Farticle\u002Fwhat-can-we-do-with-antigravity-2",{"id":422,"title":423,"author":424,"body":425,"category":839,"date":841,"description":842,"extension":843,"image":844,"imageAlt":845,"isPublished":513,"meta":846,"minRead":479,"navigation":513,"path":249,"seo":852,"stem":853,"tags":854,"updatedAt":859,"__hash__":860},"article\u002Ftw\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them.md","什麼是 AI Agent 技能？深入探討其工作原理並手把手教你如何建構高效、可複用的Agent技能","",{"type":426,"value":427,"toc":829},"minimark",[428,433,447,460,543,548,552,555,564,571,575,633,644,650,653,710,714,717,724,727,739,743,788,791,808,811,822,825],[429,430,432],"h2",{"id":431},"什麼是-ai-agent-技能","什麼是 AI Agent 技能？",[434,435,436,437,441,442,446],"p",{},"代理技能（agent skill）是一種可複用的",[438,439,440],"strong",{},"指令集"," —— 它是一個標準化的流程，旨在指導 Agent 如何卓越地完成某一特定類型的任務。一個技能通常由單個 Markdown 文件 ",[443,444,445],"code",{},"SKILL.md"," 構成，並且可以打包該任務所需的任何其他文件，例如參考文件、範本或可執行腳本。",[434,448,449,450,459],{},"以 ",[451,452,456],"a",{"href":453,"rel":454},"https:\u002F\u002Fgithub.com\u002Fmattpocock\u002Fskills\u002Fblob\u002F733d312884b3878a9a9cff693c5886943753a741\u002Fskills\u002Fproductivity\u002Fgrill-me\u002FSKILL.md",[455],"nofollow",[443,457,458],{},"grill-me"," 技能为例：",[461,462,466],"pre",{"className":463,"code":464,"language":465,"meta":424,"style":424},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","---\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","yaml",[443,467,468,477,492,503,508,515,521,526,532,537],{"__ignoreMap":424},[469,470,473],"span",{"class":471,"line":472},"line",1,[469,474,476],{"class":475},"sBMFI","---\n",[469,478,480,484,488],{"class":471,"line":479},2,[469,481,483],{"class":482},"swJcz","name",[469,485,487],{"class":486},"sMK4o",":",[469,489,491],{"class":490},"sfazB"," grill-me\n",[469,493,495,498,500],{"class":471,"line":494},3,[469,496,497],{"class":482},"description",[469,499,487],{"class":486},[469,501,502],{"class":490}," 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",[469,504,506],{"class":471,"line":505},4,[469,507,476],{"class":475},[469,509,511],{"class":471,"line":510},5,[469,512,514],{"emptyLinePlaceholder":513},true,"\n",[469,516,518],{"class":471,"line":517},6,[469,519,520],{"class":490},"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",[469,522,524],{"class":471,"line":523},7,[469,525,514],{"emptyLinePlaceholder":513},[469,527,529],{"class":471,"line":528},8,[469,530,531],{"class":490},"Ask the questions one at a time.\n",[469,533,535],{"class":471,"line":534},9,[469,536,514],{"emptyLinePlaceholder":513},[469,538,540],{"class":471,"line":539},10,[469,541,542],{"class":490},"If a question can be answered by exploring the codebase, explore the codebase instead.\n",[434,544,545,547],{},[443,546,445],{}," 文件包含一小塊元資料（metadata）和指令的正文。元資料由技能的名稱（name）和描述（description）組成，AI Agent 會在啟動時將其載入。",[429,549,551],{"id":550},"ai-agent-技能的工作原理漸進式披露progressive-disclosure","AI Agent 技能的工作原理：漸進式披露（Progressive Disclosure）",[434,553,554],{},"在初始階段，只有技能的名稱和描述會被載入到上下文視窗（Context）中。當使用者的請求與技能的描述相匹配時，该技能的完整指令正文才會被載入到相同的上下文中。",[434,556,557,558,563],{},"讓我們來看看在實際使用中，",[451,559,561],{"href":453,"rel":560},[455],[443,562,458],{}," 技能是如何工作的。",[434,565,566],{},[567,568],"img",{"alt":569,"src":570},"展示 AI 代理技能執行中漸進式揭示（Progressive Disclosure）機制的時序圖","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",[572,573,574],"h3",{"id":574},"逐步流程",[576,577,578,585,591,597,603,617,627],"ol",{},[579,580,581,584],"li",{},[438,582,583],{},"請求（Request）"," —— 使用者向 Agent 提出需求（例如：“對我的工作流設計進行壓力測試剖析”）。",[579,586,587,590],{},[438,588,589],{},"選擇提示词（Selection prompt）"," —— 使用者的請求與所有可用技能的描述一起發送給 LLM。",[579,592,593,596],{},[438,594,595],{},"LLM 做出選擇"," —— LLM 將請求與每個描述進行對比，並返回匹配的技能。",[579,598,599,602],{},[438,600,601],{},"確認（Confirmation）"," —— Agent 将推薦的技能呈現給使用者，由使用者進行確認（或拒絕\u002F調整）該選擇。",[579,604,605,608,609,613,614,616],{},[438,606,607],{},"載入指令"," —— Agent 獲取已確認技能的",[610,611,612],"em",{},"完整","指令：即 ",[443,615,445],{}," 的正文內容。",[579,618,619,622,623,626],{},[438,620,621],{},"執行提示詞（Execution prompt）"," —— 使用者的請求",[438,624,625],{},"加上所選技能的具体指令","一起發送給 LLM。",[579,628,629,632],{},[438,630,631],{},"響應（Response）"," —— LLM 生成輸出，即壓力測試訪談中的第一個剖析問題。",[434,634,635,636,643],{},"現在，我們使用 ",[451,637,640],{"href":638,"rel":639},"https:\u002F\u002Fgithub.com\u002Fcoleam00\u002Fexcalidraw-diagram-skill",[455],[443,641,642],{},"excalidraw-diagram-skill"," 來演示帶參考文件的技能是如何工作的：",[434,645,646],{},[567,647],{"alt":648,"src":649},"展示 AI 代理執行載有外部參考檔案與範本的技能時序圖","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",[572,651,574],{"id":652},"逐步流程-1",[576,654,655,660,665,674,680,692,700],{},[579,656,657,659],{},[438,658,583],{}," —— 使用者向 Agent 提出需求（“繪製部署流程的工作流圖”）。",[579,661,662,590],{},[438,663,664],{},"選擇提示詞",[579,666,667,669,670,673],{},[438,668,595],{}," —— LLM 將請求與每個描述進行對比，並返回匹配的技能。在這裡，“繪製工作流圖”與 ",[443,671,672],{},"excalidraw-diagram"," 的描述匹配，因此該技能被選中。",[579,675,676,679],{},[438,677,678],{},"確認"," —— Agent 將推薦的技能呈現給使用者，由使用者進行確認（或拒绝\u002F調整）該選擇。",[579,681,682,608,684,613,686,688,689,691],{},[438,683,607],{},[610,685,612],{},[443,687,445],{}," 的正文內容以及任何引用的參考文件（對於 ",[443,690,672],{},"，這包括調色盤、JSON Schema 和圖表元素範本）。",[579,693,694,622,697,699],{},[438,695,696],{},"執行提示詞",[438,698,625],{},"一起發送給 LLM。模型現在擁有了它所需的詳細方法論。",[579,701,702,705,706,709],{},[438,703,704],{},"響應"," —— LLM 生成輸出（一個 ",[443,707,708],{},".excalidraw"," 的 JSON 文件），由 Agent 將其返回給使用者。",[429,711,713],{"id":712},"ai-agent-技能-vs-工具與-mcp","AI Agent 技能 vs. 工具與 MCP",[434,715,716],{},"技能並不能替代提示詞、普通工具（Tools）或 MCP。工具和 MCP 整合擴展了 Agent 對外部系統的存取範圍 —— 例如查詢資料庫、呼叫 API 等等。而技能則加深了 Agent 完成特定任務的實戰訣竅（Know-how）和專業深度。",[434,718,719,720,723],{},"諸如 ",[451,721,722],{"href":395},"在 ChatGPT 與 Claude 中配置 NetSuite MCP"," 的 MCP 整合，能夠讓 Agent 透過存取 NetSuite 中的即時財務和營運資料來回答使用者問題。而 NetSuite 業務報告技能則會進一步引導 Agent 如何去撰寫這份報告，并以規範的報表形式呈現給使用者。",[434,725,726],{},"使用技能的典型場景包括：",[728,729,730,733,736],"ul",{},[579,731,732],{},"多步驟複雜工作流",[579,734,735],{},"文件處理，例如從 PDF 中提取特定資料結構",[579,737,738],{},"程式碼生成規範與標準",[429,740,742],{"id":741},"如何建立-ai-agent-技能","如何建立 AI Agent 技能",[576,744,745,755,769,778],{},[579,746,747,750,751,754],{},[438,748,749],{},"建立一個資料夾","，並以技能名稱命名（例如 ",[443,752,753],{},"netsuite-operation-report\u002F","）。",[579,756,757,762,763,765,766,768],{},[438,758,759,760],{},"撰寫 ",[443,761,445],{},"，包含 ",[443,764,483],{},"、精準的 ",[443,767,497],{},"，以及精煉的指令正文（控制在 200 字以內）。",[579,770,771,774,775,777],{},[438,772,773],{},"添加任務所需資源"," —— 包括參考文件、範本、腳本。保持 ",[443,776,445],{}," 短小精悍，並將細節連結至其他文件。",[579,779,780,783,784,787],{},[438,781,782],{},"進行安裝","，讓 Agent 能夠發現它。參考 ",[451,785,786],{"href":359},"解決 AI 智能代理技能碎片化：集中化管理技能"," 以了解如何在多個 Agent 之間集中管理技能。",[434,789,790],{},"撰寫優秀技能的幾個技巧：",[728,792,793,796,802,805],{},[579,794,795],{},"技能描述（description）應當面向系統觸發器（Trigger）來写，而不是給人類閱讀。",[579,797,798,799,801],{},"保持 ",[443,800,445],{}," 極其精簡 —— 限制在 200 字以內。在正文中寫下通用流程，將邊緣情況和細節留給參考文件。",[579,803,804],{},"凡是確定性的任務，應當使用腳本（Script）来處理。不要讓 LLM 去做算術。",[579,806,807],{},"做好版本控制，將其提交進 Git 中。",[429,809,810],{"id":810},"結語",[434,812,813,814,817,818,821],{},"與定義“",[610,815,816],{},"連接到什麼","”的工具和 MCP 不同，智能代理技能封裝了“",[610,819,820],{},"如何去完成工作","”。它們是不可或缺的互補，而非替代關係。",[434,823,824],{},"透過利用漸進式披露（Progressive Disclosure），技能可以使 Agent 的上下文視窗保持整潔和高效 —— 僅在使用者請求觸發时，才會載入詳細的指令、參考文件和可執行腳本。",[826,827,828],"style",{},"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":424,"searchDepth":479,"depth":494,"links":830},[831,832,836,837,838],{"id":431,"depth":479,"text":432},{"id":550,"depth":479,"text":551,"children":833},[834,835],{"id":574,"depth":494,"text":574},{"id":652,"depth":494,"text":574},{"id":712,"depth":479,"text":713},{"id":741,"depth":479,"text":742},{"id":810,"depth":479,"text":810},[840],"ai-agents","2026-06-26","全面系統地深入了解什麼是AI Agent技能、漸進式披露（Progressive Disclosure）的工作原理，并手把手教你如何撰寫SKILL.md規範，打包參考文件、範本與腳本。本文也將對比技能、工具與MCP的差異與標準开发流程，助你輕鬆建構出可複用、高效率、能處理複雜上下文管理的自訂代理核心技能。","md","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FAI%20Agent%20Skills%20What%20They%20Are%20%26%20How%20to%20Create%20Them\u002FTW-AI-Agent-Skills-What-They-Are-%26-How-to-Create-Them.webp","AI Agent技能開發指南：建構可複用、高效率的Agent核心工作流",{"schemaOrg":847,"robots":850,"sitemap":851},[848],{"@type":849,"headline":423,"description":842},"HowTo","index, follow",{"lastmod":841},{"title":845,"description":842,"ogTitle":423,"ogDescription":842,"twitterTitle":423,"twitterDescription":842},"tw\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",[855,856,857,858],"AI 代理","代理技能","可重複使用的工作流程","AI 教程",null,"G6yqiU4D6vrLB8nujfq3SK0n1l9a3H5iB_pDSICyrk4",{"surround":862,"related":2113},[863,1551],{"id":864,"title":865,"author":424,"body":866,"category":1522,"date":1523,"description":1524,"extension":843,"image":1525,"imageAlt":1526,"isPublished":513,"meta":1527,"minRead":505,"navigation":513,"path":259,"seo":1542,"stem":1544,"tags":1545,"updatedAt":859,"__hash__":1550},"article\u002Ftw\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server.md","如何在 Linux VPS 遠端伺服器上從零開始安裝、部署與設定 Hermes Agent",{"type":426,"value":867,"toc":1511},[868,872,875,878,882,886,889,904,910,913,943,950,979,986,991,1006,1019,1027,1032,1050,1054,1057,1079,1085,1088,1100,1111,1122,1154,1158,1169,1179,1190,1204,1211,1221,1227,1257,1273,1277,1284,1296,1301,1339,1343,1346,1362,1372,1451,1454,1502,1505,1508],[429,869,871],{"id":870},"為什麼在遠端-vps-上代管-hermes-agent","為什麼在遠端 VPS 上代管 Hermes Agent？",[434,873,874],{},"由於 Hermes Agent 具備執行背景任務、排程作業以及回應 Webhook 呼叫的能力，我們需要一台機器保持 24\u002F7 全天候待命。本地設備可能會遇到斷電、斷網，或者面臨硬體資源耗盡的風險。而遠端伺服器（VPS）則能保證 99% 以上的在線率（Uptime），並在需要時輕鬆進行計算資源的彈性擴充。",[434,876,877],{},"目前市面上有幾家性價比極高的虛擬專屬伺服器（VPS）提供商，例如 Hetzner、Hostinger 和 Contabo。我們已經使用 Contabo 有一段時間了，到目前為止，它的表現非常穩定且出色。",[429,879,881],{"id":880},"如何在-linux-vps-上設定-hermes-agent","如何在 Linux VPS 上設定 Hermes Agent",[572,883,885],{"id":884},"第一步連線到您的-vps","第一步：連線到您的 VPS",[434,887,888],{},"開啟終端機並使用 SSH 登入您的遠端伺服器：",[461,890,894],{"className":891,"code":892,"language":893,"meta":424,"style":424},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","ssh root@your_server_ip\n","bash",[443,895,896],{"__ignoreMap":424},[469,897,898,901],{"class":471,"line":472},[469,899,900],{"class":475},"ssh",[469,902,903],{"class":490}," root@your_server_ip\n",[434,905,906],{},[567,907],{"alt":908,"src":909},"在終端機中透過 SSH 連線到 Linux VPS 伺服器","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fvps-terminal-ssh-connection.webp",[434,911,912],{},"確保伺服器的套件均已更新至最新版本：",[461,914,916],{"className":891,"code":915,"language":893,"meta":424,"style":424},"sudo apt update && sudo apt upgrade -y\n",[443,917,918],{"__ignoreMap":424},[469,919,920,923,926,929,932,935,937,940],{"class":471,"line":472},[469,921,922],{"class":475},"sudo",[469,924,925],{"class":490}," apt",[469,927,928],{"class":490}," update",[469,930,931],{"class":486}," &&",[469,933,934],{"class":475}," sudo",[469,936,925],{"class":490},[469,938,939],{"class":490}," upgrade",[469,941,942],{"class":490}," -y\n",[434,944,945,946,949],{},"新增一個新使用者 ",[443,947,948],{},"hermes","，或者您自訂的其他使用者名稱：",[461,951,953],{"className":891,"code":952,"language":893,"meta":424,"style":424},"sudo adduser hermes \nsudo passwd hermes\n",[443,954,955,969],{"__ignoreMap":424},[469,956,957,959,962,965],{"class":471,"line":472},[469,958,922],{"class":475},[469,960,961],{"class":490}," adduser",[469,963,964],{"class":490}," hermes",[469,966,968],{"class":967},"sTEyZ"," \n",[469,970,971,973,976],{"class":471,"line":479},[469,972,922],{"class":475},[469,974,975],{"class":490}," passwd",[469,977,978],{"class":490}," hermes\n",[434,980,981,982,985],{},"關閉 ",[443,983,984],{},"root"," 使用者的密碼登入以增強安全性：",[576,987,988],{},[579,989,990],{},"開啟 SSH 設定檔：",[461,992,994],{"className":891,"code":993,"language":893,"meta":424,"style":424},"sudo nano \u002Fetc\u002Fssh\u002Fsshd_config\n",[443,995,996],{"__ignoreMap":424},[469,997,998,1000,1003],{"class":471,"line":472},[469,999,922],{"class":475},[469,1001,1002],{"class":490}," nano",[469,1004,1005],{"class":490}," \u002Fetc\u002Fssh\u002Fsshd_config\n",[576,1007,1008],{"start":479},[579,1009,1010,1011,1014,1015,1018],{},"找到 ",[443,1012,1013],{},"PermitRootLogin"," 這一行，將其值修改為 ",[443,1016,1017],{},"no","：",[461,1020,1025],{"className":1021,"code":1023,"language":1024,"meta":424},[1022],"language-text","PermitRootLogin no\n","text",[443,1026,1023],{"__ignoreMap":424},[576,1028,1029],{"start":494},[579,1030,1031],{},"儲存檔案並重啟 SSH 服務：",[461,1033,1035],{"className":891,"code":1034,"language":893,"meta":424,"style":424},"sudo systemctl restart ssh\n",[443,1036,1037],{"__ignoreMap":424},[469,1038,1039,1041,1044,1047],{"class":471,"line":472},[469,1040,922],{"class":475},[469,1042,1043],{"class":490}," systemctl",[469,1045,1046],{"class":490}," restart",[469,1048,1049],{"class":490}," ssh\n",[572,1051,1053],{"id":1052},"第二步安裝-hermes-agent","第二步：安裝 Hermes Agent",[434,1055,1056],{},"執行以下命令：",[461,1058,1060],{"className":891,"code":1059,"language":893,"meta":424,"style":424},"curl -fsSL https:\u002F\u002Fhermes-agent.nousresearch.com\u002Finstall.sh | bash\n",[443,1061,1062],{"__ignoreMap":424},[469,1063,1064,1067,1070,1073,1076],{"class":471,"line":472},[469,1065,1066],{"class":475},"curl",[469,1068,1069],{"class":490}," -fsSL",[469,1071,1072],{"class":490}," https:\u002F\u002Fhermes-agent.nousresearch.com\u002Finstall.sh",[469,1074,1075],{"class":486}," |",[469,1077,1078],{"class":475}," bash\n",[434,1080,1081],{},[567,1082],{"alt":1083,"src":1084},"在終端機中執行 Hermes Agent 的一鍵安裝指令碼","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-agent-installation-terminal.webp",[434,1086,1087],{},"安裝完成後，輸入以下命令驗證是否安裝成功：",[461,1089,1091],{"className":891,"code":1090,"language":893,"meta":424,"style":424},"hermes --version\n",[443,1092,1093],{"__ignoreMap":424},[469,1094,1095,1097],{"class":471,"line":472},[469,1096,948],{"class":475},[469,1098,1099],{"class":490}," --version\n",[434,1101,1102,1103,1106,1107],{},"執行 ",[443,1104,1105],{},"hermes setup"," 命令列工具來設定 Hermes Agent：\n",[567,1108],{"alt":1109,"src":1110},"In terminal, run hermes setup command to initiate setup wizard","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-agent-setup-wizard.webp",[434,1112,1113,1114,1117,1118],{},"選擇大語言模型（LLM）提供商，我們可以先選擇 ",[443,1115,1116],{},"DeepSeek","，後續再依需求加入其他模型。\n",[567,1119],{"alt":1120,"src":1121},"在 Hermes 設定中選擇 DeepSeek 作為 LLM 大模型提供商","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-llm-provider-selection.webp",[434,1123,1124,1125,1127,1128,1132,1136,1137,1140,1141,1145,1146,1149,1150],{},"輸入您的 ",[443,1126,1116],{}," API 金鑰：\n",[567,1129],{"alt":1130,"src":1131},"在終端機命令列中輸入 DeepSeek API 金鑰","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-enter-api-key.webp",[567,1133],{"alt":1134,"src":1135},"成功驗證並確認大模型提供商的 API 金鑰","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-api-key-success.webp","\n在執行 Hermes Agent 的環境選項中選擇 ",[443,1138,1139],{},"local machine","：\n",[567,1142],{"alt":1143,"src":1144},"選擇 local machine 本地設備作為 Hermes Agent 的執行環境","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-select-local-machine.webp","\n在通訊管道（Channels）中選擇 ",[443,1147,1148],{},"Telegram","，其他管道可以在後續隨時設定。\n",[567,1151],{"alt":1152,"src":1153},"在 Hermes 設定中選擇 Telegram 作為通訊管道管道","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-select-telegram-channel.webp",[572,1155,1157],{"id":1156},"第三步與-telegram-進行整合","第三步：與 Telegram 進行整合",[434,1159,1160,1161,1164,1165],{},"選擇選項 ",[443,1162,1163],{},"[2]"," 來使用 Telegram 機器人。\n",[567,1166],{"alt":1167,"src":1168},"選擇選項開始整合並設定 Telegram 機器人","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-bot-integration-option.webp",[434,1170,1171,1172,1174,1175],{},"開啟 ",[443,1173,1148],{}," 並搜尋 'BotFather' 官方帳號。\n",[567,1176],{"alt":1177,"src":1178},"在 Telegram 應用中搜尋官方 BotFather 帳號","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-search-botfather.webp",[434,1180,1181,1182,1185,1186],{},"點擊 ",[443,1183,1184],{},"Open"," 開啟與 'BotFather' 的對話框。\n",[567,1187],{"alt":1188,"src":1189},"在 Telegram 中開啟與 BotFather 的對話框","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-open-botfather-chat.webp",[434,1191,1181,1192,1195,1196,1199,1200],{},[443,1193,1194],{},"Create a New Bot","（或輸入 ",[443,1197,1198],{},"\u002Fnewbot"," 指令）。\n",[567,1201],{"alt":1202,"src":1203},"向 BotFather 發送 \u002Fnewbot 指令以建立全新的機器人","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fbotfather-create-new-bot.webp",[434,1205,1206,1207],{},"按照提示填寫名稱和使用者名稱，完成機器人的建立。\n",[567,1208],{"alt":1209,"src":1210},"設定新 Telegram 機器人的暱稱與唯一使用者名稱","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fbotfather-bot-details-configured.webp",[434,1212,1181,1213,1216,1217],{},[443,1214,1215],{},"Copy"," 複製機器人 Token（權杖），並將其貼回終端機中。\n",[567,1218],{"alt":1219,"src":1220},"複製新建立的 Telegram 機器人的 HTTP API 存取 Token","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fbotfather-copy-http-api-token.webp",[434,1222,1223,1224,1226],{},"獲取您的 ",[443,1225,1148],{}," 帳號 ID 並將其加入允許存取的使用者清單（'Allowed user list'）中：",[728,1228,1229,1239,1254],{},[579,1230,1231,1232,1234,1235],{},"在 ",[443,1233,1148],{}," 中搜尋 '@raw_data_bot'。\n",[567,1236],{"alt":1237,"src":1238},"在 Telegram 中搜尋 raw data bot 機器人以檢索帳號 ID","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-search-raw-data-bot.webp",[579,1240,1241,1242,1245,1246,1249,1250],{},"點擊進入 ",[443,1243,1244],{},"RawDataBot"," 並點擊 Start（開始）按鈕。您的使用者 ID 將顯示在 ",[443,1247,1248],{},"P.S. Your ID:"," 後方。\n",[567,1251],{"alt":1252,"src":1253},"啟動 RawDataBot 機器人以獲取目前使用者 的帳號 ID","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-raw-data-bot-user-id.webp",[579,1255,1256],{},"複製該使用者 ID 並貼到終端機中。",[434,1258,1259,1260,1264,1265,1269],{},"由於我們在雲端執行此服務，我們希望它能在系統啟動时自動執行。\n",[567,1261],{"alt":1262,"src":1263},"設定 Hermes systemd 服務開機自啟自動執行的選項","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-autostart-service-option.webp","\n將其他設定均保持預設值即可：\n",[567,1266],{"alt":1267,"src":1268},"在終端機設定中將各項基礎設定保持預設推薦值","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-leave-defaults-1.webp",[567,1270],{"alt":1271,"src":1272},"在 Hermes 設定精靈中完成預設選項的設定","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-leave-defaults-2.webp",[429,1274,1276],{"id":1275},"使用-telegram-機器人測試您的-hermes-agent","使用 Telegram 機器人測試您的 Hermes Agent",[434,1278,1279,1280,1283],{},"執行以下命令啟動 ",[443,1281,1282],{},"hermes gateway"," 服務：",[461,1285,1287],{"className":891,"code":1286,"language":893,"meta":424,"style":424},"hermes gateway\n",[443,1288,1289],{"__ignoreMap":424},[469,1290,1291,1293],{"class":471,"line":472},[469,1292,948],{"class":475},[469,1294,1295],{"class":490}," gateway\n",[434,1297,1171,1298,1300],{},[443,1299,1148],{},"，將剛剛建立的機器人，例如 '@tech_cloud_hermes_bot'，加入對話中。",[728,1302,1303,1318,1329],{},[579,1304,1305,1306,1309,1310,1313,1314],{},"在對話框中輸入 ",[443,1307,1308],{},"\u002Fnew"," 啟動一個全新的 ",[443,1311,1312],{},"Hermes Agent"," 對話工作階段。\n",[567,1315],{"alt":1316,"src":1317},"在 Telegram 聊天框中輸入 \u002Fnew 指令開啟全新的代理對話工作階段","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-chat-hermes-new-session.webp",[579,1319,1320,1321,1324,1325],{},"輸入 ",[443,1322,1323],{},"\u002Fcommands"," 指令將列出所有可用的操作指令。\n",[567,1326],{"alt":1327,"src":1328},"在 Telegram 聊天框中輸入 \u002Fcommands 指令查看可用操作指令清單","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-chat-hermes-commands-list.webp",[579,1330,1320,1331,1334,1335],{},[443,1332,1333],{},"\u002Fmodel"," 指令即可查看目前可用的 LLM 大模型列表。\n",[567,1336],{"alt":1337,"src":1338},"在 Telegram 聊天框中輸入 \u002Fmodel 指令查看可切換的 LLM 列表","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-chat-hermes-model-selection.webp",[429,1340,1342],{"id":1341},"將-hermes-gateway-設定為背景常駐服務","將 Hermes Gateway 設定為背景常駐服務",[434,1344,1345],{},"建立 systemd 守護行程服務檔案：",[461,1347,1351],{"className":1348,"code":1349,"language":1350,"meta":424,"style":424},"language-shell shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","sudo nano \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-gateway.service\n","shell",[443,1352,1353],{"__ignoreMap":424},[469,1354,1355,1357,1359],{"class":471,"line":472},[469,1356,922],{"class":475},[469,1358,1002],{"class":490},[469,1360,1361],{"class":490}," \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-gateway.service\n",[434,1363,1364,1365,1368,1369,1371],{},"貼上以下設定，注意將 ",[443,1366,1367],{},"\u002Fhome\u002Fhermes"," 中的 ",[443,1370,948],{}," 替換為您自己的使用者名稱：",[461,1373,1377],{"className":1374,"code":1375,"language":1376,"meta":424,"style":424},"language-ini shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[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","ini",[443,1378,1379,1384,1389,1394,1398,1403,1408,1413,1418,1423,1428,1434,1439,1445],{"__ignoreMap":424},[469,1380,1381],{"class":471,"line":472},[469,1382,1383],{},"[Unit]\n",[469,1385,1386],{"class":471,"line":479},[469,1387,1388],{},"Description=Hermes Gateway\n",[469,1390,1391],{"class":471,"line":494},[469,1392,1393],{},"After=network.target\n",[469,1395,1396],{"class":471,"line":505},[469,1397,514],{"emptyLinePlaceholder":513},[469,1399,1400],{"class":471,"line":510},[469,1401,1402],{},"[Service]\n",[469,1404,1405],{"class":471,"line":517},[469,1406,1407],{},"User=hermes\n",[469,1409,1410],{"class":471,"line":523},[469,1411,1412],{},"WorkingDirectory=\u002Fhome\u002Fhermes\n",[469,1414,1415],{"class":471,"line":528},[469,1416,1417],{},"ExecStart=\u002Fhome\u002Fhermes\u002F.local\u002Fbin\u002Fhermes gateway\n",[469,1419,1420],{"class":471,"line":534},[469,1421,1422],{},"Restart=always\n",[469,1424,1425],{"class":471,"line":539},[469,1426,1427],{},"RestartSec=10\n",[469,1429,1431],{"class":471,"line":1430},11,[469,1432,1433],{},"Environment=PATH=\u002Fhome\u002Fhermes\u002F.local\u002Fbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fbin:\u002Fbin\n",[469,1435,1437],{"class":471,"line":1436},12,[469,1438,514],{"emptyLinePlaceholder":513},[469,1440,1442],{"class":471,"line":1441},13,[469,1443,1444],{},"[Install]\n",[469,1446,1448],{"class":471,"line":1447},14,[469,1449,1450],{},"WantedBy=multi-user.target\n",[434,1452,1453],{},"啟用並啟動該背景服務：",[461,1455,1457],{"className":1348,"code":1456,"language":1350,"meta":424,"style":424},"sudo systemctl daemon-reload\nsudo systemctl enable hermes-gateway\nsudo systemctl start hermes-gateway\nsudo systemctl status hermes-gateway\n",[443,1458,1459,1468,1480,1491],{"__ignoreMap":424},[469,1460,1461,1463,1465],{"class":471,"line":472},[469,1462,922],{"class":475},[469,1464,1043],{"class":490},[469,1466,1467],{"class":490}," daemon-reload\n",[469,1469,1470,1472,1474,1477],{"class":471,"line":479},[469,1471,922],{"class":475},[469,1473,1043],{"class":490},[469,1475,1476],{"class":490}," enable",[469,1478,1479],{"class":490}," hermes-gateway\n",[469,1481,1482,1484,1486,1489],{"class":471,"line":494},[469,1483,922],{"class":475},[469,1485,1043],{"class":490},[469,1487,1488],{"class":490}," start",[469,1490,1479],{"class":490},[469,1492,1493,1495,1497,1500],{"class":471,"line":505},[469,1494,922],{"class":475},[469,1496,1043],{"class":490},[469,1498,1499],{"class":490}," status",[469,1501,1479],{"class":490},[429,1503,1504],{"id":1504},"結語與展望",[434,1506,1507],{},"在本文中，我們主要分享了如何在雲端伺服器上架設並設定 Hermes Agent，並透過 Telegram 實現與其雙向的高效溝通。讓 Hermes Agent 運行在遠端 VPS 上，能夠為您打造一個 24 小時永不下線的、真正的 AI 數位化個人助理。",[826,1509,1510],{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}",{"title":424,"searchDepth":479,"depth":494,"links":1512},[1513,1514,1519,1520,1521],{"id":870,"depth":479,"text":871},{"id":880,"depth":479,"text":881,"children":1515},[1516,1517,1518],{"id":884,"depth":494,"text":885},{"id":1052,"depth":494,"text":1053},{"id":1156,"depth":494,"text":1157},{"id":1275,"depth":479,"text":1276},{"id":1341,"depth":479,"text":1342},{"id":1504,"depth":479,"text":1504},[840],"2026-06-19","在本篇詳細的實戰教學中，我們將逐步向您展示如何在遠端 Linux VPS 伺服器上成功安裝與部署 Hermes Agent，並實現 24 小時不間斷的穩定運行。我們還會手把手教您如何透過自訂的 Telegram 機器人，快速與Hermes進行無縫對接，輕鬆實現自動化的工作流程管理，確保系統隨時在線回應。","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002FTW-How%20to%20Setup%20Hermes%20on%20Remote%20Server.webp","手把手教您如何在遠端 Linux VPS 伺服器上成功安裝與部署 Hermes Agent，並實現與自訂 Telegram 機器人的雙向整合。",{"schemaOrg":1528,"robots":850,"sitemap":1541},[1529],{"@type":849,"name":865,"description":1524,"image":1525,"step":1530},[1531,1535,1538],{"@type":1532,"name":885,"text":1533,"image":909,"url":1534},"HowToStep","開啟終端機並使用 SSH 登入您的遠端伺服器： 確保伺服器的套件均已更新至最新版本： 新增一個新使用者 `hermes`，或者您自訂的其他使用者名稱： 關閉 `root` 使用者的密碼登入以增強安全性： 1. 開啟 SSH 設定檔： 2. 找到 `PermitRootLogin` 這一行，將其...","#-vps",{"@type":1532,"name":1053,"text":1536,"image":1084,"url":1537},"執行以下命令： 安裝完成後，輸入以下命令驗證是否安裝成功： 執行 `hermes setup` 命令列工具來設定 Hermes Agent： 選擇大語言模型（LLM）提供商，我們可以先選擇 `DeepSeek`，後續再依需求加入其他模型。 輸入您的 `DeepSeek` API 金鑰： 在執行...","#-hermes-agent",{"@type":1532,"name":1157,"text":1539,"image":1168,"url":1540},"選擇選項 `[2]` 來使用 Telegram 機器人。 開啟 `Telegram` 並搜尋 'BotFather' 官方帳號。 點擊 `Open` 開啟與 'BotFather' 的對話框。 點擊 `Create a New Bot`（或輸入 `\u002Fnewbot` 指令）。 按照提示填寫名稱和...","#-telegram-",{"lastmod":1523},{"title":1543,"description":1524,"ogTitle":865,"ogDescription":1524,"twitterTitle":865,"twitterDescription":1524},"Hermes Agent VPS 部署：Telegram 機器人雙向整合指南","tw\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",[1312,1546,1547,1548,1549],"VPS Setup","Telegram Bot","Linux VPS","AI Agent","eiDUNI72ExCUCFln1uzuVunlhhybTJO26B1iuQ4qUaM",{"id":1552,"title":1553,"author":424,"body":1554,"category":2095,"date":2098,"description":2099,"extension":843,"image":2100,"imageAlt":2101,"isPublished":513,"meta":2102,"minRead":479,"navigation":513,"path":269,"seo":2106,"stem":2107,"tags":2108,"updatedAt":859,"__hash__":2112},"article\u002Ftw\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac.md","使用MDM設定檔在macOS上無縫切換與設定多個Cloudflare WARP零信任組織的完整教學指南",{"type":426,"value":1555,"toc":2088},[1556,1560,1563,1570,1574,1577,1580,1583,1587,1590,1597,1614,1927,2046,2049,2052,2055,2085],[429,1557,1559],{"id":1558},"什麼是-cloudflare-warp","什麼是 Cloudflare WARP？",[434,1561,1562],{},"Cloudflare WARP 是一款用戶端應用程式，它會將指定裝置的網路流量引導至 Cloudflare 的全球網路進行路由，而不是直接傳送到公共網際網路。",[434,1564,1565,1566,1569],{},"它基於 ",[438,1567,1568],{},"WireGuard"," 通訊協定建立一條加密隧道，從而保護從裝置到最近的 Cloudflare 資料中心之間的流量安全。隨後，您可以在 Cloudflare 控制面板中建立原則，對這些流入的流量進行篩選、記錄、檢查或路由。",[429,1571,1573],{"id":1572},"為什麼我們需要-cloudflare-warp","為什麼我們需要 Cloudflare WARP？",[434,1575,1576],{},"為了向員工、承包商和其他專案關係人安全地公開內部資源（如私有 Web 服務或 SaaS 應用程式），Cloudflare WARP 用戶端被用作**零信任網路存取 (ZTNA)**的用戶端強制執行點。",[434,1578,1579],{},"Cloudflare WARP 用戶端安裝在用戶的筆記型電腦或手機上。它要求用戶在授予存取權限之前進行身分驗證，並滿足特定的安全性狀態檢查（例如來自經過核准的 IP 範圍、使用已註冊的電子郵件網域或執行處於作用狀態的防火牆）。",[434,1581,1582],{},"透過將裝置流量直接通道化傳輸到 Cloudflare，用戶的身分、裝置和原則將在要求到達內部資源之前得到驗證。因此，內部資源永遠不會暴露在公共網際網路上，每一次要求都將得到完整的記錄和稽核。",[429,1584,1586],{"id":1585},"在單一裝置上支援多個-warp-設定檔","在單一裝置上支援多個 WARP 設定檔",[434,1588,1589],{},"當用戶需要在個人和企業 Cloudflare 帳戶之間進行切換，或者當系統管理員需要管理多個租戶（tenant）時，在單一裝置上支援多個 WARP 設定檔就顯得至关重要。",[434,1591,1592,1593,1596],{},"要在 macOS 上實現此目標，我們可以使用 ",[443,1594,1595],{},".mobileconfig"," MDM 設定檔來定義和註冊不同的 WARP 環境。",[728,1598,1599,1611],{},[579,1600,1601,1602,1610],{},"直接從 Cloudflare ",[451,1603,1606,1607,1609],{"href":1604,"rel":1605},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fstatic\u002Fmdm\u002Fmultiple-orgs\u002FCloudflareWARP.mobileconfig",[455],"下載 ",[443,1608,1595],{}," 範例檔案","。",[579,1612,1613],{},"以下是該設定檔的範例文本：",[461,1615,1619],{"className":1616,"code":1617,"language":1618,"meta":424,"style":424},"language-xml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\u003C!DOCTYPE plist PUBLIC \"-\u002F\u002FApple\u002F\u002FDTD PLIST 1.0\u002F\u002FEN\" \"http:\u002F\u002Fwww.apple.com\u002FDTDs\u002FPropertyList-1.0.dtd\">\n\u003Cplist version=\"1.0\">\n\u003Cdict>\n  \u003Ckey>PayloadContent\u003C\u002Fkey>\n  \u003Carray>\n    \u003Cdict>\n      \u003Ckey>PayloadDisplayName\u003C\u002Fkey>\n      \u003Cstring>Warp Configuration\u003C\u002Fstring>\n      \u003Ckey>PayloadIdentifier\u003C\u002Fkey>\n      \u003Cstring>com.cloudflare.warp.CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n      \u003Ckey>PayloadOrganization\u003C\u002Fkey>\n      \u003Cstring>Cloudflare Ltd.\u003C\u002Fstring>\n      \u003Ckey>PayloadType\u003C\u002Fkey>\n      \u003Cstring>com.cloudflare.warp\u003C\u002Fstring>\n      \u003Ckey>PayloadUUID\u003C\u002Fkey>\n      \u003Cstring>CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n      \u003Ckey>PayloadVersion\u003C\u002Fkey>\n      \u003Cinteger>1\u003C\u002Finteger>\n      \u003Ckey>configs\u003C\u002Fkey>\n      \u003Carray>\n        \u003Cdict>\n          \u003Ckey>organization\u003C\u002Fkey>\n          \u003Cstring>your-team-name-1\u003C\u002Fstring>\n          \u003Ckey>display_name\u003C\u002Fkey>\n          \u003Cstring>Team 1\u003C\u002Fstring>\n        \u003C\u002Fdict>\n        \u003Cdict>\n          \u003Ckey>organization\u003C\u002Fkey>\n          \u003Cstring>your-team-name-2\u003C\u002Fstring>\n          \u003Ckey>display_name\u003C\u002Fkey>\n          \u003Cstring>Team 2\u003C\u002Fstring>\n        \u003C\u002Fdict>\n      \u003C\u002Farray>\n    \u003C\u002Fdict>\n  \u003C\u002Farray>\n  \u003Ckey>PayloadDisplayName\u003C\u002Fkey>\n  \u003Cstring>Cloudflare WARP\u003C\u002Fstring>\n  \u003Ckey>PayloadIdentifier\u003C\u002Fkey>\n  \u003Cstring>cloudflare_warp\u003C\u002Fstring>\n  \u003Ckey>PayloadOrganization\u003C\u002Fkey>\n  \u003Cstring>Cloudflare, Ltd.\u003C\u002Fstring>\n  \u003Ckey>PayloadRemovalDisallowed\u003C\u002Fkey>\n  \u003Cfalse\u002F>\n  \u003Ckey>PayloadScope\u003C\u002Fkey>\n  \u003Cstring>System\u003C\u002Fstring>\n  \u003Ckey>PayloadType\u003C\u002Fkey>\n  \u003Cstring>Configuration\u003C\u002Fstring>\n  \u003Ckey>PayloadUUID\u003C\u002Fkey>\n  \u003Cstring>2B7763B8-64F6-41EB-AA5E-7761651B8131\u003C\u002Fstring>\n  \u003Ckey>PayloadVersion\u003C\u002Fkey>\n  \u003Cinteger>1\u003C\u002Finteger>\n\u003C\u002Fdict>\n\u003C\u002Fplist>\n","xml",[443,1620,1621,1626,1631,1636,1641,1646,1651,1656,1661,1666,1671,1676,1681,1686,1691,1697,1703,1709,1715,1721,1727,1733,1739,1745,1751,1757,1763,1769,1774,1779,1785,1790,1796,1801,1807,1813,1819,1825,1831,1837,1843,1849,1855,1861,1867,1873,1879,1885,1891,1897,1903,1909,1915,1921],{"__ignoreMap":424},[469,1622,1623],{"class":471,"line":472},[469,1624,1625],{},"\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n",[469,1627,1628],{"class":471,"line":479},[469,1629,1630],{},"\u003C!DOCTYPE plist PUBLIC \"-\u002F\u002FApple\u002F\u002FDTD PLIST 1.0\u002F\u002FEN\" \"http:\u002F\u002Fwww.apple.com\u002FDTDs\u002FPropertyList-1.0.dtd\">\n",[469,1632,1633],{"class":471,"line":494},[469,1634,1635],{},"\u003Cplist version=\"1.0\">\n",[469,1637,1638],{"class":471,"line":505},[469,1639,1640],{},"\u003Cdict>\n",[469,1642,1643],{"class":471,"line":510},[469,1644,1645],{},"  \u003Ckey>PayloadContent\u003C\u002Fkey>\n",[469,1647,1648],{"class":471,"line":517},[469,1649,1650],{},"  \u003Carray>\n",[469,1652,1653],{"class":471,"line":523},[469,1654,1655],{},"    \u003Cdict>\n",[469,1657,1658],{"class":471,"line":528},[469,1659,1660],{},"      \u003Ckey>PayloadDisplayName\u003C\u002Fkey>\n",[469,1662,1663],{"class":471,"line":534},[469,1664,1665],{},"      \u003Cstring>Warp Configuration\u003C\u002Fstring>\n",[469,1667,1668],{"class":471,"line":539},[469,1669,1670],{},"      \u003Ckey>PayloadIdentifier\u003C\u002Fkey>\n",[469,1672,1673],{"class":471,"line":1430},[469,1674,1675],{},"      \u003Cstring>com.cloudflare.warp.CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n",[469,1677,1678],{"class":471,"line":1436},[469,1679,1680],{},"      \u003Ckey>PayloadOrganization\u003C\u002Fkey>\n",[469,1682,1683],{"class":471,"line":1441},[469,1684,1685],{},"      \u003Cstring>Cloudflare Ltd.\u003C\u002Fstring>\n",[469,1687,1688],{"class":471,"line":1447},[469,1689,1690],{},"      \u003Ckey>PayloadType\u003C\u002Fkey>\n",[469,1692,1694],{"class":471,"line":1693},15,[469,1695,1696],{},"      \u003Cstring>com.cloudflare.warp\u003C\u002Fstring>\n",[469,1698,1700],{"class":471,"line":1699},16,[469,1701,1702],{},"      \u003Ckey>PayloadUUID\u003C\u002Fkey>\n",[469,1704,1706],{"class":471,"line":1705},17,[469,1707,1708],{},"      \u003Cstring>CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n",[469,1710,1712],{"class":471,"line":1711},18,[469,1713,1714],{},"      \u003Ckey>PayloadVersion\u003C\u002Fkey>\n",[469,1716,1718],{"class":471,"line":1717},19,[469,1719,1720],{},"      \u003Cinteger>1\u003C\u002Finteger>\n",[469,1722,1724],{"class":471,"line":1723},20,[469,1725,1726],{},"      \u003Ckey>configs\u003C\u002Fkey>\n",[469,1728,1730],{"class":471,"line":1729},21,[469,1731,1732],{},"      \u003Carray>\n",[469,1734,1736],{"class":471,"line":1735},22,[469,1737,1738],{},"        \u003Cdict>\n",[469,1740,1742],{"class":471,"line":1741},23,[469,1743,1744],{},"          \u003Ckey>organization\u003C\u002Fkey>\n",[469,1746,1748],{"class":471,"line":1747},24,[469,1749,1750],{},"          \u003Cstring>your-team-name-1\u003C\u002Fstring>\n",[469,1752,1754],{"class":471,"line":1753},25,[469,1755,1756],{},"          \u003Ckey>display_name\u003C\u002Fkey>\n",[469,1758,1760],{"class":471,"line":1759},26,[469,1761,1762],{},"          \u003Cstring>Team 1\u003C\u002Fstring>\n",[469,1764,1766],{"class":471,"line":1765},27,[469,1767,1768],{},"        \u003C\u002Fdict>\n",[469,1770,1772],{"class":471,"line":1771},28,[469,1773,1738],{},[469,1775,1777],{"class":471,"line":1776},29,[469,1778,1744],{},[469,1780,1782],{"class":471,"line":1781},30,[469,1783,1784],{},"          \u003Cstring>your-team-name-2\u003C\u002Fstring>\n",[469,1786,1788],{"class":471,"line":1787},31,[469,1789,1756],{},[469,1791,1793],{"class":471,"line":1792},32,[469,1794,1795],{},"          \u003Cstring>Team 2\u003C\u002Fstring>\n",[469,1797,1799],{"class":471,"line":1798},33,[469,1800,1768],{},[469,1802,1804],{"class":471,"line":1803},34,[469,1805,1806],{},"      \u003C\u002Farray>\n",[469,1808,1810],{"class":471,"line":1809},35,[469,1811,1812],{},"    \u003C\u002Fdict>\n",[469,1814,1816],{"class":471,"line":1815},36,[469,1817,1818],{},"  \u003C\u002Farray>\n",[469,1820,1822],{"class":471,"line":1821},37,[469,1823,1824],{},"  \u003Ckey>PayloadDisplayName\u003C\u002Fkey>\n",[469,1826,1828],{"class":471,"line":1827},38,[469,1829,1830],{},"  \u003Cstring>Cloudflare WARP\u003C\u002Fstring>\n",[469,1832,1834],{"class":471,"line":1833},39,[469,1835,1836],{},"  \u003Ckey>PayloadIdentifier\u003C\u002Fkey>\n",[469,1838,1840],{"class":471,"line":1839},40,[469,1841,1842],{},"  \u003Cstring>cloudflare_warp\u003C\u002Fstring>\n",[469,1844,1846],{"class":471,"line":1845},41,[469,1847,1848],{},"  \u003Ckey>PayloadOrganization\u003C\u002Fkey>\n",[469,1850,1852],{"class":471,"line":1851},42,[469,1853,1854],{},"  \u003Cstring>Cloudflare, Ltd.\u003C\u002Fstring>\n",[469,1856,1858],{"class":471,"line":1857},43,[469,1859,1860],{},"  \u003Ckey>PayloadRemovalDisallowed\u003C\u002Fkey>\n",[469,1862,1864],{"class":471,"line":1863},44,[469,1865,1866],{},"  \u003Cfalse\u002F>\n",[469,1868,1870],{"class":471,"line":1869},45,[469,1871,1872],{},"  \u003Ckey>PayloadScope\u003C\u002Fkey>\n",[469,1874,1876],{"class":471,"line":1875},46,[469,1877,1878],{},"  \u003Cstring>System\u003C\u002Fstring>\n",[469,1880,1882],{"class":471,"line":1881},47,[469,1883,1884],{},"  \u003Ckey>PayloadType\u003C\u002Fkey>\n",[469,1886,1888],{"class":471,"line":1887},48,[469,1889,1890],{},"  \u003Cstring>Configuration\u003C\u002Fstring>\n",[469,1892,1894],{"class":471,"line":1893},49,[469,1895,1896],{},"  \u003Ckey>PayloadUUID\u003C\u002Fkey>\n",[469,1898,1900],{"class":471,"line":1899},50,[469,1901,1902],{},"  \u003Cstring>2B7763B8-64F6-41EB-AA5E-7761651B8131\u003C\u002Fstring>\n",[469,1904,1906],{"class":471,"line":1905},51,[469,1907,1908],{},"  \u003Ckey>PayloadVersion\u003C\u002Fkey>\n",[469,1910,1912],{"class":471,"line":1911},52,[469,1913,1914],{},"  \u003Cinteger>1\u003C\u002Finteger>\n",[469,1916,1918],{"class":471,"line":1917},53,[469,1919,1920],{},"\u003C\u002Fdict>\n",[469,1922,1924],{"class":471,"line":1923},54,[469,1925,1926],{},"\u003C\u002Fplist>\n",[728,1928,1929,1940,1954,1964,1970,1988,2001,2020,2037],{},[579,1930,1931,1932,1935,1936,1939],{},"將 ",[443,1933,1934],{},"your-team-name-1"," 和 ",[443,1937,1938],{},"your-team-name-2"," 替換為您各自的 Cloudflare Zero Trust 團隊名稱。",[579,1941,1942,1943,1946,1947,1949,1950,1953],{},"在終端機中執行指令 ",[443,1944,1945],{},"uuidgen"," 產生唯一的 UUID，並使用它們替換 ",[443,1948,1595],{}," 檔案中的預留位置 ",[443,1951,1952],{},"PayloadUUID"," 值。",[579,1955,1956,1957,1960,1961,1963],{},"確保 ",[443,1958,1959],{},"PayloadIdentifier"," 字串中也包含更新後的 ",[443,1962,1952],{},"，以保證設定檔的唯一性。",[579,1965,1966,1967,1969],{},"儲存編輯後的 ",[443,1968,1595],{}," 檔案。",[579,1971,1972,1973,1976,1977,1980,1981,1984],{},"打開 Mac 上的",[438,1974,1975],{},"系統設定","，搜尋並選擇",[438,1978,1979],{},"描述檔","（Profiles）。",[1982,1983],"br",{},[567,1985],{"alt":1986,"src":1987},"macOS 系統設定中的描述檔面板","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-system-settings-profiles.webp",[579,1989,1990,1991,1994,1995,1997],{},"按一下",[438,1992,1993],{},"安裝、檢視或移除...","（Install, view or remove...）開始新增您的新設定檔。",[1982,1996],{},[567,1998],{"alt":1999,"src":2000},"macOS 描述檔安裝、檢視或移除按鈕","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-profiles-view-remove.webp",[579,2002,2003,2004,2007,2008,1969,2010,2012,2016],{},"按一下左下角的 ",[438,2005,2006],{},"+","（加號）圖示，並選擇您儲存的 ",[443,2009,1595],{},[1982,2011],{},[567,2013],{"alt":2014,"src":2015},"macOS 描述檔左下角新增（+）按鈕","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-profiles-add-profile.webp",[567,2017],{"alt":2018,"src":2019},"在 macOS 上選擇 .mobileconfig 設定檔","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-select-mobileconfig-file.webp",[579,2021,2022,2023,2026,2027,2030,2031,2033],{},"選擇 ",[438,2024,2025],{},"Cloudflare WARP"," 並按一下",[438,2028,2029],{},"安裝","以套用此設定。",[1982,2032],{},[567,2034],{"alt":2035,"src":2036},"在 macOS 上確認安裝 Cloudflare WARP 描述檔","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-install-cloudflare-warp-profile.webp",[579,2038,2039,2040,2042],{},"重新啟動您的 Cloudflare WARP 用戶端。您現在應該可以在使用者介面中看到多組織切換器：",[1982,2041],{},[567,2043],{"alt":2044,"src":2045},"macOS 上支援多組織切換的 Cloudflare WARP 用戶端介面","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fcloudflare-warp-multi-profile-switcher.webp",[429,2047,2048],{"id":2048},"結論",[434,2050,2051],{},"Cloudflare WARP 用戶端在用戶裝置上扮演著關鍵的安全邊界角色，使零信任網路存取（ZTNA）既穩固又極具實用性。透過將內部資源與公共網際網路隔離開來，可確保每一次連線嘗試都經過安全的身份驗證、評估與稽核。",[429,2053,2054],{"id":2054},"參考資料",[728,2056,2057,2064,2071,2078],{},[579,2058,2059],{},[451,2060,2063],{"href":2061,"rel":2062},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fteam-and-resources\u002Fdevices\u002Fcloudflare-one-client\u002Fdeployment\u002Fmdm-deployment\u002F#prepare-file-for-mdm-deployment",[455],"Managed Deployment Preparation",[579,2065,2066],{},[451,2067,2070],{"href":2068,"rel":2069},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fteam-and-resources\u002Fdevices\u002Fcloudflare-one-client\u002Fdeployment\u002Fmdm-deployment\u002Fswitch-organizations\u002F",[455],"Switch Between Zero Trust Organizations",[579,2072,2073],{},[451,2074,2077],{"href":2075,"rel":2076},"https:\u002F\u002Fblog.cloudflare.com\u002Fintroducing-warp-connector-paving-the-path-to-any-to-any-connectivity-2\u002F",[455],"Introducing WARP Connector: Paving the Path to Any-to-Any Connectivity",[579,2079,2080],{},[451,2081,2084],{"href":2082,"rel":2083},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fteam-and-resources\u002Fdevices\u002Fcloudflare-one-client\u002F",[455],"Cloudflare One Client Documentation",[826,2086,2087],{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":424,"searchDepth":479,"depth":494,"links":2089},[2090,2091,2092,2093,2094],{"id":1558,"depth":479,"text":1559},{"id":1572,"depth":479,"text":1573},{"id":1585,"depth":479,"text":1586},{"id":2048,"depth":479,"text":2048},{"id":2054,"depth":479,"text":2054},[2096,2097],"security","cloudflare","2026-07-04","本指南將詳細介紹如何在macOS系統上，通過使用MDM .mobileconfig設定檔，實現多個Cloudflare WARP零信任組織或帳戶之間的無縫切換。本文為企業IT系統管理員提供了一套完整的、可直接落地部署的教學指南與設定步驟範本，幫助企業輕鬆管理並確保終端用戶的網路安全、合規審計與流暢體驗。","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002FTW-Switch-Between-Multiple-Cloudflare-WARP-Orgs-on-Mac.webp","在Mac上配置和切換多個Cloudflare WARP組織帳戶",{"schemaOrg":2103,"robots":850,"sitemap":2105},[2104],{"@type":849,"headline":1553,"description":2099},{"lastmod":2098},{"title":2101,"description":2099,"ogTitle":1553,"ogDescription":2099,"twitterTitle":1553,"twitterDescription":2099},"tw\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",[2109,2025,2110,2111],"macOS","MDM","Zero Trust","zclGoAFYNMezL6vd0bCfBa4isSiwsXYfCQa7Cwm9YLI",[2114,3379,4247],{"id":2115,"title":2116,"author":424,"body":2117,"category":3340,"date":3343,"description":3344,"extension":843,"image":3345,"imageAlt":3346,"isPublished":513,"meta":3347,"minRead":1447,"navigation":513,"path":355,"seo":3372,"stem":3374,"tags":3375,"updatedAt":859,"__hash__":3378},"article\u002Ftw\u002Farticle\u002Fbringing-buzz-to-deepseek-harness.md","為 DeepSeek Harness 接入 Buzz 協作平台：構建自託管 Nostr 訊息閘道的完整實踐",{"type":426,"value":2118,"toc":3324},[2119,2125,2147,2155,2158,2162,2167,2208,2211,2271,2275,2282,2562,2565,2569,2573,2579,2583,2596,2600,2610,2658,2665,2669,2672,2704,2707,2712,2754,2762,2768,2777,2783,2814,2828,2832,2841,2872,2894,2942,2949,2955,2961,2968,2974,2979,2987,3001,3007,3017,3056,3059,3065,3072,3078,3082,3085,3237,3240,3281,3285,3291,3295,3321],[434,2120,2121],{},[567,2122],{"alt":2123,"src":2124},"DeepSeek Harness 訊息閘道連線至 Block Buzz 頻道的運作概觀","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-nostr-gateway-overview.webp",[434,2126,2127,2128,2135,2136,2141,2142,2146],{},"DeepSeek Harness（DSH）的官方外掛程式 ",[438,2129,2130],{},[451,2131,2134],{"href":2132,"rel":2133},"https:\u002F\u002Fgithub.com\u002Fa792883583\u002Fdsh-message-gateway",[455],"dsh-message-gateway","，能夠將 DeepSeek Harness 助理無縫延伸至 Discord、Telegram、WeChat 等多種主流即時通訊平台。該外掛程式倉庫已被 Fork 並進行了二次開發，旨在將 ",[438,2137,2138],{},[451,2139,2140],{"href":383},"自建 Block 旗下 Buzz 協作平台：輕鬆構建人類與 AI 智能體高效協同工作的全新共享工作空間"," 納入支援清單。Fork 後的開原始碼倉庫位於 GitHub：",[451,2143,2144],{"href":2144,"rel":2145},"https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fdsh-message-gateway",[455]," 。",[2148,2149],"article-card",{"description":2150,"image":2151,"image-alt":2152,"label":2153,"min-read":2154,"title":2140,"to":383},"本教學將手把手帶您在 Ubuntu VPS 上部署自託管的 Block 旗下 Nostr 中繼 Buzz，並配置 Cloudflare DNS 安全網路。我們將幫助您搭建起一個安全性的共享工作空間，讓您的團隊成員與多個 AI 智能體（如 Claude、Kimi）能夠基於加密身份進行高效溝通、共享專案上下文並實現無縫協作。","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002FTW-Self-Hosting-Buzz-As-The-Workspace-Where-AI-Agents-Become-Colleagues.webp","一張高顏值的 16:9 科技質感卡片，具有深藍色 and 橙色色調，插圖展示如何在 Ubuntu VPS 上部署自託管的 Block 旗下 Buzz 協作中繼伺服器，其中包含一個帶有置中文字的毛玻璃微動質感面板。","前置準備指南","12",[434,2156,2157],{},"DSH 助理作為一個全功能成員加入 Buzz Nostr 中繼伺服器，既能接收私人訊息（DM），也能接收被 @mention 提及的頻道訊息，並透過與 Web UI 完全相同的獨立工作階段智能體管線輸出回應。",[429,2159,2161],{"id":2160},"dsh-message-gateway-外掛架構剖析","dsh-message-gateway 外掛架構剖析",[434,2163,2164,2166],{},[438,2165,2134],{}," 外掛的系統架構清晰劃分為主機端與用戶端兩大部分：",[728,2168,2169,2198],{},[579,2170,2171,1018,2174,2177,2178,2181,2182,2185,2186,2189,2190,2193,2194,2197],{},[438,2172,2173],{},"主機端（Node 環境）",[443,2175,2176],{},"gateway-store","（憑證與設定持久化儲存，位於 ",[443,2179,2180],{},"~\u002F.dsh\u002Fgateway.json","）、",[443,2183,2184],{},"platforms.ts","（支援平台定義與連線測試）、",[443,2187,2188],{},"routes.ts","（對外暴露的 ",[443,2191,2192],{},"\u002Fgateway\u002F*"," 路由端點）以及 ",[443,2195,2196],{},"bridge-manager.ts","（常駐閘道橋接器：負責按對話維護獨立 Agent 執行個體並統一管理串流回應推送）。",[579,2199,2200,2203,2204,2207],{},[438,2201,2202],{},"用戶端（瀏覽器前端）","：側邊欄的「",[438,2205,2206],{},"Message platforms","」視覺化設定頁面，負責填寫金鑰參數、發起連線測試以及直觀監視閘道即時在線狀態。",[434,2209,2210],{},"為閘道接入一個全新通訊平台通常需要經歷以下三步：",[576,2212,2213,2231,2245],{},[579,2214,2215,2218,2219,2222,2223,2226,2227,2230],{},[438,2216,2217],{},"實作 Bridge 橋接類別","：提供 ",[443,2220,2221],{},"start\u002Fstop\u002Fstatus"," 生命週期方法以及 ",[443,2224,2225],{},"onText(text, frame)"," 訊息回呼，結構規範與現有的 ",[443,2228,2229],{},"wecom-bridge.ts"," 完全一致。",[579,2232,2233,2236,2237,2240,2241,2244],{},[438,2234,2235],{},"接入 bridge-manager 排程器","：複用既有的多工作階段排程管線（",[443,2238,2239],{},"ensureAgentForKey"," + ",[443,2242,2243],{},"pendingMap","），並將底層文字輸出串流掛載至該平台的專用回覆接收器。",[579,2246,2247,2250,2251,2254,2255,2258,2259,2262,2263,2266,2267,2270],{},[438,2248,2249],{},"對接持久化儲存與設定路由","：在 ",[443,2252,2253],{},"\u002Fgateway\u002Fsave"," 與 ",[443,2256,2257],{},"\u002Fgateway\u002Fdelete"," 邏輯中實作：",[438,2260,2261],{},"儲存設定即自動啟動橋接服務，刪除設定則優雅停止橋接服務","，配合 ",[443,2264,2265],{},"autoStartXxx"," 狀態旗標確保 ",[443,2268,2269],{},"dsh web"," 守護行程開機自動重新連線。",[429,2272,2274],{"id":2273},"buzz-閘道橋接實作nostr-協定標準與事件生命週期","Buzz 閘道橋接實作：Nostr 協定標準與事件生命週期",[434,2276,2277,2278,2281],{},"本次接入直接使用 ",[438,2279,2280],{},"DeepSeek Harness"," 自行編寫完成了完整的 Buzz 適配橋接器。底層嚴格遵循了如下 Nostr 協定規範標準：",[2283,2284,2285,2300],"table",{},[2286,2287,2288],"thead",{},[2289,2290,2291,2297],"tr",{},[2292,2293,2294],"th",{},[438,2295,2296],{},"維度 \u002F 階段",[2292,2298,2299],{},"協定實作規範與技術細節",[2301,2302,2303,2325,2343,2370,2388,2412,2437,2459,2473,2487,2506,2523,2537],"tbody",{},[2289,2304,2305,2311],{},[2306,2307,2308],"td",{},[438,2309,2310],{},"底層傳輸（Transport）",[2306,2312,2313,2314,2317,2318,2321,2322],{},"單條經過 NIP-42 鑑權認證的 WebSocket 鏈路；預設中繼連線位址為 ",[443,2315,2316],{},"ws:\u002F\u002Flocalhost:3000","；輸入的 ",[443,2319,2320],{},"http(s):\u002F\u002F"," 會自動正規化為 ",[443,2323,2324],{},"ws(s):\u002F\u002F",[2289,2326,2327,2332],{},[2306,2328,2329],{},[438,2330,2331],{},"鑑權認證（Auth）",[2306,2333,2334,2335,2338,2339,2342],{},"AUTH 事件 ",[443,2336,2337],{},"kind 22242","，攜帶標籤 ",[443,2340,2341],{},"[[\"relay\", url], [\"challenge\", challenge]]","，內容為空字串，由 Agent 的私密金鑰完成簽章",[2289,2344,2345,2350],{},[2306,2346,2347],{},[438,2348,2349],{},"訂閱機制（Subs）",[2306,2351,2352,1018,2355,2358,2359,2362,2363,2366,2367],{},[438,2353,2354],{},"嚴格基於頻道隔離",[443,2356,2357],{},"REQ {\"kinds\":[9], \"#h\":[\u003Cuuid>]}"," — 每個頻道獨立建立一條訂閱。全域性的 ",[443,2360,2361],{},"kinds:[9]"," 雖能收到 EOSE 但絕不廣播推送；多值 ",[443,2364,2365],{},"#h"," 標籤過濾在協定中",[438,2368,2369],{},"無法正常分發",[2289,2371,2372,2377],{},[2306,2373,2374],{},[438,2375,2376],{},"頻道探索（Discovery）",[2306,2378,2379,2380,2383,2384,2387],{},"歷史中繼資料回溯查詢 ",[443,2381,2382],{},"REQ {kinds:[39000]}"," 擷取頻道詳情（其中 ",[443,2385,2386],{},"type == \"dm\""," 用於標記單聊私訊頻道）",[2289,2389,2390,2395],{},[2306,2391,2392],{},[438,2393,2394],{},"成員異動訂閱",[2306,2396,2397,2398,2401,2402,2006,2404,2407,2408,2411],{},"即時長連線訂閱 ",[443,2399,2400],{},"REQ {kinds:[44100,44101], \"#p\":[Agent 公鑰], since: now-60s}"," — 44100 為加入群組，44101 為被移除，均附帶 ",[443,2403,434],{},[443,2405,2406],{},"h","；成員關係變更時",[438,2409,2410],{},"無需重新連線","即可動態熱更新訂閱狀態",[2289,2413,2414,2419],{},[2306,2415,2416],{},[438,2417,2418],{},"即時聊天事件",[2306,2420,2421,2424,2425,2428,2429,2432,2433,2436],{},[443,2422,2423],{},"kind 9"," 事件，攜帶 ",[443,2426,2427],{},"[\"h\", channel]"," 頻道標籤，可選附帶 ",[443,2430,2431],{},"[\"e\", replyTo]"," 回覆目標與 ",[443,2434,2435],{},"[\"p\", mention]"," 被提及者標籤",[2289,2438,2439,2444],{},[2306,2440,2441],{},[438,2442,2443],{},"原位更新編輯",[2306,2445,2446,2449,2450,2254,2452,2455,2456,2458],{},[443,2447,2448],{},"kind 40003"," 事件，附帶 ",[443,2451,2406],{},[443,2453,2454],{},"e"," 目標標籤；內容完全替換；中繼伺服器單包上限 64 KB → 嚴控酬載 ≤ 60,000 B；超長回覆分塊處理 — 首塊用於原位編輯替換，超出部分作為回覆串討論串的 ",[443,2457,2423],{}," 訊息追加",[2289,2460,2461,2466],{},[2306,2462,2463],{},[438,2464,2465],{},"CLOSED 異常訊框處理",[2306,2467,2468,2469,2472],{},"鑑權未完成前收到 ",[443,2470,2471],{},"auth-required"," 屬於正常引導階段（完成 AUTH 後重新拉起訂閱）；鑑權完成後遇斷線 → 階梯式限次重試（最多 3 次，間隔 0\u002F1\u002F2 秒退避）；整鏈重連時全量重構上下文",[2289,2474,2475,2480],{},[2306,2476,2477],{},[438,2478,2479],{},"中繼拉取上限",[2306,2481,2482,2483,2486],{},"每次訂閱最多拉取 2000 條歷史事件，即使設定了 ",[443,2484,2485],{},"since"," 過濾參數，中繼伺服器仍按自最新向過去的時間倒序返回",[2289,2488,2489,2494],{},[2306,2490,2491],{},[438,2492,2493],{},"訊息命中判定",[2306,2495,2496,2497,2499,2500,2502,2503,2505],{},"僅當滿足以下任一條件時才啟動處理入站 ",[443,2498,2423],{},"：(a) ",[443,2501,434],{}," 標籤明確包含自身公鑰，(b) 處於 DM 私訊頻道，(c) 回覆關聯的 ",[443,2504,2454],{}," 根事件為自身發出的訊息。自動過濾自身公鑰發送的內容（徹底杜絕迴圈）",[2289,2507,2508,2513],{},[2306,2509,2510],{},[438,2511,2512],{},"出站 @ 提及",[2306,2514,2515,2516,2519,2520,2522],{},"出站內容按純文字原樣發布 — 中繼伺服器端不對正文中的 ",[443,2517,2518],{},"@"," 符號進行預先驗證；",[443,2521,434],{}," 標籤填入當前對話原作者以及至多 7 位其他被提及者的公鑰（單條上限 8 位）",[2289,2524,2525,2530],{},[2306,2526,2527],{},[438,2528,2529],{},"私聊訊息（DM）",[2306,2531,2532,2533,2536],{},"依賴中繼伺服器範圍內的明文受限頻道（中繼資料標註 ",[443,2534,2535],{},"type: \"dm\"","） — 當前橋接實作中未引入 NIP-04\u002F44 複雜非對稱端對端加密",[2289,2538,2539,2544],{},[2306,2540,2541],{},[438,2542,2543],{},"媒體附件（入站）",[2306,2545,2546,2547,2550,2551,2554,2555,2554,2558,2561],{},"NIP-92 ",[443,2548,2549],{},"imeta"," 規範（",[443,2552,2553],{},"url",", ",[443,2556,2557],{},"sha256",[443,2559,2560],{},"m","）→ 常規 HTTP(S) 串流下載，本地驗證 SHA-256 完整性，單檔限制 20 MB，每條訊息最多 4 張；出站圖片發布暫無官方中繼協定路徑，現階段不支援出站圖片",[434,2563,2564],{},"Buzz 適配閘道的啟動引導時序圖如下：",[567,2566],{"src":2567,"alt":2568},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-bootstrap.webp","展示 Buzz 閘道引導連線與 NIP-42 協定身分鑑權流程的時序圖",[572,2570,2572],{"id":2571},"基於-nostr-40003-事件原位編輯實現的即時串流輸出","基於 Nostr 40003 事件原位編輯實現的即時串流輸出",[434,2574,2575,2576,1018],{},"Nostr 協定缺乏原生鍵入中（Typing）狀態通知，且底層事件設計為嚴格只增不改。為了讓對話過程具備流暢的即時互動感，Buzz 適配閘道",[438,2577,2578],{},"透過原位編輯巧妙模擬了串流打字輸出",[567,2580],{"src":2581,"alt":2582},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-reply.webp","基於 kind 40003 事件原位編輯模擬打字串流回應的邏輯流程圖",[728,2584,2585],{},[579,2586,2587],{},[610,2588,2589,2590,2592,2593,2595],{},"閘道首先秒級發出一條 ",[443,2591,2423],{}," 預留位置訊息，隨後在 Agent 推理過程中按設定的節流閥值連續發射 ",[443,2594,2448],{}," 原位編輯事件逐步追加渲染內容，並在推理終點落定最終文字。這一設計思路與 Telegram、Discord 橋接器的實作方式一脈相承。",[572,2597,2599],{"id":2598},"透過聊天指令打通-deepseek-harness-本地工作區","透過聊天指令打通 DeepSeek Harness 本地工作區",[434,2601,2602,2603,2606,2607,1283],{},"DSH Web 介面所支援的「工作區（Workspaces）」核心能力依賴於底層 ",[443,2604,2605],{},"@deepseek-ai\u002Fdsh-workspace"," 模組中的 ",[443,2608,2609],{},"workspaceRegistry",[461,2611,2615],{"className":2612,"code":2613,"language":2614,"meta":424,"style":424},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const existing = await ctx.workspaceRegistry.resolveByPath(request.path);\n","typescript",[443,2616,2617],{"__ignoreMap":424},[469,2618,2619,2623,2626,2629,2633,2636,2639,2641,2643,2647,2650,2652,2655],{"class":471,"line":472},[469,2620,2622],{"class":2621},"spNyl","const",[469,2624,2625],{"class":967}," existing ",[469,2627,2628],{"class":486},"=",[469,2630,2632],{"class":2631},"s7zQu"," await",[469,2634,2635],{"class":967}," ctx",[469,2637,2638],{"class":486},".",[469,2640,2609],{"class":967},[469,2642,2638],{"class":486},[469,2644,2646],{"class":2645},"s2Zo4","resolveByPath",[469,2648,2649],{"class":967},"(request",[469,2651,2638],{"class":486},[469,2653,2654],{"class":967},"path)",[469,2656,2657],{"class":486},";\n",[434,2659,2660,2661,2664],{},"Buzz 橋接器透過引入全新的聊天斜線指令 ",[443,2662,2663],{},"\u002Fworkspace \u003C目錄路徑>","，允許在群聊中直接向 DSH 註冊並綁定本地現存的資料夾。在此之後，該工作階段下的所有互動都將牢牢錨定在此目錄中，並能即時無縫同步在 DSH Web UI 端查看。",[567,2666],{"src":2667,"alt":2668},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-workspace.webp","透過閘道聊天指令動態註冊並綁定 DeepSeek Harness 本地工作區的架構示意圖",[434,2670,2671],{},"開發與使用過程中需重點明確的三大設計機制：",[728,2673,2674,2684,2694],{},[579,2675,2676,2679,2680,2683],{},[438,2677,2678],{},"變更目錄等同於開啟全新工作階段","：工作階段的工作目錄（",[443,2681,2682],{},"cwd","）在初始化生成 Session Header 時即完成寫入，後續在生命週期內不可直接原地竄改。",[579,2685,2686,2689,2690,2693],{},[438,2687,2688],{},"目標本地目錄必須預先存在","：底層 ",[443,2691,2692],{},"create"," 註冊函式會對路徑進行嚴格驗證，若路徑在主機上不存在將直接擲出例外狀況拒絕綁定。",[579,2695,2696,2699,2700,2703],{},[438,2697,2698],{},"高度安全敏感指令","：透過閘道衍生的工作階段均賦予 ",[438,2701,2702],{},"auto-approve","（自動核准命令執行）特權，擁有對目標資料夾直接進行讀寫和工具操作的完全存取權。",[429,2705,2706],{"id":2706},"安裝與設定全流程指南",[576,2708,2709],{},[579,2710,2711],{},"在終端機執行以下指令完成外掛程式下載與啟動：",[461,2713,2715],{"className":891,"code":2714,"language":893,"meta":424,"style":424},"dsh plugin --profile web add https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fdsh-message-gateway.git\n\n# Start DSH web\ndsh web\n",[443,2716,2717,2737,2741,2747],{"__ignoreMap":424},[469,2718,2719,2722,2725,2728,2731,2734],{"class":471,"line":472},[469,2720,2721],{"class":475},"dsh",[469,2723,2724],{"class":490}," plugin",[469,2726,2727],{"class":490}," --profile",[469,2729,2730],{"class":490}," web",[469,2732,2733],{"class":490}," add",[469,2735,2736],{"class":490}," https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fdsh-message-gateway.git\n",[469,2738,2739],{"class":471,"line":479},[469,2740,514],{"emptyLinePlaceholder":513},[469,2742,2743],{"class":471,"line":494},[469,2744,2746],{"class":2745},"sHwdD","# Start DSH web\n",[469,2748,2749,2751],{"class":471,"line":505},[469,2750,2721],{"class":475},[469,2752,2753],{"class":490}," web\n",[576,2755,2756],{"start":479},[579,2757,2758,2759,2761],{},"待 DSH Web 介面啟動並用瀏覽器開啟後，按一下介面側邊欄中的「",[438,2760,2206],{},"」圖示：",[434,2763,2764],{},[567,2765],{"alt":2766,"src":2767},"DeepSeek Harness Web UI 側邊欄醒目提示的 Message platforms 設定功能表項目","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-web-ui-message-platforms-sidebar-icon.webp",[576,2769,2770],{"start":494},[579,2771,2772,2773,2776],{},"在左側平台清單中選擇「",[438,2774,2775],{},"Buzz","」：",[434,2778,2779],{},[567,2780],{"alt":2781,"src":2782},"DeepSeek Harness 訊息閘道內的 Buzz 協定參數與金鑰對設定面板","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-message-gateway-buzz-config-panel.webp",[576,2784,2785,2796,2807],{"start":505},[579,2786,2787,2788,2791,2792,2795],{},"按一下「",[438,2789,2790],{},"Generate keypair","」按鈕即時生成全新的 Nostr 身分金鑰對。請務必將生成的 ",[443,2793,2794],{},"npub"," 公鑰妥善複製暫存，後續步驟將作為關鍵身分憑證。",[579,2797,2798,2799,2802,2803,2806],{},"準確填入您的 ",[438,2800,2801],{},"Relay URL","（中繼位址）以及需要監聽訂閱的 ",[438,2804,2805],{},"Channels","（允許存取的頻道 UUID 白名單清單）。",[579,2808,2809,2810,2813],{},"按一下底部的「",[438,2811,2812],{},"Save","」按鈕完成儲存。",[434,2815,2816,2817,2820,2821,2824,2825,2827],{},"表單提交後，系統將持久化儲存設定並",[438,2818,2819],{},"立即啟動 Buzz 閘道服務","。私密金鑰 ",[443,2822,2823],{},"nsec"," 作為最高機密憑證被自動保護，僅獨立存放在主機本地的 ",[443,2826,2180],{}," 檔案中。",[572,2829,2831],{"id":2830},"將-dsh-智能體註冊至-buzz-nostr-中繼服務","將 DSH 智能體註冊至 Buzz Nostr 中繼服務",[434,2833,2834,2837,2838,2840],{},[438,2835,2836],{},"將 DSH 助理作為新成員註冊加入中繼伺服器","。此處公鑰填入上文所生成的 ",[443,2839,2794],{}," 字串：",[461,2842,2844],{"className":891,"code":2843,"language":893,"meta":424,"style":424},"docker compose exec relay buzz-admin add-member --pubkey npub123123123\n",[443,2845,2846],{"__ignoreMap":424},[469,2847,2848,2851,2854,2857,2860,2863,2866,2869],{"class":471,"line":472},[469,2849,2850],{"class":475},"docker",[469,2852,2853],{"class":490}," compose",[469,2855,2856],{"class":490}," exec",[469,2858,2859],{"class":490}," relay",[469,2861,2862],{"class":490}," buzz-admin",[469,2864,2865],{"class":490}," add-member",[469,2867,2868],{"class":490}," --pubkey",[469,2870,2871],{"class":490}," npub123123123\n",[434,2873,2874,2877,2878,2881,2882,2885,2886,2889,2890,2893],{},[438,2875,2876],{},"將 DSH 助理加入特定的溝通頻道","。僅加入中繼並不會讓助理自動出現在頻道成員清單中。需要透過 ",[443,2879,2880],{},"buzz-cli"," 進一步執行入群操作。注意此處 ",[443,2883,2884],{},"--pubkey"," 參數必須使用 ",[438,2887,2888],{},"HEX 16 進位公鑰","格式，而非 npub 格式（在上一步執行 ",[443,2891,2892],{},"buzz-admin add-member"," 時，終端機輸出中會印出對應的 HEX 公鑰）：",[461,2895,2897],{"className":891,"code":2896,"language":893,"meta":424,"style":424},"buzz channels add-member --channel \u003CCHANNEL_UUID> --pubkey \u003CAGENT_HEX> --role member\n",[443,2898,2899],{"__ignoreMap":424},[469,2900,2901,2904,2907,2909,2912,2915,2918,2921,2924,2926,2928,2931,2934,2936,2939],{"class":471,"line":472},[469,2902,2903],{"class":475},"buzz",[469,2905,2906],{"class":490}," channels",[469,2908,2865],{"class":490},[469,2910,2911],{"class":490}," --channel",[469,2913,2914],{"class":486}," \u003C",[469,2916,2917],{"class":490},"CHANNEL_UUI",[469,2919,2920],{"class":967},"D",[469,2922,2923],{"class":486},">",[469,2925,2868],{"class":490},[469,2927,2914],{"class":486},[469,2929,2930],{"class":490},"AGENT_HE",[469,2932,2933],{"class":967},"X",[469,2935,2923],{"class":486},[469,2937,2938],{"class":490}," --role",[469,2940,2941],{"class":490}," member\n",[2148,2943],{"description":2944,"image":2151,"image-alt":2152,"label":2945,"min-read":2946,"title":2947,"to":2948},"手把手教您安裝與設定 buzz-cli，以便在 Nostr 中繼伺服器上管理頻道、成員金鑰以及 AI 智能體的角色權限。","CLI 指南","5","如何安裝並使用 buzz-cli","\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues#install-buzz-cli",[434,2950,2951,2952,2954],{},"隨後可透過 ",[443,2953,2880],{}," 靈活更新 DSH 助理在 Nostr 中繼伺服器中的公開設定檔，設定更具識別度的暱稱：",[434,2956,2957],{},[567,2958],{"alt":2959,"src":2960},"使用 buzz-cli 命令列工具更新 DSH 助理在 Nostr 中繼伺服器上的公開個人資料","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-assistant-buzz-cli-profile-update.webp",[434,2962,2963,2964,2967],{},"在用戶端向 DSH 助理傳送一次 ",[438,2965,2966],{},"Wave","（Buzz 平台獨特的 DM 私訊打招呼動作）。助理隨後傳回回覆，代表閘道通訊已完全就緒：",[434,2969,2970],{},[567,2971],{"alt":2972,"src":2973},"在 Buzz 用戶端向 DeepSeek Harness 助理傳送 Wave 私訊進行連線性驗證","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-dm-wave-greeting-reply.webp",[434,2975,2976],{},[610,2977,2978],{},"向 DSH 助理傳送 Wave 私訊打招呼 — 橋接閘道正常秒級回應。",[572,2980,2982,2983,2986],{"id":2981},"透過-workspace-指令開啟本地工作區聯動","透過 ",[443,2984,2985],{},"\u002Fworkspace"," 指令開啟本地工作區聯動",[434,2988,2989,2990,2993,2994,2997,2998,3000],{},"由於 ",[443,2991,2992],{},"allowWorkspace"," 設定項目出於環境安全考量預設處於停用（",[443,2995,2996],{},"false","）狀態，未經設定直接向助理發送 ",[443,2999,2985],{}," 命令會被系統攔截拒絕：",[434,3002,3003],{},[567,3004],{"alt":3005,"src":3006},"在未開啟 allowWorkspace 權限時發送 \u002Fworkspace 命令被系統安全攔截的提示","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-workspace-command-rejected-error.webp",[434,3008,3009,3010,3013,3014,3016],{},"開啟設定檔 ",[443,3011,3012],{},"~\u002F.dsh\u002Fprofiles\u002Fweb\u002Fcordis.patch.yml"," 新增開關設定，隨後重新啟動 ",[443,3015,2269],{}," 服務即可：",[461,3018,3022],{"className":3019,"code":3020,"language":3021,"meta":424,"style":424},"language-yml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","- id: ui-message-gateway\n  config:\n    allowWorkspace: true\n","yml",[443,3023,3024,3037,3045],{"__ignoreMap":424},[469,3025,3026,3029,3032,3034],{"class":471,"line":472},[469,3027,3028],{"class":486},"-",[469,3030,3031],{"class":482}," id",[469,3033,487],{"class":486},[469,3035,3036],{"class":490}," ui-message-gateway\n",[469,3038,3039,3042],{"class":471,"line":479},[469,3040,3041],{"class":482},"  config",[469,3043,3044],{"class":486},":\n",[469,3046,3047,3050,3052],{"class":471,"line":494},[469,3048,3049],{"class":482},"    allowWorkspace",[469,3051,487],{"class":486},[469,3053,3055],{"class":3054},"sfNiH"," true\n",[434,3057,3058],{},"設定生效並重新啟動後即可順利綁定：",[434,3060,3061],{},[567,3062],{"alt":3063,"src":3064},"在 Buzz 頻道成功執行 \u002Fworkspace 命令完成本地工作區綁定的確認訊息","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-workspace-command-success-confirmation.webp",[434,3066,3067,3068,3071],{},"實用提示：此命令預設假設工作區目錄名（例如截圖中的 ",[443,3069,3070],{},"TechVoyage","）直接位於當前使用者的個人主目錄之下；若目錄處於其他深層路徑，請務必傳入完整絕對路徑。透過 Buzz 頻道中註冊綁定好的新工作階段，也都會完全同步在 DeepSeek Harness Web 介面上顯示。",[434,3073,3074],{},[567,3075],{"alt":3076,"src":3077},"DeepSeek Harness Web UI 中展示從 Buzz 頻道自動同步關聯的活躍工作階段","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-web-ui-synced-workspace-session.webp",[572,3079,3081],{"id":3080},"buzz-頻道支援的完整可用指令","Buzz 頻道支援的完整可用指令",[434,3083,3084],{},"其他平台支援的幾乎全部原生功能在 Buzz 中均可順暢運作：",[2283,3086,3087,3097],{},[2286,3088,3089],{},[2289,3090,3091,3094],{},[2292,3092,3093],{},"指令語法",[2292,3095,3096],{},"功能說明",[2301,3098,3099,3109,3119,3129,3138,3148,3158,3168,3177,3201,3220],{},[2289,3100,3101,3106],{},[2306,3102,3103],{},[443,3104,3105],{},"\u002Fworkspace \u003Cfolder>",[2306,3107,3108],{},"將本地已存在的資料夾註冊綁定為當前對話專屬的工作區環境（受設定項目開關保護）",[2289,3110,3111,3116],{},[2306,3112,3113],{},[443,3114,3115],{},"\u002Fhelp",[2306,3117,3118],{},"列印並列出所有支援的命令清單",[2289,3120,3121,3126],{},[2306,3122,3123],{},[443,3124,3125],{},"\u002Ftime",[2306,3127,3128],{},"取得並輸出當前伺服器系統時間",[2289,3130,3131,3135],{},[2306,3132,3133],{},[443,3134,1308],{},[2306,3136,3137],{},"捨棄舊上下文，原地重設開啟全新工作階段",[2289,3139,3140,3145],{},[2306,3141,3142],{},[443,3143,3144],{},"\u002Fclear",[2306,3146,3147],{},"清空當前上下文所有歷史對話串流",[2289,3149,3150,3155],{},[2306,3151,3152],{},[443,3153,3154],{},"\u002Fstatus",[2306,3156,3157],{},"查看當前 Buzz 訊息橋接器的即時在線狀態",[2289,3159,3160,3165],{},[2306,3161,3162],{},[443,3163,3164],{},"\u002Fstats",[2306,3166,3167],{},"查看當前系統活躍工作階段總量及所有接入平台（包含 Buzz）的橋接連線詳細狀態",[2289,3169,3170,3174],{},[2306,3171,3172],{},[443,3173,1323],{},[2306,3175,3176],{},"輸出全量指令的底層規範與參數描述文件",[2289,3178,3179,3184],{},[2306,3180,3181],{},[443,3182,3183],{},"@path\u002Fto\u002Ffile",[2306,3185,3186,3187,3189,3190,3192,3193,3196,3197,3200],{},"與 Web 端的 ",[443,3188,2518],{}," 檔案提及功能完全一致：Agent 自動相對於工作區讀取檔案內容；單獨發送 ",[443,3191,2518],{},"、",[443,3194,3195],{},"@前綴"," 或使用 ",[443,3198,3199],{},"\u002Ffiles \u003C前綴>"," 可傳回符合的檔案\u002F資料夾清單",[2289,3202,3203,3207],{},[2306,3204,3205],{},[443,3206,1333],{},[2306,3208,3209,3212,3213,3215,3216,3219],{},[443,3210,3211],{},"[provider model effort]"," — 驗證有效後即時切換該工作階段的底層推理大型語言模型與思考深度；單獨輸入 ",[443,3214,1333],{}," 顯示支援的候選清單，",[443,3217,3218],{},"\u002Fmodel reset"," 恢復系統預設設定",[2289,3221,3222,3227],{},[2306,3223,3224],{},[443,3225,3226],{},"\u002Feffort",[2306,3228,3229,3232,3233,3236],{},[443,3230,3231],{},"\u003Cid>"," 僅針對支援思考深度的模型調整 reasoning effort；",[443,3234,3235],{},"\u002Feffort reset"," 恢復預設推理深度設定",[572,3238,3239],{"id":3239},"核心安全架構總結",[728,3241,3242,3254,3268],{},[579,3243,3244,3247,3248,3250,3251,3253],{},[438,3245,3246],{},"私密金鑰資產隔離保護","：Agent 專屬的私密金鑰 ",[438,3249,2823],{}," 僅保存在主機的 ",[443,3252,2180],{}," 中（0600 檔案唯讀權限，不可部分完成寫入機制） — 永遠不會透過 API 端點對外暴露，也不會印至日常除錯記錄中。",[579,3255,3256,3259,3260,3263,3264,3267],{},[438,3257,3258],{},"全鏈路加密簽章驗章","：每一個入站的 Nostr 事件在投遞給 Agent 執行之前，都會嚴密執行",[438,3261,3262],{},"密碼學數位簽章檢驗","（",[443,3265,3266],{},"verifyEvent","）、訊息防重送判重、自發自收迴圈過濾以及 @提及權限驗證。",[579,3269,3270,3273,3274,3276,3277,3280],{},[438,3271,3272],{},"本地工作區指令受限保護","：由於閘道工作階段預設開啟特權自動核准機制，",[443,3275,2985],{}," 目錄註冊能力預設處於停用狀態，必須由開發者在設定檔中明確開啟（",[443,3278,3279],{},"allowWorkspace: true","），嚴防非預期提權暴露敏感目錄。",[429,3282,3284],{"id":3283},"結語擁抱-buzz-去中心化人機協同時代","結語：擁抱 Buzz 去中心化人機協同時代",[434,3286,3287,3288,3290],{},"在將 Buzz 接入 ",[443,3289,2134],{}," 的探索過程中，最大的技術挑戰在於嚴密契合 Nostr 協定的去中心化事件生命週期與事件約束規範。所幸外掛程式本身優秀的架構底座已經將多 Agent 工作階段管理與命令分發高度抽象，一旦建立起可靠的事件監聽與原位串流編輯鏈路，整個橋接閘道便能呈現出超預期的流暢度與生產級穩定性。",[429,3292,3294],{"id":3293},"參考文獻與資料","參考文獻與資料：",[728,3296,3297,3305,3313],{},[579,3298,3299,3304],{},[451,3300,3303],{"href":3301,"rel":3302},"https:\u002F\u002Fgithub.com\u002Fa792883583\u002Fdsh-message-gateway\u002Fblob\u002Fmain\u002Fdocs\u002Farchitecture.md",[455],"dsh-message-gateway architecture guide"," — 官方閘道架構指南、擴充實踐與安全規範",[579,3306,3307,3312],{},[451,3308,3311],{"href":3309,"rel":3310},"https:\u002F\u002Fgithub.com\u002Fnbd-wtf\u002Fnostr-tools",[455],"nostr-tools"," — 底層呼叫的核心 Nostr JavaScript 用戶端程式庫",[579,3314,3315,3320],{},[451,3316,3319],{"href":3317,"rel":3318},"https:\u002F\u002Fgithub.com\u002Fbytedance\u002Fdeer-flow\u002Fblob\u002Fmain\u002Fbackend\u002Fdocs\u002FIM_CHANNEL_CONNECTIONS.md",[455],"deer-flow IM channel connections"," — 即時通訊平台多通道連線架構設計參考",[826,3322,3323],{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":424,"searchDepth":479,"depth":494,"links":3325},[3326,3327,3331,3338,3339],{"id":2160,"depth":479,"text":2161},{"id":2273,"depth":479,"text":2274,"children":3328},[3329,3330],{"id":2571,"depth":494,"text":2572},{"id":2598,"depth":494,"text":2599},{"id":2706,"depth":479,"text":2706,"children":3332},[3333,3334,3336,3337],{"id":2830,"depth":494,"text":2831},{"id":2981,"depth":494,"text":3335},"透過 \u002Fworkspace 指令開啟本地工作區聯動",{"id":3080,"depth":494,"text":3081},{"id":3239,"depth":494,"text":3239},{"id":3283,"depth":479,"text":3284},{"id":3293,"depth":479,"text":3294},[840,3341,2903,3342],"collaboration","deepseek-harness","2026-09-30","深入解析如何透過 Nostr 協定將 DeepSeek Harness 接入 Block Buzz 協作平台：手把手配置 NIP-42 鑑權認證、基於 40003 事件的原位串流編輯輸出、頻道獨立工作階段管理與本地工作區指令聯動，為開發團隊建構安全可控、開箱即用的人機協同智能體開發環境與全新工作流程。","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002FTW-Bringing-Buzz-to-DeepSeek-Harness.webp","一張高顏值的 16:9 科技質感卡片，具有深藍色與琥珀色調，插圖展示如何為 DeepSeek Harness 接入 Block Buzz 協作平台並構建自託管 Nostr 協定閘道，中央配有高對比度毛玻璃面板與精緻正體中文排版。",{"schemaOrg":3348,"robots":850,"sitemap":3371},[3349,3351],{"@type":3350,"headline":2116,"description":3344,"image":3345},"TechArticle",{"@type":849,"name":2116,"description":3344,"image":3345,"step":3352},[3353,3356,3359,3362,3365,3368],{"@type":1532,"name":3354,"text":3355},"階段一：安裝與啟動訊息閘道外掛程式","執行 dsh plugin add 命令安裝 dsh-message-gateway 並啟動 dsh web 服務。",{"@type":1532,"name":3357,"text":3358},"階段二：存取 Message platforms 設定中心","透過瀏覽器開啟 DSH Web 介面並巡覽至 Message platforms 功能表。",{"@type":1532,"name":3360,"text":3361},"階段三：設定 Buzz 橋接參數與產生金鑰對","即時產生 Nostr 身分金鑰對，準確填入 Relay URL 與訂閱頻道 UUID 清單。",{"@type":1532,"name":3363,"text":3364},"階段四：將智能體註冊加入 Buzz 中繼伺服器","使用 buzz-admin 命令列工具將 DSH 助理的 npub 公鑰加入中繼成員。",{"@type":1532,"name":3366,"text":3367},"階段五：將智能體加入指定的團隊頻道","使用 buzz-cli 命令列工具將 16 進位 HEX 公鑰加入頻道成員名單。",{"@type":1532,"name":3369,"text":3370},"階段六：開啟本地工作區綁定權限","在 cordis.patch.yml 中開啟 allowWorkspace 設定以允許目錄掛載指令。",{"lastmod":3343},{"title":3373,"description":3344,"ogTitle":2116,"ogDescription":3344,"twitterTitle":2116,"twitterDescription":3344},"DeepSeek Harness Buzz 外掛開發：構建 Nostr 協定閘道與即時串流輸出的完整教學","tw\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",[2280,2775,3376,3377,2134],"Nostr","AI智能體","6tP_wMoFaCRxYZzuqtIt-fglvdLziQctY0T6KrEqia4",{"id":3380,"title":3381,"author":424,"body":3382,"category":4230,"date":4231,"description":4232,"extension":843,"image":4233,"imageAlt":4234,"isPublished":513,"meta":4235,"minRead":510,"navigation":513,"path":363,"seo":4240,"stem":4242,"tags":4243,"updatedAt":4239,"__hash__":4246},"article\u002Ftw\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp.md","教學：使用 Cloudflare WARP 安全地將 Hermes Agent 暴露至私有網路",{"type":426,"value":3383,"toc":4212},[3384,3396,3406,3409,3412,3424,3427,3435,3438,3442,3491,3495,3623,3627,3660,3664,3667,3731,3734,3770,3773,3800,3804,3814,3818,3857,3942,3946,3951,3965,3974,4037,4042,4086,4090,4136,4150,4154,4197,4199,4209],[434,3385,3386,3387,3389,3390,2254,3392,3395],{},"當我們希望透過筆記型電腦、平板或手機等其他設備存取 ",[438,3388,1312],{},"，同時又不想將其暴露在公共網際網路上時，這往往是一個普遍的挑戰。利用 ",[438,3391,2025],{},[438,3393,3394],{},"Cloudflare Zero Trust","，您可以在無需打開任何防火牆入站連接埠的情況下，將其安全地暴露並在全球範圍內進行存取。",[434,3397,3398,3399,3402,3403,3405],{},"如果您之前已經閱讀並遵循了我們的指南 '",[451,3400,3401],{"href":375},"如何在 Linux VPS 上部署 Hermes Agent","'，那麼您應該大約擁有了一個全天候運行的 Hermes Agent。相比於設定傳統 VPN 帶來的繁瑣步驟，我們將使用 ",[438,3404,2025],{}," 用戶端，透過網際網路將 Hermes Agent 暴露到私有網路中。",[429,3407,3408],{"id":3408},"架構解析",[434,3410,3411],{},"此方案涉及的兩個核心組件：",[576,3413,3414,3419],{},[579,3415,3416,3418],{},[438,3417,3394],{},"：Cloudflare 的雲端儀表板，您可以在此定義路由規則和存取策略。",[579,3420,3421,3423],{},[438,3422,2025],{},"：安裝在您的設備（VPS、筆記型電腦、手機）上的用戶端應用程式。它能夠攔截發往私有網路的流量，並安全地進行路由。",[572,3425,3426],{"id":3426},"前置條件",[728,3428,3429,3432],{},[579,3430,3431],{},"一台已經運行 Hermes Agent 的 VPS（虛擬專屬伺服器）。",[579,3433,3434],{},"一個免費的 Cloudflare 帳號。",[429,3436,3437],{"id":3437},"詳細步驟指南",[572,3439,3441],{"id":3440},"第-1-步設定-cloudflare-zero-trust","第 1 步：設定 Cloudflare Zero Trust",[576,3443,3444,3452,3459,3470,3477,3484],{},[579,3445,3446,3447,1610],{},"登入您的 ",[451,3448,3451],{"href":3449,"rel":3450},"https:\u002F\u002Fdash.cloudflare.com\u002F",[455],"Cloudflare 儀表板 (Dashboard)",[579,3453,3454,3455],{},"點擊左側選單欄中的 'Zero Trust'。\n",[567,3456],{"alt":3457,"src":3458},"Cloudflare 儀表板左側側邊欄導覽選單中的 Zero Trust 選項","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-left-menu.webp",[579,3460,3461,3462,3465,3466],{},"如果這是您第一次使用，系統會提示您選擇方案（免費版對本教學完全足夠）並為您的團隊命名（例如，",[443,3463,3464],{},"ai-team","）。\n",[567,3467],{"alt":3468,"src":3469},"首次設定 Cloudflare Zero Trust 帳戶並為團隊命名","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-team-setup.webp",[579,3471,3472,3473],{},"點擊 'Access'，然后點擊 'Policies' 來建立存取策略，以定義誰有權限存取網路。\n",[567,3474],{"alt":3475,"src":3476},"Cloudflare Zero Trust Access 策略頁面，顯示新設定的存取規則","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-access-policies-page.webp",[579,3478,3479,3480],{},"點击 'Create new policy'。\n",[567,3481],{"alt":3482,"src":3483},"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",[579,3485,3486,3487],{},"選擇 'Emails' 並在 'Policy rules' 下方輸入您的電子郵件地址。\n",[567,3488],{"alt":3489,"src":3490},"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",[572,3492,3494],{"id":3493},"第-2-步在-vps-上設定-cloudflare-warp-用戶端","第 2 步：在 VPS 上設定 Cloudflare WARP 用戶端",[576,3496,3497,3506,3512,3519,3522,3537,3540,3616],{},[579,3498,3499,3500,1935,3503,1610],{},"在 VPS 終端機中執行 ",[443,3501,3502],{},"sudo apt update",[443,3504,3505],{},"sudo apt install cloudflare-warp",[579,3507,3499,3508,3511],{},[443,3509,3510],{},"warp-cli registration new \u003CTEAM-NAME>","，該指令將輸出一個 URL。",[579,3513,3514,3515,3518],{},"複製輸出的 URL（其格式類似於 ",[443,3516,3517],{},"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fwarp","），並將其貼上到瀏覽器中進行認證。",[579,3520,3521],{},"由於前面的策略設定中使用了電子郵件認證，請輸入您的電子郵件以進行認證。",[579,3523,3524,3525,3528,3529,3532,3533,3536],{},"當瀏覽器中顯示 '",[438,3526,3527],{},"Success","' 頁面後，右鍵點擊藍色的 '",[438,3530,3531],{},"Open Cloudflare WARP","' 按鈕並選擇「",[438,3534,3535],{},"檢查 (Inspect)","」。",[579,3538,3539],{},"複製該按鈕連結中的長 Token 字串。",[579,3541,3499,3542,3545,3546,3548,3549],{},[443,3543,3544],{},"warp-cli --accept-tos registration token \"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fauth?token=\u003Ccopied_token>\"","，將您的 VPS 連接到 Cloudflare Zero Trust。",[1982,3547],{},"如果在 Ubuntu 26 上遇到 'Error: Failed to communicate with the WARP API'，請執行以下命令：",[461,3550,3552],{"className":891,"code":3551,"language":893,"meta":424,"style":424},"sudo systemctl restart warp-svc.service\n\n# Check status\nsudo systemctl status warp-svc.service\n\n# Run the warp-cli registration token again\nwarp-cli --accept-tos registration token   \"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fauth?token=\u003Ccopied_token>\"\n",[443,3553,3554,3565,3569,3574,3584,3588,3593],{"__ignoreMap":424},[469,3555,3556,3558,3560,3562],{"class":471,"line":472},[469,3557,922],{"class":475},[469,3559,1043],{"class":490},[469,3561,1046],{"class":490},[469,3563,3564],{"class":490}," warp-svc.service\n",[469,3566,3567],{"class":471,"line":479},[469,3568,514],{"emptyLinePlaceholder":513},[469,3570,3571],{"class":471,"line":494},[469,3572,3573],{"class":2745},"# Check status\n",[469,3575,3576,3578,3580,3582],{"class":471,"line":505},[469,3577,922],{"class":475},[469,3579,1043],{"class":490},[469,3581,1499],{"class":490},[469,3583,3564],{"class":490},[469,3585,3586],{"class":471,"line":510},[469,3587,514],{"emptyLinePlaceholder":513},[469,3589,3590],{"class":471,"line":517},[469,3591,3592],{"class":2745},"# Run the warp-cli registration token again\n",[469,3594,3595,3598,3601,3604,3607,3610,3613],{"class":471,"line":523},[469,3596,3597],{"class":475},"warp-cli",[469,3599,3600],{"class":490}," --accept-tos",[469,3602,3603],{"class":490}," registration",[469,3605,3606],{"class":490}," token",[469,3608,3609],{"class":486},"   \"",[469,3611,3612],{"class":490},"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fauth?token=\u003Ccopied_token>",[469,3614,3615],{"class":486},"\"\n",[579,3617,3618,3619],{},"回到 Cloudflare Zero Trust 儀表板，點擊 'Devices'。您現在應該能看到您的 VPS 設備。\n",[567,3620],{"alt":3621,"src":3622},"Zero Trust 設備儀表板，確認 Linux VPS 已成功連線","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-devices-vps-connected.webp",[572,3624,3626],{"id":3625},"第-3-步設定流量路由","第 3 步：設定流量路由",[576,3628,3629,3636,3643,3650],{},[579,3630,3631,3632],{},"在 Devices 儀表板中點擊您 VPS 設備的設定檔。\n",[567,3633],{"alt":3634,"src":3635},"存取已登冊 VPS 設備的詳細資訊與分割通道設定","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-device-profile.webp",[579,3637,3638,3639],{},"向下捲動至 'Split Tunnels' 部分。\n",[567,3640],{"alt":3641,"src":3642},"VPS 設備設定檔下的 Split Tunnels 分割通道區段","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-split-tunnels-section.webp",[579,3644,3645,3646],{},"點擊 'Manage' 按鈕，並按照下圖設定。如有需要請替換相應的 IP 位址。\n",[567,3647],{"alt":3648,"src":3649},"在 Cloudflare 設定中管理分割通道 IP 與主機名稱排除規則","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-manage-split-tunnels.webp",[579,3651,3652,3653,1935,3656,3659],{},"暴露 ",[443,3654,3655],{},"address",[443,3657,3658],{},"host"," 會將發往您服務的流量路由到該私有網路內。",[572,3661,3663],{"id":3662},"第-4-步設定-vps-防火牆","第 4 步：設定 VPS 防火牆",[434,3665,3666],{},"啟用防火牆，僅允許 '100.96.0.0\u002F12' 子網的流量通過，並阻擋其他所有公共入站存取。",[461,3668,3670],{"className":891,"code":3669,"language":893,"meta":424,"style":424},"sudo ufw enable \nsudo ufw default allow outgoing \nsudo ufw default deny incoming\nsudo ufw allow in from 100.96.0.0\u002F12\n",[443,3671,3672,3683,3700,3714],{"__ignoreMap":424},[469,3673,3674,3676,3679,3681],{"class":471,"line":472},[469,3675,922],{"class":475},[469,3677,3678],{"class":490}," ufw",[469,3680,1476],{"class":490},[469,3682,968],{"class":967},[469,3684,3685,3687,3689,3692,3695,3698],{"class":471,"line":479},[469,3686,922],{"class":475},[469,3688,3678],{"class":490},[469,3690,3691],{"class":490}," default",[469,3693,3694],{"class":490}," allow",[469,3696,3697],{"class":490}," outgoing",[469,3699,968],{"class":967},[469,3701,3702,3704,3706,3708,3711],{"class":471,"line":494},[469,3703,922],{"class":475},[469,3705,3678],{"class":490},[469,3707,3691],{"class":490},[469,3709,3710],{"class":490}," deny",[469,3712,3713],{"class":490}," incoming\n",[469,3715,3716,3718,3720,3722,3725,3728],{"class":471,"line":505},[469,3717,922],{"class":475},[469,3719,3678],{"class":490},[469,3721,3694],{"class":490},[469,3723,3724],{"class":490}," in",[469,3726,3727],{"class":490}," from",[469,3729,3730],{"class":490}," 100.96.0.0\u002F12\n",[434,3732,3733],{},"允許回環網路 (loopback) 的流量，避免導致本地服務異常：",[461,3735,3737],{"className":891,"code":3736,"language":893,"meta":424,"style":424},"sudo ufw allow in on lo\nsudo ufw allow out on lo\n",[443,3738,3739,3755],{"__ignoreMap":424},[469,3740,3741,3743,3745,3747,3749,3752],{"class":471,"line":472},[469,3742,922],{"class":475},[469,3744,3678],{"class":490},[469,3746,3694],{"class":490},[469,3748,3724],{"class":490},[469,3750,3751],{"class":490}," on",[469,3753,3754],{"class":490}," lo\n",[469,3756,3757,3759,3761,3763,3766,3768],{"class":471,"line":479},[469,3758,922],{"class":475},[469,3760,3678],{"class":490},[469,3762,3694],{"class":490},[469,3764,3765],{"class":490}," out",[469,3767,3751],{"class":490},[469,3769,3754],{"class":490},[434,3771,3772],{},"重新載入防火牆規則並驗證狀態：",[461,3774,3776],{"className":891,"code":3775,"language":893,"meta":424,"style":424},"sudo ufw reload \nsudo ufw status verbose\n",[443,3777,3778,3789],{"__ignoreMap":424},[469,3779,3780,3782,3784,3787],{"class":471,"line":472},[469,3781,922],{"class":475},[469,3783,3678],{"class":490},[469,3785,3786],{"class":490}," reload",[469,3788,968],{"class":967},[469,3790,3791,3793,3795,3797],{"class":471,"line":479},[469,3792,922],{"class":475},[469,3794,3678],{"class":490},[469,3796,1499],{"class":490},[469,3798,3799],{"class":490}," verbose\n",[572,3801,3803],{"id":3802},"第-5-步將-hermes-agent-暴露至私有網路","第 5 步：將 Hermes Agent 暴露至私有網路",[434,3805,3806,3807,3810,3811,1610],{},"我們將把 ",[438,3808,3809],{},"Hermes Agent Web Dashboard"," 暴露至私有網路，並使用預設的認證提供商 ",[438,3812,3813],{},"Nous Research",[3815,3816,3817],"h4",{"id":3817},"設定認證提供商",[576,3819,3820,3829,3836,3843,3850],{},[579,3821,3822,3823,3828],{},"前往 ",[451,3824,3827],{"href":3825,"rel":3826},"https:\u002F\u002Fportal.nousresearch.com",[455],"portal.nousresearch.com"," 註冊一個帳號。",[579,3830,3831,3832],{},"選擇 'Local Dashboards'。\n",[567,3833],{"alt":3834,"src":3835},"在 Nous Research 入口網站中選擇 Local Dashboards 本地儀表板選項","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fnous-portal-local-dashboards-selection.webp",[579,3837,3838,3839],{},"點擊 'Register Dashboard'。\n",[567,3840],{"alt":3841,"src":3842},"點擊 Register Dashboard 按鈕以建立新的儀表板項目","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fnous-portal-register-dashboard.webp",[579,3844,3845,3846],{},"將 VPS 在私有網路中的 IP 位址填入 'Dashboard redirect URI' 並點擊 'Save'。\n",[567,3847],{"alt":3848,"src":3849},"在 Nous Research 入口網站中註冊私有網路 VPS IP 位址作為重新導向 URI","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fnous-portal-register-redirect-uri.webp",[579,3851,3852,3853,3856],{},"複製 'OAuth client ID' 並將其貼上到您的 ",[443,3854,3855],{},"config.yaml"," 檔案中：",[461,3858,3860],{"className":463,"code":3859,"language":465,"meta":424,"style":424},"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",[443,3861,3862,3869,3879,3889,3896,3906,3916,3923,3933],{"__ignoreMap":424},[469,3863,3864,3867],{"class":471,"line":472},[469,3865,3866],{"class":482},"dashboard",[469,3868,3044],{"class":486},[469,3870,3871,3874,3876],{"class":471,"line":479},[469,3872,3873],{"class":482},"  theme",[469,3875,487],{"class":486},[469,3877,3878],{"class":490}," default\n",[469,3880,3881,3884,3886],{"class":471,"line":494},[469,3882,3883],{"class":482},"  show_token_analytics",[469,3885,487],{"class":486},[469,3887,3888],{"class":3054}," false\n",[469,3890,3891,3894],{"class":471,"line":505},[469,3892,3893],{"class":482},"  oauth",[469,3895,3044],{"class":486},[469,3897,3898,3901,3903],{"class":471,"line":510},[469,3899,3900],{"class":482},"    client_id",[469,3902,487],{"class":486},[469,3904,3905],{"class":490}," agent:cmq02x7ha0002jk0ba3kfnb\n",[469,3907,3908,3911,3913],{"class":471,"line":517},[469,3909,3910],{"class":482},"    portal_url",[469,3912,487],{"class":486},[469,3914,3915],{"class":490}," https:\u002F\u002Fportal.nousresearch.com\n",[469,3917,3918,3921],{"class":471,"line":523},[469,3919,3920],{"class":482},"  basic_auth",[469,3922,3044],{"class":486},[469,3924,3925,3928,3930],{"class":471,"line":528},[469,3926,3927],{"class":482},"    username",[469,3929,487],{"class":486},[469,3931,3932],{"class":486}," ''\n",[469,3934,3935,3938,3940],{"class":471,"line":534},[469,3936,3937],{"class":482},"    password_hash",[469,3939,487],{"class":486},[469,3941,3932],{"class":486},[3815,3943,3945],{"id":3944},"使用-systemd-確保-hermes-dashboard-開機自啟","使用 Systemd 確保 Hermes Dashboard 開機自啟",[576,3947,3948],{},[579,3949,3950],{},"建立服務檔案：",[461,3952,3954],{"className":1348,"code":3953,"language":1350,"meta":424,"style":424},"sudo nano \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-dashboard.service\n",[443,3955,3956],{"__ignoreMap":424},[469,3957,3958,3960,3962],{"class":471,"line":472},[469,3959,922],{"class":475},[469,3961,1002],{"class":490},[469,3963,3964],{"class":490}," \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-dashboard.service\n",[576,3966,3967],{"start":479},[579,3968,3969,3970,3973],{},"貼上以下設定，確保 ",[443,3971,3972],{},"--host 0.0.0.0"," 包含在指令中：",[461,3975,3977],{"className":1374,"code":3976,"language":1376,"meta":424,"style":424},"[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",[443,3978,3979,3983,3988,3992,3996,4000,4004,4008,4013,4017,4021,4025,4029,4033],{"__ignoreMap":424},[469,3980,3981],{"class":471,"line":472},[469,3982,1383],{},[469,3984,3985],{"class":471,"line":479},[469,3986,3987],{},"Description=Hermes Dashboard\n",[469,3989,3990],{"class":471,"line":494},[469,3991,1393],{},[469,3993,3994],{"class":471,"line":505},[469,3995,514],{"emptyLinePlaceholder":513},[469,3997,3998],{"class":471,"line":510},[469,3999,1402],{},[469,4001,4002],{"class":471,"line":517},[469,4003,1407],{},[469,4005,4006],{"class":471,"line":523},[469,4007,1412],{},[469,4009,4010],{"class":471,"line":528},[469,4011,4012],{},"ExecStart=\u002Fhome\u002Fhermes\u002F.local\u002Fbin\u002Fhermes dashboard --host 0.0.0.0\n",[469,4014,4015],{"class":471,"line":534},[469,4016,1422],{},[469,4018,4019],{"class":471,"line":539},[469,4020,1427],{},[469,4022,4023],{"class":471,"line":1430},[469,4024,1433],{},[469,4026,4027],{"class":471,"line":1436},[469,4028,514],{"emptyLinePlaceholder":513},[469,4030,4031],{"class":471,"line":1441},[469,4032,1444],{},[469,4034,4035],{"class":471,"line":1447},[469,4036,1450],{},[576,4038,4039],{"start":494},[579,4040,4041],{},"啟用並啟動服务：",[461,4043,4045],{"className":1348,"code":4044,"language":1350,"meta":424,"style":424},"sudo systemctl daemon-reload\nsudo systemctl enable hermes-dashboard\nsudo systemctl start hermes-dashboard\nsudo systemctl status hermes-dashboard\n",[443,4046,4047,4055,4066,4076],{"__ignoreMap":424},[469,4048,4049,4051,4053],{"class":471,"line":472},[469,4050,922],{"class":475},[469,4052,1043],{"class":490},[469,4054,1467],{"class":490},[469,4056,4057,4059,4061,4063],{"class":471,"line":479},[469,4058,922],{"class":475},[469,4060,1043],{"class":490},[469,4062,1476],{"class":490},[469,4064,4065],{"class":490}," hermes-dashboard\n",[469,4067,4068,4070,4072,4074],{"class":471,"line":494},[469,4069,922],{"class":475},[469,4071,1043],{"class":490},[469,4073,1488],{"class":490},[469,4075,4065],{"class":490},[469,4077,4078,4080,4082,4084],{"class":471,"line":505},[469,4079,922],{"class":475},[469,4081,1043],{"class":490},[469,4083,1499],{"class":490},[469,4085,4065],{"class":490},[572,4087,4089],{"id":4088},"第-6-步在桌面上安裝-cloudflare-warp-用戶端","第 6 步：在桌面上安裝 Cloudflare WARP 用戶端",[576,4091,4092,4101,4104,4111,4118,4125],{},[579,4093,4094,4095,4100],{},"從 ",[451,4096,4099],{"href":4097,"rel":4098},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fwarp-client\u002Fget-started\u002F",[455],"Cloudflare 官網"," 下載 Cloudflare WARP 用戶端。",[579,4102,4103],{},"安裝完成後打開並執行 Cloudflare WARP 用戶端。",[579,4105,4106,4107],{},"依提示登入。\n",[567,4108],{"alt":4109,"src":4110},"桌上型電腦上的 Cloudflare WARP 用戶端登入提示","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-warp-desktop-login-prompt.webp",[579,4112,4113,4114],{},"登入成功後會顯示 'Success' 頁面。\n",[567,4115],{"alt":4116,"src":4117},"在桌上型電腦登入 Cloudflare Zero Trust 後的驗證成功網頁","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-warp-desktop-login-success.webp",[579,4119,4120,4121],{},"此時 WARP 用戶端應顯示已連接至您的 Zero Trust 团队。\n",[567,4122],{"alt":4123,"src":4124},"桌面版 Cloudflare WARP 用戶端確認已連線至 Zero Trust 私有網路","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-warp-desktop-client-connected.webp",[579,4126,4127,4128,4131,4132],{},"在瀏覽器中輸入您的私有 IP 位址（例如 ",[443,4129,4130],{},"100.96.0.3","），即可成功載入 Hermes Web Dashboard。\n",[567,4133],{"alt":4134,"src":4135},"在桌面瀏覽器中存取私有 Hermes Agent 網頁儀表板","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fhermes-agent-dashboard-desktop-view.webp",[4137,4138,4139],"blockquote",{},[434,4140,4141,4144,4145,4149],{},[438,4142,4143],{},"macOS 用戶進階提示："," 如果您需要使用 WARP 用戶端存取多個 Cloudflare 帳號，請參閱我們的快速指南 ",[438,4146,4147],{},[451,4148,1553],{"href":399},"，實現帳號間的無縫切換。",[572,4151,4153],{"id":4152},"第-7-步在-ios-設備上安裝-cloudflare-warp-用戶端","第 7 步：在 iOS 設備上安裝 Cloudflare WARP 用戶端",[576,4155,4156,4162,4170,4178,4186],{},[579,4157,4158,4159,1610],{},"在 App Store 中安裝 ",[438,4160,4161],{},"Cloudflare One",[579,4163,4164,4165],{},"打開 Cloudflare One 應用程式並在提示時輸入您的團隊名稱。\n",[567,4166],{"alt":4167,"src":4168,"width":4169},"在 iOS 上的 Cloudflare One 應用程式中輸入 Cloudflare Zero Trust 團隊名稱","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-one-ios-team-name-prompt.webp",239,[579,4171,4172,4173],{},"使用前面在策略規則中設定的同一個電子郵件地址進行登入。\n",[567,4174],{"alt":4175,"src":4176,"width":4177},"iOS 上的 Cloudflare Zero Trust 電子郵件驗證提示","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-one-ios-email-login.webp",229,[579,4179,4180,4181],{},"連接成功後，介面應如下所示：\n",[567,4182],{"alt":4183,"src":4184,"width":4185},"iOS 行動設備上 Cloudflare One 應用程式顯示的已連線狀態","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-one-ios-client-connected.webp",322,[579,4187,4188,4189,4191,4192],{},"在手機瀏覽器中輸入私有 IP ",[443,4190,4130],{}," 即可在行動設備上存取 Hermes Web Dashboard。\n",[567,4193],{"alt":4194,"src":4195,"width":4196},"在手機瀏覽器上存取 Hermes Agent 網頁儀表板介面","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fhermes-agent-dashboard-mobile-view.webp",345,[429,4198,810],{"id":810},[434,4200,4201,4202,4204,4205,4208],{},"藉助 ",[438,4203,3394],{}," 管理身分策略以及 ",[438,4206,4207],{},"WARP"," 用戶端透過加密隧道路由流量，您的 Hermes Agent 現在可以被您的設備在全球範圍內安全存取。該配置為構建並存取完全遠端、私有的 AI 基礎架構奠定了堅實而安全的根基。",[826,4210,4211],{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":424,"searchDepth":479,"depth":494,"links":4213},[4214,4217,4229],{"id":3408,"depth":479,"text":3408,"children":4215},[4216],{"id":3426,"depth":494,"text":3426},{"id":3437,"depth":479,"text":3437,"children":4218},[4219,4220,4221,4222,4223,4227,4228],{"id":3440,"depth":494,"text":3441},{"id":3493,"depth":494,"text":3494},{"id":3625,"depth":494,"text":3626},{"id":3662,"depth":494,"text":3663},{"id":3802,"depth":494,"text":3803,"children":4224},[4225,4226],{"id":3817,"depth":505,"text":3817},{"id":3944,"depth":505,"text":3945},{"id":4088,"depth":494,"text":4089},{"id":4152,"depth":494,"text":4153},{"id":810,"depth":479,"text":810},[840,2096],"2026-07-09","本文深入探討如何使用 Cloudflare WARP 與 Zero Trust 技術，在完全不需要開啟任何防火牆入站連接埠的情況下，安全地將您的 Hermes Agent 暴露到私有網路中，從而實現全球範圍內的安全存取。這為您構建專屬私有遠端 AI 基礎架構打下堅實基礎。","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002FTW-Exposing-Hermes-Agent-to-Private-Network-Using-Cloudflare-WARP.webp","透過 Cloudflare Zero Trust 和 WARP 隧道安全地將 Hermes Agent 暴露至私有網路",{"schemaOrg":4236,"robots":850,"sitemap":4238},[4237],{"@type":849,"headline":3381,"description":4232,"name":3381,"image":4233},{"lastmod":4239},"2026-09-28",{"title":4241,"description":4232,"ogTitle":3381,"ogDescription":4232,"twitterTitle":3381,"twitterDescription":4232},"透過 Cloudflare Zero Trust 實現對 Hermes Agent 的安全存取","tw\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",[2025,2111,1312,4244,4245],"私有網路","教學","HTGJ42xrWk07SDM4iYiDvZunbYRe0lOzZcsR2BGh8No",{"id":4248,"title":2140,"author":424,"body":4249,"category":6390,"date":6391,"description":2150,"extension":843,"image":2151,"imageAlt":2152,"isPublished":513,"meta":6392,"minRead":1430,"navigation":513,"path":383,"seo":6414,"stem":6416,"tags":6417,"updatedAt":859,"__hash__":6421},"article\u002Ftw\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues.md",{"type":426,"value":4250,"toc":6360},[4251,4254,4260,4265,4269,4272,4310,4314,4320,4358,4362,4366,4380,4386,4392,4396,4400,4413,4419,4468,4496,4500,4509,4515,4519,4522,4727,4731,4777,4784,4791,4797,4849,4855,4884,4888,4892,4911,4939,4952,4994,5002,5272,5276,5322,5327,5334,5339,5343,5367,5370,5376,5382,5386,5393,5399,5402,5408,5414,5438,5445,5451,5454,5460,5464,5467,5470,5473,5479,5482,5488,5494,5500,5505,5509,5520,5527,5533,5536,5542,5545,5552,5558,5564,5568,5576,5639,5648,5703,5706,5776,5782,5796,5802,5806,5851,5857,5860,5866,5869,5875,5879,5896,5912,5918,6015,6018,6024,6035,6081,6087,6093,6106,6122,6125,6131,6135,6142,6164,6174,6272,6282,6288,6295,6301,6304,6310,6313,6319,6321,6324,6327,6357],[434,4252,4253],{},"在與多個 AI 智能體（AI Agent）協同工作時，最讓人頭痛的障礙莫過於「上下文斷片化（Context Fragmentation）」。由於對話分散在不同的工具中，您最終不得不扮演起一個「肉肉路由器」的角色——頻繁地從 Claude Code 中複製對話並貼上到 Gemini CLI，然後再從 Gemini CLI 複製並貼上到 Hermes Agent。而當您身邊還有人類團隊成員一起協作時，這種繁瑣的摩擦感更是成倍增長。",[434,4255,4256],{},[567,4257],{"alt":4258,"src":4259},"Buzz 協作工作空間的使用者介面，顯示聊天頻道和活躍的 AI 智能體","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-workspace-interface.webp",[434,4261,4262,4264],{},[438,4263,2775],{}," 是一款開源的協同工作空間，它將人類團隊和 AI 智能體凝聚在一個統一環境中。在這裡，人類同事與 AI 智能體能夠共享相同的任務和專案歷史，並實現天衣無缝的工作交接。",[429,4266,4268],{"id":4267},"什麼是-block-旗下的-buzz人機協同的-ai-智能體共享空間","什麼是 Block 旗下的 Buzz？人機協同的 AI 智能體共享空間",[434,4270,4271],{},"Buzz 是 Block 公司（由推特創辦人傑克·多西創立）推出的開源協作工作空間，它讓團隊成員和 AI 智能體能夠在相同的頻道與專案中並肩工作。它具有以下幾個核心亮點：",[728,4273,4274,4280,4286,4292,4298,4304],{},[579,4275,4276,4279],{},[438,4277,4278],{},"共享上下文："," 頻道是團隊成員與智能體開展協作的核心陣地。所有的對話記錄和專案歷史都完整保留在頻道中。",[579,4281,4282,4285],{},[438,4283,4284],{},"智能體間通信："," 智能體之間能够跨機器直接進行交流。一個 AI 智能體可以 @ 另一個智能體，從上完成工作的轉交或代碼的交叉審查。",[579,4287,4288,4291],{},[438,4289,4290],{},"提及驅動激活："," AI 智能體僅在被 @ 提及時才會激活，平時則保持靜默。被提及時，智能體將讀取頻道中的相關上下文並開始工作。",[579,4293,4294,4297],{},[438,4295,4296],{},"統一身份系統："," 團隊成員與 AI 智能體使用同一套身份系統，並通過加密私鑰\u002F公鑰進行安全認證。",[579,4299,4300,4303],{},[438,4301,4302],{},"委派命令："," 您可以向人類同事授予指揮您的智能體的權限，讓整個團隊都能輕鬆指派和調用彼此的數位助手。",[579,4305,4306,4309],{},[438,4307,4308],{},"自託管伺服器："," 因為您是該伺服器的託管者，所以您的數據完全由您掌控。您可以自由決定誰能加入，並定義專屬的運行規則。",[429,4311,4313],{"id":4312},"基於-nostr-的加密級-buzz-架構解析","基於 Nostr 的加密級 Buzz 架構解析",[434,4315,4316],{},[567,4317],{"alt":4318,"src":4319},"基於 Nostr 協定的 Buzz 協作空間加密級架構拓撲圖","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-nostr-cryptographic-architecture.webp",[728,4321,4322,4328,4334,4340,4346,4352],{},[579,4323,4324,4327],{},[438,4325,4326],{},"Nostr 中繼器充當伺服器："," 消息、工作流、代碼倉庫以及其他事件都經過加密簽名和驗證，並儲存在 Nostr 中繼伺服器（Relay）上。Nostr 協定原生支援通過 WebSockets 和 REST API 進行通信。",[579,4329,4330,4333],{},[438,4331,4332],{},"統一加密身份："," 人類和智能體都使用各自的加密金鑰進行認證。此身份完全保留在用戶端，絕不會儲存在伺服器上。",[579,4335,4336,4339],{},[438,4337,4338],{},"一等公民級智能體："," 每个智能體都擁有獨立的身份、頻道成員資格和審計跟蹤（Audit Trail）。智能體使用智能體通信協定（ACP）連接到工作空間。",[579,4341,4342,4345],{},[438,4343,4344],{},"去中心化 Git 倉庫："," 代碼庫儲存在相容 S3 的物件儲存中，而任務、拉取請求（PR）和代碼審查則在 Nostr 事件日誌中進行追蹤。因此，Buzz 的 Git 倉庫實際上是託管在 Nostr 中繼器上，而非 GitHub。",[579,4347,4348,4351],{},[438,4349,4350],{},"Buzz 用戶端屬於 Nostr 用戶端："," Buzz 應用與 Nostr 中繼器是分離的；它是一個桌面或移動端用戶端，負責連接到中繼器的 URL 節點。",[579,4353,4354,4357],{},[438,4355,4356],{},"基礎技術棧："," 由 PostgreSQL 資料庫處理事件儲存與全文檢索，Redis 負責管理發佈\u002F訂閱（Pub\u002FSub）消息佇列，而相容 S3 的 MinIO 用於儲存媒體檔案。",[429,4359,4361],{"id":4360},"如何在-linux-vps-上部署自託管的-block-旗下-buzz","如何在 Linux VPS 上部署自託管的 Block 旗下 Buzz",[572,4363,4365],{"id":4364},"_0-前提條件","0. 前提條件",[728,4367,4368,4371,4374,4377],{},[579,4369,4370],{},"一台 Linux VPS",[579,4372,4373],{},"域名已指向您的伺服器 IP 地址",[579,4375,4376],{},"Docker 以及 Docker Compose 外掛程式",[579,4378,4379],{},"Cloudflare 帳戶（免費服務計劃）",[434,4381,4382,4383,4385],{},"在本指南中，我們將把 Nostr 中繼器部署在 Ubuntu VPS 上，並通過 ",[451,4384,3381],{"href":363}," 保護其安全。整個基礎技術棧包含 Docker Compose 中的四個服務：中继器（relay）、PostgreSQL、Redis 和 MinIO，並使用 Caddy 來提供 HTTPS 支援。",[2148,4387],{"description":4388,"image":4233,"image-alt":4389,"label":4390,"min-read":4391,"title":3381,"to":363},"了解如何利用 Cloudflare WARP 和 Zero Trust（零信任）在不開放入站防火牆端口的情況下，安全地在全球範圍內暴露和存取您的 Hermes Agent。","使用 Cloudflare Zero Trust 和 WARP 隧道安全地將 Hermes Agent 暴露到私有網路","相關指南","8",[572,4393,4395],{"id":4394},"_1-cloudflare-dns-與-api-權杖","1. Cloudflare DNS 與 API 權杖",[3815,4397,4399],{"id":4398},"創建-cloudflare-api-權杖token","創建 Cloudflare API 權杖（Token）",[576,4401,4402,4408],{},[579,4403,4404,4405,1610],{},"點擊右上角的個人頭像，並在下拉選單中選擇 ",[438,4406,4407],{},"Profile",[579,4409,1181,4410,1610],{},[438,4411,4412],{},"API Tokens",[434,4414,4415],{},[567,4416],{"alt":4417,"src":4418},"Cloudflare 使用者個人資料頁面，顯示 API 權杖創建選單","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fcloudflare-profile-api-tokens.webp",[576,4420,4421,4427,4433,4453,4458,4462,4465],{"start":494},[579,4422,1181,4423,4426],{},[438,4424,4425],{},"Create Token"," 按鈕。",[579,4428,4429,4430,1610],{},"選擇使用範本 ",[438,4431,4432],{},"Edit zone DNS",[579,4434,4435,4436],{},"配置範本如下：\n",[728,4437,4438,4444],{},[579,4439,4440,4443],{},[438,4441,4442],{},"Permissions",": Zone — DNS — Edit",[579,4445,4446,4449,4450],{},[438,4447,4448],{},"Zone Resources",": Include — Specific zone — ",[443,4451,4452],{},"example.com",[579,4454,1181,4455,1610],{},[438,4456,4457],{},"Continue to summary",[579,4459,1181,4460,1610],{},[438,4461,4425],{},[579,4463,4464],{},"拷貝生成的 API 權杖，因為頁面關閉後它將不再顯示。",[579,4466,4467],{},"在終端機中驗證生成的權杖，確保其能正常工作：",[461,4469,4471],{"className":891,"code":4470,"language":893,"meta":424,"style":424},"curl \"https:\u002F\u002Fapi.cloudflare.com\u002Fclient\u002Fv4\u002Fuser\u002Ftokens\u002Fverify\" -H \"Authorization: Bearer YOUR_TOKEN_HERE\"\n",[443,4472,4473],{"__ignoreMap":424},[469,4474,4475,4477,4480,4483,4486,4489,4491,4494],{"class":471,"line":472},[469,4476,1066],{"class":475},[469,4478,4479],{"class":486}," \"",[469,4481,4482],{"class":490},"https:\u002F\u002Fapi.cloudflare.com\u002Fclient\u002Fv4\u002Fuser\u002Ftokens\u002Fverify",[469,4484,4485],{"class":486},"\"",[469,4487,4488],{"class":490}," -H",[469,4490,4479],{"class":486},[469,4492,4493],{"class":490},"Authorization: Bearer YOUR_TOKEN_HERE",[469,4495,3615],{"class":486},[3815,4497,4499],{"id":4498},"dns-解析記錄","DNS 解析記錄",[728,4501,4502],{},[579,4503,4504,4505,4508],{},"創建一條 A 記錄，並將代理狀態設置為 ",[438,4506,4507],{},"僅限 DNS","（DNS only）。",[434,4510,4511],{},[567,4512],{"alt":4513,"src":4514},"在 Cloudflare 控制台中配置 Buzz 域名的 DNS A 記錄，並將代理狀態設置為僅限 DNS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fcloudflare-dns-a-record-configuration.webp",[572,4516,4518],{"id":4517},"_2-在-ubuntu-上安裝-docker","2. 在 Ubuntu 上安裝 Docker",[434,4520,4521],{},"運行以下命令在 Ubuntu 上安裝 Docker：",[461,4523,4525],{"className":891,"code":4524,"language":893,"meta":424,"style":424},"# Add Docker's official GPG key and set up the Docker repository\ncurl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fusr\u002Fshare\u002Fkeyrings\u002Fdocker-archive-keyring.gpg\n\n# Add the official Docker repository\necho \"deb [arch=amd64 signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fdocker-archive-keyring.gpg] https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu $(lsb_release -cs) stable\" | sudo tee \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list > \u002Fdev\u002Fnull\n\n# Update package list\nsudo apt update\n\n# Install Docker Engine, Docker Community Edition, and containerd runtime\nsudo apt install docker-ce docker-ce-cli containerd.io -y\n\n# Start automatically when the system boots\nsudo systemctl enable docker\n\n# Verify docker is installed\ndocker --version\n\nsudo apt install -y docker-compose-plugin\n\n# Verify the compose plugin is installed\ndocker compose version\n\n",[443,4526,4527,4532,4557,4561,4566,4609,4613,4618,4627,4631,4636,4656,4660,4665,4676,4680,4685,4691,4695,4709,4713,4718],{"__ignoreMap":424},[469,4528,4529],{"class":471,"line":472},[469,4530,4531],{"class":2745},"# Add Docker's official GPG key and set up the Docker repository\n",[469,4533,4534,4536,4538,4541,4543,4545,4548,4551,4554],{"class":471,"line":479},[469,4535,1066],{"class":475},[469,4537,1069],{"class":490},[469,4539,4540],{"class":490}," https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg",[469,4542,1075],{"class":486},[469,4544,934],{"class":475},[469,4546,4547],{"class":490}," gpg",[469,4549,4550],{"class":490}," --dearmor",[469,4552,4553],{"class":490}," -o",[469,4555,4556],{"class":490}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fdocker-archive-keyring.gpg\n",[469,4558,4559],{"class":471,"line":494},[469,4560,514],{"emptyLinePlaceholder":513},[469,4562,4563],{"class":471,"line":505},[469,4564,4565],{"class":2745},"# Add the official Docker repository\n",[469,4567,4568,4571,4573,4576,4579,4582,4585,4588,4591,4593,4595,4597,4600,4603,4606],{"class":471,"line":510},[469,4569,4570],{"class":2645},"echo",[469,4572,4479],{"class":486},[469,4574,4575],{"class":490},"deb [arch=amd64 signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fdocker-archive-keyring.gpg] https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu ",[469,4577,4578],{"class":486},"$(",[469,4580,4581],{"class":475},"lsb_release",[469,4583,4584],{"class":490}," -cs",[469,4586,4587],{"class":486},")",[469,4589,4590],{"class":490}," stable",[469,4592,4485],{"class":486},[469,4594,1075],{"class":486},[469,4596,934],{"class":475},[469,4598,4599],{"class":490}," tee",[469,4601,4602],{"class":490}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[469,4604,4605],{"class":486}," >",[469,4607,4608],{"class":490}," \u002Fdev\u002Fnull\n",[469,4610,4611],{"class":471,"line":517},[469,4612,514],{"emptyLinePlaceholder":513},[469,4614,4615],{"class":471,"line":523},[469,4616,4617],{"class":2745},"# Update package list\n",[469,4619,4620,4622,4624],{"class":471,"line":528},[469,4621,922],{"class":475},[469,4623,925],{"class":490},[469,4625,4626],{"class":490}," update\n",[469,4628,4629],{"class":471,"line":534},[469,4630,514],{"emptyLinePlaceholder":513},[469,4632,4633],{"class":471,"line":539},[469,4634,4635],{"class":2745},"# Install Docker Engine, Docker Community Edition, and containerd runtime\n",[469,4637,4638,4640,4642,4645,4648,4651,4654],{"class":471,"line":1430},[469,4639,922],{"class":475},[469,4641,925],{"class":490},[469,4643,4644],{"class":490}," install",[469,4646,4647],{"class":490}," docker-ce",[469,4649,4650],{"class":490}," docker-ce-cli",[469,4652,4653],{"class":490}," containerd.io",[469,4655,942],{"class":490},[469,4657,4658],{"class":471,"line":1436},[469,4659,514],{"emptyLinePlaceholder":513},[469,4661,4662],{"class":471,"line":1441},[469,4663,4664],{"class":2745},"# Start automatically when the system boots\n",[469,4666,4667,4669,4671,4673],{"class":471,"line":1447},[469,4668,922],{"class":475},[469,4670,1043],{"class":490},[469,4672,1476],{"class":490},[469,4674,4675],{"class":490}," docker\n",[469,4677,4678],{"class":471,"line":1693},[469,4679,514],{"emptyLinePlaceholder":513},[469,4681,4682],{"class":471,"line":1699},[469,4683,4684],{"class":2745},"# Verify docker is installed\n",[469,4686,4687,4689],{"class":471,"line":1705},[469,4688,2850],{"class":475},[469,4690,1099],{"class":490},[469,4692,4693],{"class":471,"line":1711},[469,4694,514],{"emptyLinePlaceholder":513},[469,4696,4697,4699,4701,4703,4706],{"class":471,"line":1717},[469,4698,922],{"class":475},[469,4700,925],{"class":490},[469,4702,4644],{"class":490},[469,4704,4705],{"class":490}," -y",[469,4707,4708],{"class":490}," docker-compose-plugin\n",[469,4710,4711],{"class":471,"line":1723},[469,4712,514],{"emptyLinePlaceholder":513},[469,4714,4715],{"class":471,"line":1729},[469,4716,4717],{"class":2745},"# Verify the compose plugin is installed\n",[469,4719,4720,4722,4724],{"class":471,"line":1735},[469,4721,2850],{"class":475},[469,4723,2853],{"class":490},[469,4725,4726],{"class":490}," version\n",[572,4728,4730],{"id":4729},"_3-克隆倉庫並進行配置","3. 克隆倉庫並進行配置",[461,4732,4734],{"className":891,"code":4733,"language":893,"meta":424,"style":424},"git clone https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz.git\n\ncd buzz\u002Fdeploy\u002Fcompose\ncp .env.example .env\nnano .env\n",[443,4735,4736,4747,4751,4759,4770],{"__ignoreMap":424},[469,4737,4738,4741,4744],{"class":471,"line":472},[469,4739,4740],{"class":475},"git",[469,4742,4743],{"class":490}," clone",[469,4745,4746],{"class":490}," https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz.git\n",[469,4748,4749],{"class":471,"line":479},[469,4750,514],{"emptyLinePlaceholder":513},[469,4752,4753,4756],{"class":471,"line":494},[469,4754,4755],{"class":2645},"cd",[469,4757,4758],{"class":490}," buzz\u002Fdeploy\u002Fcompose\n",[469,4760,4761,4764,4767],{"class":471,"line":505},[469,4762,4763],{"class":475},"cp",[469,4765,4766],{"class":490}," .env.example",[469,4768,4769],{"class":490}," .env\n",[469,4771,4772,4775],{"class":471,"line":510},[469,4773,4774],{"class":475},"nano",[469,4776,4769],{"class":490},[434,4778,4779,4780,4783],{},"編輯 ",[443,4781,4782],{},".env"," 文件：",[728,4785,4786],{},[579,4787,4788],{},[438,4789,4790],{},"域名配置:",[461,4792,4795],{"className":4793,"code":4794,"language":1024},[1022],"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",[443,4796,4794],{"__ignoreMap":424},[728,4798,4799,4809],{},[579,4800,4801,4804,4805,4808],{},[438,4802,4803],{},"所有者金鑰:"," ",[443,4806,4807],{},"RELAY_OWNER_PUBKEY"," 欄位需要填入您的 64 位 16 進位公鑰。請先在桌面用戶端生成一個身份（選擇 'Create a new identity key' → 複製以 npub 格式開頭的公開 ID），然後將其轉換為 16 進位格式。",[579,4810,4811,4814],{},[438,4812,4813],{},"金鑰安全（Secrets）:",[728,4815,4816,4828,4842],{},[579,4817,4818,4819,4823,4824,4827],{},"使用該 ",[451,4820,4822],{"href":4821},"\u002Ftw\u002Ftools\u002Fsecret-key-hex","線上工具"," 或運行命令 ",[443,4825,4826],{},"openssl rand -hex 32","（運行 7 次）來生成高強度的隨機金鑰。",[579,4829,4830,4831,4834,4835,3192,4838,4841],{},"將所有的 ",[443,4832,4833],{},"CHANGE_ME"," 佔位符替換掉：包括 ",[443,4836,4837],{},"BUZZ_RELAY_PRIVATE_KEY",[443,4839,4840],{},"BUZZ_GIT_HOOK_HMAC_SECRET","、Postgres\u002FRedis\u002FTypesense 的密碼以及 S3 的 Access\u002FSecret Key。",[579,4843,4844,4845,4848],{},"未替換的佔位符是導致容器陷入無限重啟循環的最常見原因；請通過命令 ",[443,4846,4847],{},"grep CHANGE_ME .env"," 來核對並排除隱患。",[461,4850,4853],{"className":4851,"code":4852,"language":1024},[1022],"    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",[443,4854,4852],{"__ignoreMap":424},[728,4856,4857],{},[579,4858,4859,4862],{},[438,4860,4861],{},"其他配置項:",[728,4863,4864,4871],{},[579,4865,4866,4867,4870],{},"將環境變數 ",[443,4868,4869],{},"CLOUDFLARE_API_TOKEN"," 添加到您的配置中，並賦予先前生成的 API 權杖值。Caddy 將用其自動申請憑證。",[579,4872,4873,4874,4876,4877,1935,4880,4883],{},"Buzz 的預設配置非常開放，任何知道您中繼器地址的人都可以驗證並加入。為了安全起見，請務必配置 ",[443,4875,4807],{},"，並將 ",[443,4878,4879],{},"BUZZ_REQUIRE_RELAY_MEMBERSHIP=true",[443,4881,4882],{},"BUZZ_REQUIRE_AUTH_TOKEN=true"," 設為啟用狀態。",[572,4885,4887],{"id":4886},"_4-使用-caddy-開啟-https-訪問","4. 使用 Caddy 開啟 HTTPS 訪問",[3815,4889,4891],{"id":4890},"構建集成-cloudflare-dns-模組的自定義-caddy-鏡像","構建集成 Cloudflare DNS 模組的自定義 Caddy 鏡像",[728,4893,4894,4905,4908],{},[579,4895,4896,4897,4900,4901,4904],{},"我們在 Caddy 中配置基於 Cloudflare 的 DNS-01 挑戰（Challenge）。DNS-01 驗證的原理是讓 Caddy 外掛程式向您的",[438,4898,4899],{},"公網 DNS"," 寫入一條 TXT 挑戰記錄 ",[443,4902,4903],{},"_acme-challenge.buzz.pafor.me","；",[579,4906,4907],{},"隨後 Let's Encrypt 從公共網際網路查詢該記錄，以確權您的域名。這意味著您的域名必須是 Cloudflare 帳戶中的公網解析區域，而不能只是 Zero Trust \u002F WARP 區域網路 DNS 內的私有域名。如果您的域名只在私網下分发解析而沒有公網節點，DNS-01 將會失敗，需要改用其他驗證方式。",[579,4909,4910],{},"將以下配置加入到 Caddyfile 中：",[461,4912,4914],{"className":3019,"code":4913,"language":3021,"meta":424,"style":424},"{\n  acme_dns cloudflare {env.CLOUDFLARE_API_TOKEN}\n}\n",[443,4915,4916,4921,4935],{"__ignoreMap":424},[469,4917,4918],{"class":471,"line":472},[469,4919,4920],{"class":486},"{\n",[469,4922,4923,4926,4929,4932],{"class":471,"line":479},[469,4924,4925],{"class":490},"  acme_dns cloudflare",[469,4927,4928],{"class":486}," {",[469,4930,4931],{"class":490},"env.CLOUDFLARE_API_TOKEN",[469,4933,4934],{"class":486},"}\n",[469,4936,4937],{"class":471,"line":494},[469,4938,4934],{"class":486},[728,4940,4941],{},[579,4942,4943,4944,4947,4948,4951],{},"創建一個 ",[443,4945,4946],{},"Dockerfile.caddy","，其内容如下，這是 ",[443,4949,4950],{},"compose.caddy.yml"," 運行所必需的：",[461,4953,4955],{"className":3019,"code":4954,"language":3021,"meta":424,"style":424},"FROM caddy:2-builder AS builder\n\nRUN xcaddy build \\\n    --with github.com\u002Fcaddy-dns\u002Fcloudflare\n\nFROM caddy:2-alpine\n\nCOPY --from=builder \u002Fusr\u002Fbin\u002Fcaddy \u002Fusr\u002Fbin\u002Fcaddy\n",[443,4956,4957,4962,4966,4971,4976,4980,4985,4989],{"__ignoreMap":424},[469,4958,4959],{"class":471,"line":472},[469,4960,4961],{"class":490},"FROM caddy:2-builder AS builder\n",[469,4963,4964],{"class":471,"line":479},[469,4965,514],{"emptyLinePlaceholder":513},[469,4967,4968],{"class":471,"line":494},[469,4969,4970],{"class":490},"RUN xcaddy build \\\n",[469,4972,4973],{"class":471,"line":505},[469,4974,4975],{"class":490},"    --with github.com\u002Fcaddy-dns\u002Fcloudflare\n",[469,4977,4978],{"class":471,"line":510},[469,4979,514],{"emptyLinePlaceholder":513},[469,4981,4982],{"class":471,"line":517},[469,4983,4984],{"class":490},"FROM caddy:2-alpine\n",[469,4986,4987],{"class":471,"line":523},[469,4988,514],{"emptyLinePlaceholder":513},[469,4990,4991],{"class":471,"line":528},[469,4992,4993],{"class":490},"COPY --from=builder \u002Fusr\u002Fbin\u002Fcaddy \u002Fusr\u002Fbin\u002Fcaddy\n",[728,4995,4996],{},[579,4997,4998,4999,5001],{},"修改 ",[443,5000,4950],{},"，以使用我們剛生成的帶有 Cloudflare 外掛程式的 Caddy 鏡像，並傳入 API 權杖參數：",[461,5003,5005],{"className":3019,"code":5004,"language":3021,"meta":424,"style":424},"services:\n  relay:\n    ports: !reset []\n\n  caddy:\n    build:\n      context: .\n      dockerfile: Dockerfile.caddy\n    image: buzz-caddy:cloudflare\n    depends_on:\n      relay:\n        condition: service_healthy\n    environment:\n      BUZZ_DOMAIN: ${BUZZ_DOMAIN:?set BUZZ_DOMAIN}\n      CLOUDFLARE_API_TOKEN: ${CLOUDFLARE_API_TOKEN:?set CLOUDFLARE_API_TOKEN}\n    ports:\n      - \"${CADDY_HTTP_PORT:-80}:80\"\n      - \"${CADDY_HTTPS_PORT:-443}:443\"\n    volumes:\n      - .\u002FCaddyfile:\u002Fetc\u002Fcaddy\u002FCaddyfile:ro\n      - buzz-caddy-data:\u002Fdata\n      - buzz-caddy-config:\u002Fconfig\n    restart: unless-stopped\n    networks:\n      - buzz-net\n\nvolumes:\n  buzz-caddy-data:\n    labels:\n      com.buzz.volume: caddy-data\n  buzz-caddy-config:\n    labels:\n      com.buzz.volume: caddy-config\n",[443,5006,5007,5014,5021,5034,5038,5045,5052,5063,5073,5083,5090,5097,5107,5114,5124,5134,5140,5152,5163,5170,5177,5184,5191,5201,5208,5215,5219,5226,5233,5240,5250,5257,5263],{"__ignoreMap":424},[469,5008,5009,5012],{"class":471,"line":472},[469,5010,5011],{"class":482},"services",[469,5013,3044],{"class":486},[469,5015,5016,5019],{"class":471,"line":479},[469,5017,5018],{"class":482},"  relay",[469,5020,3044],{"class":486},[469,5022,5023,5026,5028,5031],{"class":471,"line":494},[469,5024,5025],{"class":482},"    ports",[469,5027,487],{"class":486},[469,5029,5030],{"class":2621}," !reset",[469,5032,5033],{"class":486}," []\n",[469,5035,5036],{"class":471,"line":505},[469,5037,514],{"emptyLinePlaceholder":513},[469,5039,5040,5043],{"class":471,"line":510},[469,5041,5042],{"class":482},"  caddy",[469,5044,3044],{"class":486},[469,5046,5047,5050],{"class":471,"line":517},[469,5048,5049],{"class":482},"    build",[469,5051,3044],{"class":486},[469,5053,5054,5057,5059],{"class":471,"line":523},[469,5055,5056],{"class":482},"      context",[469,5058,487],{"class":486},[469,5060,5062],{"class":5061},"sbssI"," .\n",[469,5064,5065,5068,5070],{"class":471,"line":528},[469,5066,5067],{"class":482},"      dockerfile",[469,5069,487],{"class":486},[469,5071,5072],{"class":490}," Dockerfile.caddy\n",[469,5074,5075,5078,5080],{"class":471,"line":534},[469,5076,5077],{"class":482},"    image",[469,5079,487],{"class":486},[469,5081,5082],{"class":490}," buzz-caddy:cloudflare\n",[469,5084,5085,5088],{"class":471,"line":539},[469,5086,5087],{"class":482},"    depends_on",[469,5089,3044],{"class":486},[469,5091,5092,5095],{"class":471,"line":1430},[469,5093,5094],{"class":482},"      relay",[469,5096,3044],{"class":486},[469,5098,5099,5102,5104],{"class":471,"line":1436},[469,5100,5101],{"class":482},"        condition",[469,5103,487],{"class":486},[469,5105,5106],{"class":490}," service_healthy\n",[469,5108,5109,5112],{"class":471,"line":1441},[469,5110,5111],{"class":482},"    environment",[469,5113,3044],{"class":486},[469,5115,5116,5119,5121],{"class":471,"line":1447},[469,5117,5118],{"class":482},"      BUZZ_DOMAIN",[469,5120,487],{"class":486},[469,5122,5123],{"class":490}," ${BUZZ_DOMAIN:?set BUZZ_DOMAIN}\n",[469,5125,5126,5129,5131],{"class":471,"line":1693},[469,5127,5128],{"class":482},"      CLOUDFLARE_API_TOKEN",[469,5130,487],{"class":486},[469,5132,5133],{"class":490}," ${CLOUDFLARE_API_TOKEN:?set CLOUDFLARE_API_TOKEN}\n",[469,5135,5136,5138],{"class":471,"line":1699},[469,5137,5025],{"class":482},[469,5139,3044],{"class":486},[469,5141,5142,5145,5147,5150],{"class":471,"line":1705},[469,5143,5144],{"class":486},"      -",[469,5146,4479],{"class":486},[469,5148,5149],{"class":490},"${CADDY_HTTP_PORT:-80}:80",[469,5151,3615],{"class":486},[469,5153,5154,5156,5158,5161],{"class":471,"line":1711},[469,5155,5144],{"class":486},[469,5157,4479],{"class":486},[469,5159,5160],{"class":490},"${CADDY_HTTPS_PORT:-443}:443",[469,5162,3615],{"class":486},[469,5164,5165,5168],{"class":471,"line":1717},[469,5166,5167],{"class":482},"    volumes",[469,5169,3044],{"class":486},[469,5171,5172,5174],{"class":471,"line":1723},[469,5173,5144],{"class":486},[469,5175,5176],{"class":490}," .\u002FCaddyfile:\u002Fetc\u002Fcaddy\u002FCaddyfile:ro\n",[469,5178,5179,5181],{"class":471,"line":1729},[469,5180,5144],{"class":486},[469,5182,5183],{"class":490}," buzz-caddy-data:\u002Fdata\n",[469,5185,5186,5188],{"class":471,"line":1735},[469,5187,5144],{"class":486},[469,5189,5190],{"class":490}," buzz-caddy-config:\u002Fconfig\n",[469,5192,5193,5196,5198],{"class":471,"line":1741},[469,5194,5195],{"class":482},"    restart",[469,5197,487],{"class":486},[469,5199,5200],{"class":490}," unless-stopped\n",[469,5202,5203,5206],{"class":471,"line":1747},[469,5204,5205],{"class":482},"    networks",[469,5207,3044],{"class":486},[469,5209,5210,5212],{"class":471,"line":1753},[469,5211,5144],{"class":486},[469,5213,5214],{"class":490}," buzz-net\n",[469,5216,5217],{"class":471,"line":1759},[469,5218,514],{"emptyLinePlaceholder":513},[469,5220,5221,5224],{"class":471,"line":1765},[469,5222,5223],{"class":482},"volumes",[469,5225,3044],{"class":486},[469,5227,5228,5231],{"class":471,"line":1771},[469,5229,5230],{"class":482},"  buzz-caddy-data",[469,5232,3044],{"class":486},[469,5234,5235,5238],{"class":471,"line":1776},[469,5236,5237],{"class":482},"    labels",[469,5239,3044],{"class":486},[469,5241,5242,5245,5247],{"class":471,"line":1781},[469,5243,5244],{"class":482},"      com.buzz.volume",[469,5246,487],{"class":486},[469,5248,5249],{"class":490}," caddy-data\n",[469,5251,5252,5255],{"class":471,"line":1787},[469,5253,5254],{"class":482},"  buzz-caddy-config",[469,5256,3044],{"class":486},[469,5258,5259,5261],{"class":471,"line":1792},[469,5260,5237],{"class":482},[469,5262,3044],{"class":486},[469,5264,5265,5267,5269],{"class":471,"line":1798},[469,5266,5244],{"class":482},[469,5268,487],{"class":486},[469,5270,5271],{"class":490}," caddy-config\n",[3815,5273,5275],{"id":5274},"啟動-docker-容器組合","啟動 Docker 容器組合",[461,5277,5279],{"className":891,"code":5278,"language":893,"meta":424,"style":424},"docker compose -f compose.yml -f compose.caddy.yml up -d\n\n#Check the Docker status\ndocker compose ps\n",[443,5280,5281,5304,5308,5313],{"__ignoreMap":424},[469,5282,5283,5285,5287,5290,5293,5295,5298,5301],{"class":471,"line":472},[469,5284,2850],{"class":475},[469,5286,2853],{"class":490},[469,5288,5289],{"class":490}," -f",[469,5291,5292],{"class":490}," compose.yml",[469,5294,5289],{"class":490},[469,5296,5297],{"class":490}," compose.caddy.yml",[469,5299,5300],{"class":490}," up",[469,5302,5303],{"class":490}," -d\n",[469,5305,5306],{"class":471,"line":479},[469,5307,514],{"emptyLinePlaceholder":513},[469,5309,5310],{"class":471,"line":494},[469,5311,5312],{"class":2745},"#Check the Docker status\n",[469,5314,5315,5317,5319],{"class":471,"line":505},[469,5316,2850],{"class":475},[469,5318,2853],{"class":490},[469,5320,5321],{"class":490}," ps\n",[567,5323],{"src":5324,"alt":5325,"style":5326},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fdocker-compose-ps-status-terminal.webp","終端機視窗顯示通過 docker compose ps 運行的 Buzz 服務容器狀態","max-width: 700px; width: 100%; height: auto;",[434,5328,5329,5330,5333],{},"打開您的網頁瀏覽器並訪問 ",[443,5331,5332],{},"http:\u002F\u002Fbuzz.pafor.me","，驗證中繼服務是否已順利跑起來。",[567,5335],{"src":5336,"alt":5337,"style":5338},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-relay-running-browser-verification.webp","瀏覽器驗證頁面，顯示自託管 Block's Buzz 中繼伺服器的成功運行響應","max-width: 500px; width: 100%; height: auto;",[572,5340,5342],{"id":5341},"步驟-5建立起首日備份機制","步驟 5：建立起首日備份機制",[461,5344,5346],{"className":891,"code":5345,"language":893,"meta":424,"style":424},"mkdir -p \u002Fbuzz_backups\ncrontab -e\n",[443,5347,5348,5359],{"__ignoreMap":424},[469,5349,5350,5353,5356],{"class":471,"line":472},[469,5351,5352],{"class":475},"mkdir",[469,5354,5355],{"class":490}," -p",[469,5357,5358],{"class":490}," \u002Fbuzz_backups\n",[469,5360,5361,5364],{"class":471,"line":479},[469,5362,5363],{"class":475},"crontab",[469,5365,5366],{"class":490}," -e\n",[434,5368,5369],{},"添加一個每日凌晨自動執行的資料庫快照定時任務（Cron Job）：",[461,5371,5374],{"className":5372,"code":5373,"language":1024},[1022],"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",[443,5375,5373],{"__ignoreMap":424},[434,5377,5378,5379,5381],{},"注意：請將 ",[443,5380,4837],{}," 視為永久不可失配的金鑰。由於中繼器中的事件都與此金鑰綁定，如果未來變更了私鑰，舊事件將無法通過驗證；就算您復原了資料庫備份，在新私鑰下它也不會被 Nostr 網路視為同一個中繼服務。",[429,5383,5385],{"id":5384},"配置-buzz-桌面用戶端與-nostr-加密身份","配置 Buzz 桌面用戶端與 Nostr 加密身份",[434,5387,4094,5388,5392],{},[451,5389,5390],{"href":5390,"rel":5391},"https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz\u002Freleases",[455]," 下載最新版 Buzz 桌面用戶端並運行。依次完善個人資料，直到您來到 “Join or create a community” 介面。",[434,5394,5395],{},[567,5396],{"alt":5397,"src":5398},"Buzz 桌面用戶端簡易設定介面，用於加入或創建社區","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-setup-community.webp",[434,5400,5401],{},"點擊 “Join a community” 並拷貝您的公鑰（Public Key）。",[434,5403,5404],{},[567,5405],{"alt":5406,"src":5407},"Buzz 用戶端介面顯示加入社區前的公鑰數位身份","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",[434,5409,1231,5410,5413],{},[438,5411,5412],{},"VPS 上","運行以下命令列工具，將您自己添加為該平台的首位會員：",[461,5415,5417],{"className":891,"code":5416,"language":893,"meta":424,"style":424},"docker compose exec relay buzz-admin add-member --pubkey npub1yourkeyhere\n",[443,5418,5419],{"__ignoreMap":424},[469,5420,5421,5423,5425,5427,5429,5431,5433,5435],{"class":471,"line":472},[469,5422,2850],{"class":475},[469,5424,2853],{"class":490},[469,5426,2856],{"class":490},[469,5428,2859],{"class":490},[469,5430,2862],{"class":490},[469,5432,2865],{"class":490},[469,5434,2868],{"class":490},[469,5436,5437],{"class":490}," npub1yourkeyhere\n",[434,5439,5440,5441,5444],{},"在用戶端中填入 ",[443,5442,5443],{},"wss:\u002F\u002Fbuzz.pafor.me"," 作為社區接入 URL，然後點擊 “Next”。",[434,5446,5447],{},[567,5448],{"alt":5449,"src":5450},"在 Buzz 桌面用戶端中輸入自託管社區中繼伺服器的 URL 地址","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-input-community-url.webp",[434,5452,5453],{},"起一個帥氣的暱稱，然後點擊 “Next” 按鈕。",[434,5455,5456],{},[567,5457],{"alt":5458,"src":5459},"Buzz 用戶端個人資料配置介面，用於輸入使用者暱稱","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-profile-name-input.webp",[572,5461,5463],{"id":5462},"協作頻道與-ai-智能體","協作頻道與 AI 智能體",[434,5465,5466],{},"頻道是圍繞特定任務或專案劃分的群組。為您手頭的每個任務或工程建立獨立的頻道，並將團隊成員與所需的 AI 智能體拉入其中。",[434,5468,5469],{},"頻道內的所有消息、代碼與文件都會被自動分享，免去了逐一向新成員同步前因後果的煩惱。任何人都可以通過「@」來點名激活特定的 AI 智能體，智能體收到召喚後會讀取相關歷史消息並立刻著手處理。更妙的是，不同的 AI 智能體之間也能互相 @ 指派任務。",[434,5471,5472],{},"讓我們試著給預置的智能體發一條私信（DM）",[434,5474,5475],{},[567,5476],{"alt":5477,"src":5478},"在 Buzz 協同桌面用戶端中給 AI 智能體發送私信（DM）","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-dm-agent.webp",[434,5480,5481],{},"創建一個新頻道并拉幾個 AI 智能體進來吧",[434,5483,5484],{},[567,5485],{"alt":5486,"src":5487},"在 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",[434,5489,5490],{},[567,5491],{"alt":5492,"src":5493},"將團隊成員和 AI 智能體添加至新創建的協作頻道中","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",[434,5495,5496],{},[567,5497],{"alt":5498,"src":5499},"活躍協作頻道視圖，展示合併後的聊天歷史和專案任務","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-channel-view.webp",[567,5501],{"src":5502,"alt":5503,"style":5504},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-channel-active-agents.webp","已整合到協同專案頻道中的活躍 AI 智能體列表細節檢視","max-width: 367px; width: 100%; height: auto;",[572,5506,5508],{"id":5507},"激活智能體運行時agent-runtimes","激活智能體運行時（Agent Runtimes）",[434,5510,5511,5512,5515,5516,5519],{},"平台自帶的運行時預設依賴於「自動探測」來查找特定系統目錄（例如 ",[443,5513,5514],{},"~\u002F.local\u002Fbin","）下的執行程序（如 ",[443,5517,5518],{},"hermes-acp","）。如果您的智能體軟體安裝在非標準路徑下，Buzz 將無法正確識別。",[434,5521,5522,5523,5526],{},"以 Kimi Code 為例，它的智能體 ID 為 kimi，Buzz 預設會在 ",[443,5524,5525],{},"~\u002F.local\u002Fbin\u002Fkimi"," 尋找它。通過創建一個軟連結（Symbolic Link）即可輕鬆搞定：",[461,5528,5531],{"className":5529,"code":5530,"language":1024},[1022],"ln -s kimi-cli \u002FUsers\u002F\u003Cuser>\u002F.local\u002Fbin\u002Fkimi\n",[443,5532,5530],{"__ignoreMap":424},[434,5534,5535],{},"此時，Kimi Code 就會顯示在「Agent runtimes」列表中。",[434,5537,5538],{},[567,5539],{"alt":5540,"src":5541},"Buzz 用戶端設置介面，顯示已配置的 AI 智能體執行期列表（包括 Kimi）","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-settings-agent-runtimes-list.webp",[572,5543,5544],{"id":5544},"專案與代碼倉庫管理",[434,5546,5547,5548,5551],{},"請先在 Settings → Experiments 菜單中激活「",[438,5549,5550],{},"Projects","」實驗性功能：",[434,5553,5554],{},[567,5555],{"alt":5556,"src":5557},"在 Buzz 用戶端設置的 Experiments 標籤頁中激活實驗性 Projects 功能","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-settings-experiments-projects.webp",[434,5559,5560,5561,5563],{},"目前，一個專案（Project）必須使用 ",[443,5562,2880],{}," 命令列工具來創建（雖然在後續版本中會加入 UI 直接創建的支持）。",[3815,5565,5567],{"id":5566},"在-vps-上安裝並部署-buzz-cli","在 VPS 上安裝並部署 buzz-cli",[434,5569,1231,5570,5572,5573,5575],{},[438,5571,5412],{},"依次執行以下命令，編譯並安裝好 ",[443,5574,2880],{}," 用戶端：",[461,5577,5579],{"className":891,"code":5578,"language":893,"meta":424,"style":424},"sudo apt install cargo\ncd ~\u002Fbuzz\ncargo install --path crates\u002Fbuzz-cli\necho 'export PATH=\"$HOME\u002F.cargo\u002Fbin:$PATH\"' >> ~\u002F.bashrc && source ~\u002F.bashrc\n",[443,5580,5581,5592,5599,5612],{"__ignoreMap":424},[469,5582,5583,5585,5587,5589],{"class":471,"line":472},[469,5584,922],{"class":475},[469,5586,925],{"class":490},[469,5588,4644],{"class":490},[469,5590,5591],{"class":490}," cargo\n",[469,5593,5594,5596],{"class":471,"line":479},[469,5595,4755],{"class":2645},[469,5597,5598],{"class":490}," ~\u002Fbuzz\n",[469,5600,5601,5604,5606,5609],{"class":471,"line":494},[469,5602,5603],{"class":475},"cargo",[469,5605,4644],{"class":490},[469,5607,5608],{"class":490}," --path",[469,5610,5611],{"class":490}," crates\u002Fbuzz-cli\n",[469,5613,5614,5616,5619,5622,5625,5628,5631,5633,5636],{"class":471,"line":505},[469,5615,4570],{"class":2645},[469,5617,5618],{"class":486}," '",[469,5620,5621],{"class":490},"export PATH=\"$HOME\u002F.cargo\u002Fbin:$PATH\"",[469,5623,5624],{"class":486},"'",[469,5626,5627],{"class":486}," >>",[469,5629,5630],{"class":490}," ~\u002F.bashrc",[469,5632,931],{"class":486},[469,5634,5635],{"class":2645}," source",[469,5637,5638],{"class":490}," ~\u002F.bashrc\n",[434,5640,5641,5642,5644,5645,5647],{},"使用線上工具或通過 ",[443,5643,2880],{}," 生成一對 Nostr 加密公私鑰。這組金鑰將代表该 ",[443,5646,2880],{}," 工具在 Nostr 網路中的數位身份。",[461,5649,5651],{"className":891,"code":5650,"language":893,"meta":424,"style":424},"docker run --rm --entrypoint \u002Fusr\u002Flocal\u002Fbin\u002Fbuzz-admin ghcr.io\u002Fblock\u002Fbuzz:main generate-key\n\n# Use the generated Public Key\ndocker compose exec relay buzz-admin add-member --pubkey generated_Public_key\n",[443,5652,5653,5675,5679,5684],{"__ignoreMap":424},[469,5654,5655,5657,5660,5663,5666,5669,5672],{"class":471,"line":472},[469,5656,2850],{"class":475},[469,5658,5659],{"class":490}," run",[469,5661,5662],{"class":490}," --rm",[469,5664,5665],{"class":490}," --entrypoint",[469,5667,5668],{"class":490}," \u002Fusr\u002Flocal\u002Fbin\u002Fbuzz-admin",[469,5670,5671],{"class":490}," ghcr.io\u002Fblock\u002Fbuzz:main",[469,5673,5674],{"class":490}," generate-key\n",[469,5676,5677],{"class":471,"line":479},[469,5678,514],{"emptyLinePlaceholder":513},[469,5680,5681],{"class":471,"line":494},[469,5682,5683],{"class":2745},"# Use the generated Public Key\n",[469,5685,5686,5688,5690,5692,5694,5696,5698,5700],{"class":471,"line":505},[469,5687,2850],{"class":475},[469,5689,2853],{"class":490},[469,5691,2856],{"class":490},[469,5693,2859],{"class":490},[469,5695,2862],{"class":490},[469,5697,2865],{"class":490},[469,5699,2868],{"class":490},[469,5701,5702],{"class":490}," generated_Public_key\n",[434,5704,5705],{},"配置您的 CLI 變數：",[461,5707,5709],{"className":891,"code":5708,"language":893,"meta":424,"style":424},"# Copy the Secret key as the BUZZ_PRIVATE_KEY\necho 'export BUZZ_PRIVATE_KEY=\"nsec1...\"'  >> \u002Fhome\u002F\u003Cuser>\u002F.bashrc\n\necho 'export BUZZ_RELAY_URL=\"wss:\u002F\u002Fbuzz.pafor.me\"'  >> \u002Fhome\u002F\u003Cuser>\u002F.bashrc\n",[443,5710,5711,5716,5747,5751],{"__ignoreMap":424},[469,5712,5713],{"class":471,"line":472},[469,5714,5715],{"class":2745},"# Copy the Secret key as the BUZZ_PRIVATE_KEY\n",[469,5717,5718,5720,5722,5725,5727,5730,5733,5736,5739,5742,5744],{"class":471,"line":479},[469,5719,4570],{"class":2645},[469,5721,5618],{"class":486},[469,5723,5724],{"class":490},"export BUZZ_PRIVATE_KEY=\"nsec1...\"",[469,5726,5624],{"class":486},[469,5728,5729],{"class":486},"  >>",[469,5731,5732],{"class":490}," \u002Fhome\u002F",[469,5734,5735],{"class":486},"\u003C",[469,5737,5738],{"class":490},"use",[469,5740,5741],{"class":967},"r",[469,5743,2923],{"class":486},[469,5745,5746],{"class":490},"\u002F.bashrc\n",[469,5748,5749],{"class":471,"line":494},[469,5750,514],{"emptyLinePlaceholder":513},[469,5752,5753,5755,5757,5760,5762,5764,5766,5768,5770,5772,5774],{"class":471,"line":505},[469,5754,4570],{"class":2645},[469,5756,5618],{"class":486},[469,5758,5759],{"class":490},"export BUZZ_RELAY_URL=\"wss:\u002F\u002Fbuzz.pafor.me\"",[469,5761,5624],{"class":486},[469,5763,5729],{"class":486},[469,5765,5732],{"class":490},[469,5767,5735],{"class":486},[469,5769,5738],{"class":490},[469,5771,5741],{"class":967},[469,5773,2923],{"class":486},[469,5775,5746],{"class":490},[434,5777,5778,5779,5781],{},"運行以下命令來測試 ",[443,5780,2880],{}," 是否已經與您的中繼器配对暢通：",[461,5783,5785],{"className":891,"code":5784,"language":893,"meta":424,"style":424},"buzz channels list\n",[443,5786,5787],{"__ignoreMap":424},[469,5788,5789,5791,5793],{"class":471,"line":472},[469,5790,2903],{"class":475},[469,5792,2906],{"class":490},[469,5794,5795],{"class":490}," list\n",[434,5797,5798],{},[567,5799],{"alt":5800,"src":5801},"終端機命令列運行驗證，通過列出活躍頻道來檢查 buzz-cli 配置是否正確","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-cli-channels-list-terminal.webp",[3815,5803,5805],{"id":5804},"使用-buzz-cli-創建全新的專案","使用 buzz-cli 創建全新的專案",[461,5807,5809],{"className":891,"code":5808,"language":893,"meta":424,"style":424},"# --channel refers to the UUID of the channel\nbuzz repos create --id TestKOA --name 'Display Name' --channel \"bd92b3d1-8fac-441c-a9ac-2b2f3aac5c5b\"\n",[443,5810,5811,5816],{"__ignoreMap":424},[469,5812,5813],{"class":471,"line":472},[469,5814,5815],{"class":2745},"# --channel refers to the UUID of the channel\n",[469,5817,5818,5820,5823,5826,5829,5832,5835,5837,5840,5842,5844,5846,5849],{"class":471,"line":479},[469,5819,2903],{"class":475},[469,5821,5822],{"class":490}," repos",[469,5824,5825],{"class":490}," create",[469,5827,5828],{"class":490}," --id",[469,5830,5831],{"class":490}," TestKOA",[469,5833,5834],{"class":490}," --name",[469,5836,5618],{"class":486},[469,5838,5839],{"class":490},"Display Name",[469,5841,5624],{"class":486},[469,5843,2911],{"class":490},[469,5845,4479],{"class":486},[469,5847,5848],{"class":490},"bd92b3d1-8fac-441c-a9ac-2b2f3aac5c5b",[469,5850,3615],{"class":486},[434,5852,5853,5854,5856],{},"專案的所有權極為嚴格，只有創建者才有權將其刪除。由於該「Display Name」專案是由 ",[443,5855,2880],{}," 發起創建的，而目前的命令列版本尚未內置刪除指令，因此該專案無法通過常規方式清空。",[434,5858,5859],{},"再次點開您的桌面用戶端，驗證該專案是否已顯示在工作區中。",[434,5861,5862],{},[567,5863],{"alt":5864,"src":5865},"Buzz 桌面用戶端專案檢視頁面，確認專案已成功創建","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-project-view.webp",[434,5867,5868],{},"一旦專案列表在介面中開啟，後續您便可以直接通過右上角的 「+」 按鈕隨心所欲地添加更多子專案了。",[434,5870,5871],{},[567,5872],{"alt":5873,"src":5874},"在 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",[3815,5876,5878],{"id":5877},"拉入現有的-git-代碼倉庫","拉入現有的 Git 代碼倉庫",[434,5880,5881,5882,5885,5886,5889,5890,5895],{},"在您的本地開發機器上安裝 ",[443,5883,5884],{},"git-credential-nostr"," 憑證輔助工具。這需要您的系統已安裝 ",[438,5887,5888],{},"Git 2.46+"," 版本並配有 Rust 構建環境。詳情可參考此專案的 ",[451,5891,5894],{"href":5892,"rel":5893},"https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz\u002Ftree\u002Fmain\u002Fcrates\u002Fgit-credential-nostr",[455],"Readme"," 描述：",[461,5897,5899],{"className":891,"code":5898,"language":893,"meta":424,"style":424},"cargo install --path crates\u002Fgit-credential-nostr\n",[443,5900,5901],{"__ignoreMap":424},[469,5902,5903,5905,5907,5909],{"class":471,"line":472},[469,5904,5603],{"class":475},[469,5906,4644],{"class":490},[469,5908,5608],{"class":490},[469,5910,5911],{"class":490}," crates\u002Fgit-credential-nostr\n",[434,5913,5914,5915,5917],{},"對 ",[443,5916,5884],{}," 進行配置，使其獲得 Buzz 中繼器的授權權限：",[461,5919,5921],{"className":891,"code":5920,"language":893,"meta":424,"style":424},"# 1. Register the helper and enable per-path credentials.\ngit config --global credential.helper nostr\ngit config --global credential.useHttpPath true\n\n# 2. Store your nsec in a key file (must be 0600). Replace \"nsec1...\" with your private key\nmkdir -p ~\u002F.nostr\necho \"nsec1...\" > ~\u002F.nostr\u002Fkey && chmod 600 ~\u002F.nostr\u002Fkey\ngit config --global nostr.keyfile ~\u002F.nostr\u002Fkey\n",[443,5922,5923,5928,5944,5957,5961,5966,5975,6002],{"__ignoreMap":424},[469,5924,5925],{"class":471,"line":472},[469,5926,5927],{"class":2745},"# 1. Register the helper and enable per-path credentials.\n",[469,5929,5930,5932,5935,5938,5941],{"class":471,"line":479},[469,5931,4740],{"class":475},[469,5933,5934],{"class":490}," config",[469,5936,5937],{"class":490}," --global",[469,5939,5940],{"class":490}," credential.helper",[469,5942,5943],{"class":490}," nostr\n",[469,5945,5946,5948,5950,5952,5955],{"class":471,"line":494},[469,5947,4740],{"class":475},[469,5949,5934],{"class":490},[469,5951,5937],{"class":490},[469,5953,5954],{"class":490}," credential.useHttpPath",[469,5956,3055],{"class":486},[469,5958,5959],{"class":471,"line":505},[469,5960,514],{"emptyLinePlaceholder":513},[469,5962,5963],{"class":471,"line":510},[469,5964,5965],{"class":2745},"# 2. Store your nsec in a key file (must be 0600). Replace \"nsec1...\" with your private key\n",[469,5967,5968,5970,5972],{"class":471,"line":517},[469,5969,5352],{"class":475},[469,5971,5355],{"class":490},[469,5973,5974],{"class":490}," ~\u002F.nostr\n",[469,5976,5977,5979,5981,5984,5986,5988,5991,5993,5996,5999],{"class":471,"line":523},[469,5978,4570],{"class":2645},[469,5980,4479],{"class":486},[469,5982,5983],{"class":490},"nsec1...",[469,5985,4485],{"class":486},[469,5987,4605],{"class":486},[469,5989,5990],{"class":490}," ~\u002F.nostr\u002Fkey",[469,5992,931],{"class":486},[469,5994,5995],{"class":475}," chmod",[469,5997,5998],{"class":5061}," 600",[469,6000,6001],{"class":490}," ~\u002F.nostr\u002Fkey\n",[469,6003,6004,6006,6008,6010,6013],{"class":471,"line":528},[469,6005,4740],{"class":475},[469,6007,5934],{"class":490},[469,6009,5937],{"class":490},[469,6011,6012],{"class":490}," nostr.keyfile",[469,6014,6001],{"class":490},[434,6016,6017],{},"在 Buzz 中繼上開闢出該 Git 庫的儲存節點：",[461,6019,6022],{"className":6020,"code":6021,"language":1024},[1022],"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",[443,6023,6021],{"__ignoreMap":424},[434,6025,6026,6027,6030,6031,6034],{},"在第一次執行 ",[443,6028,6029],{},"git push"," 時，您可能會被攔截並報錯 ",[443,6032,6033],{},"remote: missing Authorization header","。這是由於 Git 寫入控制（ACL）是由頻道成員資格決定的，您必須先將該倉庫 ID 與一個具體的 Buzz 頻道進行綁定，從而授權合規寫入：",[461,6036,6038],{"className":891,"code":6037,"language":893,"meta":424,"style":424},"buzz repos bind --id koa-email-routing --channel \u003CCHANNEL_UUID>\n\n# push the code again\ngit push\n",[443,6039,6040,6065,6069,6074],{"__ignoreMap":424},[469,6041,6042,6044,6046,6049,6051,6054,6056,6058,6060,6062],{"class":471,"line":472},[469,6043,2903],{"class":475},[469,6045,5822],{"class":490},[469,6047,6048],{"class":490}," bind",[469,6050,5828],{"class":490},[469,6052,6053],{"class":490}," koa-email-routing",[469,6055,2911],{"class":490},[469,6057,2914],{"class":486},[469,6059,2917],{"class":490},[469,6061,2920],{"class":967},[469,6063,6064],{"class":486},">\n",[469,6066,6067],{"class":471,"line":479},[469,6068,514],{"emptyLinePlaceholder":513},[469,6070,6071],{"class":471,"line":494},[469,6072,6073],{"class":2745},"# push the code again\n",[469,6075,6076,6078],{"class":471,"line":505},[469,6077,4740],{"class":475},[469,6079,6080],{"class":490}," push\n",[434,6082,6083,6084,6086],{},"在某些情況下，在 Buzz 桌面版中查閱專案進度時會遇到類似下方的 Git 模組拉取失敗提示。這是由於該桌面應用要求系統必須搭載 ",[438,6085,5888],{}," 版本，而應用直接啟動時可能預設尋址到了系統中的舊版 Git 引擎：",[434,6088,6089],{},[567,6090],{"alt":6091,"src":6092},"Buzz 用戶端展示由於本地 Git 版本低於 2.46 導致的 Git 庫載入失敗報錯介面","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-git-version-error.webp",[434,6094,6095,6096,6099,6100,6105],{},"請在您的 shell 設定檔中通過執行 ",[443,6097,6098],{},"launchctl setenv PATH \"\u002Fopt\u002Fhomebrew\u002Fbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fbin:\u002Fbin:\u002Fusr\u002Fsbin:\u002Fsbin\""," 聲明新版 Git 所在的 PATH，並直接在終端中拉起 Buzz 應用。對此可參考該 ",[451,6101,6104],{"href":6102,"rel":6103},"https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz\u002Fissues\u002F5348",[455],"Issue"," 的詳細排查記錄。",[461,6107,6109],{"className":891,"code":6108,"language":893,"meta":424,"style":424},"open -a Buzz\n",[443,6110,6111],{"__ignoreMap":424},[469,6112,6113,6116,6119],{"class":471,"line":472},[469,6114,6115],{"class":475},"open",[469,6117,6118],{"class":490}," -a",[469,6120,6121],{"class":490}," Buzz\n",[434,6123,6124],{},"重新進入用戶端中的 Projects 標籤頁，您會驚喜地發現代碼庫的所有提交與詳情已經完美載入出來了。",[434,6126,6127],{},[567,6128],{"alt":6129,"src":6130},"代碼庫提交詳情成功載入後的 Buzz 桌面用戶端專案面板","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-repository-details-loaded.webp",[429,6132,6134],{"id":6133},"利用二維碼將-ai-助手同步至手機端-buzz-app","利用二維碼將 AI 助手同步至手機端 Buzz App",[434,6136,6137,6138,6141],{},"Buzz 手機端的「掃碼配對」只認 HTTPS 協定，且 VPS 上的中繼服務預設並不會在背景運行 ",[443,6139,6140],{},"buzz-pair-relay"," 組件。",[461,6143,6145],{"className":891,"code":6144,"language":893,"meta":424,"style":424},"cd ~\u002Fbuzz\ncargo install --path crates\u002Fbuzz-pair-relay\n",[443,6146,6147,6153],{"__ignoreMap":424},[469,6148,6149,6151],{"class":471,"line":472},[469,6150,4755],{"class":2645},[469,6152,5598],{"class":490},[469,6154,6155,6157,6159,6161],{"class":471,"line":479},[469,6156,5603],{"class":475},[469,6158,4644],{"class":490},[469,6160,5608],{"class":490},[469,6162,6163],{"class":490}," crates\u002Fbuzz-pair-relay\n",[434,6165,6166,6167,6170,6171,6173],{},"將以下配置注入到您的 ",[443,6168,6169],{},"compose.yml"," 文件中，聲明並啟動 ",[443,6172,6140],{}," 容器進程：",[461,6175,6177],{"className":3019,"code":6176,"language":3021,"meta":424,"style":424},"  pair:\n    image: ${BUZZ_IMAGE:-ghcr.io\u002Fblock\u002Fbuzz:main}\n    entrypoint: [\"\u002Fusr\u002Flocal\u002Fbin\u002Fbuzz-pair-relay\"]\n    environment:\n      BUZZ_PAIR_RELAY_BIND_ADDR: 0.0.0.0:5000\n    ports:\n      - \"${BUZZ_PAIR_RELAY_PORT:-5000}:5000\"\n    restart: unless-stopped\n    networks:\n      [buzz-net]\n",[443,6178,6179,6186,6195,6215,6221,6231,6237,6248,6256,6262],{"__ignoreMap":424},[469,6180,6181,6184],{"class":471,"line":472},[469,6182,6183],{"class":482},"  pair",[469,6185,3044],{"class":486},[469,6187,6188,6190,6192],{"class":471,"line":479},[469,6189,5077],{"class":482},[469,6191,487],{"class":486},[469,6193,6194],{"class":490}," ${BUZZ_IMAGE:-ghcr.io\u002Fblock\u002Fbuzz:main}\n",[469,6196,6197,6200,6202,6205,6207,6210,6212],{"class":471,"line":494},[469,6198,6199],{"class":482},"    entrypoint",[469,6201,487],{"class":486},[469,6203,6204],{"class":486}," [",[469,6206,4485],{"class":486},[469,6208,6209],{"class":490},"\u002Fusr\u002Flocal\u002Fbin\u002Fbuzz-pair-relay",[469,6211,4485],{"class":486},[469,6213,6214],{"class":486},"]\n",[469,6216,6217,6219],{"class":471,"line":505},[469,6218,5111],{"class":482},[469,6220,3044],{"class":486},[469,6222,6223,6226,6228],{"class":471,"line":510},[469,6224,6225],{"class":482},"      BUZZ_PAIR_RELAY_BIND_ADDR",[469,6227,487],{"class":486},[469,6229,6230],{"class":490}," 0.0.0.0:5000\n",[469,6232,6233,6235],{"class":471,"line":517},[469,6234,5025],{"class":482},[469,6236,3044],{"class":486},[469,6238,6239,6241,6243,6246],{"class":471,"line":523},[469,6240,5144],{"class":486},[469,6242,4479],{"class":486},[469,6244,6245],{"class":490},"${BUZZ_PAIR_RELAY_PORT:-5000}:5000",[469,6247,3615],{"class":486},[469,6249,6250,6252,6254],{"class":471,"line":528},[469,6251,5195],{"class":482},[469,6253,487],{"class":486},[469,6255,5200],{"class":490},[469,6257,6258,6260],{"class":471,"line":534},[469,6259,5205],{"class":482},[469,6261,3044],{"class":486},[469,6263,6264,6267,6270],{"class":471,"line":539},[469,6265,6266],{"class":486},"      [",[469,6268,6269],{"class":490},"buzz-net",[469,6271,6214],{"class":486},[434,6273,6274,6275,6277,6278,6281],{},"在您的 ",[443,6276,4782],{}," 中聲明 ",[443,6279,6280],{},"BUZZ_PAIRING_RELAY_URL"," 及其專用的運行埠號：",[461,6283,6286],{"className":6284,"code":6285,"language":1024},[1022],"BUZZ_PAIRING_RELAY_URL=wss:\u002F\u002Fbuzz.pafor.me\u002Fpair\nBUZZ_PAIR_RELAY_PORT=5000\n",[443,6287,6285],{"__ignoreMap":424},[434,6289,6290,6291,6294],{},"點擊桌面端應用中的 Settings, 進入 「",[438,6292,6293],{},"Mobile","」 配對項：",[434,6296,6297],{},[567,6298],{"alt":6299,"src":6300},"Buzz 桌面用戶端設置中展示的 Mobile 行動端配對配置標籤頁","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-settings-mobile-tab.webp",[434,6302,6303],{},"點擊 “Start pairing” —— 介面會生成專屬的綁定二維碼；打開手機端 App 掃一掃，接著在桌面端點擊 “Code Match” 確認無誤，雙端便立即完成信任綁定。",[434,6305,6306],{},[567,6307],{"alt":6308,"src":6309},"在桌面用戶端中生成安全的配對二維碼，用於同步 Buzz 手機端 App","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-pairing-qr-code.webp",[434,6311,6312],{},"注意：手機端应用中的智能體之所以能隨叫隨到，是基於您的桌面端應用在背景持續維繫運行。只有保障桌面機處於線上狀態，手機端派發的智能體指令才能被順利分發與執行。",[434,6314,6315],{},[567,6316],{"alt":6317,"src":6318},"在手機端 Buzz App 中成功載入同步後的活躍 AI 智能體列表","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-mobile-app-active-agents.webp",[429,6320,810],{"id":810},[434,6322,6323],{},"不可否認，作為一個還處於發展初期的技術方案，Buzz 在面對大規模生產環境時依然稍顯稚嫩，伴隨著一些偶發的系統 Bug 與介面互動上的限制。但對於小型團隊或單兵作戰的獨立開發者而言，這無疑是一場令人血脈偾張的前沿探索。它為我们揭開了一幅波瀾壯闊的人機無縫協奏畫卷，讓我們提前觸碰到了「AI 智能體成為工作夥伴」的未來工作模式。",[429,6325,6326],{"id":6326},"參考資源",[728,6328,6329,6336,6343,6350],{},[579,6330,6331],{},[451,6332,6335],{"href":6333,"rel":6334},"https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz",[455],"Buzz releases",[579,6337,6338],{},[451,6339,6342],{"href":6340,"rel":6341},"https:\u002F\u002Fblock.xyz\u002Finside\u002Fintroducing-buzz-where-humans-and-agents-work-together",[455],"Introducing Buzz",[579,6344,6345],{},[451,6346,6349],{"href":6347,"rel":6348},"https:\u002F\u002Fwww.hostinger.com\u002Ftutorials\u002Fwhat-is-buzz",[455],"What is buzz",[579,6351,6352],{},[451,6353,6356],{"href":6354,"rel":6355},"https:\u002F\u002Fmiget.com\u002Fblog\u002Fhow-to-self-host-buzz",[455],"How to self-host Buzz (Miget)",[826,6358,6359],{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}",{"title":424,"searchDepth":479,"depth":494,"links":6361},[6362,6363,6364,6378,6387,6388,6389],{"id":4267,"depth":479,"text":4268},{"id":4312,"depth":479,"text":4313},{"id":4360,"depth":479,"text":4361,"children":6365},[6366,6367,6371,6372,6373,6377],{"id":4364,"depth":494,"text":4365},{"id":4394,"depth":494,"text":4395,"children":6368},[6369,6370],{"id":4398,"depth":505,"text":4399},{"id":4498,"depth":505,"text":4499},{"id":4517,"depth":494,"text":4518},{"id":4729,"depth":494,"text":4730},{"id":4886,"depth":494,"text":4887,"children":6374},[6375,6376],{"id":4890,"depth":505,"text":4891},{"id":5274,"depth":505,"text":5275},{"id":5341,"depth":494,"text":5342},{"id":5384,"depth":479,"text":5385,"children":6379},[6380,6381,6382],{"id":5462,"depth":494,"text":5463},{"id":5507,"depth":494,"text":5508},{"id":5544,"depth":494,"text":5544,"children":6383},[6384,6385,6386],{"id":5566,"depth":505,"text":5567},{"id":5804,"depth":505,"text":5805},{"id":5877,"depth":505,"text":5878},{"id":6133,"depth":479,"text":6134},{"id":810,"depth":479,"text":810},{"id":6326,"depth":479,"text":6326},[3341,840,2903],"2026-09-08",{"schemaOrg":6393,"robots":850,"sitemap":6412},[6394,6395],{"@type":3350,"headline":2140,"description":2150,"image":2151},{"@type":849,"name":2140,"description":2150,"image":2151,"step":6396},[6397,6400,6403,6406,6409],{"@type":1532,"name":6398,"text":6399},"階段 1：Cloudflare 設置","創建 Cloudflare API 權杖並配置 DNS 解析設置。",{"@type":1532,"name":6401,"text":6402},"階段 2：安裝 Docker","在 Ubuntu VPS 上設置並安裝 Docker 容器引擎。",{"@type":1532,"name":6404,"text":6405},"階段 3：克隆與配置","克隆倉庫代碼並配置 docker-compose 環境變數。",{"@type":1532,"name":6407,"text":6408},"階段 4：整合 Caddy","編譯帶有 Cloudflare DNS 挑戰模組的的自訂 Caddy 鏡像。",{"@type":1532,"name":6410,"text":6411},"階段 5：自動備份","配置 cron 定時任務以實現 PostgreSQL 資料庫的自動備份。",{"lastmod":6413},"2026-09-03",{"title":6415,"description":2150,"ogTitle":2140,"ogDescription":2150,"twitterTitle":2140,"twitterDescription":2150},"如何在 Ubuntu VPS 上自建 Block 旗下的 Buzz 協作中繼伺服器","tw\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",[3376,6418,2775,6419,6420],"Docker","Caddy","Cloudflare","IBYHxp-6BbUZwuDc9Hxf1yMQj3uMpBUTAm2W1CTRUic",1792490004047]