[{"data":1,"prerenderedAt":6422},["ShallowReactive",2],{"published-article-paths":3,"search-navigation":348,"\u002Fzh\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them":421,"\u002Fzh\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them-surround":860},[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":838,"date":840,"description":841,"extension":842,"image":843,"imageAlt":844,"isPublished":513,"meta":845,"minRead":479,"navigation":513,"path":317,"seo":851,"stem":852,"tags":853,"updatedAt":858,"__hash__":859},"article\u002Fzh\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them.md","什么是AI Agent技能？深入探讨其工作原理并手把手教你如何构建高效、可复用的Agent技能","",{"type":426,"value":427,"toc":828},"minimark",[428,433,447,460,543,548,552,555,564,571,575,633,644,650,653,709,713,716,723,726,738,742,787,790,807,810,821,824],[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],{},"在初始阶段，只有技能的名称 and 描述会被加载到上下文（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,679,691,699],{},[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,602],{},[438,677,678],{},"确认",[579,680,681,608,683,613,685,687,688,690],{},[438,682,607],{},[610,684,612],{},[443,686,445],{}," 的正文内容以及任何引用的参考文件（对于 ",[443,689,672],{},"，这包括调色板、JSON Schema 和图表元素模板）。",[579,692,693,622,696,698],{},[438,694,695],{},"执行提示词",[438,697,625],{},"一起发送给 LLM。模型现在拥有了它所需的详细方法论。",[579,700,701,704,705,708],{},[438,702,703],{},"响应"," —— LLM 生成输出（一个 ",[443,706,707],{},".excalidraw"," 的 JSON 文件），由 Agent 将其返回给用户。",[429,710,712],{"id":711},"ai-agent-技能-vs-工具与-mcp","AI Agent 技能 vs. 工具与 MCP",[434,714,715],{},"技能并不能替代提示词、普通工具（Tools） or MCP。工具和 MCP 集成扩展了 Agent 对外部系统的访问范围 —— 例如查询数据库、调用 API 等等。而技能则加深了 Agent 完成特定任务的实战诀窍（Know-how）和专业深度。",[434,717,718,719,722],{},"诸如 ",[451,720,721],{"href":395},"在ChatGPT和Claude中配置NetSuite MCP"," 的 MCP 集成，能够让 Agent 通过访问 NetSuite 中的实时财务和运营数据来回答用户问题。而 NetSuite 业务报告技能则会进一步引导 Agent 如何去撰写这份报告，并以规范的报表形式呈现给用户。",[434,724,725],{},"使用技能的典型场景包括：",[727,728,729,732,735],"ul",{},[579,730,731],{},"多步骤复杂工作流",[579,733,734],{},"文档处理，例如从 PDF 中提取特定数据结构",[579,736,737],{},"代码生成规范与标准",[429,739,741],{"id":740},"如何创建-ai-agent-技能","如何创建 AI Agent 技能",[576,743,744,754,768,777],{},[579,745,746,749,750,753],{},[438,747,748],{},"创建一个文件夹","，并以技能名称命名（例如 ",[443,751,752],{},"netsuite-operation-report\u002F","）。",[579,755,756,761,762,764,765,767],{},[438,757,758,759],{},"编写 ",[443,760,445],{},"，包含 ",[443,763,483],{},"、精准的 ",[443,766,497],{},"，以及精炼的指令正文（控制在 200 字以内）。",[579,769,770,773,774,776],{},[438,771,772],{},"添加任务所需资源"," —— 包括参考文档、模板、脚本。保持 ",[443,775,445],{}," 短小精悍，并将细节链接至其他文件。",[579,778,779,782,783,786],{},[438,780,781],{},"进行安装","，让 Agent 能够发现它。参考 ",[451,784,785],{"href":359},"解决AI智能体技能碎片化：集中化管理技能"," 以了解如何在多个 Agent 之间集中管理技能。",[434,788,789],{},"编写优秀技能的几个技巧：",[727,791,792,795,801,804],{},[579,793,794],{},"技能描述（description）应当面向系统触发器（Trigger）来写，而不是给人类阅读。",[579,796,797,798,800],{},"保持 ",[443,799,445],{}," 极其精简 —— 限制在 200 字以内。在正文中写下通用流程，将边缘情况和细节留给参考文档。",[579,802,803],{},"凡是确定性的任务，应当使用脚本（Script）来处理。不要让 LLM 去做算术。",[579,805,806],{},"做好版本控制，将其提交进 Git 中。",[429,808,809],{"id":809},"总结",[434,811,812,813,816,817,820],{},"与定义“",[610,814,815],{},"连接到什么","”的工具和 MCP 不同，智能体技能封装了“",[610,818,819],{},"如何去完成工作","”。它们是不可或缺的互补，而非替代关系。",[434,822,823],{},"通过利用渐进式披露（Progressive Disclosure），技能可以使 Agent 的上下文窗口保持整洁和高效 —— 仅在用户请求触发时，才会加载详细的指令、参考文档和可执行脚本。",[825,826,827],"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":829},[830,831,835,836,837],{"id":431,"depth":479,"text":432},{"id":550,"depth":479,"text":551,"children":832},[833,834],{"id":574,"depth":494,"text":574},{"id":652,"depth":494,"text":574},{"id":711,"depth":479,"text":712},{"id":740,"depth":479,"text":741},{"id":809,"depth":479,"text":809},[839],"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\u002FZH-AI-Agent-Skills-What-They-Are-%26-How-to-Create-Them.webp","AI Agent技能开发指南：构建可复用、高效率的智能体工作流",{"schemaOrg":846,"robots":849,"sitemap":850},[847],{"@type":848,"headline":423,"description":841},"HowTo","index, follow",{"lastmod":840},{"title":844,"description":841,"ogTitle":423,"ogDescription":841,"twitterTitle":423,"twitterDescription":841},"zh\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",[854,855,856,857],"AI 智能体","智能体技能","可重复使用的工作流程","AI 教程",null,"_atZh5i-Jgvruah38ZkG41QGU4DTktOc6AYeZmiwxKo",{"surround":861,"related":2112},[862,1550],{"id":863,"title":864,"author":424,"body":865,"category":1521,"date":1522,"description":1523,"extension":842,"image":1524,"imageAlt":1525,"isPublished":513,"meta":1526,"minRead":505,"navigation":513,"path":327,"seo":1541,"stem":1543,"tags":1544,"updatedAt":858,"__hash__":1549},"article\u002Fzh\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server.md","如何在 Linux VPS 远程服务器上从零开始安装、部署与配置 Hermes Agent",{"type":426,"value":866,"toc":1510},[867,871,874,877,881,885,888,903,909,912,942,949,978,985,990,1005,1018,1026,1031,1049,1053,1056,1078,1084,1087,1099,1110,1121,1153,1157,1168,1178,1189,1203,1210,1220,1226,1256,1272,1276,1283,1295,1300,1338,1342,1345,1361,1371,1450,1453,1501,1504,1507],[429,868,870],{"id":869},"为什么在远程-vps-上托管-hermes-agent","为什么在远程 VPS 上托管 Hermes Agent？",[434,872,873],{},"由于 Hermes Agent 能够执行后台任务、调度作业以及响应 webhook 调用，我们需要一台机器保持 24\u002F7 全天候待命。本地设备可能会断电、断网，或者面临硬件资源耗尽的风险。而远程服务器（VPS）则能保证 99% 以上的在线率（Uptime），并在需要时轻松对计算资源进行弹性扩容。",[434,875,876],{},"目前市面上有好几家性价比极高的虚拟专用服务器（VPS）提供商，比如 Hetzner、Hostinger 和 Contabo。我们已经使用 Contabo 有一段时间了，到目前为止，它的表现非常稳定和出色。",[429,878,880],{"id":879},"如何在-linux-vps-上配置-hermes-agent","如何在 Linux VPS 上配置 Hermes Agent",[572,882,884],{"id":883},"第一步连接到您的-vps","第一步：连接到您的 VPS",[434,886,887],{},"打开终端并使用 SSH 登录您的远程服务器：",[461,889,893],{"className":890,"code":891,"language":892,"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,894,895],{"__ignoreMap":424},[469,896,897,900],{"class":471,"line":472},[469,898,899],{"class":475},"ssh",[469,901,902],{"class":490}," root@your_server_ip\n",[434,904,905],{},[567,906],{"alt":907,"src":908},"在终端中通过 SSH 连接到 Linux VPS 服务器","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fvps-terminal-ssh-connection.webp",[434,910,911],{},"确保服务器的软件包都是最新的：",[461,913,915],{"className":890,"code":914,"language":892,"meta":424,"style":424},"sudo apt update && sudo apt upgrade -y\n",[443,916,917],{"__ignoreMap":424},[469,918,919,922,925,928,931,934,936,939],{"class":471,"line":472},[469,920,921],{"class":475},"sudo",[469,923,924],{"class":490}," apt",[469,926,927],{"class":490}," update",[469,929,930],{"class":486}," &&",[469,932,933],{"class":475}," sudo",[469,935,924],{"class":490},[469,937,938],{"class":490}," upgrade",[469,940,941],{"class":490}," -y\n",[434,943,944,945,948],{},"添加一个新用户 ",[443,946,947],{},"hermes","，或者您自定义的其他用户名：",[461,950,952],{"className":890,"code":951,"language":892,"meta":424,"style":424},"sudo adduser hermes \nsudo passwd hermes\n",[443,953,954,968],{"__ignoreMap":424},[469,955,956,958,961,964],{"class":471,"line":472},[469,957,921],{"class":475},[469,959,960],{"class":490}," adduser",[469,962,963],{"class":490}," hermes",[469,965,967],{"class":966},"sTEyZ"," \n",[469,969,970,972,975],{"class":471,"line":479},[469,971,921],{"class":475},[469,973,974],{"class":490}," passwd",[469,976,977],{"class":490}," hermes\n",[434,979,980,981,984],{},"关闭 ",[443,982,983],{},"root"," 用户的密码登录以增强安全性：",[576,986,987],{},[579,988,989],{},"打开 SSH 配置文件：",[461,991,993],{"className":890,"code":992,"language":892,"meta":424,"style":424},"sudo nano \u002Fetc\u002Fssh\u002Fsshd_config\n",[443,994,995],{"__ignoreMap":424},[469,996,997,999,1002],{"class":471,"line":472},[469,998,921],{"class":475},[469,1000,1001],{"class":490}," nano",[469,1003,1004],{"class":490}," \u002Fetc\u002Fssh\u002Fsshd_config\n",[576,1006,1007],{"start":479},[579,1008,1009,1010,1013,1014,1017],{},"找到 ",[443,1011,1012],{},"PermitRootLogin"," 这一行，将其值修改为 ",[443,1015,1016],{},"no","：",[461,1019,1024],{"className":1020,"code":1022,"language":1023,"meta":424},[1021],"language-text","PermitRootLogin no\n","text",[443,1025,1022],{"__ignoreMap":424},[576,1027,1028],{"start":494},[579,1029,1030],{},"保存文件并重启 SSH 服务：",[461,1032,1034],{"className":890,"code":1033,"language":892,"meta":424,"style":424},"sudo systemctl restart ssh\n",[443,1035,1036],{"__ignoreMap":424},[469,1037,1038,1040,1043,1046],{"class":471,"line":472},[469,1039,921],{"class":475},[469,1041,1042],{"class":490}," systemctl",[469,1044,1045],{"class":490}," restart",[469,1047,1048],{"class":490}," ssh\n",[572,1050,1052],{"id":1051},"第二步安装-hermes-agent","第二步：安装 Hermes Agent",[434,1054,1055],{},"运行以下命令：",[461,1057,1059],{"className":890,"code":1058,"language":892,"meta":424,"style":424},"curl -fsSL https:\u002F\u002Fhermes-agent.nousresearch.com\u002Finstall.sh | bash\n",[443,1060,1061],{"__ignoreMap":424},[469,1062,1063,1066,1069,1072,1075],{"class":471,"line":472},[469,1064,1065],{"class":475},"curl",[469,1067,1068],{"class":490}," -fsSL",[469,1070,1071],{"class":490}," https:\u002F\u002Fhermes-agent.nousresearch.com\u002Finstall.sh",[469,1073,1074],{"class":486}," |",[469,1076,1077],{"class":475}," bash\n",[434,1079,1080],{},[567,1081],{"alt":1082,"src":1083},"在终端中运行 Hermes Agent 的一键安装脚本","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-agent-installation-terminal.webp",[434,1085,1086],{},"安装完成后，输入以下命令验证是否安装成功：",[461,1088,1090],{"className":890,"code":1089,"language":892,"meta":424,"style":424},"hermes --version\n",[443,1091,1092],{"__ignoreMap":424},[469,1093,1094,1096],{"class":471,"line":472},[469,1095,947],{"class":475},[469,1097,1098],{"class":490}," --version\n",[434,1100,1101,1102,1105,1106],{},"运行 ",[443,1103,1104],{},"hermes setup"," 命令行工具来配置 Hermes Agent：\n",[567,1107],{"alt":1108,"src":1109},"在终端中运行 hermes setup 命令开始向导配置","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-agent-setup-wizard.webp",[434,1111,1112,1113,1116,1117],{},"选择大语言模型（LLM）提供商，我们可以先选择 ",[443,1114,1115],{},"DeepSeek","，后续再根据需要添加其他模型。\n",[567,1118],{"alt":1119,"src":1120},"在 Hermes 设置中选择 DeepSeek 作为 LLM 大模型提供商","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-llm-provider-selection.webp",[434,1122,1123,1124,1126,1127,1131,1135,1136,1139,1140,1144,1145,1148,1149],{},"输入您的 ",[443,1125,1115],{}," API 密钥：\n",[567,1128],{"alt":1129,"src":1130},"在终端命令行中输入 DeepSeek API 密钥","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-enter-api-key.webp",[567,1132],{"alt":1133,"src":1134},"成功验证并确认大模型提供商的 API 密钥","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-api-key-success.webp","\n在运行 Hermes Agent 的环境选项中选择 ",[443,1137,1138],{},"local machine","：\n",[567,1141],{"alt":1142,"src":1143},"选择 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,1146,1147],{},"Telegram","，其他渠道可以在后续随时配置。\n",[567,1150],{"alt":1151,"src":1152},"在 Hermes 设置中选择 Telegram 作为通信管道渠道","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-select-telegram-channel.webp",[572,1154,1156],{"id":1155},"第三步与-telegram-进行集成","第三步：与 Telegram 进行集成",[434,1158,1159,1160,1163,1164],{},"选择选项 ",[443,1161,1162],{},"[2]"," 来使用 Telegram 机器人。\n",[567,1165],{"alt":1166,"src":1167},"选择选项开始集成并配置 Telegram 机器人","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-bot-integration-option.webp",[434,1169,1170,1171,1173,1174],{},"打开 ",[443,1172,1147],{}," 并搜索 'BotFather' 官方账号。\n",[567,1175],{"alt":1176,"src":1177},"在 Telegram 应用中搜索官方 BotFather 账号","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-search-botfather.webp",[434,1179,1180,1181,1184,1185],{},"点击 ",[443,1182,1183],{},"Open"," 打开与 'BotFather' 的对话框。\n",[567,1186],{"alt":1187,"src":1188},"在 Telegram 中打开与 BotFather 的对话框","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-open-botfather-chat.webp",[434,1190,1180,1191,1194,1195,1198,1199],{},[443,1192,1193],{},"Create a New Bot","（或输入 ",[443,1196,1197],{},"\u002Fnewbot"," 指令）。\n",[567,1200],{"alt":1201,"src":1202},"向 BotFather 发送 \u002Fnewbot 指令以创建全新的机器人","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fbotfather-create-new-bot.webp",[434,1204,1205,1206],{},"按照提示填写名称和用户名，完成机器人的创建。\n",[567,1207],{"alt":1208,"src":1209},"配置新 Telegram 机器人的昵称和唯一用户名","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fbotfather-bot-details-configured.webp",[434,1211,1180,1212,1215,1216],{},[443,1213,1214],{},"Copy"," 复制机器人 Token（令牌），并将其粘贴回终端中。\n",[567,1217],{"alt":1218,"src":1219},"复制新创建的 Telegram 机器人的 HTTP API 访问 Token","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fbotfather-copy-http-api-token.webp",[434,1221,1222,1223,1225],{},"获取您的 ",[443,1224,1147],{}," 账号 ID 并将其添加到允许访问的用户列表（'Allowed user list'）中：",[727,1227,1228,1238,1253],{},[579,1229,1230,1231,1233,1234],{},"在 ",[443,1232,1147],{}," 中搜索 '@raw_data_bot'。\n",[567,1235],{"alt":1236,"src":1237},"在 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,1239,1240,1241,1244,1245,1248,1249],{},"点击进入 ",[443,1242,1243],{},"RawDataBot"," 并点击 Start（开始）按钮。您的用户 ID 将显示在 ",[443,1246,1247],{},"P.S. Your ID:"," 后面。\n",[567,1250],{"alt":1251,"src":1252},"启动 RawDataBot 机器人以获取当前用户的账号 ID","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-raw-data-bot-user-id.webp",[579,1254,1255],{},"复制该用户 ID 并粘贴到终端中。",[434,1257,1258,1259,1263,1264,1268],{},"由于我们在云端运行此服务，我们希望它能在系统启动时自动运行。\n",[567,1260],{"alt":1261,"src":1262},"配置 Hermes systemd 服务开机自启自动运行的选项","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-autostart-service-option.webp","\n将其他设置均保持默认值即可：\n",[567,1265],{"alt":1266,"src":1267},"在终端设置中将各项基础配置保持默认推荐值","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-leave-defaults-1.webp",[567,1269],{"alt":1270,"src":1271},"在 Hermes 配置向导中完成默认选项的设置","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-leave-defaults-2.webp",[429,1273,1275],{"id":1274},"使用-telegram-机器人测试您的-hermes-agent","使用 Telegram 机器人测试您的 Hermes Agent",[434,1277,1278,1279,1282],{},"运行以下命令启动 ",[443,1280,1281],{},"hermes gateway"," 服务：",[461,1284,1286],{"className":890,"code":1285,"language":892,"meta":424,"style":424},"hermes gateway\n",[443,1287,1288],{"__ignoreMap":424},[469,1289,1290,1292],{"class":471,"line":472},[469,1291,947],{"class":475},[469,1293,1294],{"class":490}," gateway\n",[434,1296,1170,1297,1299],{},[443,1298,1147],{},"，将刚刚创建的机器人，例如 '@tech_cloud_hermes_bot'，添加到对话中。",[727,1301,1302,1317,1328],{},[579,1303,1304,1305,1308,1309,1312,1313],{},"在对话框中输入 ",[443,1306,1307],{},"\u002Fnew"," 启动一个新的 ",[443,1310,1311],{},"Hermes Agent"," 对话会话。\n",[567,1314],{"alt":1315,"src":1316},"在 Telegram 聊天框中输入 \u002Fnew 指令开启新的智能体对话会话","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-chat-hermes-new-session.webp",[579,1318,1319,1320,1323,1324],{},"输入 ",[443,1321,1322],{},"\u002Fcommands"," 指令将列出所有可用的操作命令。\n",[567,1325],{"alt":1326,"src":1327},"在 Telegram 聊天框中输入 \u002Fcommands 指令查看可用操作指令列表","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-chat-hermes-commands-list.webp",[579,1329,1319,1330,1333,1334],{},[443,1331,1332],{},"\u002Fmodel"," 指令即可查看当前可用的 LLM 大模型列表。\n",[567,1335],{"alt":1336,"src":1337},"在 Telegram 聊天框中输入 \u002Fmodel 指令查看可切换的 LLM 列表","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-chat-hermes-model-selection.webp",[429,1339,1341],{"id":1340},"将-hermes-gateway-配置为后台常驻服务","将 Hermes Gateway 配置为后台常驻服务",[434,1343,1344],{},"创建 systemd 守护进程服务文件：",[461,1346,1350],{"className":1347,"code":1348,"language":1349,"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,1351,1352],{"__ignoreMap":424},[469,1353,1354,1356,1358],{"class":471,"line":472},[469,1355,921],{"class":475},[469,1357,1001],{"class":490},[469,1359,1360],{"class":490}," \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-gateway.service\n",[434,1362,1363,1364,1367,1368,1370],{},"粘贴以下配置，注意将 ",[443,1365,1366],{},"\u002Fhome\u002Fhermes"," 中的 ",[443,1369,947],{}," 替换为您自己的用户名：",[461,1372,1376],{"className":1373,"code":1374,"language":1375,"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,1377,1378,1383,1388,1393,1397,1402,1407,1412,1417,1422,1427,1433,1438,1444],{"__ignoreMap":424},[469,1379,1380],{"class":471,"line":472},[469,1381,1382],{},"[Unit]\n",[469,1384,1385],{"class":471,"line":479},[469,1386,1387],{},"Description=Hermes Gateway\n",[469,1389,1390],{"class":471,"line":494},[469,1391,1392],{},"After=network.target\n",[469,1394,1395],{"class":471,"line":505},[469,1396,514],{"emptyLinePlaceholder":513},[469,1398,1399],{"class":471,"line":510},[469,1400,1401],{},"[Service]\n",[469,1403,1404],{"class":471,"line":517},[469,1405,1406],{},"User=hermes\n",[469,1408,1409],{"class":471,"line":523},[469,1410,1411],{},"WorkingDirectory=\u002Fhome\u002Fhermes\n",[469,1413,1414],{"class":471,"line":528},[469,1415,1416],{},"ExecStart=\u002Fhome\u002Fhermes\u002F.local\u002Fbin\u002Fhermes gateway\n",[469,1418,1419],{"class":471,"line":534},[469,1420,1421],{},"Restart=always\n",[469,1423,1424],{"class":471,"line":539},[469,1425,1426],{},"RestartSec=10\n",[469,1428,1430],{"class":471,"line":1429},11,[469,1431,1432],{},"Environment=PATH=\u002Fhome\u002Fhermes\u002F.local\u002Fbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fbin:\u002Fbin\n",[469,1434,1436],{"class":471,"line":1435},12,[469,1437,514],{"emptyLinePlaceholder":513},[469,1439,1441],{"class":471,"line":1440},13,[469,1442,1443],{},"[Install]\n",[469,1445,1447],{"class":471,"line":1446},14,[469,1448,1449],{},"WantedBy=multi-user.target\n",[434,1451,1452],{},"启用并启动该背景服务：",[461,1454,1456],{"className":1347,"code":1455,"language":1349,"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,1457,1458,1467,1479,1490],{"__ignoreMap":424},[469,1459,1460,1462,1464],{"class":471,"line":472},[469,1461,921],{"class":475},[469,1463,1042],{"class":490},[469,1465,1466],{"class":490}," daemon-reload\n",[469,1468,1469,1471,1473,1476],{"class":471,"line":479},[469,1470,921],{"class":475},[469,1472,1042],{"class":490},[469,1474,1475],{"class":490}," enable",[469,1477,1478],{"class":490}," hermes-gateway\n",[469,1480,1481,1483,1485,1488],{"class":471,"line":494},[469,1482,921],{"class":475},[469,1484,1042],{"class":490},[469,1486,1487],{"class":490}," start",[469,1489,1478],{"class":490},[469,1491,1492,1494,1496,1499],{"class":471,"line":505},[469,1493,921],{"class":475},[469,1495,1042],{"class":490},[469,1497,1498],{"class":490}," status",[469,1500,1478],{"class":490},[429,1502,1503],{"id":1503},"总结与展望",[434,1505,1506],{},"在本文中，我们主要分享了如何在云端服务器上搭建并配置 Hermes Agent，并通过 Telegram 实现与其双向的高效沟通。让 Hermes Agent 运行在远程 VPS 上，能够为您打造一个 24 小时永不下线的、真正的 AI 数字化个人助手。",[825,1508,1509],{},"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":1511},[1512,1513,1518,1519,1520],{"id":869,"depth":479,"text":870},{"id":879,"depth":479,"text":880,"children":1514},[1515,1516,1517],{"id":883,"depth":494,"text":884},{"id":1051,"depth":494,"text":1052},{"id":1155,"depth":494,"text":1156},{"id":1274,"depth":479,"text":1275},{"id":1340,"depth":479,"text":1341},{"id":1503,"depth":479,"text":1503},[839],"2026-06-19","在本篇非常详尽的实战教程中，我们将一步步向您展示如何在远程 Linux VPS 服务器上成功安装与部署 Hermes Agent，并实现 24 小时稳定常驻运行。我们还会手把手教您如何通过自定义的 Telegram 机器人，快速与Hermes进行无缝对接，轻松实现自动化的任务管理，确保系统能随时在线响应。","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002FZH-How%20to%20Setup%20Hermes%20on%20Remote%20Server.webp","手把手教您如何在远程 Linux VPS 服务器上成功部署 Hermes Agent，并实现与自定义 Telegram 机器人的双向集成。",{"schemaOrg":1527,"robots":849,"sitemap":1540},[1528],{"@type":848,"name":864,"description":1523,"image":1524,"step":1529},[1530,1534,1537],{"@type":1531,"name":884,"text":1532,"image":908,"url":1533},"HowToStep","打开终端并使用 SSH 登录您的远程服务器： 确保服务器的软件包都是最新的： 添加一个新用户 `hermes`，或者您自定义的其他用户名： 关闭 `root` 用户的密码登录以增强安全性： 1. 打开 SSH 配置文件： 2. 找到 `PermitRootLogin` 这一行，将其值修改为 `...","#-vps",{"@type":1531,"name":1052,"text":1535,"image":1083,"url":1536},"运行以下命令： 安装完成后，输入以下命令验证是否安装成功： 运行 `hermes setup` 命令行工具来配置 Hermes Agent： 选择大语言模型（LLM）提供商，我们可以先选择 `DeepSeek`，后续再根据需要添加其他模型。 输入您的 `DeepSeek` API 密钥： 在运...","#-hermes-agent",{"@type":1531,"name":1156,"text":1538,"image":1167,"url":1539},"选择选项 `[2]` 来使用 Telegram 机器人。 打开 `Telegram` 并搜索 'BotFather' 官方账号。 点击 `Open` 打开与 'BotFather' 的对话框。 点击 `Create a New Bot`（或输入 `\u002Fnewbot` 指令）。 按照提示填写名称和...","#-telegram-",{"lastmod":1522},{"title":1542,"description":1523,"ogTitle":864,"ogDescription":1523,"twitterTitle":864,"twitterDescription":1523},"Hermes Agent VPS 部署：Telegram 机器人双向集成指南","zh\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",[1311,1545,1546,1547,1548],"VPS Setup","Telegram Bot","Linux VPS","AI Agent","3W7iQIun_QDbvFC66RehnT4AHrYJJQhyta-BATtk8wc",{"id":1551,"title":1552,"author":424,"body":1553,"category":2094,"date":2097,"description":2098,"extension":842,"image":2099,"imageAlt":2100,"isPublished":513,"meta":2101,"minRead":479,"navigation":513,"path":337,"seo":2105,"stem":2106,"tags":2107,"updatedAt":858,"__hash__":2111},"article\u002Fzh\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac.md","使用MDM配置文件在macOS上无缝切换与配置多个Cloudflare WARP零信任组织的完整指南",{"type":426,"value":1554,"toc":2087},[1555,1559,1562,1569,1573,1576,1579,1582,1586,1589,1596,1613,1926,2045,2048,2051,2054,2084],[429,1556,1558],{"id":1557},"什么是-cloudflare-warp","什么是 Cloudflare WARP？",[434,1560,1561],{},"Cloudflare WARP 是一款客户端应用程序，它将指定设备的数据流量通过 Cloudflare 的全球网络进行路由，而不是直接发送到公共互联网。",[434,1563,1564,1565,1568],{},"它基于 ",[438,1566,1567],{},"WireGuard"," 协议建立一条加密隧道，从而保护从设备到最近的 Cloudflare 数据中心之间的流量安全。随后，您可以在 Cloudflare 控制面板中创建策略，对这些流入的流量进行过滤、记录、检查或路由。",[429,1570,1572],{"id":1571},"为什么我们需要-cloudflare-warp","为什么我们需要 Cloudflare WARP？",[434,1574,1575],{},"为了向员工、承包商和其他利益相关者安全地公开内部资源（如私有 Web 服务或 SaaS 应用程序），Cloudflare WARP 客户端被用作**零信任网络访问 (ZTNA)**的客户端强制执行点。",[434,1577,1578],{},"Cloudflare WARP 客户端安装在用户的笔记本电脑或手机上。它要求用户在授予访问权限之前进行身份验证，并满足特定的安全状态检查（例如来自经过批准的 IP 范围、使用已注册的邮箱域名或运行处于活动状态的防火墙）。",[434,1580,1581],{},"通过将设备流量直接隧道化传输到 Cloudflare，用户的身份、设备和策略将在请求到达内部资源之前得到验证。因此，内部资源永远不会暴露在公共互联网上，每一次请求都将得到完整的记录和审计。",[429,1583,1585],{"id":1584},"在单台设备上支持多个-warp-配置文件","在单台设备上支持多个 WARP 配置文件",[434,1587,1588],{},"当用户需要在个人和企业 Cloudflare 账户之间进行切换，或者当系统管理员需要管理多个租户（tenant）时，在单台设备上支持多个 WARP 配置文件就显得至关重要。",[434,1590,1591,1592,1595],{},"要在 macOS 上实现这一目标，我们可以使用 ",[443,1593,1594],{},".mobileconfig"," MDM 配置文件来定义和注册不同的 WARP 环境。",[727,1597,1598,1610],{},[579,1599,1600,1601,1609],{},"直接从 Cloudflare ",[451,1602,1605,1606,1608],{"href":1603,"rel":1604},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fstatic\u002Fmdm\u002Fmultiple-orgs\u002FCloudflareWARP.mobileconfig",[455],"下载 ",[443,1607,1594],{}," 示例文件","。",[579,1611,1612],{},"以下是该配置文件的示例文本：",[461,1614,1618],{"className":1615,"code":1616,"language":1617,"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,1619,1620,1625,1630,1635,1640,1645,1650,1655,1660,1665,1670,1675,1680,1685,1690,1696,1702,1708,1714,1720,1726,1732,1738,1744,1750,1756,1762,1768,1773,1778,1784,1789,1795,1800,1806,1812,1818,1824,1830,1836,1842,1848,1854,1860,1866,1872,1878,1884,1890,1896,1902,1908,1914,1920],{"__ignoreMap":424},[469,1621,1622],{"class":471,"line":472},[469,1623,1624],{},"\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n",[469,1626,1627],{"class":471,"line":479},[469,1628,1629],{},"\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,1631,1632],{"class":471,"line":494},[469,1633,1634],{},"\u003Cplist version=\"1.0\">\n",[469,1636,1637],{"class":471,"line":505},[469,1638,1639],{},"\u003Cdict>\n",[469,1641,1642],{"class":471,"line":510},[469,1643,1644],{},"  \u003Ckey>PayloadContent\u003C\u002Fkey>\n",[469,1646,1647],{"class":471,"line":517},[469,1648,1649],{},"  \u003Carray>\n",[469,1651,1652],{"class":471,"line":523},[469,1653,1654],{},"    \u003Cdict>\n",[469,1656,1657],{"class":471,"line":528},[469,1658,1659],{},"      \u003Ckey>PayloadDisplayName\u003C\u002Fkey>\n",[469,1661,1662],{"class":471,"line":534},[469,1663,1664],{},"      \u003Cstring>Warp Configuration\u003C\u002Fstring>\n",[469,1666,1667],{"class":471,"line":539},[469,1668,1669],{},"      \u003Ckey>PayloadIdentifier\u003C\u002Fkey>\n",[469,1671,1672],{"class":471,"line":1429},[469,1673,1674],{},"      \u003Cstring>com.cloudflare.warp.CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n",[469,1676,1677],{"class":471,"line":1435},[469,1678,1679],{},"      \u003Ckey>PayloadOrganization\u003C\u002Fkey>\n",[469,1681,1682],{"class":471,"line":1440},[469,1683,1684],{},"      \u003Cstring>Cloudflare Ltd.\u003C\u002Fstring>\n",[469,1686,1687],{"class":471,"line":1446},[469,1688,1689],{},"      \u003Ckey>PayloadType\u003C\u002Fkey>\n",[469,1691,1693],{"class":471,"line":1692},15,[469,1694,1695],{},"      \u003Cstring>com.cloudflare.warp\u003C\u002Fstring>\n",[469,1697,1699],{"class":471,"line":1698},16,[469,1700,1701],{},"      \u003Ckey>PayloadUUID\u003C\u002Fkey>\n",[469,1703,1705],{"class":471,"line":1704},17,[469,1706,1707],{},"      \u003Cstring>CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n",[469,1709,1711],{"class":471,"line":1710},18,[469,1712,1713],{},"      \u003Ckey>PayloadVersion\u003C\u002Fkey>\n",[469,1715,1717],{"class":471,"line":1716},19,[469,1718,1719],{},"      \u003Cinteger>1\u003C\u002Finteger>\n",[469,1721,1723],{"class":471,"line":1722},20,[469,1724,1725],{},"      \u003Ckey>configs\u003C\u002Fkey>\n",[469,1727,1729],{"class":471,"line":1728},21,[469,1730,1731],{},"      \u003Carray>\n",[469,1733,1735],{"class":471,"line":1734},22,[469,1736,1737],{},"        \u003Cdict>\n",[469,1739,1741],{"class":471,"line":1740},23,[469,1742,1743],{},"          \u003Ckey>organization\u003C\u002Fkey>\n",[469,1745,1747],{"class":471,"line":1746},24,[469,1748,1749],{},"          \u003Cstring>your-team-name-1\u003C\u002Fstring>\n",[469,1751,1753],{"class":471,"line":1752},25,[469,1754,1755],{},"          \u003Ckey>display_name\u003C\u002Fkey>\n",[469,1757,1759],{"class":471,"line":1758},26,[469,1760,1761],{},"          \u003Cstring>Team 1\u003C\u002Fstring>\n",[469,1763,1765],{"class":471,"line":1764},27,[469,1766,1767],{},"        \u003C\u002Fdict>\n",[469,1769,1771],{"class":471,"line":1770},28,[469,1772,1737],{},[469,1774,1776],{"class":471,"line":1775},29,[469,1777,1743],{},[469,1779,1781],{"class":471,"line":1780},30,[469,1782,1783],{},"          \u003Cstring>your-team-name-2\u003C\u002Fstring>\n",[469,1785,1787],{"class":471,"line":1786},31,[469,1788,1755],{},[469,1790,1792],{"class":471,"line":1791},32,[469,1793,1794],{},"          \u003Cstring>Team 2\u003C\u002Fstring>\n",[469,1796,1798],{"class":471,"line":1797},33,[469,1799,1767],{},[469,1801,1803],{"class":471,"line":1802},34,[469,1804,1805],{},"      \u003C\u002Farray>\n",[469,1807,1809],{"class":471,"line":1808},35,[469,1810,1811],{},"    \u003C\u002Fdict>\n",[469,1813,1815],{"class":471,"line":1814},36,[469,1816,1817],{},"  \u003C\u002Farray>\n",[469,1819,1821],{"class":471,"line":1820},37,[469,1822,1823],{},"  \u003Ckey>PayloadDisplayName\u003C\u002Fkey>\n",[469,1825,1827],{"class":471,"line":1826},38,[469,1828,1829],{},"  \u003Cstring>Cloudflare WARP\u003C\u002Fstring>\n",[469,1831,1833],{"class":471,"line":1832},39,[469,1834,1835],{},"  \u003Ckey>PayloadIdentifier\u003C\u002Fkey>\n",[469,1837,1839],{"class":471,"line":1838},40,[469,1840,1841],{},"  \u003Cstring>cloudflare_warp\u003C\u002Fstring>\n",[469,1843,1845],{"class":471,"line":1844},41,[469,1846,1847],{},"  \u003Ckey>PayloadOrganization\u003C\u002Fkey>\n",[469,1849,1851],{"class":471,"line":1850},42,[469,1852,1853],{},"  \u003Cstring>Cloudflare, Ltd.\u003C\u002Fstring>\n",[469,1855,1857],{"class":471,"line":1856},43,[469,1858,1859],{},"  \u003Ckey>PayloadRemovalDisallowed\u003C\u002Fkey>\n",[469,1861,1863],{"class":471,"line":1862},44,[469,1864,1865],{},"  \u003Cfalse\u002F>\n",[469,1867,1869],{"class":471,"line":1868},45,[469,1870,1871],{},"  \u003Ckey>PayloadScope\u003C\u002Fkey>\n",[469,1873,1875],{"class":471,"line":1874},46,[469,1876,1877],{},"  \u003Cstring>System\u003C\u002Fstring>\n",[469,1879,1881],{"class":471,"line":1880},47,[469,1882,1883],{},"  \u003Ckey>PayloadType\u003C\u002Fkey>\n",[469,1885,1887],{"class":471,"line":1886},48,[469,1888,1889],{},"  \u003Cstring>Configuration\u003C\u002Fstring>\n",[469,1891,1893],{"class":471,"line":1892},49,[469,1894,1895],{},"  \u003Ckey>PayloadUUID\u003C\u002Fkey>\n",[469,1897,1899],{"class":471,"line":1898},50,[469,1900,1901],{},"  \u003Cstring>2B7763B8-64F6-41EB-AA5E-7761651B8131\u003C\u002Fstring>\n",[469,1903,1905],{"class":471,"line":1904},51,[469,1906,1907],{},"  \u003Ckey>PayloadVersion\u003C\u002Fkey>\n",[469,1909,1911],{"class":471,"line":1910},52,[469,1912,1913],{},"  \u003Cinteger>1\u003C\u002Finteger>\n",[469,1915,1917],{"class":471,"line":1916},53,[469,1918,1919],{},"\u003C\u002Fdict>\n",[469,1921,1923],{"class":471,"line":1922},54,[469,1924,1925],{},"\u003C\u002Fplist>\n",[727,1927,1928,1939,1953,1963,1969,1987,2000,2019,2036],{},[579,1929,1930,1931,1934,1935,1938],{},"将 ",[443,1932,1933],{},"your-team-name-1"," 和 ",[443,1936,1937],{},"your-team-name-2"," 替换为您各自的 Cloudflare Zero Trust 团队名称。",[579,1940,1941,1942,1945,1946,1948,1949,1952],{},"在终端中运行命令 ",[443,1943,1944],{},"uuidgen"," 生成唯一的 UUID，并使用它们替换 ",[443,1947,1594],{}," 文件中的占位符 ",[443,1950,1951],{},"PayloadUUID"," 值。",[579,1954,1955,1956,1959,1960,1962],{},"确保 ",[443,1957,1958],{},"PayloadIdentifier"," 字符串中也包含更新后的 ",[443,1961,1951],{},"，以保证配置文件的唯一性。",[579,1964,1965,1966,1968],{},"保存编辑后的 ",[443,1967,1594],{}," 文件。",[579,1970,1971,1972,1975,1976,1979,1980,1983],{},"打开 Mac 上的",[438,1973,1974],{},"系统设置","，搜索并选择",[438,1977,1978],{},"描述文件","（Profiles）。",[1981,1982],"br",{},[567,1984],{"alt":1985,"src":1986},"macOS 系统设置中的描述档面板","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-system-settings-profiles.webp",[579,1988,1989,1990,1993,1994,1996],{},"点击",[438,1991,1992],{},"安装、查看或移除...","（Install, view or remove...）开始添加您的新配置文件。",[1981,1995],{},[567,1997],{"alt":1998,"src":1999},"macOS 描述档安装、查看或移除按钮","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-profiles-view-remove.webp",[579,2001,2002,2003,2006,2007,1968,2009,2011,2015],{},"点击左下角的 ",[438,2004,2005],{},"+","（加号）图标，并选择您保存的 ",[443,2008,1594],{},[1981,2010],{},[567,2012],{"alt":2013,"src":2014},"macOS 描述档左下角新增（+）按钮","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-profiles-add-profile.webp",[567,2016],{"alt":2017,"src":2018},"在 macOS 上选择 .mobileconfig 配置文件","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-select-mobileconfig-file.webp",[579,2020,2021,2022,2025,2026,2029,2030,2032],{},"选择 ",[438,2023,2024],{},"Cloudflare WARP"," 并点击",[438,2027,2028],{},"安装","以应用此配置。",[1981,2031],{},[567,2033],{"alt":2034,"src":2035},"在 macOS 上确认安装 Cloudflare WARP 描述档","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-install-cloudflare-warp-profile.webp",[579,2037,2038,2039,2041],{},"重新启动您的 Cloudflare WARP 客户端。您现在应该可以在用户界面中看到多组织切换器：",[1981,2040],{},[567,2042],{"alt":2043,"src":2044},"macOS 上支持多组织切换的 Cloudflare WARP 客户端界面","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fcloudflare-warp-multi-profile-switcher.webp",[429,2046,2047],{"id":2047},"结论",[434,2049,2050],{},"Cloudflare WARP 客户端在用户设备上扮演着关键的安全边界角色，使零信任网络访问（ZTNA）既稳固又极具实用性。通过将内部资源与公共互联网隔离开来，可确保每一次连接尝试都经过安全的身份验证、评估与审计。",[429,2052,2053],{"id":2053},"参考资料",[727,2055,2056,2063,2070,2077],{},[579,2057,2058],{},[451,2059,2062],{"href":2060,"rel":2061},"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,2064,2065],{},[451,2066,2069],{"href":2067,"rel":2068},"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,2071,2072],{},[451,2073,2076],{"href":2074,"rel":2075},"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,2078,2079],{},[451,2080,2083],{"href":2081,"rel":2082},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fteam-and-resources\u002Fdevices\u002Fcloudflare-one-client\u002F",[455],"Cloudflare One Client Documentation",[825,2085,2086],{},"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":2088},[2089,2090,2091,2092,2093],{"id":1557,"depth":479,"text":1558},{"id":1571,"depth":479,"text":1572},{"id":1584,"depth":479,"text":1585},{"id":2047,"depth":479,"text":2047},{"id":2053,"depth":479,"text":2053},[2095,2096],"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\u002FZH-Switch-Between-Multiple-Cloudflare-WARP-Orgs-on-Mac.webp","在Mac上配置和切换多个Cloudflare WARP组织账户",{"schemaOrg":2102,"robots":849,"sitemap":2104},[2103],{"@type":848,"headline":1552,"description":2098},{"lastmod":2097},{"title":2100,"description":2098,"ogTitle":1552,"ogDescription":2098,"twitterTitle":1552,"twitterDescription":2098},"zh\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",[2108,2024,2109,2110],"macOS","MDM","Zero Trust","PqQ8V7tDnvy35zbYhRFeP2qlFyG5TcvpZCHoKbf9GqU",[2113,3378,4247],{"id":2114,"title":2115,"author":424,"body":2116,"category":3339,"date":3342,"description":3343,"extension":842,"image":3344,"imageAlt":3345,"isPublished":513,"meta":3346,"minRead":1440,"navigation":513,"path":355,"seo":3371,"stem":3373,"tags":3374,"updatedAt":858,"__hash__":3377},"article\u002Fzh\u002Farticle\u002Fbringing-buzz-to-deepseek-harness.md","为 DeepSeek Harness 接入 Buzz 协作平台：构建自托管 Nostr 消息网关的完整实践",{"type":426,"value":2117,"toc":3323},[2118,2124,2146,2154,2157,2161,2166,2207,2210,2270,2274,2281,2561,2564,2568,2572,2578,2582,2595,2599,2609,2657,2664,2668,2671,2703,2706,2711,2753,2761,2767,2776,2782,2813,2827,2831,2840,2871,2893,2941,2948,2954,2960,2967,2973,2978,2986,3000,3006,3016,3055,3058,3064,3071,3077,3081,3084,3236,3239,3280,3284,3290,3294,3320],[434,2119,2120],{},[567,2121],{"alt":2122,"src":2123},"DeepSeek Harness 消息网关连接至 Block Buzz 频道的运行概览","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-nostr-gateway-overview.webp",[434,2125,2126,2127,2134,2135,2140,2141,2145],{},"DeepSeek Harness（DSH）的官方插件 ",[438,2128,2129],{},[451,2130,2133],{"href":2131,"rel":2132},"https:\u002F\u002Fgithub.com\u002Fa792883583\u002Fdsh-message-gateway",[455],"dsh-message-gateway","，能够将 DeepSeek Harness 助手无缝扩展至 Discord、Telegram、微信等多种主流即时通讯平台。该插件仓库已被 Fork 并进行了二次开发，旨在将 ",[438,2136,2137],{},[451,2138,2139],{"href":383},"自建 Block 旗下 Buzz 协作平台：轻松构建人类与 AI 智能体高效协同工作的全新共享工作空间"," 接入支持列表。Fork 后的开源代码仓库位于 GitHub：",[451,2142,2143],{"href":2143,"rel":2144},"https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fdsh-message-gateway",[455]," 。",[2147,2148],"article-card",{"description":2149,"image":2150,"image-alt":2151,"label":2152,"min-read":2153,"title":2139,"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\u002FZH-Self-Hosting-Buzz-As-The-Workspace-Where-AI-Agents-Become-Colleagues.webp","一张高颜值的 16:9 科技质感卡片，具有深蓝色和橙色色调，插图展示如何在 Ubuntu VPS 上部署自托管的 Block 旗下 Buzz 协作中继服务器，其中包含一个带有居中文字的毛玻璃微动质感面板。","前置准备指南","12",[434,2155,2156],{},"DSH 助手作为一个全功能成员加入 Buzz Nostr 中继，既能接收私信（DM），也能接收被 @mention 提及的频道消息，并通过与 Web UI 完全相同的独立会话智能体管线输出响应。",[429,2158,2160],{"id":2159},"dsh-message-gateway-插件架构剖析","dsh-message-gateway 插件架构剖析",[434,2162,2163,2165],{},[438,2164,2133],{}," 插件的系统架构清晰划分为宿主端与客户端两大部分：",[727,2167,2168,2197],{},[579,2169,2170,1017,2173,2176,2177,2180,2181,2184,2185,2188,2189,2192,2193,2196],{},[438,2171,2172],{},"宿主端（Node 环境）",[443,2174,2175],{},"gateway-store","（凭证与配置持久化存储，位于 ",[443,2178,2179],{},"~\u002F.dsh\u002Fgateway.json","）、",[443,2182,2183],{},"platforms.ts","（支持平台定义与连通性自检）、",[443,2186,2187],{},"routes.ts","（对外暴露的 ",[443,2190,2191],{},"\u002Fgateway\u002F*"," 路由端点）以及 ",[443,2194,2195],{},"bridge-manager.ts","（常驻网关桥接器：负责按会话维护独立 Agent 实例并统一管理流式响应推送）。",[579,2198,2199,2202,2203,2206],{},[438,2200,2201],{},"客户端（浏览器前端）","：侧边栏的“",[438,2204,2205],{},"Message platforms","”可视化配置页面，负责录入密钥参数、发起连通性测试以及直观监控网关实时在线状态。",[434,2208,2209],{},"为网关接入一个全新通讯平台通常需要经历以下三步：",[576,2211,2212,2230,2244],{},[579,2213,2214,2217,2218,2221,2222,2225,2226,2229],{},[438,2215,2216],{},"实现 Bridge 桥接类","：提供 ",[443,2219,2220],{},"start\u002Fstop\u002Fstatus"," 生命周期方法以及 ",[443,2223,2224],{},"onText(text, frame)"," 消息回调，结构规范与现有的 ",[443,2227,2228],{},"wecom-bridge.ts"," 完全一致。",[579,2231,2232,2235,2236,2239,2240,2243],{},[438,2233,2234],{},"接入 bridge-manager 调度器","：复用既有的多会话调度管线（",[443,2237,2238],{},"ensureAgentForKey"," + ",[443,2241,2242],{},"pendingMap","），并将底层文本输出流挂载至该平台的专用回复接收器。",[579,2245,2246,2249,2250,2253,2254,2257,2258,2261,2262,2265,2266,2269],{},[438,2247,2248],{},"对接持久化存储与配置路由","：在 ",[443,2251,2252],{},"\u002Fgateway\u002Fsave"," 与 ",[443,2255,2256],{},"\u002Fgateway\u002Fdelete"," 逻辑中实现：",[438,2259,2260],{},"保存配置即自动启动桥接服务，删除配置则优雅停止桥接服务","，配合 ",[443,2263,2264],{},"autoStartXxx"," 状态标记确保 ",[443,2267,2268],{},"dsh web"," 守护进程开机自动重连。",[429,2271,2273],{"id":2272},"buzz-网关桥接实现nostr-协议标准与事件生命周期","Buzz 网关桥接实现：Nostr 协议标准与事件生命周期",[434,2275,2276,2277,2280],{},"本次接入直接使用 ",[438,2278,2279],{},"DeepSeek Harness"," 自行编写完成了完整的 Buzz 适配桥接器。底层严格遵循了如下 Nostr 协议规范标准：",[2282,2283,2284,2299],"table",{},[2285,2286,2287],"thead",{},[2288,2289,2290,2296],"tr",{},[2291,2292,2293],"th",{},[438,2294,2295],{},"维度 \u002F 阶段",[2291,2297,2298],{},"协议实现规范与技术细节",[2300,2301,2302,2324,2342,2369,2387,2411,2436,2458,2472,2486,2505,2522,2536],"tbody",{},[2288,2303,2304,2310],{},[2305,2306,2307],"td",{},[438,2308,2309],{},"底层传输（Transport）",[2305,2311,2312,2313,2316,2317,2320,2321],{},"单条经过 NIP-42 鉴权认证的 WebSocket 链路；默认中继连接地址为 ",[443,2314,2315],{},"ws:\u002F\u002Flocalhost:3000","；输入的 ",[443,2318,2319],{},"http(s):\u002F\u002F"," 会自动规整为 ",[443,2322,2323],{},"ws(s):\u002F\u002F",[2288,2325,2326,2331],{},[2305,2327,2328],{},[438,2329,2330],{},"鉴权认证（Auth）",[2305,2332,2333,2334,2337,2338,2341],{},"AUTH 事件 ",[443,2335,2336],{},"kind 22242","，携带标签 ",[443,2339,2340],{},"[[\"relay\", url], [\"challenge\", challenge]]","，内容为空字符串，由 Agent 的私钥完成签名",[2288,2343,2344,2349],{},[2305,2345,2346],{},[438,2347,2348],{},"订阅机制（Subs）",[2305,2350,2351,1017,2354,2357,2358,2361,2362,2365,2366],{},[438,2352,2353],{},"严格基于频道隔离",[443,2355,2356],{},"REQ {\"kinds\":[9], \"#h\":[\u003Cuuid>]}"," — 每个频道独立建立一条订阅。全局性的 ",[443,2359,2360],{},"kinds:[9]"," 虽能收到 EOSE 但绝不广播推送；多值 ",[443,2363,2364],{},"#h"," 标签过滤在协议中",[438,2367,2368],{},"无法正常分发",[2288,2370,2371,2376],{},[2305,2372,2373],{},[438,2374,2375],{},"频道发现（Discovery）",[2305,2377,2378,2379,2382,2383,2386],{},"历史元数据回溯查询 ",[443,2380,2381],{},"REQ {kinds:[39000]}"," 提取频道详情（其中 ",[443,2384,2385],{},"type == \"dm\""," 用于标记单聊私信频道）",[2288,2388,2389,2394],{},[2305,2390,2391],{},[438,2392,2393],{},"成员变动订阅",[2305,2395,2396,2397,2400,2401,2005,2403,2406,2407,2410],{},"实时长连接订阅 ",[443,2398,2399],{},"REQ {kinds:[44100,44101], \"#p\":[Agent 公钥], since: now-60s}"," — 44100 为入群，44101 为被移出，均附带 ",[443,2402,434],{},[443,2404,2405],{},"h","；成员关系变更时",[438,2408,2409],{},"无需重连","即可动态热更新订阅状态",[2288,2412,2413,2418],{},[2305,2414,2415],{},[438,2416,2417],{},"即时聊天事件",[2305,2419,2420,2423,2424,2427,2428,2431,2432,2435],{},[443,2421,2422],{},"kind 9"," 事件，携带 ",[443,2425,2426],{},"[\"h\", channel]"," 频道标签，可选附带 ",[443,2429,2430],{},"[\"e\", replyTo]"," 回复目标与 ",[443,2433,2434],{},"[\"p\", mention]"," 被提及者标签",[2288,2437,2438,2443],{},[2305,2439,2440],{},[438,2441,2442],{},"原位更新编辑",[2305,2444,2445,2448,2449,2253,2451,2454,2455,2457],{},[443,2446,2447],{},"kind 40003"," 事件，附带 ",[443,2450,2405],{},[443,2452,2453],{},"e"," 目标标签；内容完全替换；中继单包上限 64 KB → 严控载荷 ≤ 60,000 B；超长回复分块处理 — 首块用于原位编辑替换，超出部分作为回复串线程的 ",[443,2456,2422],{}," 消息追加",[2288,2459,2460,2465],{},[2305,2461,2462],{},[438,2463,2464],{},"CLOSED 异常帧处理",[2305,2466,2467,2468,2471],{},"鉴权未完成前收到 ",[443,2469,2470],{},"auth-required"," 属于正常引导阶段（完成 AUTH 后重新拉起订阅）；鉴权完成后遇断连 → 阶梯式限次重试（最多 3 次，间隔 0\u002F1\u002F2 秒退避）；整链重连时全量重构上下文",[2288,2473,2474,2479],{},[2305,2475,2476],{},[438,2477,2478],{},"中继拉取上限",[2305,2480,2481,2482,2485],{},"每次订阅最多拉取 2000 条历史事件，即使配置了 ",[443,2483,2484],{},"since"," 过滤参数，中继仍按自最新向过去的时间倒序返回",[2288,2487,2488,2493],{},[2305,2489,2490],{},[438,2491,2492],{},"消息命中判定",[2305,2494,2495,2496,2498,2499,2501,2502,2504],{},"仅当满足以下任一条件时才激活处理入站 ",[443,2497,2422],{},"：(a) ",[443,2500,434],{}," 标签明确包含自身公钥，(b) 处于 DM 私信频道，(c) 回复关联的 ",[443,2503,2453],{}," 根事件为自身发出的消息。自动过滤自身公钥发送的内容（彻底杜绝自环）",[2288,2506,2507,2512],{},[2305,2508,2509],{},[438,2510,2511],{},"出站 @ 提及",[2305,2513,2514,2515,2518,2519,2521],{},"出站内容按纯文本原样发布 — 中继端不对正文中的 ",[443,2516,2517],{},"@"," 符号进行预校验；",[443,2520,434],{}," 标签填入当前对话原作者以及至多 7 位其他被提及者的公钥（单条上限 8 位）",[2288,2523,2524,2529],{},[2305,2525,2526],{},[438,2527,2528],{},"私聊消息（DM）",[2305,2530,2531,2532,2535],{},"依赖中继作用域内的明文受限频道（元数据标注 ",[443,2533,2534],{},"type: \"dm\"","） — 当前桥接实现中未引入 NIP-04\u002F44 复杂非对称端到端加密",[2288,2537,2538,2543],{},[2305,2539,2540],{},[438,2541,2542],{},"媒体附件（入站）",[2305,2544,2545,2546,2549,2550,2553,2554,2553,2557,2560],{},"NIP-92 ",[443,2547,2548],{},"imeta"," 规范（",[443,2551,2552],{},"url",", ",[443,2555,2556],{},"sha256",[443,2558,2559],{},"m","）→ 常规 HTTP(S) 流式下载，本地校验 SHA-256 完整性，单文件限制 20 MB，每条消息最多 4 张；出站图片发布暂无官方中继协议路径，现阶段不支持出站图片",[434,2562,2563],{},"Buzz 适配网关的启动引导时序图如下：",[567,2565],{"src":2566,"alt":2567},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-bootstrap.webp","展示 Buzz 网关引导连接与 NIP-42 协议身份鉴权流程的时序图",[572,2569,2571],{"id":2570},"基于-nostr-40003-事件原位编辑实现的实时流式输出","基于 Nostr 40003 事件原位编辑实现的实时流式输出",[434,2573,2574,2575,1017],{},"Nostr 协议缺乏原生打字中（Typing）状态通知，且底层事件设计为严格只增不改。为了让对话过程具备行云流水的实时交互感，Buzz 适配网关",[438,2576,2577],{},"通过原位编辑巧妙模拟了流式打字输出",[567,2579],{"src":2580,"alt":2581},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-reply.webp","基于 kind 40003 事件原位编辑模拟打字流式响应的逻辑流程图",[727,2583,2584],{},[579,2585,2586],{},[610,2587,2588,2589,2591,2592,2594],{},"网关首先秒级发出一条 ",[443,2590,2422],{}," 占位消息，随后在 Agent 推理过程中按设定的节流阈值连续发射 ",[443,2593,2447],{}," 原位编辑事件逐步追加渲染内容，并在推理终点落定最终文本。这一设计思路与 Telegram、Discord 桥接器的实现方式一脉相承。",[572,2596,2598],{"id":2597},"通过聊天指令打通-deepseek-harness-本地工作区","通过聊天指令打通 DeepSeek Harness 本地工作区",[434,2600,2601,2602,2605,2606,1282],{},"DSH Web 界面所支持的“工作区（Workspaces）”核心能力依赖于底层 ",[443,2603,2604],{},"@deepseek-ai\u002Fdsh-workspace"," 模块中的 ",[443,2607,2608],{},"workspaceRegistry",[461,2610,2614],{"className":2611,"code":2612,"language":2613,"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,2615,2616],{"__ignoreMap":424},[469,2617,2618,2622,2625,2628,2632,2635,2638,2640,2642,2646,2649,2651,2654],{"class":471,"line":472},[469,2619,2621],{"class":2620},"spNyl","const",[469,2623,2624],{"class":966}," existing ",[469,2626,2627],{"class":486},"=",[469,2629,2631],{"class":2630},"s7zQu"," await",[469,2633,2634],{"class":966}," ctx",[469,2636,2637],{"class":486},".",[469,2639,2608],{"class":966},[469,2641,2637],{"class":486},[469,2643,2645],{"class":2644},"s2Zo4","resolveByPath",[469,2647,2648],{"class":966},"(request",[469,2650,2637],{"class":486},[469,2652,2653],{"class":966},"path)",[469,2655,2656],{"class":486},";\n",[434,2658,2659,2660,2663],{},"Buzz 桥接器通过引入全新的聊天斜杠指令 ",[443,2661,2662],{},"\u002Fworkspace \u003C目录路径>","，允许在群聊中直接向 DSH 注册并绑定本地现存的文件夹。在此之后，该会话下的所有交互都将牢牢锚定在此目录中，并能实时无缝同步在 DSH Web UI 端查看。",[567,2665],{"src":2666,"alt":2667},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-workspace.webp","通过网关聊天指令动态注册并绑定 DeepSeek Harness 本地工作区的架构示意图",[434,2669,2670],{},"开发与使用过程中需重点明确的三大设计机制：",[727,2672,2673,2683,2693],{},[579,2674,2675,2678,2679,2682],{},[438,2676,2677],{},"变更目录等同于开启全新会话","：会话的工作目录（",[443,2680,2681],{},"cwd","）在初始化生成 Session Header 时即完成写入，后续在生命周期内不可直接原地篡改。",[579,2684,2685,2688,2689,2692],{},[438,2686,2687],{},"目标本地目录必须预先存在","：底层 ",[443,2690,2691],{},"create"," 注册函数会对路径进行强校验，若路径在宿主机不存在将直接抛出异常拒绝绑定。",[579,2694,2695,2698,2699,2702],{},[438,2696,2697],{},"高度安全敏感指令","：通过网关衍生的会话均赋予 ",[438,2700,2701],{},"auto-approve","（自动批准命令执行）特权，拥有对目标文件夹直接进行读写和工具操作的完全访问权。",[429,2704,2705],{"id":2705},"安装与配置全流程指南",[576,2707,2708],{},[579,2709,2710],{},"在终端运行以下指令完成插件拉取与启动：",[461,2712,2714],{"className":890,"code":2713,"language":892,"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,2715,2716,2736,2740,2746],{"__ignoreMap":424},[469,2717,2718,2721,2724,2727,2730,2733],{"class":471,"line":472},[469,2719,2720],{"class":475},"dsh",[469,2722,2723],{"class":490}," plugin",[469,2725,2726],{"class":490}," --profile",[469,2728,2729],{"class":490}," web",[469,2731,2732],{"class":490}," add",[469,2734,2735],{"class":490}," https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fdsh-message-gateway.git\n",[469,2737,2738],{"class":471,"line":479},[469,2739,514],{"emptyLinePlaceholder":513},[469,2741,2742],{"class":471,"line":494},[469,2743,2745],{"class":2744},"sHwdD","# Start DSH web\n",[469,2747,2748,2750],{"class":471,"line":505},[469,2749,2720],{"class":475},[469,2751,2752],{"class":490}," web\n",[576,2754,2755],{"start":479},[579,2756,2757,2758,2760],{},"待 DSH Web 界面启动并用浏览器打开后，点击界面侧边栏中的“",[438,2759,2205],{},"”图标：",[434,2762,2763],{},[567,2764],{"alt":2765,"src":2766},"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,2768,2769],{"start":494},[579,2770,2771,2772,2775],{},"在左侧平台列表中选择“",[438,2773,2774],{},"Buzz","”：",[434,2777,2778],{},[567,2779],{"alt":2780,"src":2781},"DeepSeek Harness 消息网关内的 Buzz 协议参数与密钥对配置面板","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-message-gateway-buzz-config-panel.webp",[576,2783,2784,2795,2806],{"start":505},[579,2785,2786,2787,2790,2791,2794],{},"点击“",[438,2788,2789],{},"Generate keypair","”按钮即时生成全新的 Nostr 身份密钥对。请务必将生成的 ",[443,2792,2793],{},"npub"," 公钥妥善复制暂存，后续步骤将作为关键身份凭证。",[579,2796,2797,2798,2801,2802,2805],{},"准确填入您的 ",[438,2799,2800],{},"Relay URL","（中继地址）以及需要监听订阅的 ",[438,2803,2804],{},"Channels","（允许访问的频道 UUID 白名单列表）。",[579,2807,2808,2809,2812],{},"点击底部的“",[438,2810,2811],{},"Save","”按钮完成保存。",[434,2814,2815,2816,2819,2820,2823,2824,2826],{},"表单提交后，系统将持久化保存配置并",[438,2817,2818],{},"立即启动 Buzz 网关服务","。私钥 ",[443,2821,2822],{},"nsec"," 作为最高机密凭证被自动保护，仅独立存放在宿主机本地的 ",[443,2825,2179],{}," 文件中。",[572,2828,2830],{"id":2829},"将-dsh-智能体注册至-buzz-nostr-中继服务","将 DSH 智能体注册至 Buzz Nostr 中继服务",[434,2832,2833,2836,2837,2839],{},[438,2834,2835],{},"将 DSH 助手作为新成员注册加入中继","。此处公钥填入上文所生成的 ",[443,2838,2793],{}," 字符串：",[461,2841,2843],{"className":890,"code":2842,"language":892,"meta":424,"style":424},"docker compose exec relay buzz-admin add-member --pubkey npub123123123\n",[443,2844,2845],{"__ignoreMap":424},[469,2846,2847,2850,2853,2856,2859,2862,2865,2868],{"class":471,"line":472},[469,2848,2849],{"class":475},"docker",[469,2851,2852],{"class":490}," compose",[469,2854,2855],{"class":490}," exec",[469,2857,2858],{"class":490}," relay",[469,2860,2861],{"class":490}," buzz-admin",[469,2863,2864],{"class":490}," add-member",[469,2866,2867],{"class":490}," --pubkey",[469,2869,2870],{"class":490}," npub123123123\n",[434,2872,2873,2876,2877,2880,2881,2884,2885,2888,2889,2892],{},[438,2874,2875],{},"将 DSH 助手加入特定的沟通频道","。仅加入中继并不会让助手自动出现在频道成员列表中。需要通过 ",[443,2878,2879],{},"buzz-cli"," 进一步执行入群操作。注意此处 ",[443,2882,2883],{},"--pubkey"," 参数必须使用 ",[438,2886,2887],{},"HEX 16 进制公钥","格式，而非 npub 格式（在上一步执行 ",[443,2890,2891],{},"buzz-admin add-member"," 时，终端输出中会打印对应的 HEX 公钥）：",[461,2894,2896],{"className":890,"code":2895,"language":892,"meta":424,"style":424},"buzz channels add-member --channel \u003CCHANNEL_UUID> --pubkey \u003CAGENT_HEX> --role member\n",[443,2897,2898],{"__ignoreMap":424},[469,2899,2900,2903,2906,2908,2911,2914,2917,2920,2923,2925,2927,2930,2933,2935,2938],{"class":471,"line":472},[469,2901,2902],{"class":475},"buzz",[469,2904,2905],{"class":490}," channels",[469,2907,2864],{"class":490},[469,2909,2910],{"class":490}," --channel",[469,2912,2913],{"class":486}," \u003C",[469,2915,2916],{"class":490},"CHANNEL_UUI",[469,2918,2919],{"class":966},"D",[469,2921,2922],{"class":486},">",[469,2924,2867],{"class":490},[469,2926,2913],{"class":486},[469,2928,2929],{"class":490},"AGENT_HE",[469,2931,2932],{"class":966},"X",[469,2934,2922],{"class":486},[469,2936,2937],{"class":490}," --role",[469,2939,2940],{"class":490}," member\n",[2147,2942],{"description":2943,"image":2150,"image-alt":2151,"label":2944,"min-read":2945,"title":2946,"to":2947},"手把手教您安装和配置 buzz-cli，以便在 Nostr 中继上管理频道、成员密钥以及 AI 智能体的角色权限。","CLI 指南","5","如何安装并使用 buzz-cli","\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues#install-buzz-cli",[434,2949,2950,2951,2953],{},"随后可通过 ",[443,2952,2879],{}," 灵活更新 DSH 助手在 Nostr 中继中的公开资料，设置更具辨识度的昵称：",[434,2955,2956],{},[567,2957],{"alt":2958,"src":2959},"使用 buzz-cli 命令行工具更新 DSH 助手在 Nostr 中继上的公开个人资料","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-assistant-buzz-cli-profile-update.webp",[434,2961,2962,2963,2966],{},"在客户端向 DSH 助手发送一次 ",[438,2964,2965],{},"Wave","（Buzz 平台独特的 DM 私信打招呼动作）。助手随后返回回复，代表网关通讯已完全就绪：",[434,2968,2969],{},[567,2970],{"alt":2971,"src":2972},"在 Buzz 客户端向 DeepSeek Harness 助手发送 Wave 私信进行连通性验证","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-dm-wave-greeting-reply.webp",[434,2974,2975],{},[610,2976,2977],{},"向 DSH 助手发送 Wave 私信打招呼 — 桥接网关正常秒级响应。",[572,2979,2981,2982,2985],{"id":2980},"通过-workspace-指令开启本地工作区联动","通过 ",[443,2983,2984],{},"\u002Fworkspace"," 指令开启本地工作区联动",[434,2987,2988,2989,2992,2993,2996,2997,2999],{},"由于 ",[443,2990,2991],{},"allowWorkspace"," 配置项出于环境安全考虑默认处于禁用（",[443,2994,2995],{},"false","）状态，未经配置直接向助手发送 ",[443,2998,2984],{}," 命令会被系统拦截拒绝：",[434,3001,3002],{},[567,3003],{"alt":3004,"src":3005},"在未开启 allowWorkspace 权限时发送 \u002Fworkspace 命令被系统安全拦截的提示","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-workspace-command-rejected-error.webp",[434,3007,3008,3009,3012,3013,3015],{},"打开配置文件 ",[443,3010,3011],{},"~\u002F.dsh\u002Fprofiles\u002Fweb\u002Fcordis.patch.yml"," 添加开关配置，随后重启 ",[443,3014,2268],{}," 服务即可：",[461,3017,3021],{"className":3018,"code":3019,"language":3020,"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,3022,3023,3036,3044],{"__ignoreMap":424},[469,3024,3025,3028,3031,3033],{"class":471,"line":472},[469,3026,3027],{"class":486},"-",[469,3029,3030],{"class":482}," id",[469,3032,487],{"class":486},[469,3034,3035],{"class":490}," ui-message-gateway\n",[469,3037,3038,3041],{"class":471,"line":479},[469,3039,3040],{"class":482},"  config",[469,3042,3043],{"class":486},":\n",[469,3045,3046,3049,3051],{"class":471,"line":494},[469,3047,3048],{"class":482},"    allowWorkspace",[469,3050,487],{"class":486},[469,3052,3054],{"class":3053},"sfNiH"," true\n",[434,3056,3057],{},"配置生效并重启后即可顺利绑定：",[434,3059,3060],{},[567,3061],{"alt":3062,"src":3063},"在 Buzz 频道成功执行 \u002Fworkspace 命令完成本地工作区绑定的确认消息","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-workspace-command-success-confirmation.webp",[434,3065,3066,3067,3070],{},"实用贴士：此命令默认假设工作区目录名（例如截图中的 ",[443,3068,3069],{},"TechVoyage","）直接位于当前用户的个人主目录之下；若目录处于其他深层路径，请务必传入完整绝对路径。通过 Buzz 频道中注册绑定好的新会话，也都会完全同步在 DeepSeek Harness Web 界面上显示。",[434,3072,3073],{},[567,3074],{"alt":3075,"src":3076},"DeepSeek Harness Web UI 中展示从 Buzz 频道自动同步关联的活跃工作区会话","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-web-ui-synced-workspace-session.webp",[572,3078,3080],{"id":3079},"buzz-频道支持的完整可用指令","Buzz 频道支持的完整可用指令",[434,3082,3083],{},"其他平台支持的几乎全部原生功能在 Buzz 中均可顺畅运行：",[2282,3085,3086,3096],{},[2285,3087,3088],{},[2288,3089,3090,3093],{},[2291,3091,3092],{},"指令语法",[2291,3094,3095],{},"功能说明",[2300,3097,3098,3108,3118,3128,3137,3147,3157,3167,3176,3200,3219],{},[2288,3099,3100,3105],{},[2305,3101,3102],{},[443,3103,3104],{},"\u002Fworkspace \u003Cfolder>",[2305,3106,3107],{},"将本地已存在的文件夹注册绑定为当前对话专属的工作区环境（受配置项开关保护）",[2288,3109,3110,3115],{},[2305,3111,3112],{},[443,3113,3114],{},"\u002Fhelp",[2305,3116,3117],{},"打印并列出所有支持的命令清单",[2288,3119,3120,3125],{},[2305,3121,3122],{},[443,3123,3124],{},"\u002Ftime",[2305,3126,3127],{},"获取并输出当前服务器系统时间",[2288,3129,3130,3134],{},[2305,3131,3132],{},[443,3133,1307],{},[2305,3135,3136],{},"丢弃旧上下文，原地重置开启全新会话",[2288,3138,3139,3144],{},[2305,3140,3141],{},[443,3142,3143],{},"\u002Fclear",[2305,3145,3146],{},"清空当前上下文所有历史对话流",[2288,3148,3149,3154],{},[2305,3150,3151],{},[443,3152,3153],{},"\u002Fstatus",[2305,3155,3156],{},"查看当前 Buzz 消息桥接器的实时在线状态",[2288,3158,3159,3164],{},[2305,3160,3161],{},[443,3162,3163],{},"\u002Fstats",[2305,3165,3166],{},"查看当前系统活跃会话总量及所有接入平台（包含 Buzz）的桥接连接详细状态",[2288,3168,3169,3173],{},[2305,3170,3171],{},[443,3172,1322],{},[2305,3174,3175],{},"输出全量指令的底层规范与参数描述文档",[2288,3177,3178,3183],{},[2305,3179,3180],{},[443,3181,3182],{},"@path\u002Fto\u002Ffile",[2305,3184,3185,3186,3188,3189,3191,3192,3195,3196,3199],{},"与 Web 端的 ",[443,3187,2517],{}," 文件提及功能完全一致：Agent 自动相对于工作区读取文件内容；单独发送 ",[443,3190,2517],{},"、",[443,3193,3194],{},"@前缀"," 或使用 ",[443,3197,3198],{},"\u002Ffiles \u003C前缀>"," 可返回文件\u002F文件夹列表",[2288,3201,3202,3206],{},[2305,3203,3204],{},[443,3205,1332],{},[2305,3207,3208,3211,3212,3214,3215,3218],{},[443,3209,3210],{},"[provider model effort]"," — 校验有效后实时切换该会话的底层推理大模型与思考深度；单独输入 ",[443,3213,1332],{}," 显示支持的候选列表，",[443,3216,3217],{},"\u002Fmodel reset"," 恢复系统默认设置",[2288,3220,3221,3226],{},[2305,3222,3223],{},[443,3224,3225],{},"\u002Feffort",[2305,3227,3228,3231,3232,3235],{},[443,3229,3230],{},"\u003Cid>"," 仅针对支持思考深度的模型调整 reasoning effort；",[443,3233,3234],{},"\u002Feffort reset"," 恢复默认推理深度配置",[572,3237,3238],{"id":3238},"核心安全架构总结",[727,3240,3241,3253,3267],{},[579,3242,3243,3246,3247,3249,3250,3252],{},[438,3244,3245],{},"私钥资产隔离保护","：Agent 专属的私钥 ",[438,3248,2822],{}," 仅保存在宿主机的 ",[443,3251,2179],{}," 中（0600 文件只读权限，原子写入机制） — 永远不会通过 API 端点对外暴露，也不会打印至日常调试日志中。",[579,3254,3255,3258,3259,3262,3263,3266],{},[438,3256,3257],{},"全链路加密签名验签","：每一个入站的 Nostr 事件在投递给 Agent 执行之前，都会严密执行",[438,3260,3261],{},"密码学数字签名检验","（",[443,3264,3265],{},"verifyEvent","）、消息防重放判重、自发自收环路过滤以及 @提及权限校验。",[579,3268,3269,3272,3273,3275,3276,3279],{},[438,3270,3271],{},"本地工作区指令受限保护","：由于网关会话默认开启特权自动批准机制，",[443,3274,2984],{}," 目录注册能力默认处于禁用状态，必须由开发者在配置文件中明确开启（",[443,3277,3278],{},"allowWorkspace: true","），严防非预期提权暴露敏感目录。",[429,3281,3283],{"id":3282},"结语拥抱-buzz-去中心化人机协作时代","结语：拥抱 Buzz 去中心化人机协作时代",[434,3285,3286,3287,3289],{},"在将 Buzz 接入 ",[443,3288,2133],{}," 的探索过程中，最大的技术挑战在于严密契合 Nostr 协议的去中心化事件生命周期与事件约束规范。所幸插件本身优秀的架构底座已经将多 Agent 会话管理与命令分发高度抽象，一旦建立起可靠的事件监听与原位流式编辑链路，整个桥接网关便能呈现出超预期的流畅度与生产级稳定性。",[429,3291,3293],{"id":3292},"参考文献与资料","参考文献与资料：",[727,3295,3296,3304,3312],{},[579,3297,3298,3303],{},[451,3299,3302],{"href":3300,"rel":3301},"https:\u002F\u002Fgithub.com\u002Fa792883583\u002Fdsh-message-gateway\u002Fblob\u002Fmain\u002Fdocs\u002Farchitecture.md",[455],"dsh-message-gateway architecture guide"," — 官方网关架构指南、扩展实践与安全规范",[579,3305,3306,3311],{},[451,3307,3310],{"href":3308,"rel":3309},"https:\u002F\u002Fgithub.com\u002Fnbd-wtf\u002Fnostr-tools",[455],"nostr-tools"," — 底层调用的核心 Nostr JavaScript 客户端库",[579,3313,3314,3319],{},[451,3315,3318],{"href":3316,"rel":3317},"https:\u002F\u002Fgithub.com\u002Fbytedance\u002Fdeer-flow\u002Fblob\u002Fmain\u002Fbackend\u002Fdocs\u002FIM_CHANNEL_CONNECTIONS.md",[455],"deer-flow IM channel connections"," — 即时通讯平台多通道连接架构设计参考",[825,3321,3322],{},"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":3324},[3325,3326,3330,3337,3338],{"id":2159,"depth":479,"text":2160},{"id":2272,"depth":479,"text":2273,"children":3327},[3328,3329],{"id":2570,"depth":494,"text":2571},{"id":2597,"depth":494,"text":2598},{"id":2705,"depth":479,"text":2705,"children":3331},[3332,3333,3335,3336],{"id":2829,"depth":494,"text":2830},{"id":2980,"depth":494,"text":3334},"通过 \u002Fworkspace 指令开启本地工作区联动",{"id":3079,"depth":494,"text":3080},{"id":3238,"depth":494,"text":3238},{"id":3282,"depth":479,"text":3283},{"id":3292,"depth":479,"text":3293},[839,3340,2902,3341],"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\u002FZH-Bringing-Buzz-to-DeepSeek-Harness.webp","一张高颜值的 16:9 科技质感卡片，具有深蓝色与琥珀色调，插图展示如何为 DeepSeek Harness 接入 Block Buzz 协作平台并构建自托管 Nostr 协议网关，中央配有高对比度毛玻璃面板与精致中文排版。",{"schemaOrg":3347,"robots":849,"sitemap":3370},[3348,3350],{"@type":3349,"headline":2115,"description":3343,"image":3344},"TechArticle",{"@type":848,"name":2115,"description":3343,"image":3344,"step":3351},[3352,3355,3358,3361,3364,3367],{"@type":1531,"name":3353,"text":3354},"阶段一：安装与启动消息网关插件","执行 dsh plugin add 命令安装 dsh-message-gateway 并启动 dsh web 服务。",{"@type":1531,"name":3356,"text":3357},"阶段二：访问 Message platforms 配置中心","通过浏览器打开 DSH Web 界面并导航至 Message platforms 菜单。",{"@type":1531,"name":3359,"text":3360},"阶段三：配置 Buzz 桥接参数与生成密钥对","即时生成 Nostr 身份密钥对，准确填入 Relay URL 与订阅频道 UUID 列表。",{"@type":1531,"name":3362,"text":3363},"阶段四：将智能体注册加入 Buzz 中继服务","使用 buzz-admin 命令行工具将 DSH 助手的 npub 公钥加入中继成员。",{"@type":1531,"name":3365,"text":3366},"阶段五：将智能体加入指定的团队频道","使用 buzz-cli 命令行工具将 16 进制 HEX 公钥加入频道成员名单。",{"@type":1531,"name":3368,"text":3369},"阶段六：开启本地工作区绑定权限","在 cordis.patch.yml 中开启 allowWorkspace 配置以允许目录挂载指令。",{"lastmod":3342},{"title":3372,"description":3343,"ogTitle":2115,"ogDescription":3343,"twitterTitle":2115,"twitterDescription":3343},"DeepSeek Harness Buzz 插件开发：构建 Nostr 协议网关与实时流式输出的完整教程","zh\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",[2279,2774,3375,3376,2133],"Nostr","AI智能体","-Uv9S6aUiVlNLLDrGF-a3NbzGbjT5AnW8AjMaIbu1Ao",{"id":3379,"title":3380,"author":424,"body":3381,"category":4230,"date":4231,"description":4232,"extension":842,"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\u002Fzh\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp.md","教程：使用 Cloudflare WARP 安全地将 Hermes Agent 暴露至私有网络",{"type":426,"value":3382,"toc":4212},[3383,3395,3405,3408,3411,3423,3426,3434,3437,3441,3490,3494,3622,3626,3659,3663,3666,3730,3733,3769,3772,3799,3803,3813,3817,3856,3941,3945,3950,3964,3973,4036,4041,4085,4089,4135,4149,4153,4196,4199,4209],[434,3384,3385,3386,3388,3389,2253,3391,3394],{},"当我们希望通过笔记本电脑、平板或手机等其他设备访问 ",[438,3387,1311],{},"，同时又不想将其暴露在公共互联网上时，这往往是一个普遍的挑战。利用 ",[438,3390,2024],{},[438,3392,3393],{},"Cloudflare Zero Trust","，您可以在无需打开任何防火墙入站端口的情况下，将其安全地暴露并在全球范围内进行访问。",[434,3396,3397,3398,3401,3402,3404],{},"如果您之前已经阅读并遵循了我们的指南 '",[451,3399,3400],{"href":375},"如何在 Linux VPS 上部署 Hermes Agent","'，那么您应该已经拥有了一个全天候运行的 Hermes Agent。相比于配置传统 VPN 带来的繁琐步骤，我们将使用 ",[438,3403,2024],{}," 客户端，通过互联网将 Hermes Agent 暴露到私有网络中。",[429,3406,3407],{"id":3407},"架构解析",[434,3409,3410],{},"此方案涉及的两个核心组件：",[576,3412,3413,3418],{},[579,3414,3415,3417],{},[438,3416,3393],{},"：Cloudflare 的云端仪表板，您可以在此定义路由规则和访问策略。",[579,3419,3420,3422],{},[438,3421,2024],{},"：安装在您的设备（VPS、笔记本电脑、手机）上的客户端应用程序。它能够拦截发往私有网络的流量，并安全地进行路由。",[572,3424,3425],{"id":3425},"前置条件",[727,3427,3428,3431],{},[579,3429,3430],{},"一台已经运行 Hermes Agent 的 VPS。",[579,3432,3433],{},"一个免费的 Cloudflare 账号。",[429,3435,3436],{"id":3436},"详细步骤指南",[572,3438,3440],{"id":3439},"第-1-步配置-cloudflare-zero-trust","第 1 步：配置 Cloudflare Zero Trust",[576,3442,3443,3451,3458,3469,3476,3483],{},[579,3444,3445,3446,1609],{},"登录您的 ",[451,3447,3450],{"href":3448,"rel":3449},"https:\u002F\u002Fdash.cloudflare.com\u002F",[455],"Cloudflare 仪表板 (Dashboard)",[579,3452,3453,3454],{},"点击左侧菜单栏中的 'Zero Trust'。\n",[567,3455],{"alt":3456,"src":3457},"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,3459,3460,3461,3464,3465],{},"如果这是您第一次使用，系统会提示您选择套餐（免费版对本教程完全足够）并为您的团队命名（例如，",[443,3462,3463],{},"ai-team","）。\n",[567,3466],{"alt":3467,"src":3468},"首次设置 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,3470,3471,3472],{},"点击 'Access'，然后点击 'Policies' 来创建访问策略，以定义谁有权限访问网络。\n",[567,3473],{"alt":3474,"src":3475},"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,3477,3478,3479],{},"点击 'Create new policy'。\n",[567,3480],{"alt":3481,"src":3482},"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,3484,3485,3486],{},"选择 'Emails' 并在 'Policy rules' 下方输入您的电子邮件地址。\n",[567,3487],{"alt":3488,"src":3489},"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,3491,3493],{"id":3492},"第-2-步在-vps-上配置-cloudflare-warp-客户端","第 2 步：在 VPS 上配置 Cloudflare WARP 客户端",[576,3495,3496,3505,3511,3518,3521,3536,3539,3615],{},[579,3497,3498,3499,1934,3502,1609],{},"在 VPS 终端中运行 ",[443,3500,3501],{},"sudo apt update",[443,3503,3504],{},"sudo apt install cloudflare-warp",[579,3506,3498,3507,3510],{},[443,3508,3509],{},"warp-cli registration new \u003CTEAM-NAME>","，该命令将输出一个 URL。",[579,3512,3513,3514,3517],{},"复制输出的 URL（其格式类似于 ",[443,3515,3516],{},"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fwarp","），并将其粘贴到浏览器中进行认证。",[579,3519,3520],{},"由于前面的策略设置中使用了电子邮件认证，请输入您的电子邮件以进行认证。",[579,3522,3523,3524,3527,3528,3531,3532,3535],{},"当浏览器中显示 '",[438,3525,3526],{},"Success","' 页面后，右键点击蓝色的 '",[438,3529,3530],{},"Open Cloudflare WARP","' 按钮并选择“",[438,3533,3534],{},"检查 (Inspect)","”。",[579,3537,3538],{},"复制该按钮链接中的长 Token 字符串。",[579,3540,3498,3541,3544,3545,3547,3548],{},[443,3542,3543],{},"warp-cli --accept-tos registration token \"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fauth?token=\u003Ccopied_token>\"","，将您的 VPS 连接到 Cloudflare Zero Trust。",[1981,3546],{},"如果在 Ubuntu 26 上遇到 'Error: Failed to communicate with the WARP API'，请运行以下命令：",[461,3549,3551],{"className":890,"code":3550,"language":892,"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,3552,3553,3564,3568,3573,3583,3587,3592],{"__ignoreMap":424},[469,3554,3555,3557,3559,3561],{"class":471,"line":472},[469,3556,921],{"class":475},[469,3558,1042],{"class":490},[469,3560,1045],{"class":490},[469,3562,3563],{"class":490}," warp-svc.service\n",[469,3565,3566],{"class":471,"line":479},[469,3567,514],{"emptyLinePlaceholder":513},[469,3569,3570],{"class":471,"line":494},[469,3571,3572],{"class":2744},"# Check status\n",[469,3574,3575,3577,3579,3581],{"class":471,"line":505},[469,3576,921],{"class":475},[469,3578,1042],{"class":490},[469,3580,1498],{"class":490},[469,3582,3563],{"class":490},[469,3584,3585],{"class":471,"line":510},[469,3586,514],{"emptyLinePlaceholder":513},[469,3588,3589],{"class":471,"line":517},[469,3590,3591],{"class":2744},"# Run the warp-cli registration token again\n",[469,3593,3594,3597,3600,3603,3606,3609,3612],{"class":471,"line":523},[469,3595,3596],{"class":475},"warp-cli",[469,3598,3599],{"class":490}," --accept-tos",[469,3601,3602],{"class":490}," registration",[469,3604,3605],{"class":490}," token",[469,3607,3608],{"class":486},"   \"",[469,3610,3611],{"class":490},"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fauth?token=\u003Ccopied_token>",[469,3613,3614],{"class":486},"\"\n",[579,3616,3617,3618],{},"回到 Cloudflare Zero Trust 仪表板，点击 'Devices'。您现在应该能看到您的 VPS 设备。\n",[567,3619],{"alt":3620,"src":3621},"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,3623,3625],{"id":3624},"第-3-步配置流量路由","第 3 步：配置流量路由",[576,3627,3628,3635,3642,3649],{},[579,3629,3630,3631],{},"在 Devices 仪表板中点击您 VPS 设备的配置文件。\n",[567,3632],{"alt":3633,"src":3634},"访问已注册 VPS 设备的详细信息与拆分隧道设置","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-device-profile.webp",[579,3636,3637,3638],{},"向下滚动至 'Split Tunnels' 部分。\n",[567,3639],{"alt":3640,"src":3641},"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,3643,3644,3645],{},"点击 'Manage' 按钮，并按照下图配置设置。如有需要请替换相应的 IP 地址。\n",[567,3646],{"alt":3647,"src":3648},"在 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,3650,3651,3652,1934,3655,3658],{},"暴露 ",[443,3653,3654],{},"address",[443,3656,3657],{},"host"," 会将发往您服务的流量路由到该私有网络内。",[572,3660,3662],{"id":3661},"第-4-步配置-vps-防火墙","第 4 步：配置 VPS 防火墙",[434,3664,3665],{},"启用防火墙，仅允许 '100.96.0.0\u002F12' 子网的流量通过，并阻止其他所有公共入站访问。",[461,3667,3669],{"className":890,"code":3668,"language":892,"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,3670,3671,3682,3699,3713],{"__ignoreMap":424},[469,3672,3673,3675,3678,3680],{"class":471,"line":472},[469,3674,921],{"class":475},[469,3676,3677],{"class":490}," ufw",[469,3679,1475],{"class":490},[469,3681,967],{"class":966},[469,3683,3684,3686,3688,3691,3694,3697],{"class":471,"line":479},[469,3685,921],{"class":475},[469,3687,3677],{"class":490},[469,3689,3690],{"class":490}," default",[469,3692,3693],{"class":490}," allow",[469,3695,3696],{"class":490}," outgoing",[469,3698,967],{"class":966},[469,3700,3701,3703,3705,3707,3710],{"class":471,"line":494},[469,3702,921],{"class":475},[469,3704,3677],{"class":490},[469,3706,3690],{"class":490},[469,3708,3709],{"class":490}," deny",[469,3711,3712],{"class":490}," incoming\n",[469,3714,3715,3717,3719,3721,3724,3727],{"class":471,"line":505},[469,3716,921],{"class":475},[469,3718,3677],{"class":490},[469,3720,3693],{"class":490},[469,3722,3723],{"class":490}," in",[469,3725,3726],{"class":490}," from",[469,3728,3729],{"class":490}," 100.96.0.0\u002F12\n",[434,3731,3732],{},"允许回环网络 (loopback) 的流量，避免导致本地服务异常：",[461,3734,3736],{"className":890,"code":3735,"language":892,"meta":424,"style":424},"sudo ufw allow in on lo\nsudo ufw allow out on lo\n",[443,3737,3738,3754],{"__ignoreMap":424},[469,3739,3740,3742,3744,3746,3748,3751],{"class":471,"line":472},[469,3741,921],{"class":475},[469,3743,3677],{"class":490},[469,3745,3693],{"class":490},[469,3747,3723],{"class":490},[469,3749,3750],{"class":490}," on",[469,3752,3753],{"class":490}," lo\n",[469,3755,3756,3758,3760,3762,3765,3767],{"class":471,"line":479},[469,3757,921],{"class":475},[469,3759,3677],{"class":490},[469,3761,3693],{"class":490},[469,3763,3764],{"class":490}," out",[469,3766,3750],{"class":490},[469,3768,3753],{"class":490},[434,3770,3771],{},"重载防火墙规则并验证状态：",[461,3773,3775],{"className":890,"code":3774,"language":892,"meta":424,"style":424},"sudo ufw reload \nsudo ufw status verbose\n",[443,3776,3777,3788],{"__ignoreMap":424},[469,3778,3779,3781,3783,3786],{"class":471,"line":472},[469,3780,921],{"class":475},[469,3782,3677],{"class":490},[469,3784,3785],{"class":490}," reload",[469,3787,967],{"class":966},[469,3789,3790,3792,3794,3796],{"class":471,"line":479},[469,3791,921],{"class":475},[469,3793,3677],{"class":490},[469,3795,1498],{"class":490},[469,3797,3798],{"class":490}," verbose\n",[572,3800,3802],{"id":3801},"第-5-步将-hermes-agent-暴露至私有网络","第 5 步：将 Hermes Agent 暴露至私有网络",[434,3804,3805,3806,3809,3810,1609],{},"我们将把 ",[438,3807,3808],{},"Hermes Agent Web Dashboard"," 暴露至私有网络，并使用默认的认证提供商 ",[438,3811,3812],{},"Nous Research",[3814,3815,3816],"h4",{"id":3816},"配置认证提供商",[576,3818,3819,3828,3835,3842,3849],{},[579,3820,3821,3822,3827],{},"前往 ",[451,3823,3826],{"href":3824,"rel":3825},"https:\u002F\u002Fportal.nousresearch.com",[455],"portal.nousresearch.com"," 注册一个账号。",[579,3829,3830,3831],{},"选择 'Local Dashboards'。\n",[567,3832],{"alt":3833,"src":3834},"在 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,3836,3837,3838],{},"点击 'Register Dashboard'。\n",[567,3839],{"alt":3840,"src":3841},"点击 Register Dashboard 按钮以创建新的仪表板项目","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fnous-portal-register-dashboard.webp",[579,3843,3844,3845],{},"将 VPS 在私有网络中的 IP 地址填入 'Dashboard redirect URI' 并点击 'Save'。\n",[567,3846],{"alt":3847,"src":3848},"在 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,3850,3851,3852,3855],{},"复制 'OAuth client ID' 并将其粘贴到您的 ",[443,3853,3854],{},"config.yaml"," 文件中：",[461,3857,3859],{"className":463,"code":3858,"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,3860,3861,3868,3878,3888,3895,3905,3915,3922,3932],{"__ignoreMap":424},[469,3862,3863,3866],{"class":471,"line":472},[469,3864,3865],{"class":482},"dashboard",[469,3867,3043],{"class":486},[469,3869,3870,3873,3875],{"class":471,"line":479},[469,3871,3872],{"class":482},"  theme",[469,3874,487],{"class":486},[469,3876,3877],{"class":490}," default\n",[469,3879,3880,3883,3885],{"class":471,"line":494},[469,3881,3882],{"class":482},"  show_token_analytics",[469,3884,487],{"class":486},[469,3886,3887],{"class":3053}," false\n",[469,3889,3890,3893],{"class":471,"line":505},[469,3891,3892],{"class":482},"  oauth",[469,3894,3043],{"class":486},[469,3896,3897,3900,3902],{"class":471,"line":510},[469,3898,3899],{"class":482},"    client_id",[469,3901,487],{"class":486},[469,3903,3904],{"class":490}," agent:cmq02x7ha0002jk0ba3kfnb\n",[469,3906,3907,3910,3912],{"class":471,"line":517},[469,3908,3909],{"class":482},"    portal_url",[469,3911,487],{"class":486},[469,3913,3914],{"class":490}," https:\u002F\u002Fportal.nousresearch.com\n",[469,3916,3917,3920],{"class":471,"line":523},[469,3918,3919],{"class":482},"  basic_auth",[469,3921,3043],{"class":486},[469,3923,3924,3927,3929],{"class":471,"line":528},[469,3925,3926],{"class":482},"    username",[469,3928,487],{"class":486},[469,3930,3931],{"class":486}," ''\n",[469,3933,3934,3937,3939],{"class":471,"line":534},[469,3935,3936],{"class":482},"    password_hash",[469,3938,487],{"class":486},[469,3940,3931],{"class":486},[3814,3942,3944],{"id":3943},"使用-systemd-确保-hermes-dashboard-开机自启","使用 Systemd 确保 Hermes Dashboard 开机自启",[576,3946,3947],{},[579,3948,3949],{},"创建服务文件：",[461,3951,3953],{"className":1347,"code":3952,"language":1349,"meta":424,"style":424},"sudo nano \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-dashboard.service\n",[443,3954,3955],{"__ignoreMap":424},[469,3956,3957,3959,3961],{"class":471,"line":472},[469,3958,921],{"class":475},[469,3960,1001],{"class":490},[469,3962,3963],{"class":490}," \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-dashboard.service\n",[576,3965,3966],{"start":479},[579,3967,3968,3969,3972],{},"粘贴以下配置，确保 ",[443,3970,3971],{},"--host 0.0.0.0"," 包含在命令中：",[461,3974,3976],{"className":1373,"code":3975,"language":1375,"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,3977,3978,3982,3987,3991,3995,3999,4003,4007,4012,4016,4020,4024,4028,4032],{"__ignoreMap":424},[469,3979,3980],{"class":471,"line":472},[469,3981,1382],{},[469,3983,3984],{"class":471,"line":479},[469,3985,3986],{},"Description=Hermes Dashboard\n",[469,3988,3989],{"class":471,"line":494},[469,3990,1392],{},[469,3992,3993],{"class":471,"line":505},[469,3994,514],{"emptyLinePlaceholder":513},[469,3996,3997],{"class":471,"line":510},[469,3998,1401],{},[469,4000,4001],{"class":471,"line":517},[469,4002,1406],{},[469,4004,4005],{"class":471,"line":523},[469,4006,1411],{},[469,4008,4009],{"class":471,"line":528},[469,4010,4011],{},"ExecStart=\u002Fhome\u002Fhermes\u002F.local\u002Fbin\u002Fhermes dashboard --host 0.0.0.0\n",[469,4013,4014],{"class":471,"line":534},[469,4015,1421],{},[469,4017,4018],{"class":471,"line":539},[469,4019,1426],{},[469,4021,4022],{"class":471,"line":1429},[469,4023,1432],{},[469,4025,4026],{"class":471,"line":1435},[469,4027,514],{"emptyLinePlaceholder":513},[469,4029,4030],{"class":471,"line":1440},[469,4031,1443],{},[469,4033,4034],{"class":471,"line":1446},[469,4035,1449],{},[576,4037,4038],{"start":494},[579,4039,4040],{},"启用并启动服务：",[461,4042,4044],{"className":1347,"code":4043,"language":1349,"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,4045,4046,4054,4065,4075],{"__ignoreMap":424},[469,4047,4048,4050,4052],{"class":471,"line":472},[469,4049,921],{"class":475},[469,4051,1042],{"class":490},[469,4053,1466],{"class":490},[469,4055,4056,4058,4060,4062],{"class":471,"line":479},[469,4057,921],{"class":475},[469,4059,1042],{"class":490},[469,4061,1475],{"class":490},[469,4063,4064],{"class":490}," hermes-dashboard\n",[469,4066,4067,4069,4071,4073],{"class":471,"line":494},[469,4068,921],{"class":475},[469,4070,1042],{"class":490},[469,4072,1487],{"class":490},[469,4074,4064],{"class":490},[469,4076,4077,4079,4081,4083],{"class":471,"line":505},[469,4078,921],{"class":475},[469,4080,1042],{"class":490},[469,4082,1498],{"class":490},[469,4084,4064],{"class":490},[572,4086,4088],{"id":4087},"第-6-步在桌面上安装-cloudflare-warp-客户端","第 6 步：在桌面上安装 Cloudflare WARP 客户端",[576,4090,4091,4100,4103,4110,4117,4124],{},[579,4092,4093,4094,4099],{},"从 ",[451,4095,4098],{"href":4096,"rel":4097},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fwarp-client\u002Fget-started\u002F",[455],"Cloudflare 官网"," 下载 Cloudflare WARP 客户端。",[579,4101,4102],{},"安装完成后打开并运行 Cloudflare WARP 客户端。",[579,4104,4105,4106],{},"按提示登录。\n",[567,4107],{"alt":4108,"src":4109},"台式电脑上的 Cloudflare WARP 客户端登录提示","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-warp-desktop-login-prompt.webp",[579,4111,4112,4113],{},"登录成功后会显示 'Success' 页面。\n",[567,4114],{"alt":4115,"src":4116},"在台式电脑登录 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,4118,4119,4120],{},"此时 WARP 客户端应显示已连接至您的 Zero Trust 团队。\n",[567,4121],{"alt":4122,"src":4123},"桌面版 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,4125,4126,4127,4130,4131],{},"在浏览器中输入您的私有 IP 地址（例如 ",[443,4128,4129],{},"100.96.0.3","），即可成功加载 Hermes Web Dashboard。\n",[567,4132],{"alt":4133,"src":4134},"在桌面浏览器中访问私有 Hermes Agent 网页仪表板","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fhermes-agent-dashboard-desktop-view.webp",[4136,4137,4138],"blockquote",{},[434,4139,4140,4143,4144,4148],{},[438,4141,4142],{},"macOS 用户进阶提示："," 如果您需要使用 WARP 客户端访问多个 Cloudflare 账号，请参阅我们的快速指南 ",[438,4145,4146],{},[451,4147,1552],{"href":399},"，实现账号间的无缝切换。",[572,4150,4152],{"id":4151},"第-7-步在-ios-设备上安装-cloudflare-warp-客户端","第 7 步：在 iOS 设备上安装 Cloudflare WARP 客户端",[576,4154,4155,4161,4169,4177,4185],{},[579,4156,4157,4158,1609],{},"在 App Store 中安装 ",[438,4159,4160],{},"Cloudflare One",[579,4162,4163,4164],{},"打开 Cloudflare One 应用并在提示时输入您的团队名称。\n",[567,4165],{"alt":4166,"src":4167,"width":4168},"在 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,4170,4171,4172],{},"使用前面在策略规则中配置的同一个电子邮箱地址进行登录。\n",[567,4173],{"alt":4174,"src":4175,"width":4176},"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,4178,4179,4180],{},"连接成功后，界面应如下所示：\n",[567,4181],{"alt":4182,"src":4183,"width":4184},"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,4186,4187,4188,4190,4191],{},"在手机浏览器中输入私有 IP ",[443,4189,4129],{}," 即可在移动设备上访问 Hermes Web Dashboard。\n",[567,4192],{"alt":4193,"src":4194,"width":4195},"在手机浏览器上访问 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,4197,4198],{"id":4198},"结语",[434,4200,4201,4202,4204,4205,4208],{},"借助 ",[438,4203,3393],{}," 管理身份策略以及 ",[438,4206,4207],{},"WARP"," 客户端通过加密隧道路由流量，您的 Hermes Agent 现在可以被您的设备在全球范围内安全访问。该配置为构建并访问完全远程、私有的 AI 基础设施奠定了坚实而安全的根基。",[825,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":3407,"depth":479,"text":3407,"children":4215},[4216],{"id":3425,"depth":494,"text":3425},{"id":3436,"depth":479,"text":3436,"children":4218},[4219,4220,4221,4222,4223,4227,4228],{"id":3439,"depth":494,"text":3440},{"id":3492,"depth":494,"text":3493},{"id":3624,"depth":494,"text":3625},{"id":3661,"depth":494,"text":3662},{"id":3801,"depth":494,"text":3802,"children":4224},[4225,4226],{"id":3816,"depth":505,"text":3816},{"id":3943,"depth":505,"text":3944},{"id":4087,"depth":494,"text":4088},{"id":4151,"depth":494,"text":4152},{"id":4198,"depth":479,"text":4198},[839,2095],"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\u002FZH-Exposing-Hermes-Agent-to-Private-Network-Using-Cloudflare-WARP.webp","通过 Cloudflare Zero Trust 和 WARP 隧道安全地将 Hermes Agent 暴露至私有网络",{"schemaOrg":4236,"robots":849,"sitemap":4238},[4237],{"@type":848,"headline":3380,"description":4232,"name":3380,"image":4233},{"lastmod":4239},"2026-09-28",{"title":4241,"description":4232,"ogTitle":3380,"ogDescription":4232,"twitterTitle":3380,"twitterDescription":4232},"通过 Cloudflare Zero Trust 实现对 Hermes Agent 的安全访问","zh\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",[2024,2110,1311,4244,4245],"私有网络","教程","ishCX4pAaZiNmcl6lotlFfav2RLbIjIFUuYwHpzosd4",{"id":4248,"title":2139,"author":424,"body":4249,"category":6390,"date":6391,"description":2149,"extension":842,"image":2150,"imageAlt":2151,"isPublished":513,"meta":6392,"minRead":1429,"navigation":513,"path":383,"seo":6414,"stem":6416,"tags":6417,"updatedAt":858,"__hash__":6421},"article\u002Fzh\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 复制并粘贴 to 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,2774],{}," 是一款开源的协同工作空间，它将人类团队和 AI 智能体凝聚在一个统一的环境中。在这里，人类同事与 AI 智能体能够共享相同的任务和项目历史，并实现天衣无缝的工作交接。",[429,4266,4268],{"id":4267},"什么是-block-旗下的-buzz人机协同的-ai-智能体共享空间","什么是 Block 旗下的 Buzz？人机协同的 AI 智能体共享空间",[434,4270,4271],{},"Buzz 是 Block 公司（由推特创始人杰克·多西创立）推出的开源协作工作空间，它让团队成员和 AI 智能体能够在相同的频道与项目中并肩工作。它具有以下几个核心亮点：",[727,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",[727,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-prerequisites","0. Prerequisites",[727,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,3380],{"href":363}," 保护其安全。整个基础技术栈包含 Docker Compose 中的四个服务：中继器（relay）、PostgreSQL、Redis 和 MinIO，并使用 Caddy 来提供 HTTPS 支持。",[2147,4387],{"description":4388,"image":4233,"image-alt":4389,"label":4390,"min-read":4391,"title":3380,"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 令牌",[3814,4397,4399],{"id":4398},"创建-cloudflare-api-令牌token","创建 Cloudflare API 令牌（Token）",[576,4401,4402,4408],{},[579,4403,4404,4405,1609],{},"点击右上角的个人头像，并在下拉菜单中选择 ",[438,4406,4407],{},"Profile",[579,4409,1180,4410,1609],{},[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,1180,4423,4426],{},[438,4424,4425],{},"Create Token"," 按钮。",[579,4428,4429,4430,1609],{},"选择使用模板 ",[438,4431,4432],{},"Edit zone DNS",[579,4434,4435,4436],{},"配置模版如下：\n",[727,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,1180,4455,1609],{},[438,4456,4457],{},"Continue to summary",[579,4459,1180,4460,1609],{},[438,4461,4425],{},[579,4463,4464],{},"拷贝生成的 API 令牌，因为页面关闭后它将不再显示。",[579,4466,4467],{},"在终端中验证生成的令牌，确保其能正常工作：",[461,4469,4471],{"className":890,"code":4470,"language":892,"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,1065],{"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,3614],{"class":486},[3814,4497,4499],{"id":4498},"dns-解析记录","DNS 解析记录",[727,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":890,"code":4524,"language":892,"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":2744},"# 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,1065],{"class":475},[469,4537,1068],{"class":490},[469,4539,4540],{"class":490}," https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg",[469,4542,1074],{"class":486},[469,4544,933],{"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":2744},"# 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":2644},"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,1074],{"class":486},[469,4596,933],{"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":2744},"# Update package list\n",[469,4619,4620,4622,4624],{"class":471,"line":528},[469,4621,921],{"class":475},[469,4623,924],{"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":2744},"# Install Docker Engine, Docker Community Edition, and containerd runtime\n",[469,4637,4638,4640,4642,4645,4648,4651,4654],{"class":471,"line":1429},[469,4639,921],{"class":475},[469,4641,924],{"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,941],{"class":490},[469,4657,4658],{"class":471,"line":1435},[469,4659,514],{"emptyLinePlaceholder":513},[469,4661,4662],{"class":471,"line":1440},[469,4663,4664],{"class":2744},"# Start automatically when the system boots\n",[469,4666,4667,4669,4671,4673],{"class":471,"line":1446},[469,4668,921],{"class":475},[469,4670,1042],{"class":490},[469,4672,1475],{"class":490},[469,4674,4675],{"class":490}," docker\n",[469,4677,4678],{"class":471,"line":1692},[469,4679,514],{"emptyLinePlaceholder":513},[469,4681,4682],{"class":471,"line":1698},[469,4683,4684],{"class":2744},"# Verify docker is installed\n",[469,4686,4687,4689],{"class":471,"line":1704},[469,4688,2849],{"class":475},[469,4690,1098],{"class":490},[469,4692,4693],{"class":471,"line":1710},[469,4694,514],{"emptyLinePlaceholder":513},[469,4696,4697,4699,4701,4703,4706],{"class":471,"line":1716},[469,4698,921],{"class":475},[469,4700,924],{"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":1722},[469,4712,514],{"emptyLinePlaceholder":513},[469,4714,4715],{"class":471,"line":1728},[469,4716,4717],{"class":2744},"# Verify the compose plugin is installed\n",[469,4719,4720,4722,4724],{"class":471,"line":1734},[469,4721,2849],{"class":475},[469,4723,2852],{"class":490},[469,4725,4726],{"class":490}," version\n",[572,4728,4730],{"id":4729},"_3-克隆仓库并进行配置","3. 克隆仓库并进行配置",[461,4732,4734],{"className":890,"code":4733,"language":892,"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":2644},"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"," 文件：",[727,4785,4786],{},[579,4787,4788],{},[438,4789,4790],{},"域名配置:",[461,4792,4795],{"className":4793,"code":4794,"language":1023},[1021],"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},[727,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）:",[727,4815,4816,4828,4842],{},[579,4817,4818,4819,4823,4824,4827],{},"使用该 ",[451,4820,4822],{"href":4821},"\u002Fzh\u002Ftools\u002Fsecret-key-hex","在线工具"," 或运行命令 ",[443,4825,4826],{},"openssl rand -hex 32","（运行 7 次）来生成高强度的随机密钥。",[579,4829,4830,4831,4834,4835,3191,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":1023},[1021],"    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},[727,4856,4857],{},[579,4858,4859,4862],{},[438,4860,4861],{},"其他配置项:",[727,4863,4864,4871],{},[579,4865,4866,4867,4870],{},"将环境变量 ",[443,4868,4869],{},"CLOUDFLARE_API_TOKEN"," 添加到您的配置中，并赋予先前生成的 API 令牌值。Caddy 将用其自动申请证书。",[579,4872,4873,4874,4876,4877,1934,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 访问",[3814,4889,4891],{"id":4890},"构建集成-cloudflare-dns-模块的自定义-caddy-镜像","构建集成 Cloudflare DNS 模块的自定义 Caddy 镜像",[727,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":3018,"code":4913,"language":3020,"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},[727,4940,4941],{},[579,4942,4943,4944,4947,4948,4951],{},"创建一个 ",[443,4945,4946],{},"Dockerfile.caddy","，其内容如下，这是 ",[443,4949,4950],{},"compose.caddy.yml"," 运行所必需的：",[461,4953,4955],{"className":3018,"code":4954,"language":3020,"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",[727,4995,4996],{},[579,4997,4998,4999,5001],{},"修改 ",[443,5000,4950],{},"，以使用我们刚生成的带有 Cloudflare 插件的 Caddy 镜像，并传入 API 令牌参数：",[461,5003,5005],{"className":3018,"code":5004,"language":3020,"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,3043],{"class":486},[469,5015,5016,5019],{"class":471,"line":479},[469,5017,5018],{"class":482},"  relay",[469,5020,3043],{"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":2620}," !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,3043],{"class":486},[469,5046,5047,5050],{"class":471,"line":517},[469,5048,5049],{"class":482},"    build",[469,5051,3043],{"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,3043],{"class":486},[469,5091,5092,5095],{"class":471,"line":1429},[469,5093,5094],{"class":482},"      relay",[469,5096,3043],{"class":486},[469,5098,5099,5102,5104],{"class":471,"line":1435},[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":1440},[469,5110,5111],{"class":482},"    environment",[469,5113,3043],{"class":486},[469,5115,5116,5119,5121],{"class":471,"line":1446},[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":1692},[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":1698},[469,5137,5025],{"class":482},[469,5139,3043],{"class":486},[469,5141,5142,5145,5147,5150],{"class":471,"line":1704},[469,5143,5144],{"class":486},"      -",[469,5146,4479],{"class":486},[469,5148,5149],{"class":490},"${CADDY_HTTP_PORT:-80}:80",[469,5151,3614],{"class":486},[469,5153,5154,5156,5158,5161],{"class":471,"line":1710},[469,5155,5144],{"class":486},[469,5157,4479],{"class":486},[469,5159,5160],{"class":490},"${CADDY_HTTPS_PORT:-443}:443",[469,5162,3614],{"class":486},[469,5164,5165,5168],{"class":471,"line":1716},[469,5166,5167],{"class":482},"    volumes",[469,5169,3043],{"class":486},[469,5171,5172,5174],{"class":471,"line":1722},[469,5173,5144],{"class":486},[469,5175,5176],{"class":490}," .\u002FCaddyfile:\u002Fetc\u002Fcaddy\u002FCaddyfile:ro\n",[469,5178,5179,5181],{"class":471,"line":1728},[469,5180,5144],{"class":486},[469,5182,5183],{"class":490}," buzz-caddy-data:\u002Fdata\n",[469,5185,5186,5188],{"class":471,"line":1734},[469,5187,5144],{"class":486},[469,5189,5190],{"class":490}," buzz-caddy-config:\u002Fconfig\n",[469,5192,5193,5196,5198],{"class":471,"line":1740},[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":1746},[469,5204,5205],{"class":482},"    networks",[469,5207,3043],{"class":486},[469,5209,5210,5212],{"class":471,"line":1752},[469,5211,5144],{"class":486},[469,5213,5214],{"class":490}," buzz-net\n",[469,5216,5217],{"class":471,"line":1758},[469,5218,514],{"emptyLinePlaceholder":513},[469,5220,5221,5224],{"class":471,"line":1764},[469,5222,5223],{"class":482},"volumes",[469,5225,3043],{"class":486},[469,5227,5228,5231],{"class":471,"line":1770},[469,5229,5230],{"class":482},"  buzz-caddy-data",[469,5232,3043],{"class":486},[469,5234,5235,5238],{"class":471,"line":1775},[469,5236,5237],{"class":482},"    labels",[469,5239,3043],{"class":486},[469,5241,5242,5245,5247],{"class":471,"line":1780},[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":1786},[469,5253,5254],{"class":482},"  buzz-caddy-config",[469,5256,3043],{"class":486},[469,5258,5259,5261],{"class":471,"line":1791},[469,5260,5237],{"class":482},[469,5262,3043],{"class":486},[469,5264,5265,5267,5269],{"class":471,"line":1797},[469,5266,5244],{"class":482},[469,5268,487],{"class":486},[469,5270,5271],{"class":490}," caddy-config\n",[3814,5273,5275],{"id":5274},"启动-docker-容器组合","启动 Docker 容器组合",[461,5277,5279],{"className":890,"code":5278,"language":892,"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,2849],{"class":475},[469,5286,2852],{"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":2744},"#Check the Docker status\n",[469,5314,5315,5317,5319],{"class":471,"line":505},[469,5316,2849],{"class":475},[469,5318,2852],{"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":890,"code":5345,"language":892,"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":1023},[1021],"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,4093,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,1230,5410,5413],{},[438,5411,5412],{},"VPS 上","运行以下命令行工具，将您自己添加为该平台的首位会员：",[461,5415,5417],{"className":890,"code":5416,"language":892,"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,2849],{"class":475},[469,5424,2852],{"class":490},[469,5426,2855],{"class":490},[469,5428,2858],{"class":490},[469,5430,2861],{"class":490},[469,5432,2864],{"class":490},[469,5434,2867],{"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":1023},[1021],"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,2879],{}," 命令行工具来创建（虽然在后续版本中会加入 UI 直接创建的支持）。",[3814,5565,5567],{"id":5566},"在-vps-上安装并部署-buzz-cli","在 VPS 上安装并部署 buzz-cli",[434,5569,1230,5570,5572,5573,5575],{},[438,5571,5412],{},"依次执行以下命令，编译并安装好 ",[443,5574,2879],{}," 客户端：",[461,5577,5579],{"className":890,"code":5578,"language":892,"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,921],{"class":475},[469,5586,924],{"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":2644},[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":2644},[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,930],{"class":486},[469,5634,5635],{"class":2644}," source",[469,5637,5638],{"class":490}," ~\u002F.bashrc\n",[434,5640,5641,5642,5644,5645,5647],{},"使用在线工具或通过 ",[443,5643,2879],{}," 生成一对 Nostr 加密公私钥。这组密钥将代表该 ",[443,5646,2879],{}," 工具在 Nostr 网络中的数字身份。",[461,5649,5651],{"className":890,"code":5650,"language":892,"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,2849],{"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":2744},"# Use the generated Public Key\n",[469,5685,5686,5688,5690,5692,5694,5696,5698,5700],{"class":471,"line":505},[469,5687,2849],{"class":475},[469,5689,2852],{"class":490},[469,5691,2855],{"class":490},[469,5693,2858],{"class":490},[469,5695,2861],{"class":490},[469,5697,2864],{"class":490},[469,5699,2867],{"class":490},[469,5701,5702],{"class":490}," generated_Public_key\n",[434,5704,5705],{},"配置您的 CLI 环境变量：",[461,5707,5709],{"className":890,"code":5708,"language":892,"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":2744},"# 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":2644},[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":966},"r",[469,5743,2922],{"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":2644},[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":966},[469,5773,2922],{"class":486},[469,5775,5746],{"class":490},[434,5777,5778,5779,5781],{},"运行以下命令来测试 ",[443,5780,2879],{}," 是否已经与您的中继器配对畅通：",[461,5783,5785],{"className":890,"code":5784,"language":892,"meta":424,"style":424},"buzz channels list\n",[443,5786,5787],{"__ignoreMap":424},[469,5788,5789,5791,5793],{"class":471,"line":472},[469,5790,2902],{"class":475},[469,5792,2905],{"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",[3814,5803,5805],{"id":5804},"使用-buzz-cli-创建全新的项目","使用 buzz-cli 创建全新的项目",[461,5807,5809],{"className":890,"code":5808,"language":892,"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":2744},"# --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,2902],{"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,2910],{"class":490},[469,5845,4479],{"class":486},[469,5847,5848],{"class":490},"bd92b3d1-8fac-441c-a9ac-2b2f3aac5c5b",[469,5850,3614],{"class":486},[434,5852,5853,5854,5856],{},"项目的所有权极为严格，只有创建者才有权将其删除。由于该“Display Name”项目是由 ",[443,5855,2879],{}," 发起创建的，而目前的命令行版本尚未内置删除指令，因此该项目无法通过常规方式清空。",[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",[3814,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":890,"code":5898,"language":892,"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":890,"code":5920,"language":892,"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":2744},"# 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,3054],{"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":2744},"# 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":2644},[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,930],{"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":1023},[1021],"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":890,"code":6037,"language":892,"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,2902],{"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,2910],{"class":490},[469,6057,2913],{"class":486},[469,6059,2916],{"class":490},[469,6061,2919],{"class":966},[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":2744},"# 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":890,"code":6108,"language":892,"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":890,"code":6144,"language":892,"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":2644},[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":3018,"code":6176,"language":3020,"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,3043],{"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,3043],{"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,3043],{"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,3614],{"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,3043],{"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":1023},[1021],"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,4198],{"id":4198},[434,6322,6323],{},"不可否认，作为一个还处于发展初期的技术方案，Buzz 在面对大规模生产环境时依然稍显稚嫩，伴随着一些偶发的系统 Bug 与界面交互上的限制。但对于小型团队或单兵作战的独立开发者而言，这无疑是一场令人血脉偾张的前沿探索。它为我们揭开了一幅波澜壮阔的人机无缝协奏画卷，让我们提前触碰到了“AI 智能体成为工作伙伴”的未来工作模式。",[429,6325,6326],{"id":6326},"参考资源",[727,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)",[825,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":4198,"depth":479,"text":4198},{"id":6326,"depth":479,"text":6326},[3340,839,2902],"2026-09-08",{"schemaOrg":6393,"robots":849,"sitemap":6412},[6394,6395],{"@type":3349,"headline":2139,"description":2149,"image":2150},{"@type":848,"name":2139,"description":2149,"image":2150,"step":6396},[6397,6400,6403,6406,6409],{"@type":1531,"name":6398,"text":6399},"阶段 1：Cloudflare 设置","创建 Cloudflare API 令牌并配置 DNS 解析设置。",{"@type":1531,"name":6401,"text":6402},"阶段 2：安装 Docker","在 Ubuntu VPS 上设置并安装 Docker 容器引擎。",{"@type":1531,"name":6404,"text":6405},"阶段 3：克隆与配置","克隆仓库代码并配置 docker-compose 环境变量。",{"@type":1531,"name":6407,"text":6408},"阶段 4：集成 Caddy","编译带有 Cloudflare DNS 挑战模块的的自定义 Caddy 镜像。",{"@type":1531,"name":6410,"text":6411},"阶段 5：自动备份","配置 cron 定时任务以实现 PostgreSQL 数据库的自动备份。",{"lastmod":6413},"2026-09-03",{"title":6415,"description":2149,"ogTitle":2139,"ogDescription":2149,"twitterTitle":2139,"twitterDescription":2149},"如何在 Ubuntu VPS 上自建 Block 旗下的 Buzz 协作中继服务器","zh\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",[3375,6418,2774,6419,6420],"Docker","Caddy","Cloudflare","Plt5qPXpCpnSq9t6cSV6VM3z9k3i2BkoxxI46S98hdM",1792490001725]