[{"data":1,"prerenderedAt":4753},["ShallowReactive",2],{"published-article-paths":3,"search-navigation":348,"\u002Fzh\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server":421,"\u002Fzh\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server-surround":1143},[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":1109,"date":1111,"description":1112,"extension":1113,"image":1114,"imageAlt":1115,"isPublished":976,"meta":1116,"minRead":973,"navigation":976,"path":327,"seo":1133,"stem":1135,"tags":1136,"updatedAt":1141,"__hash__":1142},"article\u002Fzh\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server.md","如何在 Linux VPS 远程服务器上从零开始安装、部署与配置 Hermes Agent","",{"type":426,"value":427,"toc":1098},"minimark",[428,433,437,440,444,449,452,474,481,484,515,522,552,559,566,581,594,602,608,626,630,633,655,661,664,676,687,698,730,734,745,755,766,780,787,797,803,834,850,854,861,873,878,916,920,923,939,949,1037,1040,1088,1091,1094],[429,430,432],"h2",{"id":431},"为什么在远程-vps-上托管-hermes-agent","为什么在远程 VPS 上托管 Hermes Agent？",[434,435,436],"p",{},"由于 Hermes Agent 能够执行后台任务、调度作业以及响应 webhook 调用，我们需要一台机器保持 24\u002F7 全天候待命。本地设备可能会断电、断网，或者面临硬件资源耗尽的风险。而远程服务器（VPS）则能保证 99% 以上的在线率（Uptime），并在需要时轻松对计算资源进行弹性扩容。",[434,438,439],{},"目前市面上有好几家性价比极高的虚拟专用服务器（VPS）提供商，比如 Hetzner、Hostinger 和 Contabo。我们已经使用 Contabo 有一段时间了，到目前为止，它的表现非常稳定和出色。",[429,441,443],{"id":442},"如何在-linux-vps-上配置-hermes-agent","如何在 Linux VPS 上配置 Hermes Agent",[445,446,448],"h3",{"id":447},"第一步连接到您的-vps","第一步：连接到您的 VPS",[434,450,451],{},"打开终端并使用 SSH 登录您的远程服务器：",[453,454,458],"pre",{"className":455,"code":456,"language":457,"meta":424,"style":424},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","ssh root@your_server_ip\n","bash",[459,460,461],"code",{"__ignoreMap":424},[462,463,466,470],"span",{"class":464,"line":465},"line",1,[462,467,469],{"class":468},"sBMFI","ssh",[462,471,473],{"class":472},"sfazB"," root@your_server_ip\n",[434,475,476],{},[477,478],"img",{"alt":479,"src":480},"在终端中通过 SSH 连接到 Linux VPS 服务器","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fvps-terminal-ssh-connection.webp",[434,482,483],{},"确保服务器的软件包都是最新的：",[453,485,487],{"className":455,"code":486,"language":457,"meta":424,"style":424},"sudo apt update && sudo apt upgrade -y\n",[459,488,489],{"__ignoreMap":424},[462,490,491,494,497,500,504,507,509,512],{"class":464,"line":465},[462,492,493],{"class":468},"sudo",[462,495,496],{"class":472}," apt",[462,498,499],{"class":472}," update",[462,501,503],{"class":502},"sMK4o"," &&",[462,505,506],{"class":468}," sudo",[462,508,496],{"class":472},[462,510,511],{"class":472}," upgrade",[462,513,514],{"class":472}," -y\n",[434,516,517,518,521],{},"添加一个新用户 ",[459,519,520],{},"hermes","，或者您自定义的其他用户名：",[453,523,525],{"className":455,"code":524,"language":457,"meta":424,"style":424},"sudo adduser hermes \nsudo passwd hermes\n",[459,526,527,541],{"__ignoreMap":424},[462,528,529,531,534,537],{"class":464,"line":465},[462,530,493],{"class":468},[462,532,533],{"class":472}," adduser",[462,535,536],{"class":472}," hermes",[462,538,540],{"class":539},"sTEyZ"," \n",[462,542,544,546,549],{"class":464,"line":543},2,[462,545,493],{"class":468},[462,547,548],{"class":472}," passwd",[462,550,551],{"class":472}," hermes\n",[434,553,554,555,558],{},"关闭 ",[459,556,557],{},"root"," 用户的密码登录以增强安全性：",[560,561,562],"ol",{},[563,564,565],"li",{},"打开 SSH 配置文件：",[453,567,569],{"className":455,"code":568,"language":457,"meta":424,"style":424},"sudo nano \u002Fetc\u002Fssh\u002Fsshd_config\n",[459,570,571],{"__ignoreMap":424},[462,572,573,575,578],{"class":464,"line":465},[462,574,493],{"class":468},[462,576,577],{"class":472}," nano",[462,579,580],{"class":472}," \u002Fetc\u002Fssh\u002Fsshd_config\n",[560,582,583],{"start":543},[563,584,585,586,589,590,593],{},"找到 ",[459,587,588],{},"PermitRootLogin"," 这一行，将其值修改为 ",[459,591,592],{},"no","：",[453,595,600],{"className":596,"code":598,"language":599,"meta":424},[597],"language-text","PermitRootLogin no\n","text",[459,601,598],{"__ignoreMap":424},[560,603,605],{"start":604},3,[563,606,607],{},"保存文件并重启 SSH 服务：",[453,609,611],{"className":455,"code":610,"language":457,"meta":424,"style":424},"sudo systemctl restart ssh\n",[459,612,613],{"__ignoreMap":424},[462,614,615,617,620,623],{"class":464,"line":465},[462,616,493],{"class":468},[462,618,619],{"class":472}," systemctl",[462,621,622],{"class":472}," restart",[462,624,625],{"class":472}," ssh\n",[445,627,629],{"id":628},"第二步安装-hermes-agent","第二步：安装 Hermes Agent",[434,631,632],{},"运行以下命令：",[453,634,636],{"className":455,"code":635,"language":457,"meta":424,"style":424},"curl -fsSL https:\u002F\u002Fhermes-agent.nousresearch.com\u002Finstall.sh | bash\n",[459,637,638],{"__ignoreMap":424},[462,639,640,643,646,649,652],{"class":464,"line":465},[462,641,642],{"class":468},"curl",[462,644,645],{"class":472}," -fsSL",[462,647,648],{"class":472}," https:\u002F\u002Fhermes-agent.nousresearch.com\u002Finstall.sh",[462,650,651],{"class":502}," |",[462,653,654],{"class":468}," bash\n",[434,656,657],{},[477,658],{"alt":659,"src":660},"在终端中运行 Hermes Agent 的一键安装脚本","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-agent-installation-terminal.webp",[434,662,663],{},"安装完成后，输入以下命令验证是否安装成功：",[453,665,667],{"className":455,"code":666,"language":457,"meta":424,"style":424},"hermes --version\n",[459,668,669],{"__ignoreMap":424},[462,670,671,673],{"class":464,"line":465},[462,672,520],{"class":468},[462,674,675],{"class":472}," --version\n",[434,677,678,679,682,683],{},"运行 ",[459,680,681],{},"hermes setup"," 命令行工具来配置 Hermes Agent：\n",[477,684],{"alt":685,"src":686},"在终端中运行 hermes setup 命令开始向导配置","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-agent-setup-wizard.webp",[434,688,689,690,693,694],{},"选择大语言模型（LLM）提供商，我们可以先选择 ",[459,691,692],{},"DeepSeek","，后续再根据需要添加其他模型。\n",[477,695],{"alt":696,"src":697},"在 Hermes 设置中选择 DeepSeek 作为 LLM 大模型提供商","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-llm-provider-selection.webp",[434,699,700,701,703,704,708,712,713,716,717,721,722,725,726],{},"输入您的 ",[459,702,692],{}," API 密钥：\n",[477,705],{"alt":706,"src":707},"在终端命令行中输入 DeepSeek API 密钥","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-enter-api-key.webp",[477,709],{"alt":710,"src":711},"成功验证并确认大模型提供商的 API 密钥","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-api-key-success.webp","\n在运行 Hermes Agent 的环境选项中选择 ",[459,714,715],{},"local machine","：\n",[477,718],{"alt":719,"src":720},"选择 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）中选择 ",[459,723,724],{},"Telegram","，其他渠道可以在后续随时配置。\n",[477,727],{"alt":728,"src":729},"在 Hermes 设置中选择 Telegram 作为通信管道渠道","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-select-telegram-channel.webp",[445,731,733],{"id":732},"第三步与-telegram-进行集成","第三步：与 Telegram 进行集成",[434,735,736,737,740,741],{},"选择选项 ",[459,738,739],{},"[2]"," 来使用 Telegram 机器人。\n",[477,742],{"alt":743,"src":744},"选择选项开始集成并配置 Telegram 机器人","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-bot-integration-option.webp",[434,746,747,748,750,751],{},"打开 ",[459,749,724],{}," 并搜索 'BotFather' 官方账号。\n",[477,752],{"alt":753,"src":754},"在 Telegram 应用中搜索官方 BotFather 账号","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-search-botfather.webp",[434,756,757,758,761,762],{},"点击 ",[459,759,760],{},"Open"," 打开与 'BotFather' 的对话框。\n",[477,763],{"alt":764,"src":765},"在 Telegram 中打开与 BotFather 的对话框","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-open-botfather-chat.webp",[434,767,757,768,771,772,775,776],{},[459,769,770],{},"Create a New Bot","（或输入 ",[459,773,774],{},"\u002Fnewbot"," 指令）。\n",[477,777],{"alt":778,"src":779},"向 BotFather 发送 \u002Fnewbot 指令以创建全新的机器人","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fbotfather-create-new-bot.webp",[434,781,782,783],{},"按照提示填写名称和用户名，完成机器人的创建。\n",[477,784],{"alt":785,"src":786},"配置新 Telegram 机器人的昵称和唯一用户名","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fbotfather-bot-details-configured.webp",[434,788,757,789,792,793],{},[459,790,791],{},"Copy"," 复制机器人 Token（令牌），并将其粘贴回终端中。\n",[477,794],{"alt":795,"src":796},"复制新创建的 Telegram 机器人的 HTTP API 访问 Token","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fbotfather-copy-http-api-token.webp",[434,798,799,800,802],{},"获取您的 ",[459,801,724],{}," 账号 ID 并将其添加到允许访问的用户列表（'Allowed user list'）中：",[804,805,806,816,831],"ul",{},[563,807,808,809,811,812],{},"在 ",[459,810,724],{}," 中搜索 '@raw_data_bot'。\n",[477,813],{"alt":814,"src":815},"在 Telegram 中搜索 raw data bot 机器人以检索账号 ID","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-search-raw-data-bot.webp",[563,817,818,819,822,823,826,827],{},"点击进入 ",[459,820,821],{},"RawDataBot"," 并点击 Start（开始）按钮。您的用户 ID 将显示在 ",[459,824,825],{},"P.S. Your ID:"," 后面。\n",[477,828],{"alt":829,"src":830},"启动 RawDataBot 机器人以获取当前用户的账号 ID","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-raw-data-bot-user-id.webp",[563,832,833],{},"复制该用户 ID 并粘贴到终端中。",[434,835,836,837,841,842,846],{},"由于我们在云端运行此服务，我们希望它能在系统启动时自动运行。\n",[477,838],{"alt":839,"src":840},"配置 Hermes systemd 服务开机自启自动运行的选项","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-autostart-service-option.webp","\n将其他设置均保持默认值即可：\n",[477,843],{"alt":844,"src":845},"在终端设置中将各项基础配置保持默认推荐值","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-leave-defaults-1.webp",[477,847],{"alt":848,"src":849},"在 Hermes 配置向导中完成默认选项的设置","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Fhermes-setup-leave-defaults-2.webp",[429,851,853],{"id":852},"使用-telegram-机器人测试您的-hermes-agent","使用 Telegram 机器人测试您的 Hermes Agent",[434,855,856,857,860],{},"运行以下命令启动 ",[459,858,859],{},"hermes gateway"," 服务：",[453,862,864],{"className":455,"code":863,"language":457,"meta":424,"style":424},"hermes gateway\n",[459,865,866],{"__ignoreMap":424},[462,867,868,870],{"class":464,"line":465},[462,869,520],{"class":468},[462,871,872],{"class":472}," gateway\n",[434,874,747,875,877],{},[459,876,724],{},"，将刚刚创建的机器人，例如 '@tech_cloud_hermes_bot'，添加到对话中。",[804,879,880,895,906],{},[563,881,882,883,886,887,890,891],{},"在对话框中输入 ",[459,884,885],{},"\u002Fnew"," 启动一个新的 ",[459,888,889],{},"Hermes Agent"," 对话会话。\n",[477,892],{"alt":893,"src":894},"在 Telegram 聊天框中输入 \u002Fnew 指令开启新的智能体对话会话","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-chat-hermes-new-session.webp",[563,896,897,898,901,902],{},"输入 ",[459,899,900],{},"\u002Fcommands"," 指令将列出所有可用的操作命令。\n",[477,903],{"alt":904,"src":905},"在 Telegram 聊天框中输入 \u002Fcommands 指令查看可用操作指令列表","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-chat-hermes-commands-list.webp",[563,907,897,908,911,912],{},[459,909,910],{},"\u002Fmodel"," 指令即可查看当前可用的 LLM 大模型列表。\n",[477,913],{"alt":914,"src":915},"在 Telegram 聊天框中输入 \u002Fmodel 指令查看可切换的 LLM 列表","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20Setup%20Hermes%20on%20Remote%20Server\u002Ftelegram-chat-hermes-model-selection.webp",[429,917,919],{"id":918},"将-hermes-gateway-配置为后台常驻服务","将 Hermes Gateway 配置为后台常驻服务",[434,921,922],{},"创建 systemd 守护进程服务文件：",[453,924,928],{"className":925,"code":926,"language":927,"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",[459,929,930],{"__ignoreMap":424},[462,931,932,934,936],{"class":464,"line":465},[462,933,493],{"class":468},[462,935,577],{"class":472},[462,937,938],{"class":472}," \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-gateway.service\n",[434,940,941,942,945,946,948],{},"粘贴以下配置，注意将 ",[459,943,944],{},"\u002Fhome\u002Fhermes"," 中的 ",[459,947,520],{}," 替换为您自己的用户名：",[453,950,954],{"className":951,"code":952,"language":953,"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",[459,955,956,961,966,971,978,984,990,996,1002,1008,1014,1020,1025,1031],{"__ignoreMap":424},[462,957,958],{"class":464,"line":465},[462,959,960],{},"[Unit]\n",[462,962,963],{"class":464,"line":543},[462,964,965],{},"Description=Hermes Gateway\n",[462,967,968],{"class":464,"line":604},[462,969,970],{},"After=network.target\n",[462,972,974],{"class":464,"line":973},4,[462,975,977],{"emptyLinePlaceholder":976},true,"\n",[462,979,981],{"class":464,"line":980},5,[462,982,983],{},"[Service]\n",[462,985,987],{"class":464,"line":986},6,[462,988,989],{},"User=hermes\n",[462,991,993],{"class":464,"line":992},7,[462,994,995],{},"WorkingDirectory=\u002Fhome\u002Fhermes\n",[462,997,999],{"class":464,"line":998},8,[462,1000,1001],{},"ExecStart=\u002Fhome\u002Fhermes\u002F.local\u002Fbin\u002Fhermes gateway\n",[462,1003,1005],{"class":464,"line":1004},9,[462,1006,1007],{},"Restart=always\n",[462,1009,1011],{"class":464,"line":1010},10,[462,1012,1013],{},"RestartSec=10\n",[462,1015,1017],{"class":464,"line":1016},11,[462,1018,1019],{},"Environment=PATH=\u002Fhome\u002Fhermes\u002F.local\u002Fbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fbin:\u002Fbin\n",[462,1021,1023],{"class":464,"line":1022},12,[462,1024,977],{"emptyLinePlaceholder":976},[462,1026,1028],{"class":464,"line":1027},13,[462,1029,1030],{},"[Install]\n",[462,1032,1034],{"class":464,"line":1033},14,[462,1035,1036],{},"WantedBy=multi-user.target\n",[434,1038,1039],{},"启用并启动该背景服务：",[453,1041,1043],{"className":925,"code":1042,"language":927,"meta":424,"style":424},"sudo systemctl daemon-reload\nsudo systemctl enable hermes-gateway\nsudo systemctl start hermes-gateway\nsudo systemctl status hermes-gateway\n",[459,1044,1045,1054,1066,1077],{"__ignoreMap":424},[462,1046,1047,1049,1051],{"class":464,"line":465},[462,1048,493],{"class":468},[462,1050,619],{"class":472},[462,1052,1053],{"class":472}," daemon-reload\n",[462,1055,1056,1058,1060,1063],{"class":464,"line":543},[462,1057,493],{"class":468},[462,1059,619],{"class":472},[462,1061,1062],{"class":472}," enable",[462,1064,1065],{"class":472}," hermes-gateway\n",[462,1067,1068,1070,1072,1075],{"class":464,"line":604},[462,1069,493],{"class":468},[462,1071,619],{"class":472},[462,1073,1074],{"class":472}," start",[462,1076,1065],{"class":472},[462,1078,1079,1081,1083,1086],{"class":464,"line":973},[462,1080,493],{"class":468},[462,1082,619],{"class":472},[462,1084,1085],{"class":472}," status",[462,1087,1065],{"class":472},[429,1089,1090],{"id":1090},"总结与展望",[434,1092,1093],{},"在本文中，我们主要分享了如何在云端服务器上搭建并配置 Hermes Agent，并通过 Telegram 实现与其双向的高效沟通。让 Hermes Agent 运行在远程 VPS 上，能够为您打造一个 24 小时永不下线的、真正的 AI 数字化个人助手。",[1095,1096,1097],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .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":543,"depth":604,"links":1099},[1100,1101,1106,1107,1108],{"id":431,"depth":543,"text":432},{"id":442,"depth":543,"text":443,"children":1102},[1103,1104,1105],{"id":447,"depth":604,"text":448},{"id":628,"depth":604,"text":629},{"id":732,"depth":604,"text":733},{"id":852,"depth":543,"text":853},{"id":918,"depth":543,"text":919},{"id":1090,"depth":543,"text":1090},[1110],"ai-agents","2026-06-19","在本篇非常详尽的实战教程中，我们将一步步向您展示如何在远程 Linux VPS 服务器上成功安装与部署 Hermes Agent，并实现 24 小时稳定常驻运行。我们还会手把手教您如何通过自定义的 Telegram 机器人，快速与Hermes进行无缝对接，轻松实现自动化的任务管理，确保系统能随时在线响应。","md","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":1117,"robots":1131,"sitemap":1132},[1118],{"@type":1119,"name":423,"description":1112,"image":1114,"step":1120},"HowTo",[1121,1125,1128],{"@type":1122,"name":448,"text":1123,"image":480,"url":1124},"HowToStep","打开终端并使用 SSH 登录您的远程服务器： 确保服务器的软件包都是最新的： 添加一个新用户 `hermes`，或者您自定义的其他用户名： 关闭 `root` 用户的密码登录以增强安全性： 1. 打开 SSH 配置文件： 2. 找到 `PermitRootLogin` 这一行，将其值修改为 `...","#-vps",{"@type":1122,"name":629,"text":1126,"image":660,"url":1127},"运行以下命令： 安装完成后，输入以下命令验证是否安装成功： 运行 `hermes setup` 命令行工具来配置 Hermes Agent： 选择大语言模型（LLM）提供商，我们可以先选择 `DeepSeek`，后续再根据需要添加其他模型。 输入您的 `DeepSeek` API 密钥： 在运...","#-hermes-agent",{"@type":1122,"name":733,"text":1129,"image":744,"url":1130},"选择选项 `[2]` 来使用 Telegram 机器人。 打开 `Telegram` 并搜索 'BotFather' 官方账号。 点击 `Open` 打开与 'BotFather' 的对话框。 点击 `Create a New Bot`（或输入 `\u002Fnewbot` 指令）。 按照提示填写名称和...","#-telegram-","index, follow",{"lastmod":1111},{"title":1134,"description":1112,"ogTitle":423,"ogDescription":1112,"twitterTitle":423,"twitterDescription":1112},"Hermes Agent VPS 部署：Telegram 机器人双向集成指南","zh\u002Farticle\u002Fhow-to-setup-hermes-on-remote-server",[889,1137,1138,1139,1140],"VPS Setup","Telegram Bot","Linux VPS","AI Agent",null,"3W7iQIun_QDbvFC66RehnT4AHrYJJQhyta-BATtk8wc",{"surround":1144,"related":2019},[1145,1618],{"id":1146,"title":1147,"author":1141,"body":1148,"category":1599,"date":1600,"description":1601,"extension":1113,"image":1602,"imageAlt":1603,"isPublished":976,"meta":1604,"minRead":1609,"navigation":976,"path":335,"seo":1610,"stem":1612,"tags":1613,"updatedAt":1141,"__hash__":1617},"article\u002Fzh\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude.md","NetSuite AI Connector集成与配置完全指南：模型上下文协议MCP设置与典型业务场景详解",{"type":426,"value":1149,"toc":1585},[1150,1153,1169,1173,1183,1200,1204,1343,1347,1401,1405,1457,1461,1465,1471,1476,1480,1486,1498,1502,1512,1528,1532,1538,1543,1547,1553,1556,1560],[434,1151,1152],{},"Oracle NetSuite 作为面向中小型企业的云端企业资源计划（ERP）平台，早已享誉业界。然而，其网页端用户界面（UI）也因其陡峭的学习曲线、繁琐的点击操作以及死板的报表结构而备受诟病。",[434,1154,1155,1156,1160,1161,1164,1165,1168],{},"随着近期 ",[1157,1158,1159],"strong",{},"NetSuite AI Connector Service"," 的发布，用户现在可以借助 ",[1157,1162,1163],{},"Model Context Protocol (MCP，模型上下文协议)"," 和 ",[1157,1166,1167],{},"AI（人工智能）助手","，直接使用通俗的自然语言提问，并实时获取企业财务与运营数据的解答。",[429,1170,1172],{"id":1171},"netsuite-mcp-ai-连接器的工作原理","NetSuite MCP AI 连接器的工作原理",[434,1174,1175,1178,1179,1182],{},[1157,1176,1177],{},"NetSuite 的 MCP"," 向 ",[1157,1180,1181],{},"AI"," 开放了一系列工具，例如运行 SuiteQL 查询、读取已保存搜索（Saved Searches）和报表，或者执行记录操作（如创建新的客户记录）。所有工具的操作权限都严格受控于 NetSuite 原生的基于角色的权限控制（RBAC）。",[434,1184,1185,1186,1188,1189,1192,1193,1196,1197,1199],{},"当用户用日常语言提出问题时，",[1157,1187,1181],{}," 会使用 ",[1157,1190,1191],{},"Model Context Protocol (MCP)"," 将该请求转化为 NetSuite 能够理解的结构化操作。",[1157,1194,1195],{},"NetSuite"," 将使用该用户的权限执行这些操作，然后将结果返回给 ",[1157,1198,1181],{}," 进行分析和可视化呈现。",[429,1201,1203],{"id":1202},"netsuite-ai-connector-配置指南","NetSuite AI Connector 配置指南",[560,1205,1206,1264,1279,1288,1295,1302,1324],{},[563,1207,1208,1209,1212,1213,1216,1217],{},"启用 ",[1157,1210,1211],{},"Server SuiteScript","（服务器端 SuiteScript）和 ",[1157,1214,1215],{},"REST Web Services","（REST Web 服务）\n",[560,1218,1219,1231,1258],{},[563,1220,1221,1222,1226,1227],{},"访问 ",[1223,1224,1225],"em",{},"Setup > Company > Enable Features","（设置 > 公司 > 启用功能）。\n",[477,1228],{"alt":1229,"src":1230},"Oracle NetSuite“启用功能”设置页面（位于“设置 > 公司”菜单下）","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-setup-company-enable-features.webp",[563,1232,808,1233,1236,1237],{},[1157,1234,1235],{},"SuiteCloud"," 子页签中：\n",[804,1238,1239,1249],{},[563,1240,1241,1242,1244,1245],{},"在 SuiteScript 栏目下，勾选 ",[1157,1243,1211],{},"。\n",[477,1246],{"alt":1247,"src":1248},"在 NetSuite SuiteCloud 选项卡中勾选启用“服务器 SuiteScript”复选框","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-enable-features-server-suitescript.webp",[563,1250,1251,1252,1244,1254],{},"在 SuiteTalk (Web Services) 栏目下，勾选 ",[1157,1253,1215],{},[477,1255],{"alt":1256,"src":1257},"在 NetSuite SuiteCloud 选项卡中勾选启用“REST Web 服务”复选框","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-enable-features-rest-web-services.webp",[563,1259,757,1260,1263],{},[1157,1261,1262],{},"Save","（保存）。",[563,1265,1266,1267,1270,1271,1274,1275],{},"首先安装 ",[1157,1268,1269],{},"NetSuite MCP Standard Tools","。点击 ",[1223,1272,1273],{},"Customization > SuiteCloud Development > SuiteApp Marketplace","（定制 > SuiteCloud 开发 > SuiteApp 市场）。\n",[477,1276],{"alt":1277,"src":1278},"在 NetSuite 中经由“定制 > SuiteCloud 开发”导航至 SuiteApp 应用商店","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-suiteapp-marketplace-navigation.webp",[563,1280,1281,1282,1244,1284],{},"搜索 ",[1157,1283,1269],{},[477,1285],{"alt":1286,"src":1287},"在 SuiteApp 应用商店中搜索“NetSuite MCP Standard Tools”","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-suiteapp-marketplace-search-mcp-tools.webp",[563,1289,1290,1291],{},"安装完成后，您将在右侧看到“Installed”（已安装）状态。\n",[477,1292],{"alt":1293,"src":1294},"在应用商店中确认“NetSuite MCP Standard Tools”状态显示为“已安装”","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-suiteapp-installed-status-mcp-tools.webp",[563,1296,1297,1298],{},"按照相同步骤安装“NetSuite AI Connector Service Companion”。\n",[477,1299],{"alt":1300,"src":1301},"确认“NetSuite AI Connector Service Companion”已成功安装的状态页面","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-suiteapp-installed-ai-connector-companion.webp",[563,1303,1304,1305],{},"创建集成记录（Integration Record）\n",[560,1306,1307,1317],{},[563,1308,1221,1309,1312,1313],{},[1223,1310,1311],{},"Setup > Integration > Manage Integrations","（设置 > 集成 > 管理集成）。\n",[477,1314],{"alt":1315,"src":1316},"导航至 NetSuite 设置菜单中的“集成 > 管理集成”页面","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-integration-manage-integrations-navigation.webp",[563,1318,1319,1320],{},"为 ChatGPT 创建一个 Integration Record，稍后我们将回来填入实际生成的 token_id：\n",[477,1321],{"alt":1322,"src":1323},"在 NetSuite 中为 ChatGPT 连接创建全新的集成记录（Integration Record）","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-create-integration-record-chatgpt.webp",[563,1325,1326,1327,1331,1335,1339],{},"为 MCP 创建一个具备最小化权限的自定义角色并分配给对应用户，例如：\n",[477,1328],{"alt":1329,"src":1330},"为 NetSuite MCP 集成配置专属自定义角色的权限设置 - 步骤 1","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-custom-role-mcp-permissions-1.webp",[477,1332],{"alt":1333,"src":1334},"为 NetSuite MCP 集成配置专属自定义角色的权限设置 - 步骤 2","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-custom-role-mcp-permissions-2.webp",[477,1336],{"alt":1337,"src":1338},"为 NetSuite MCP 集成配置专属自定义角色的权限设置 - 步骤 3","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-custom-role-mcp-permissions-3.webp",[477,1340],{"alt":1341,"src":1342},"为 NetSuite MCP 集成配置专属自定义角色的权限设置 - 步骤 4","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-custom-role-mcp-permissions-4.webp",[429,1344,1346],{"id":1345},"如何在-chatgpt-中集成并配置-netsuite-mcp","如何在 ChatGPT 中集成并配置 NetSuite MCP",[560,1348,1349,1356,1363,1370,1380,1387,1394],{},[563,1350,1351,1352],{},"点击 ChatGPT 的“Settings”（设置）。\n",[477,1353],{"alt":1354,"src":1355},"导航至 ChatGPT 用户界面中的“设置（Settings）”","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fchatgpt-settings-navigation.webp",[563,1357,1358,1359],{},"依次点击“Apps”（应用）>“Advanced settings”（高级设置）。\n",[477,1360],{"alt":1361,"src":1362},"在 ChatGPT 设置菜单中点击“应用程序（Apps）”与“高级设置”","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fchatgpt-apps-advanced-settings.webp",[563,1364,1365,1366],{},"开启“Developer mode”（开发者模式），然后点击“Create app”（创建应用）。\n",[477,1367],{"alt":1368,"src":1369},"在 ChatGPT 设置中启用“开发者模式”并点击“创建应用程序”","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fchatgpt-developer-mode-create-app.webp",[563,1371,1372,1373,1244,1376],{},"填写相关细节。在“Connection”（连接）中，输入 ",[459,1374,1375],{},"https:\u002F\u002F\u003Caccount_id>.suitetalk.api.netsuite.com\u002Fservices\u002Fmcp\u002Fv1\u002Fall",[477,1377],{"alt":1378,"src":1379},"输入 NetSuite MCP 连接网址等详细信息以在 ChatGPT 中创建连接","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fchatgpt-create-app-netsuite-mcp-connection.webp",[563,1381,1382,1383],{},"点击“Create”（创建）。集成成功后，您会看到如下弹窗。\n",[477,1384],{"alt":1385,"src":1386},"ChatGPT 弹出窗口确认 NetSuite MCP 已成功集成与串接","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fchatgpt-netsuite-mcp-integrated-popup.webp",[563,1388,1389,1390],{},"点击“Sign in with NetSuite MCP”（登录 NetSuite MCP）。\n",[477,1391],{"alt":1392,"src":1393},"ChatGPT 提示要求登录与授权“NetSuite MCP Standard Tools”连接","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fchatgpt-sign-in-with-netsuite-mcp.webp",[563,1395,1396,1397],{},"点击“Continue”（继续）按钮授予权限。\n",[477,1398],{"alt":1399,"src":1400},"在 ChatGPT 授权页面中允许并授予 NetSuite MCP 的访问权限","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fchatgpt-grant-permissions-netsuite-mcp.webp",[429,1402,1404],{"id":1403},"如何在-claude-ai-中集成并配置-netsuite-mcp","如何在 Claude AI 中集成并配置 NetSuite MCP",[560,1406,1407,1414,1421,1428,1443,1450],{},[563,1408,1409,1410],{},"点击 Claude 的“Customize”（自定义）。\n",[477,1411],{"alt":1412,"src":1413},"在 Claude AI 界面中点击“自定义（Customize）”选项","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fclaude-ai-customize-navigation.webp",[563,1415,1416,1417],{},"点击“Connect your apps”（连接您的应用）。\n",[477,1418],{"alt":1419,"src":1420},"在 Claude AI 自定义设置中点击“连接您的应用程序（Connect your apps）”","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fclaude-ai-connect-your-apps.webp",[563,1422,1423,1424],{},"搜索“NetSuite”。\n",[477,1425],{"alt":1426,"src":1427},"在 Claude AI 连接应用列表中搜索“NetSuite”","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fclaude-ai-search-netsuite-app.webp",[563,1429,1430,1431,1434,1435,1438,1439],{},"点击“NetSuite”并输入服务器 URL：",[459,1432,1433],{},"https:\u002F\u002F\u003Caccount_id>.suitetalk.api.netsuite.com\u002Fservices\u002Fmcp\u002Fv1\u002Fsuiteapp\u002Fcom.netsuite.mcpstandardtools","（请将 ",[459,1436,1437],{},"\u003Caccount_id>"," 替换为您实际的 NetSuite 账户 ID）。\n",[477,1440],{"alt":1441,"src":1442},"在 Claude AI 设置中输入 NetSuite MCP 服务器的连接网址","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fclaude-ai-netsuite-mcp-server-url-setup.webp",[563,1444,1445,1446],{},"点击“Continue”（继续）按钮。\n",[477,1447],{"alt":1448,"src":1449},"在 Claude AI 中点击“继续”以认证 NetSuite MCP 服务器连接","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fclaude-ai-netsuite-mcp-continue-authentication.webp",[563,1451,1452,1453],{},"再次点击“Continue”（继续）以授权并验证连接器。\n",[477,1454],{"alt":1455,"src":1456},"在 Claude AI 中完成 NetSuite MCP 连接器的最终授权与认证步骤","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fclaude-ai-netsuite-mcp-authenticate-connector.webp",[429,1458,1460],{"id":1459},"netsuite-ai-实际应用场景","NetSuite AI 实际应用场景",[445,1462,1464],{"id":1463},"chatgpt-场景示例展示-netsuite-中逾期超过-30-天的账单应收账款","ChatGPT 场景示例：展示 NetSuite 中逾期超过 30 天的账单（应收账款）",[434,1466,1467],{},[477,1468],{"alt":1469,"src":1470},"ChatGPT 执行 SuiteQL 查询以筛选并显示 NetSuite 中逾期超过 30 天的发票","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fchatgpt-netsuite-overdue-invoices-query-result.webp",[804,1472,1473],{},[563,1474,1475],{},"ChatGPT 自动创建并运行了 SuiteQL 查询。与使用传统的 NetSuite 网页端 UI 去配置复杂的报表相比，这非常方便且节省了大量时间。",[445,1477,1479],{"id":1478},"chatgpt-和-claude-场景示例能否用折线图绘制过去-30-天的销售业绩","ChatGPT 和 Claude 场景示例：能否用折线图绘制过去 30 天的销售业绩？",[434,1481,1482],{},[477,1483],{"alt":1484,"src":1485},"ChatGPT 尝试根据 NetSuite 数据绘制销售折线图却输出失败的画面","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fchatgpt-failed-render-netsuite-sales-line-graph.webp",[804,1487,1488,1491],{},[563,1489,1490],{},"在我们的测试中，ChatGPT 无法直接生成并显示该折线图。",[563,1492,1493,1494],{},"随后我在 Claude 上进行了尝试，成功绘制出了图表。这种差异主要源于各大语言模型（LLM）的数据可视化和原生代码执行能力的区别。\n",[477,1495],{"alt":1496,"src":1497},"Claude AI 成功根据 NetSuite 销售数据绘制出直观的折线图","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fclaude-ai-successfully-rendered-netsuite-sales-line-graph.webp",[445,1499,1501],{"id":1500},"claude-场景示例创建客户记录","Claude 场景示例：创建客户记录",[434,1503,1504,1508],{},[477,1505],{"alt":1506,"src":1507},"向 Claude AI 发送自然语言指令以在 NetSuite 中新建一笔客户记录","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fclaude-ai-create-netsuite-customer-record-prompt.webp",[477,1509],{"alt":1510,"src":1511},"Claude AI 回复确认已成功在 NetSuite 中建立客户记录","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fclaude-ai-create-netsuite-customer-record-success.webp",[804,1513,1514,1521],{},[563,1515,1516,1517],{},"登录 NetSuite 自动后台核对，确认该客户记录已正确创建并录入系统。\n",[477,1518],{"alt":1519,"src":1520},"在 NetSuite 网页端界面中双重检查并确认新客户记录已成功新建","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fnetsuite-ui-verify-new-customer-record-created.webp",[563,1522,1523,1524],{},"在 ChatGPT 中运行查询，同样能正常读取到该条刚创建的客户记录：\n",[477,1525],{"alt":1526,"src":1527},"在 ChatGPT 中执行查询并确认刚刚新建的 NetSuite 客户记录可正常读取","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fchatgpt-verify-netsuite-customer-record-available.webp",[445,1529,1531],{"id":1530},"claude-场景示例直接执行-suiteql-查询","Claude 场景示例：直接执行 SuiteQL 查询",[434,1533,1534],{},[477,1535],{"alt":1536,"src":1537},"Claude AI 直接执行 NetSuite SuiteQL 查询并以表格呈现报表结果","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002Fclaude-ai-run-suiteql-query-result.webp",[804,1539,1540],{},[563,1541,1542],{},"AI 助手可以直接向 NetSuite 数据库运行 SuiteQL 查询，瞬间返回所需数据。",[429,1544,1546],{"id":1545},"netsuite-ai-connector-总结与展望","NetSuite AI Connector 总结与展望",[434,1548,1549,1550,1552],{},"引入 MCP 的最大赢家是那些缺乏技术背景、无法编写复杂 SQL 或报表的用户。他们现在只需使用日常的大白话对数据提问，并让 ",[1157,1551,1181],{}," 按照其期望的格式（如表格、图表等）完美呈现出来，极大地降低了数据获取的门槛。",[434,1554,1555],{},"需要特别注意的是，为了防范提示词注入（Prompt Injection）攻击和恶意的「写入」操作，建议对 AI connector 所对应的系统角色仅授予最小限度的写入权限。当 AI 通过 MCP 接口在后台更新或创建记录时，它是在服务器端作为 SuiteScript 执行的，这将完全绕过浏览器前端（客户端）的所有脚本限制和表单输入校验。因此，权限管控必须要严密。",[429,1557,1559],{"id":1558},"参考资源英文","参考资源（英文）:",[804,1561,1562,1571,1578],{},[563,1563,1564],{},[1565,1566,1570],"a",{"href":1567,"rel":1568},"https:\u002F\u002Fdocs.oracle.com\u002Fen\u002Fcloud\u002Fsaas\u002Fnetsuite\u002Fns-online-help\u002Farticle_0902023450.html#subsect_90090238176",[1569],"nofollow","安装 MCP Standard Tools SuiteApp（官方文档）",[563,1572,1573],{},[1565,1574,1577],{"href":1575,"rel":1576},"https:\u002F\u002Fdocs.oracle.com\u002Fen\u002Fcloud\u002Fsaas\u002Fnetsuite\u002Fns-online-help\u002Farticle_4160616848.html#subsect_0419123151",[1569],"NetSuite AI Connector 常见问题解答（官方文档）",[563,1579,1580],{},[1565,1581,1584],{"href":1582,"rel":1583},"https:\u002F\u002Fdocs.oracle.com\u002Fen\u002Fcloud\u002Fsaas\u002Fnetsuite\u002Fns-online-help\u002Fsection_0714082142.html#bridgehead_0804033331",[1569],"连接到 NetSuite AI Connector 服务步骤（官方文档）",{"title":424,"searchDepth":543,"depth":604,"links":1586},[1587,1588,1589,1590,1591,1597,1598],{"id":1171,"depth":543,"text":1172},{"id":1202,"depth":543,"text":1203},{"id":1345,"depth":543,"text":1346},{"id":1403,"depth":543,"text":1404},{"id":1459,"depth":543,"text":1460,"children":1592},[1593,1594,1595,1596],{"id":1463,"depth":604,"text":1464},{"id":1478,"depth":604,"text":1479},{"id":1500,"depth":604,"text":1501},{"id":1530,"depth":604,"text":1531},{"id":1545,"depth":543,"text":1546},{"id":1558,"depth":543,"text":1559},[1110],"2026-06-13","本教程详细介绍如何配置NetSuite AI Connector (MCP)服务并与ChatGPT和Claude进行集成。您将学习如何通过自然语言直接向AI提问、快速执行SuiteQL查询ERP财务与业务数据、实现自动化业务流程以及客户数据记录创建，轻松打破传统复杂企业ERP的操作门槛。","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSetup%20NetSuite%20MCP%20on%20ChatGPT%20%26%20Claude\u002FZH-Setup-NetSuite-MCP-on-ChatGPT-%26-Claude.webp","NetSuite MCP AI 集成缩略图，采用深蓝色企业背景，展示 ChatGPT 和 Claude 图标连接至 NetSuite 云端数据库",{"schemaOrg":1605,"robots":1131,"sitemap":1608},[1606],{"@type":1607,"headline":1147,"description":1601},"TechArticle",{"lastmod":1600},32,{"title":1611,"description":1601,"ogTitle":1147,"ogDescription":1601,"twitterTitle":1147,"twitterDescription":1601},"NetSuite MCP AI集成教程：连接 ChatGPT 与 Claude 实现 ERP 数据查询","zh\u002Farticle\u002Fsetup-netsuite-mcp-on-chatgpt-claude",[1195,1614,1615,1616,1181],"MCP","ChatGPT","Claude","9jdmdfqTRXLqn9Xe5PM8qP-td0BRqhOK3PacmSrGU9M",{"id":1619,"title":1620,"author":424,"body":1621,"category":2002,"date":2003,"description":2004,"extension":1113,"image":2005,"imageAlt":2006,"isPublished":976,"meta":2007,"minRead":543,"navigation":976,"path":317,"seo":2011,"stem":2012,"tags":2013,"updatedAt":1141,"__hash__":2018},"article\u002Fzh\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them.md","什么是AI Agent技能？深入探讨其工作原理并手把手教你如何构建高效、可复用的Agent技能",{"type":426,"value":1622,"toc":1992},[1623,1627,1638,1649,1714,1719,1723,1726,1735,1741,1744,1799,1810,1816,1819,1875,1879,1882,1889,1892,1903,1907,1952,1955,1972,1975,1986,1989],[429,1624,1626],{"id":1625},"什么是-ai-agent-技能","什么是 AI Agent 技能？",[434,1628,1629,1630,1633,1634,1637],{},"智能体技能（agent skill）是一种可复用的",[1157,1631,1632],{},"指令集"," —— 它是一个标准化的流程，旨在指导 Agent 如何卓越地完成某一特定类型的任务。一个技能通常由单个 Markdown 文件 ",[459,1635,1636],{},"SKILL.md"," 构成，并且可以打包该任务所需的任何其他文件，例如参考文档、模板或可执行脚本。",[434,1639,1640,1641,1648],{},"以 ",[1565,1642,1645],{"href":1643,"rel":1644},"https:\u002F\u002Fgithub.com\u002Fmattpocock\u002Fskills\u002Fblob\u002F733d312884b3878a9a9cff693c5886943753a741\u002Fskills\u002Fproductivity\u002Fgrill-me\u002FSKILL.md",[1569],[459,1646,1647],{},"grill-me"," 技能为例：",[453,1650,1654],{"className":1651,"code":1652,"language":1653,"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",[459,1655,1656,1661,1673,1683,1687,1691,1696,1700,1705,1709],{"__ignoreMap":424},[462,1657,1658],{"class":464,"line":465},[462,1659,1660],{"class":468},"---\n",[462,1662,1663,1667,1670],{"class":464,"line":543},[462,1664,1666],{"class":1665},"swJcz","name",[462,1668,1669],{"class":502},":",[462,1671,1672],{"class":472}," grill-me\n",[462,1674,1675,1678,1680],{"class":464,"line":604},[462,1676,1677],{"class":1665},"description",[462,1679,1669],{"class":502},[462,1681,1682],{"class":472}," 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",[462,1684,1685],{"class":464,"line":973},[462,1686,1660],{"class":468},[462,1688,1689],{"class":464,"line":980},[462,1690,977],{"emptyLinePlaceholder":976},[462,1692,1693],{"class":464,"line":986},[462,1694,1695],{"class":472},"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",[462,1697,1698],{"class":464,"line":992},[462,1699,977],{"emptyLinePlaceholder":976},[462,1701,1702],{"class":464,"line":998},[462,1703,1704],{"class":472},"Ask the questions one at a time.\n",[462,1706,1707],{"class":464,"line":1004},[462,1708,977],{"emptyLinePlaceholder":976},[462,1710,1711],{"class":464,"line":1010},[462,1712,1713],{"class":472},"If a question can be answered by exploring the codebase, explore the codebase instead.\n",[434,1715,1716,1718],{},[459,1717,1636],{}," 文件包含一小块元数据（metadata）和指令的正文。元数据由技能的名称（name）和描述（description）组成，AI Agent 会在启动时将其加载。",[429,1720,1722],{"id":1721},"ai-agent-技能的工作原理渐进式披露progressive-disclosure","AI Agent 技能的工作原理：渐进式披露（Progressive Disclosure）",[434,1724,1725],{},"在初始阶段，只有技能的名称 and 描述会被加载到上下文（Context）中。当用户的请求与技能的描述相匹配时，该技能的完整指令正文才会被加载到相同的上下文中。",[434,1727,1728,1729,1734],{},"让我们来看看在实际使用中，",[1565,1730,1732],{"href":1643,"rel":1731},[1569],[459,1733,1647],{}," 技能是如何工作的。",[434,1736,1737],{},[477,1738],{"alt":1739,"src":1740},"展示 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",[445,1742,1743],{"id":1743},"逐步流程",[560,1745,1746,1752,1758,1764,1770,1783,1793],{},[563,1747,1748,1751],{},[1157,1749,1750],{},"请求（Request）"," —— 用户向 Agent 提出需求（例如：“对我的工作流设计进行压力测试剖析”）。",[563,1753,1754,1757],{},[1157,1755,1756],{},"选择提示词（Selection prompt）"," —— 用户的请求与所有可用技能的描述一起发送给 LLM。",[563,1759,1760,1763],{},[1157,1761,1762],{},"LLM 做出选择"," —— LLM 将请求与每个描述进行对比，并返回匹配的技能。",[563,1765,1766,1769],{},[1157,1767,1768],{},"确认（Confirmation）"," —— Agent 将推荐的技能呈现给用户，由用户进行确认（或拒绝\u002F调整）该选择。",[563,1771,1772,1775,1776,1779,1780,1782],{},[1157,1773,1774],{},"加载指令"," —— Agent 获取已确认技能的",[1223,1777,1778],{},"完整","指令：即 ",[459,1781,1636],{}," 的正文内容。",[563,1784,1785,1788,1789,1792],{},[1157,1786,1787],{},"执行提示词（Execution prompt）"," —— 用户的请求",[1157,1790,1791],{},"加上所选技能的具体指令","一起发送给 LLM。",[563,1794,1795,1798],{},[1157,1796,1797],{},"响应（Response）"," —— LLM 生成输出，即压力测试面谈中的第一个剖析问题。",[434,1800,1801,1802,1809],{},"现在，我们使用 ",[1565,1803,1806],{"href":1804,"rel":1805},"https:\u002F\u002Fgithub.com\u002Fcoleam00\u002Fexcalidraw-diagram-skill",[1569],[459,1807,1808],{},"excalidraw-diagram-skill"," 来演示带参考文档的技能是如何工作的：",[434,1811,1812],{},[477,1813],{"alt":1814,"src":1815},"展示 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",[445,1817,1743],{"id":1818},"逐步流程-1",[560,1820,1821,1826,1831,1840,1845,1857,1865],{},[563,1822,1823,1825],{},[1157,1824,1750],{}," —— 用户向 Agent 提出需求（“绘制部署流程的工作流图”）。",[563,1827,1828,1757],{},[1157,1829,1830],{},"选择提示词",[563,1832,1833,1835,1836,1839],{},[1157,1834,1762],{}," —— LLM 将请求与每个描述进行对比，并返回匹配的技能。在这里，“绘制工作流图”与 ",[459,1837,1838],{},"excalidraw-diagram"," 的描述匹配，因此该技能被选中。",[563,1841,1842,1769],{},[1157,1843,1844],{},"确认",[563,1846,1847,1775,1849,1779,1851,1853,1854,1856],{},[1157,1848,1774],{},[1223,1850,1778],{},[459,1852,1636],{}," 的正文内容以及任何引用的参考文件（对于 ",[459,1855,1838],{},"，这包括调色板、JSON Schema 和图表元素模板）。",[563,1858,1859,1788,1862,1864],{},[1157,1860,1861],{},"执行提示词",[1157,1863,1791],{},"一起发送给 LLM。模型现在拥有了它所需的详细方法论。",[563,1866,1867,1870,1871,1874],{},[1157,1868,1869],{},"响应"," —— LLM 生成输出（一个 ",[459,1872,1873],{},".excalidraw"," 的 JSON 文件），由 Agent 将其返回给用户。",[429,1876,1878],{"id":1877},"ai-agent-技能-vs-工具与-mcp","AI Agent 技能 vs. 工具与 MCP",[434,1880,1881],{},"技能并不能替代提示词、普通工具（Tools） or MCP。工具和 MCP 集成扩展了 Agent 对外部系统的访问范围 —— 例如查询数据库、调用 API 等等。而技能则加深了 Agent 完成特定任务的实战诀窍（Know-how）和专业深度。",[434,1883,1884,1885,1888],{},"诸如 ",[1565,1886,1887],{"href":395},"在ChatGPT和Claude中配置NetSuite MCP"," 的 MCP 集成，能够让 Agent 通过访问 NetSuite 中的实时财务和运营数据来回答用户问题。而 NetSuite 业务报告技能则会进一步引导 Agent 如何去撰写这份报告，并以规范的报表形式呈现给用户。",[434,1890,1891],{},"使用技能的典型场景包括：",[804,1893,1894,1897,1900],{},[563,1895,1896],{},"多步骤复杂工作流",[563,1898,1899],{},"文档处理，例如从 PDF 中提取特定数据结构",[563,1901,1902],{},"代码生成规范与标准",[429,1904,1906],{"id":1905},"如何创建-ai-agent-技能","如何创建 AI Agent 技能",[560,1908,1909,1919,1933,1942],{},[563,1910,1911,1914,1915,1918],{},[1157,1912,1913],{},"创建一个文件夹","，并以技能名称命名（例如 ",[459,1916,1917],{},"netsuite-operation-report\u002F","）。",[563,1920,1921,1926,1927,1929,1930,1932],{},[1157,1922,1923,1924],{},"编写 ",[459,1925,1636],{},"，包含 ",[459,1928,1666],{},"、精准的 ",[459,1931,1677],{},"，以及精炼的指令正文（控制在 200 字以内）。",[563,1934,1935,1938,1939,1941],{},[1157,1936,1937],{},"添加任务所需资源"," —— 包括参考文档、模板、脚本。保持 ",[459,1940,1636],{}," 短小精悍，并将细节链接至其他文件。",[563,1943,1944,1947,1948,1951],{},[1157,1945,1946],{},"进行安装","，让 Agent 能够发现它。参考 ",[1565,1949,1950],{"href":359},"解决AI智能体技能碎片化：集中化管理技能"," 以了解如何在多个 Agent 之间集中管理技能。",[434,1953,1954],{},"编写优秀技能的几个技巧：",[804,1956,1957,1960,1966,1969],{},[563,1958,1959],{},"技能描述（description）应当面向系统触发器（Trigger）来写，而不是给人类阅读。",[563,1961,1962,1963,1965],{},"保持 ",[459,1964,1636],{}," 极其精简 —— 限制在 200 字以内。在正文中写下通用流程，将边缘情况和细节留给参考文档。",[563,1967,1968],{},"凡是确定性的任务，应当使用脚本（Script）来处理。不要让 LLM 去做算术。",[563,1970,1971],{},"做好版本控制，将其提交进 Git 中。",[429,1973,1974],{"id":1974},"总结",[434,1976,1977,1978,1981,1982,1985],{},"与定义“",[1223,1979,1980],{},"连接到什么","”的工具和 MCP 不同，智能体技能封装了“",[1223,1983,1984],{},"如何去完成工作","”。它们是不可或缺的互补，而非替代关系。",[434,1987,1988],{},"通过利用渐进式披露（Progressive Disclosure），技能可以使 Agent 的上下文窗口保持整洁和高效 —— 仅在用户请求触发时，才会加载详细的指令、参考文档和可执行脚本。",[1095,1990,1991],{},"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":543,"depth":604,"links":1993},[1994,1995,1999,2000,2001],{"id":1625,"depth":543,"text":1626},{"id":1721,"depth":543,"text":1722,"children":1996},[1997,1998],{"id":1743,"depth":604,"text":1743},{"id":1818,"depth":604,"text":1743},{"id":1877,"depth":543,"text":1878},{"id":1905,"depth":543,"text":1906},{"id":1974,"depth":543,"text":1974},[1110],"2026-06-26","全面系统地深入了解什么是AI Agent技能、渐进式披露（Progressive Disclosure）的工作原理，并手把手教你如何编写SKILL.md规范，打包参考文档、模板和脚本。本文还将对比技能、工具与MCP的区别与标准工作流，助你轻松构建出可复用、高效率、能够进行复杂上下文管理的自定义智能体核心技能。","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":2008,"robots":1131,"sitemap":2010},[2009],{"@type":1119,"headline":1620,"description":2004},{"lastmod":2003},{"title":2006,"description":2004,"ogTitle":1620,"ogDescription":2004,"twitterTitle":1620,"twitterDescription":2004},"zh\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",[2014,2015,2016,2017],"AI 智能体","智能体技能","可重复使用的工作流程","AI 教程","_atZh5i-Jgvruah38ZkG41QGU4DTktOc6AYeZmiwxKo",[2020,2899,3502],{"id":2021,"title":2022,"author":424,"body":2023,"category":2880,"date":2882,"description":2883,"extension":1113,"image":2884,"imageAlt":2885,"isPublished":976,"meta":2886,"minRead":980,"navigation":976,"path":363,"seo":2891,"stem":2893,"tags":2894,"updatedAt":2890,"__hash__":2898},"article\u002Fzh\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp.md","教程：使用 Cloudflare WARP 安全地将 Hermes Agent 暴露至私有网络",{"type":426,"value":2024,"toc":2862},[2025,2039,2049,2052,2055,2067,2070,2078,2081,2085,2135,2139,2269,2273,2306,2310,2313,2377,2380,2416,2419,2446,2450,2460,2464,2503,2590,2594,2599,2613,2622,2685,2690,2734,2738,2784,2799,2803,2846,2849,2859],[434,2026,2027,2028,2030,2031,2034,2035,2038],{},"当我们希望通过笔记本电脑、平板或手机等其他设备访问 ",[1157,2029,889],{},"，同时又不想将其暴露在公共互联网上时，这往往是一个普遍的挑战。利用 ",[1157,2032,2033],{},"Cloudflare WARP"," 与 ",[1157,2036,2037],{},"Cloudflare Zero Trust","，您可以在无需打开任何防火墙入站端口的情况下，将其安全地暴露并在全球范围内进行访问。",[434,2040,2041,2042,2045,2046,2048],{},"如果您之前已经阅读并遵循了我们的指南 '",[1565,2043,2044],{"href":375},"如何在 Linux VPS 上部署 Hermes Agent","'，那么您应该已经拥有了一个全天候运行的 Hermes Agent。相比于配置传统 VPN 带来的繁琐步骤，我们将使用 ",[1157,2047,2033],{}," 客户端，通过互联网将 Hermes Agent 暴露到私有网络中。",[429,2050,2051],{"id":2051},"架构解析",[434,2053,2054],{},"此方案涉及的两个核心组件：",[560,2056,2057,2062],{},[563,2058,2059,2061],{},[1157,2060,2037],{},"：Cloudflare 的云端仪表板，您可以在此定义路由规则和访问策略。",[563,2063,2064,2066],{},[1157,2065,2033],{},"：安装在您的设备（VPS、笔记本电脑、手机）上的客户端应用程序。它能够拦截发往私有网络的流量，并安全地进行路由。",[445,2068,2069],{"id":2069},"前置条件",[804,2071,2072,2075],{},[563,2073,2074],{},"一台已经运行 Hermes Agent 的 VPS。",[563,2076,2077],{},"一个免费的 Cloudflare 账号。",[429,2079,2080],{"id":2080},"详细步骤指南",[445,2082,2084],{"id":2083},"第-1-步配置-cloudflare-zero-trust","第 1 步：配置 Cloudflare Zero Trust",[560,2086,2087,2096,2103,2114,2121,2128],{},[563,2088,2089,2090,2095],{},"登录您的 ",[1565,2091,2094],{"href":2092,"rel":2093},"https:\u002F\u002Fdash.cloudflare.com\u002F",[1569],"Cloudflare 仪表板 (Dashboard)","。",[563,2097,2098,2099],{},"点击左侧菜单栏中的 'Zero Trust'。\n",[477,2100],{"alt":2101,"src":2102},"Cloudflare 仪表板左侧侧边栏导航菜单中的 Zero Trust 选项","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-left-menu.webp",[563,2104,2105,2106,2109,2110],{},"如果这是您第一次使用，系统会提示您选择套餐（免费版对本教程完全足够）并为您的团队命名（例如，",[459,2107,2108],{},"ai-team","）。\n",[477,2111],{"alt":2112,"src":2113},"首次设置 Cloudflare Zero Trust 帐户并为团队命名","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-team-setup.webp",[563,2115,2116,2117],{},"点击 'Access'，然后点击 'Policies' 来创建访问策略，以定义谁有权限访问网络。\n",[477,2118],{"alt":2119,"src":2120},"Cloudflare Zero Trust Access 策略页面，显示新配置的访问规则","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-access-policies-page.webp",[563,2122,2123,2124],{},"点击 'Create new policy'。\n",[477,2125],{"alt":2126,"src":2127},"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",[563,2129,2130,2131],{},"选择 'Emails' 并在 'Policy rules' 下方输入您的电子邮件地址。\n",[477,2132],{"alt":2133,"src":2134},"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",[445,2136,2138],{"id":2137},"第-2-步在-vps-上配置-cloudflare-warp-客户端","第 2 步：在 VPS 上配置 Cloudflare WARP 客户端",[560,2140,2141,2150,2156,2163,2166,2181,2184,2262],{},[563,2142,2143,2144,1164,2147,2095],{},"在 VPS 终端中运行 ",[459,2145,2146],{},"sudo apt update",[459,2148,2149],{},"sudo apt install cloudflare-warp",[563,2151,2143,2152,2155],{},[459,2153,2154],{},"warp-cli registration new \u003CTEAM-NAME>","，该命令将输出一个 URL。",[563,2157,2158,2159,2162],{},"复制输出的 URL（其格式类似于 ",[459,2160,2161],{},"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fwarp","），并将其粘贴到浏览器中进行认证。",[563,2164,2165],{},"由于前面的策略设置中使用了电子邮件认证，请输入您的电子邮件以进行认证。",[563,2167,2168,2169,2172,2173,2176,2177,2180],{},"当浏览器中显示 '",[1157,2170,2171],{},"Success","' 页面后，右键点击蓝色的 '",[1157,2174,2175],{},"Open Cloudflare WARP","' 按钮并选择“",[1157,2178,2179],{},"检查 (Inspect)","”。",[563,2182,2183],{},"复制该按钮链接中的长 Token 字符串。",[563,2185,2143,2186,2189,2190,2193,2194],{},[459,2187,2188],{},"warp-cli --accept-tos registration token \"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fauth?token=\u003Ccopied_token>\"","，将您的 VPS 连接到 Cloudflare Zero Trust。",[2191,2192],"br",{},"如果在 Ubuntu 26 上遇到 'Error: Failed to communicate with the WARP API'，请运行以下命令：",[453,2195,2197],{"className":455,"code":2196,"language":457,"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",[459,2198,2199,2210,2214,2220,2230,2234,2239],{"__ignoreMap":424},[462,2200,2201,2203,2205,2207],{"class":464,"line":465},[462,2202,493],{"class":468},[462,2204,619],{"class":472},[462,2206,622],{"class":472},[462,2208,2209],{"class":472}," warp-svc.service\n",[462,2211,2212],{"class":464,"line":543},[462,2213,977],{"emptyLinePlaceholder":976},[462,2215,2216],{"class":464,"line":604},[462,2217,2219],{"class":2218},"sHwdD","# Check status\n",[462,2221,2222,2224,2226,2228],{"class":464,"line":973},[462,2223,493],{"class":468},[462,2225,619],{"class":472},[462,2227,1085],{"class":472},[462,2229,2209],{"class":472},[462,2231,2232],{"class":464,"line":980},[462,2233,977],{"emptyLinePlaceholder":976},[462,2235,2236],{"class":464,"line":986},[462,2237,2238],{"class":2218},"# Run the warp-cli registration token again\n",[462,2240,2241,2244,2247,2250,2253,2256,2259],{"class":464,"line":992},[462,2242,2243],{"class":468},"warp-cli",[462,2245,2246],{"class":472}," --accept-tos",[462,2248,2249],{"class":472}," registration",[462,2251,2252],{"class":472}," token",[462,2254,2255],{"class":502},"   \"",[462,2257,2258],{"class":472},"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fauth?token=\u003Ccopied_token>",[462,2260,2261],{"class":502},"\"\n",[563,2263,2264,2265],{},"回到 Cloudflare Zero Trust 仪表板，点击 'Devices'。您现在应该能看到您的 VPS 设备。\n",[477,2266],{"alt":2267,"src":2268},"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",[445,2270,2272],{"id":2271},"第-3-步配置流量路由","第 3 步：配置流量路由",[560,2274,2275,2282,2289,2296],{},[563,2276,2277,2278],{},"在 Devices 仪表板中点击您 VPS 设备的配置文件。\n",[477,2279],{"alt":2280,"src":2281},"访问已注册 VPS 设备的详细信息与拆分隧道设置","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-device-profile.webp",[563,2283,2284,2285],{},"向下滚动至 'Split Tunnels' 部分。\n",[477,2286],{"alt":2287,"src":2288},"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",[563,2290,2291,2292],{},"点击 'Manage' 按钮，并按照下图配置设置。如有需要请替换相应的 IP 地址。\n",[477,2293],{"alt":2294,"src":2295},"在 Cloudflare 设置中管理拆分隧道 IP 与主机名排除规则","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-manage-split-tunnels.webp",[563,2297,2298,2299,1164,2302,2305],{},"暴露 ",[459,2300,2301],{},"address",[459,2303,2304],{},"host"," 会将发往您服务的流量路由到该私有网络内。",[445,2307,2309],{"id":2308},"第-4-步配置-vps-防火墙","第 4 步：配置 VPS 防火墙",[434,2311,2312],{},"启用防火墙，仅允许 '100.96.0.0\u002F12' 子网的流量通过，并阻止其他所有公共入站访问。",[453,2314,2316],{"className":455,"code":2315,"language":457,"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",[459,2317,2318,2329,2346,2360],{"__ignoreMap":424},[462,2319,2320,2322,2325,2327],{"class":464,"line":465},[462,2321,493],{"class":468},[462,2323,2324],{"class":472}," ufw",[462,2326,1062],{"class":472},[462,2328,540],{"class":539},[462,2330,2331,2333,2335,2338,2341,2344],{"class":464,"line":543},[462,2332,493],{"class":468},[462,2334,2324],{"class":472},[462,2336,2337],{"class":472}," default",[462,2339,2340],{"class":472}," allow",[462,2342,2343],{"class":472}," outgoing",[462,2345,540],{"class":539},[462,2347,2348,2350,2352,2354,2357],{"class":464,"line":604},[462,2349,493],{"class":468},[462,2351,2324],{"class":472},[462,2353,2337],{"class":472},[462,2355,2356],{"class":472}," deny",[462,2358,2359],{"class":472}," incoming\n",[462,2361,2362,2364,2366,2368,2371,2374],{"class":464,"line":973},[462,2363,493],{"class":468},[462,2365,2324],{"class":472},[462,2367,2340],{"class":472},[462,2369,2370],{"class":472}," in",[462,2372,2373],{"class":472}," from",[462,2375,2376],{"class":472}," 100.96.0.0\u002F12\n",[434,2378,2379],{},"允许回环网络 (loopback) 的流量，避免导致本地服务异常：",[453,2381,2383],{"className":455,"code":2382,"language":457,"meta":424,"style":424},"sudo ufw allow in on lo\nsudo ufw allow out on lo\n",[459,2384,2385,2401],{"__ignoreMap":424},[462,2386,2387,2389,2391,2393,2395,2398],{"class":464,"line":465},[462,2388,493],{"class":468},[462,2390,2324],{"class":472},[462,2392,2340],{"class":472},[462,2394,2370],{"class":472},[462,2396,2397],{"class":472}," on",[462,2399,2400],{"class":472}," lo\n",[462,2402,2403,2405,2407,2409,2412,2414],{"class":464,"line":543},[462,2404,493],{"class":468},[462,2406,2324],{"class":472},[462,2408,2340],{"class":472},[462,2410,2411],{"class":472}," out",[462,2413,2397],{"class":472},[462,2415,2400],{"class":472},[434,2417,2418],{},"重载防火墙规则并验证状态：",[453,2420,2422],{"className":455,"code":2421,"language":457,"meta":424,"style":424},"sudo ufw reload \nsudo ufw status verbose\n",[459,2423,2424,2435],{"__ignoreMap":424},[462,2425,2426,2428,2430,2433],{"class":464,"line":465},[462,2427,493],{"class":468},[462,2429,2324],{"class":472},[462,2431,2432],{"class":472}," reload",[462,2434,540],{"class":539},[462,2436,2437,2439,2441,2443],{"class":464,"line":543},[462,2438,493],{"class":468},[462,2440,2324],{"class":472},[462,2442,1085],{"class":472},[462,2444,2445],{"class":472}," verbose\n",[445,2447,2449],{"id":2448},"第-5-步将-hermes-agent-暴露至私有网络","第 5 步：将 Hermes Agent 暴露至私有网络",[434,2451,2452,2453,2456,2457,2095],{},"我们将把 ",[1157,2454,2455],{},"Hermes Agent Web Dashboard"," 暴露至私有网络，并使用默认的认证提供商 ",[1157,2458,2459],{},"Nous Research",[2461,2462,2463],"h4",{"id":2463},"配置认证提供商",[560,2465,2466,2475,2482,2489,2496],{},[563,2467,2468,2469,2474],{},"前往 ",[1565,2470,2473],{"href":2471,"rel":2472},"https:\u002F\u002Fportal.nousresearch.com",[1569],"portal.nousresearch.com"," 注册一个账号。",[563,2476,2477,2478],{},"选择 'Local Dashboards'。\n",[477,2479],{"alt":2480,"src":2481},"在 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",[563,2483,2484,2485],{},"点击 'Register Dashboard'。\n",[477,2486],{"alt":2487,"src":2488},"点击 Register Dashboard 按钮以创建新的仪表板项目","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fnous-portal-register-dashboard.webp",[563,2490,2491,2492],{},"将 VPS 在私有网络中的 IP 地址填入 'Dashboard redirect URI' 并点击 'Save'。\n",[477,2493],{"alt":2494,"src":2495},"在 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",[563,2497,2498,2499,2502],{},"复制 'OAuth client ID' 并将其粘贴到您的 ",[459,2500,2501],{},"config.yaml"," 文件中：",[453,2504,2506],{"className":1651,"code":2505,"language":1653,"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",[459,2507,2508,2516,2526,2537,2544,2554,2564,2571,2581],{"__ignoreMap":424},[462,2509,2510,2513],{"class":464,"line":465},[462,2511,2512],{"class":1665},"dashboard",[462,2514,2515],{"class":502},":\n",[462,2517,2518,2521,2523],{"class":464,"line":543},[462,2519,2520],{"class":1665},"  theme",[462,2522,1669],{"class":502},[462,2524,2525],{"class":472}," default\n",[462,2527,2528,2531,2533],{"class":464,"line":604},[462,2529,2530],{"class":1665},"  show_token_analytics",[462,2532,1669],{"class":502},[462,2534,2536],{"class":2535},"sfNiH"," false\n",[462,2538,2539,2542],{"class":464,"line":973},[462,2540,2541],{"class":1665},"  oauth",[462,2543,2515],{"class":502},[462,2545,2546,2549,2551],{"class":464,"line":980},[462,2547,2548],{"class":1665},"    client_id",[462,2550,1669],{"class":502},[462,2552,2553],{"class":472}," agent:cmq02x7ha0002jk0ba3kfnb\n",[462,2555,2556,2559,2561],{"class":464,"line":986},[462,2557,2558],{"class":1665},"    portal_url",[462,2560,1669],{"class":502},[462,2562,2563],{"class":472}," https:\u002F\u002Fportal.nousresearch.com\n",[462,2565,2566,2569],{"class":464,"line":992},[462,2567,2568],{"class":1665},"  basic_auth",[462,2570,2515],{"class":502},[462,2572,2573,2576,2578],{"class":464,"line":998},[462,2574,2575],{"class":1665},"    username",[462,2577,1669],{"class":502},[462,2579,2580],{"class":502}," ''\n",[462,2582,2583,2586,2588],{"class":464,"line":1004},[462,2584,2585],{"class":1665},"    password_hash",[462,2587,1669],{"class":502},[462,2589,2580],{"class":502},[2461,2591,2593],{"id":2592},"使用-systemd-确保-hermes-dashboard-开机自启","使用 Systemd 确保 Hermes Dashboard 开机自启",[560,2595,2596],{},[563,2597,2598],{},"创建服务文件：",[453,2600,2602],{"className":925,"code":2601,"language":927,"meta":424,"style":424},"sudo nano \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-dashboard.service\n",[459,2603,2604],{"__ignoreMap":424},[462,2605,2606,2608,2610],{"class":464,"line":465},[462,2607,493],{"class":468},[462,2609,577],{"class":472},[462,2611,2612],{"class":472}," \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-dashboard.service\n",[560,2614,2615],{"start":543},[563,2616,2617,2618,2621],{},"粘贴以下配置，确保 ",[459,2619,2620],{},"--host 0.0.0.0"," 包含在命令中：",[453,2623,2625],{"className":951,"code":2624,"language":953,"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",[459,2626,2627,2631,2636,2640,2644,2648,2652,2656,2661,2665,2669,2673,2677,2681],{"__ignoreMap":424},[462,2628,2629],{"class":464,"line":465},[462,2630,960],{},[462,2632,2633],{"class":464,"line":543},[462,2634,2635],{},"Description=Hermes Dashboard\n",[462,2637,2638],{"class":464,"line":604},[462,2639,970],{},[462,2641,2642],{"class":464,"line":973},[462,2643,977],{"emptyLinePlaceholder":976},[462,2645,2646],{"class":464,"line":980},[462,2647,983],{},[462,2649,2650],{"class":464,"line":986},[462,2651,989],{},[462,2653,2654],{"class":464,"line":992},[462,2655,995],{},[462,2657,2658],{"class":464,"line":998},[462,2659,2660],{},"ExecStart=\u002Fhome\u002Fhermes\u002F.local\u002Fbin\u002Fhermes dashboard --host 0.0.0.0\n",[462,2662,2663],{"class":464,"line":1004},[462,2664,1007],{},[462,2666,2667],{"class":464,"line":1010},[462,2668,1013],{},[462,2670,2671],{"class":464,"line":1016},[462,2672,1019],{},[462,2674,2675],{"class":464,"line":1022},[462,2676,977],{"emptyLinePlaceholder":976},[462,2678,2679],{"class":464,"line":1027},[462,2680,1030],{},[462,2682,2683],{"class":464,"line":1033},[462,2684,1036],{},[560,2686,2687],{"start":604},[563,2688,2689],{},"启用并启动服务：",[453,2691,2693],{"className":925,"code":2692,"language":927,"meta":424,"style":424},"sudo systemctl daemon-reload\nsudo systemctl enable hermes-dashboard\nsudo systemctl start hermes-dashboard\nsudo systemctl status hermes-dashboard\n",[459,2694,2695,2703,2714,2724],{"__ignoreMap":424},[462,2696,2697,2699,2701],{"class":464,"line":465},[462,2698,493],{"class":468},[462,2700,619],{"class":472},[462,2702,1053],{"class":472},[462,2704,2705,2707,2709,2711],{"class":464,"line":543},[462,2706,493],{"class":468},[462,2708,619],{"class":472},[462,2710,1062],{"class":472},[462,2712,2713],{"class":472}," hermes-dashboard\n",[462,2715,2716,2718,2720,2722],{"class":464,"line":604},[462,2717,493],{"class":468},[462,2719,619],{"class":472},[462,2721,1074],{"class":472},[462,2723,2713],{"class":472},[462,2725,2726,2728,2730,2732],{"class":464,"line":973},[462,2727,493],{"class":468},[462,2729,619],{"class":472},[462,2731,1085],{"class":472},[462,2733,2713],{"class":472},[445,2735,2737],{"id":2736},"第-6-步在桌面上安装-cloudflare-warp-客户端","第 6 步：在桌面上安装 Cloudflare WARP 客户端",[560,2739,2740,2749,2752,2759,2766,2773],{},[563,2741,2742,2743,2748],{},"从 ",[1565,2744,2747],{"href":2745,"rel":2746},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fwarp-client\u002Fget-started\u002F",[1569],"Cloudflare 官网"," 下载 Cloudflare WARP 客户端。",[563,2750,2751],{},"安装完成后打开并运行 Cloudflare WARP 客户端。",[563,2753,2754,2755],{},"按提示登录。\n",[477,2756],{"alt":2757,"src":2758},"台式电脑上的 Cloudflare WARP 客户端登录提示","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-warp-desktop-login-prompt.webp",[563,2760,2761,2762],{},"登录成功后会显示 'Success' 页面。\n",[477,2763],{"alt":2764,"src":2765},"在台式电脑登录 Cloudflare Zero Trust 后的验证成功网页","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-warp-desktop-login-success.webp",[563,2767,2768,2769],{},"此时 WARP 客户端应显示已连接至您的 Zero Trust 团队。\n",[477,2770],{"alt":2771,"src":2772},"桌面版 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",[563,2774,2775,2776,2779,2780],{},"在浏览器中输入您的私有 IP 地址（例如 ",[459,2777,2778],{},"100.96.0.3","），即可成功加载 Hermes Web Dashboard。\n",[477,2781],{"alt":2782,"src":2783},"在桌面浏览器中访问私有 Hermes Agent 网页仪表板","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fhermes-agent-dashboard-desktop-view.webp",[2785,2786,2787],"blockquote",{},[434,2788,2789,2792,2793,2798],{},[1157,2790,2791],{},"macOS 用户进阶提示："," 如果您需要使用 WARP 客户端访问多个 Cloudflare 账号，请参阅我们的快速指南 ",[1157,2794,2795],{},[1565,2796,2797],{"href":399},"使用MDM配置文件在macOS上无缝切换与配置多个Cloudflare WARP零信任组织的完整指南","，实现账号间的无缝切换。",[445,2800,2802],{"id":2801},"第-7-步在-ios-设备上安装-cloudflare-warp-客户端","第 7 步：在 iOS 设备上安装 Cloudflare WARP 客户端",[560,2804,2805,2811,2819,2827,2835],{},[563,2806,2807,2808,2095],{},"在 App Store 中安装 ",[1157,2809,2810],{},"Cloudflare One",[563,2812,2813,2814],{},"打开 Cloudflare One 应用并在提示时输入您的团队名称。\n",[477,2815],{"alt":2816,"src":2817,"width":2818},"在 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,[563,2820,2821,2822],{},"使用前面在策略规则中配置的同一个电子邮箱地址进行登录。\n",[477,2823],{"alt":2824,"src":2825,"width":2826},"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,[563,2828,2829,2830],{},"连接成功后，界面应如下所示：\n",[477,2831],{"alt":2832,"src":2833,"width":2834},"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,[563,2836,2837,2838,2840,2841],{},"在手机浏览器中输入私有 IP ",[459,2839,2778],{}," 即可在移动设备上访问 Hermes Web Dashboard。\n",[477,2842],{"alt":2843,"src":2844,"width":2845},"在手机浏览器上访问 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,2847,2848],{"id":2848},"结语",[434,2850,2851,2852,2854,2855,2858],{},"借助 ",[1157,2853,2037],{}," 管理身份策略以及 ",[1157,2856,2857],{},"WARP"," 客户端通过加密隧道路由流量，您的 Hermes Agent 现在可以被您的设备在全球范围内安全访问。该配置为构建并访问完全远程、私有的 AI 基础设施奠定了坚实而安全的根基。",[1095,2860,2861],{},"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":543,"depth":604,"links":2863},[2864,2867,2879],{"id":2051,"depth":543,"text":2051,"children":2865},[2866],{"id":2069,"depth":604,"text":2069},{"id":2080,"depth":543,"text":2080,"children":2868},[2869,2870,2871,2872,2873,2877,2878],{"id":2083,"depth":604,"text":2084},{"id":2137,"depth":604,"text":2138},{"id":2271,"depth":604,"text":2272},{"id":2308,"depth":604,"text":2309},{"id":2448,"depth":604,"text":2449,"children":2874},[2875,2876],{"id":2463,"depth":973,"text":2463},{"id":2592,"depth":973,"text":2593},{"id":2736,"depth":604,"text":2737},{"id":2801,"depth":604,"text":2802},{"id":2848,"depth":543,"text":2848},[1110,2881],"security","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":2887,"robots":1131,"sitemap":2889},[2888],{"@type":1119,"headline":2022,"description":2883,"name":2022,"image":2884},{"lastmod":2890},"2026-09-28",{"title":2892,"description":2883,"ogTitle":2022,"ogDescription":2883,"twitterTitle":2022,"twitterDescription":2883},"通过 Cloudflare Zero Trust 实现对 Hermes Agent 的安全访问","zh\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",[2033,2895,889,2896,2897],"Zero Trust","私有网络","教程","ishCX4pAaZiNmcl6lotlFfav2RLbIjIFUuYwHpzosd4",{"id":2900,"title":2901,"author":424,"body":2902,"category":3485,"date":3486,"description":3487,"extension":1113,"image":3488,"imageAlt":3489,"isPublished":976,"meta":3490,"minRead":543,"navigation":976,"path":367,"seo":3494,"stem":3496,"tags":3497,"updatedAt":1141,"__hash__":3501},"article\u002Fzh\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts.md","从传统初始化模板脚本到智能体：AI Agent 技能如何优雅地取代 Nuxt 应用程序脚手架构建脚本",{"type":426,"value":2903,"toc":3478},[2904,2918,2922,2925,3029,3032,3060,3066,3070,3083,3086,3103,3107,3118,3291,3295,3384,3388,3397,3418,3425,3440,3450,3453,3459,3462,3467,3475],[434,2905,2906,2907,1164,2910,2913,2914,2917],{},"当我们使用 Nuxt 框架启动一个新应用时，总是需要经历一系列繁琐的初始化步骤，比如安装各种依赖模块，以及配置 ",[459,2908,2909],{},"nuxt.config.ts",[459,2911,2912],{},"wrangler.jsonc"," 等文件。传统的脚本固然可以解决一部分问题，但随着项目定制化需求的增加，脚本的局限性也迅速暴露出来。这正是我们探索并尝试用 ",[1157,2915,2916],{},"AI 智能体技能 (Agent Skill)"," 取代传统脚本的原因。",[429,2919,2921],{"id":2920},"传统-shell-脚本擅长什么","传统 Shell 脚本擅长什么",[434,2923,2924],{},"传统的 Shell 脚本非常适合按顺序执行一组固定的指令，且其中的所有决策都是在代码中预先写死的（Hardcoded）。",[453,2926,2928],{"className":455,"code":2927,"language":457,"meta":424,"style":424},"#!\u002Fusr\u002Fbin\u002Fenv bash\nset -e\n\nnpx nuxi@latest init \"$1\" --template minimal --packageManager pnpm --no-gitInit -M @nuxt\u002Fui,@nuxthub\u002Fcore,@vueuse\u002Fnuxt\n\ncd \"$1\"\n\ncp ~\u002Ftemplates\u002Fnuxt.config.ts .\ncp ~\u002Ftemplates\u002Fwrangler.jsonc .\n",[459,2929,2930,2935,2944,2948,2990,2994,3005,3009,3020],{"__ignoreMap":424},[462,2931,2932],{"class":464,"line":465},[462,2933,2934],{"class":2218},"#!\u002Fusr\u002Fbin\u002Fenv bash\n",[462,2936,2937,2941],{"class":464,"line":543},[462,2938,2940],{"class":2939},"s2Zo4","set",[462,2942,2943],{"class":472}," -e\n",[462,2945,2946],{"class":464,"line":604},[462,2947,977],{"emptyLinePlaceholder":976},[462,2949,2950,2953,2956,2959,2962,2966,2969,2972,2975,2978,2981,2984,2987],{"class":464,"line":973},[462,2951,2952],{"class":468},"npx",[462,2954,2955],{"class":472}," nuxi@latest",[462,2957,2958],{"class":472}," init",[462,2960,2961],{"class":502}," \"",[462,2963,2965],{"class":2964},"sHdIc","$1",[462,2967,2968],{"class":502},"\"",[462,2970,2971],{"class":472}," --template",[462,2973,2974],{"class":472}," minimal",[462,2976,2977],{"class":472}," --packageManager",[462,2979,2980],{"class":472}," pnpm",[462,2982,2983],{"class":472}," --no-gitInit",[462,2985,2986],{"class":472}," -M",[462,2988,2989],{"class":472}," @nuxt\u002Fui,@nuxthub\u002Fcore,@vueuse\u002Fnuxt\n",[462,2991,2992],{"class":464,"line":980},[462,2993,977],{"emptyLinePlaceholder":976},[462,2995,2996,2999,3001,3003],{"class":464,"line":986},[462,2997,2998],{"class":2939},"cd",[462,3000,2961],{"class":502},[462,3002,2965],{"class":2964},[462,3004,2261],{"class":502},[462,3006,3007],{"class":464,"line":992},[462,3008,977],{"emptyLinePlaceholder":976},[462,3010,3011,3014,3017],{"class":464,"line":998},[462,3012,3013],{"class":468},"cp",[462,3015,3016],{"class":472}," ~\u002Ftemplates\u002Fnuxt.config.ts",[462,3018,3019],{"class":472}," .\n",[462,3021,3022,3024,3027],{"class":464,"line":1004},[462,3023,3013],{"class":468},[462,3025,3026],{"class":472}," ~\u002Ftemplates\u002Fwrangler.jsonc",[462,3028,3019],{"class":472},[434,3030,3031],{},"但在面对以下开发痛点时，这种脚本就无能为力了：",[804,3033,3034,3040,3050],{},[563,3035,3036,3039],{},[1157,3037,3038],{},"固定的默认值。"," 该脚本将 Nuxt UI 模块写死了。如果我们想换成 Ant Design UI 呢？每增加一个可选的模块，就需要用户提供更多的命令行参数。",[563,3041,3042,3045,3046,3049],{},[1157,3043,3044],{},"无法理解用户的真实意图。"," “帮我建一个博客网站”需要引入 ",[459,3047,3048],{},"@nuxt\u002Fcontent","；“帮我建一个带订阅邮件功能的网站”则需要 Cloudflare D1 和 Drizzle ORM。普通的 Shell 脚本根本无法识别这些细微的语义差别——针对每种细微的变体，你都必须重新写一个脚本。",[563,3051,3052,3055,3056,3059],{},[1157,3053,3054],{},"在不知不觉中悄然过时。"," Nuxt 框架在大版本迭代时，其目录规范往往会发生显著改变。例如 Nuxt 4 将默认的源码目录更改为了 ",[459,3057,3058],{},"app\u002F","。如果你继续运行为 Nuxt 3 编写的脚手架脚本，它会在后台静默地生成错误的目录结构，且绝不会向用户发出任何警报。",[434,3061,3062,3065],{},[1157,3063,3064],{},"应用脚手架的构建","本质上是一个需要“因地制宜做出决策”的问题，而不仅仅是“按步骤执行”。当决策变量增加时，传统的脚本机制完全无法实现规模化扩展。",[429,3067,3069],{"id":3068},"为什么要使用-ai-智能体技能取代传统脚本","为什么要使用 AI 智能体技能取代传统脚本？",[434,3071,3072,3073,3076,3077,3079,3080,3082],{},"智能体技能 (Agent Skill) 并非只是一段死板运行的程序代码，而是一套",[1157,3074,3075],{},"供 AI 智能体遵循的结构化知识库","。它包含一个核心的 ",[459,3078,1636],{}," 指南，并可以无缝捆绑该任务所需的任何其他文件（如参考文档、配置模板和可执行脚本）。我们在 ",[1565,3081,1620],{"href":351}," 一文中详细剖析了智能体技能的工作原理。",[434,3084,3085],{},"智能体技能在保留了脚本执行力度的同时 upright 注入了脚本所匮乏的合理决策能力：",[804,3087,3088,3091,3094,3097,3100],{},[563,3089,3090],{},"能够推断用户的意图，自动评估该应用是否需要搭配数据库。",[563,3092,3093],{},"根据指定的候选清单，智能判断并按需安装可选模块。例如，只有在用户明确提出相关需求时，才会オプトイン (Opt-in) 导入 Nuxt Content、i18n 多语言和流量分析模块。",[563,3095,3096],{},"能够敏锐适应当前的开发生态，使用最新的 Nuxt 框架规范、针对 Cloudflare 绑定的 NuxtHub 以及用于部署的 Wrangler 命令行工具。",[563,3098,3099],{},"具备强大的自我修复能力，能够在某一步骤失败时自律分析原因并重新尝试。",[563,3101,3102],{},"在最终交付项目前，能够严格按照最终检查清单 (Checklist) 进行校验，确保交付质量。",[429,3104,3106],{"id":3105},"我们的-nuxt-cloudflare-脚手架智能体技能技术内幕","我们的 Nuxt & Cloudflare 脚手架智能体技能技术内幕",[434,3108,3109,3110,3117],{},"这个开源技能 ",[1565,3111,3114],{"href":3112,"rel":3113},"https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fscaffold-nuxt-cloudflare-app-skill",[1569],[459,3115,3116],{},"scaffold-nuxt-cloudflare-app-skill"," 包含了一整套面向生产环境的自律构建流程：",[560,3119,3120,3153,3174,3200,3230,3269,3277],{},[563,3121,3122,716,3125],{},[1157,3123,3124],{},"自动澄清无法推断的模糊要点",[804,3126,3127,3138,3144],{},[563,3128,3129,3130,3133,3134,3137],{},"确认首选的 UI 框架（默认是 ",[1157,3131,3132],{},"Nuxt UI","，也可选择 ",[1157,3135,3136],{},"Antdv Next","）；",[563,3139,3140,3141,3137],{},"确认是否需要数据库支持（如 ",[1157,3142,3143],{},"Cloudflare D1",[563,3145,3146,3147,3150,3151,2095],{},"确认是否需要额外模块，例如用于构建 CMS 功能的 ",[459,3148,3149],{},"@nuxtjs\u002Fi18n"," 或 ",[459,3152,3048],{},[563,3154,3155,3158,3159,3162,3163,3166,3167,1164,3170,3173],{},[1157,3156,3157],{},"初始化基础应用框架","：运行 ",[459,3160,3161],{},"pnpm dlx nuxi@latest init"," 命令，使用 ",[459,3164,3165],{},"pnpm"," 包管理器初始化最新版的 Nuxt 框架。随后配置原生构建白名单 (native-build allowlists)，以确保 Cloudflare 的构建环境能够顺利编译 ",[459,3168,3169],{},"better-sqlite3",[459,3171,3172],{},"sharp"," 等原生依赖包。",[563,3175,3176,3179,3180,3150,3183,3186,3187,3186,3190,3186,3193,3186,3196,3199],{},[1157,3177,3178],{},"基于决策表按需安装模块","：自动安装 ",[459,3181,3182],{},"@nuxt\u002Fui",[459,3184,3185],{},"@antdv-next\u002Fnuxt","、",[459,3188,3189],{},"@nuxt\u002Fimage",[459,3191,3192],{},"@nuxtjs\u002Fseo",[459,3194,3195],{},"@nuxthub\u002Fcore",[459,3197,3198],{},"@vueuse\u002Fnuxt","，并在选中时条件分支安装 Drizzle\u002FD1、Nuxt Content 以及 i18n。",[563,3201,3202,716,3205],{},[1157,3203,3204],{},"科学合理的目录结构布局",[804,3206,3207,3212,3217,3222,3227],{},[563,3208,3209,3211],{},[459,3210,3058],{}," (Nuxt 4 规范)",[563,3213,3214],{},[459,3215,3216],{},"server\u002F",[563,3218,3219],{},[459,3220,3221],{},"shared\u002F",[563,3223,3224],{},[459,3225,3226],{},"tests\u002F",[563,3228,3229],{},"根目录下的各类标准配置文件。",[563,3231,3232,716,3237],{},[1157,3233,3234,3235],{},"精细配置 ",[459,3236,2909],{},[804,3238,3239,3248,3255,3262],{},[563,3240,3241,3242,1164,3245],{},"为 SEO 配置 ",[459,3243,3244],{},"site.url",[459,3246,3247],{},"site.name",[563,3249,3250,3251,3254],{},"写入用于 Cloudflare 绑定的 NuxtHub ",[459,3252,3253],{},"hub"," 配置块",[563,3256,3257,3258,3261],{},"自动配置 ",[459,3259,3260],{},"routeRules"," 路由与缓存规则",[563,3263,3264,3265,3268],{},"写入最新的 ",[459,3266,3267],{},"compatibilityDate"," 兼容性日期",[563,3270,3271],{},[1157,3272,3273,3274,3276],{},"科学生成 ",[459,3275,2912],{}," 配置文件并进行云资源绑定",[563,3278,3279,3282,3283,3286,3287,3290],{},[1157,3280,3281],{},"配置 Vitest 测试框架与 ESLint 代码规范","，随后运行",[1157,3284,3285],{},"最终校验清单","，在后台实际执行 ",[459,3288,3289],{},"pnpm install && pnpm dev"," 进行沙箱运行测试，全部通过后方才宣告构建成功。",[429,3292,3294],{"id":3293},"传统-shell-脚本-vs-ai-智能体技能维度对比","传统 Shell 脚本 vs AI 智能体技能：维度对比",[3296,3297,3298,3314],"table",{},[3299,3300,3301],"thead",{},[3302,3303,3304,3308,3311],"tr",{},[3305,3306,3307],"th",{},"对比维度",[3305,3309,3310],{},"传统 Shell 脚本",[3305,3312,3313],{},"AI 智能体技能",[3315,3316,3317,3329,3340,3351,3362,3373],"tbody",{},[3302,3318,3319,3323,3326],{},[3320,3321,3322],"td",{},"意图识别能力",[3320,3324,3325],{},"❌ 行为完全写死",[3320,3327,3328],{},"✅ 自动理解自然语言并按需适配",[3302,3330,3331,3334,3337],{},[3320,3332,3333],{},"动态决策能力",[3320,3335,3336],{},"❌ 仅限硬编码的参数判断",[3320,3338,3339],{},"✅ 运行时动态推敲最佳方案",[3302,3341,3342,3345,3348],{},[3320,3343,3344],{},"生态更新适应度",[3320,3346,3347],{},"❌ 需开发者手动重写代码",[3320,3349,3350],{},"✅ 自动感知当前技术栈规范并适配",[3302,3352,3353,3356,3359],{},[3320,3354,3355],{},"容错与恢复机制",[3320,3357,3358],{},"❌ 一旦出错立即中断退出",[3320,3360,3361],{},"✅ 自动定位错误、自愈并继续运行",[3302,3363,3364,3367,3370],{},[3320,3365,3366],{},"成果质量校验",[3320,3368,3369],{},"❌ 缺乏质量校验机制",[3320,3371,3372],{},"✅ 依托最终检查清单进行闭环测试",[3302,3374,3375,3378,3381],{},[3320,3376,3377],{},"长期维护成本",[3320,3379,3380],{},"❌ 参数膨胀、逻辑混乱、易崩坏",[3320,3382,3383],{},"✅ 只需维护人可读的 Markdown 设计文件",[429,3385,3387],{"id":3386},"如何使用-npx-skills-命令行工具安装-ai-智能体技能","如何使用 npx skills 命令行工具安装 AI 智能体技能",[434,3389,3390,3391,3396],{},"只需一行简单的命令，即可通过 ",[1565,3392,3395],{"href":3393,"rel":3394},"https:\u002F\u002Fgithub.com\u002Fvercel-labs\u002Fskills",[1569],"skills CLI"," 工具完成该技能的无缝导入：",[453,3398,3400],{"className":455,"code":3399,"language":457,"meta":424,"style":424},"npx skills add https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fscaffold-nuxt-cloudflare-app-skill.git -g\n",[459,3401,3402],{"__ignoreMap":424},[462,3403,3404,3406,3409,3412,3415],{"class":464,"line":465},[462,3405,2952],{"class":468},[462,3407,3408],{"class":472}," skills",[462,3410,3411],{"class":472}," add",[462,3413,3414],{"class":472}," https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fscaffold-nuxt-cloudflare-app-skill.git",[462,3416,3417],{"class":472}," -g\n",[434,3419,3420,3421],{},"该工具会自动克隆仓库、定位技能文件，并询问您希望将此技能关联到本地系统所支持的 77 个智能体中的哪一个：\n",[477,3422],{"alt":3423,"src":3424},"在终端中运行 npx skills add 命令行工具来全局安装 Nuxt 脚手架构建技能的界面","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20AI%20Agent%20Skills%20Replace%20Nuxt%20App%20Scaffolding%20Scripts\u002Fnpx-skills-add-scaffold-nuxt-installation.webp",[434,3426,3427,3428,3431,3432,3435,3436],{},"我们强烈推荐选择 ",[1157,3429,3430],{},"Symlink (符号链接)"," 方式。这种模式下，技能只需在 ",[459,3433,3434],{},"~\u002F.agents\u002Fskills"," 目录中下载一次，所有被勾选的智能体都将指向这同一份原始文件。\n",[477,3437],{"alt":3438,"src":3439},"终端中显示的集中式 Agent 技能安装摘要以及软链接 (Symlink) 路径配置详情","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20AI%20Agent%20Skills%20Replace%20Nuxt%20App%20Scaffolding%20Scripts\u002Fnpx-skills-installation-summary-details.webp",[804,3441,3442],{},[563,3443,3444],{},[1223,3445,3446,3447,2095],{},"如果您希望深入了解如何有效避免技能碎片化并在一处集中管理它们，请参阅我们的这篇深度好文：",[1565,3448,3449],{"href":359},"使用 npx skills 工具来彻底解决不同 AI 智能体（如 Claude Code 或 Kimi）技能碎片化问题",[434,3451,3452],{},"完成安装后，打开 Claude Code 终端，输入内置命令即可确认该技能已成功激活。",[434,3454,3455],{},[477,3456],{"alt":3457,"src":3458},"Claude Code 命令行终端中显示的全新安装且已激活可用的 \u002Fscaffold-nuxt 斜杠快捷命令","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20AI%20Agent%20Skills%20Replace%20Nuxt%20App%20Scaffolding%20Scripts\u002Fclaude-code-scaffold-nuxt-slash-command-active.webp",[434,3460,3461],{},"接下来，您只需输入一句简单的自然语言，即可瞬间搞定复杂的工程脚手架搭建：",[2785,3463,3464],{},[434,3465,3466],{},"\"Scaffold a new Nuxt app deployed to Cloudflare Workers — Nuxt UI, a blog section, and a D1 database\"",[434,3468,3469,3470,3474],{},"该脚手架技能完全开源，欢迎访问我们的 ",[1565,3471,3473],{"href":3112,"rel":3472},[1569],"GitHub 仓库"," 提交 Feedback 并上手体验！",[1095,3476,3477],{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":424,"searchDepth":543,"depth":604,"links":3479},[3480,3481,3482,3483,3484],{"id":2920,"depth":543,"text":2921},{"id":3068,"depth":543,"text":3069},{"id":3105,"depth":543,"text":3106},{"id":3293,"depth":543,"text":3294},{"id":3386,"depth":543,"text":3387},[1110],"2026-08-25","轻松在 Cloudflare Workers 上快速构建 Nuxt 应用程序脚手架。深入剖析并学习我们如何使用功能强大、极其灵活、支持自我修复且拥有决策能力的 AI 智能体技能来彻底取代脆弱的传统 Shell 脚本，并详细演示如何通过官方 the npx skills 命令行工具将其无缝安装到您的开发工作流中。","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20AI%20Agent%20Skills%20Replace%20Nuxt%20App%20Scaffolding%20Scripts\u002FZH-How-AI-Agent-Skills-Replace-Nuxt-App-Scaffolding-Scripts.webp","Nuxt应用在Cloudflare及Serverless上的脚手架构建：传统Shell脚本与AI智能体技能对比。分析为什么智能体技能优于传统初始化脚本。",{"schemaOrg":3491,"robots":1131,"sitemap":3493},[3492],{"@type":1607,"headline":2901,"description":3487,"image":3488},{"lastmod":3486},{"title":3495,"description":3487,"ogTitle":2901,"ogDescription":3487,"twitterTitle":2901,"twitterDescription":3487},"Nuxt应用在Cloudflare及Serverless上的脚手架构建：传统Shell脚本与AI智能体技能对比","zh\u002Farticle\u002Fhow-ai-agent-skills-replace-nuxt-app-scaffolding-scripts",[3498,3499,1140,3500],"Nuxt","Cloudflare","Scaffolding","cjXSEDECxsBr5bmHuYXOSYY0oFEz98tTOLGuKo9KYag",{"id":3503,"title":3504,"author":424,"body":3505,"category":4715,"date":4718,"description":4719,"extension":1113,"image":4720,"imageAlt":4721,"isPublished":976,"meta":4722,"minRead":1027,"navigation":976,"path":355,"seo":4746,"stem":4748,"tags":4749,"updatedAt":1141,"__hash__":4752},"article\u002Fzh\u002Farticle\u002Fbringing-buzz-to-deepseek-harness.md","为 DeepSeek Harness 接入 Buzz 协作平台：构建自托管 Nostr 消息网关的完整实践",{"type":426,"value":3506,"toc":4699},[3507,3513,3535,3543,3546,3550,3555,3596,3599,3658,3662,3669,3944,3947,3951,3955,3961,3965,3978,3982,3992,4039,4046,4050,4053,4085,4088,4093,4133,4141,4147,4156,4162,4192,4206,4210,4219,4250,4272,4320,4327,4333,4339,4346,4352,4357,4365,4379,4385,4395,4432,4435,4441,4448,4454,4458,4461,4612,4615,4656,4660,4666,4670,4696],[434,3508,3509],{},[477,3510],{"alt":3511,"src":3512},"DeepSeek Harness 消息网关连接至 Block Buzz 频道的运行概览","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-nostr-gateway-overview.webp",[434,3514,3515,3516,3523,3524,3529,3530,3534],{},"DeepSeek Harness（DSH）的官方插件 ",[1157,3517,3518],{},[1565,3519,3522],{"href":3520,"rel":3521},"https:\u002F\u002Fgithub.com\u002Fa792883583\u002Fdsh-message-gateway",[1569],"dsh-message-gateway","，能够将 DeepSeek Harness 助手无缝扩展至 Discord、Telegram、微信等多种主流即时通讯平台。该插件仓库已被 Fork 并进行了二次开发，旨在将 ",[1157,3525,3526],{},[1565,3527,3528],{"href":383},"自建 Block 旗下 Buzz 协作平台：轻松构建人类与 AI 智能体高效协同工作的全新共享工作空间"," 接入支持列表。Fork 后的开源代码仓库位于 GitHub：",[1565,3531,3532],{"href":3532,"rel":3533},"https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fdsh-message-gateway",[1569]," 。",[3536,3537],"article-card",{"description":3538,"image":3539,"image-alt":3540,"label":3541,"min-read":3542,"title":3528,"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,3544,3545],{},"DSH 助手作为一个全功能成员加入 Buzz Nostr 中继，既能接收私信（DM），也能接收被 @mention 提及的频道消息，并通过与 Web UI 完全相同的独立会话智能体管线输出响应。",[429,3547,3549],{"id":3548},"dsh-message-gateway-插件架构剖析","dsh-message-gateway 插件架构剖析",[434,3551,3552,3554],{},[1157,3553,3522],{}," 插件的系统架构清晰划分为宿主端与客户端两大部分：",[804,3556,3557,3586],{},[563,3558,3559,593,3562,3565,3566,3569,3570,3573,3574,3577,3578,3581,3582,3585],{},[1157,3560,3561],{},"宿主端（Node 环境）",[459,3563,3564],{},"gateway-store","（凭证与配置持久化存储，位于 ",[459,3567,3568],{},"~\u002F.dsh\u002Fgateway.json","）、",[459,3571,3572],{},"platforms.ts","（支持平台定义与连通性自检）、",[459,3575,3576],{},"routes.ts","（对外暴露的 ",[459,3579,3580],{},"\u002Fgateway\u002F*"," 路由端点）以及 ",[459,3583,3584],{},"bridge-manager.ts","（常驻网关桥接器：负责按会话维护独立 Agent 实例并统一管理流式响应推送）。",[563,3587,3588,3591,3592,3595],{},[1157,3589,3590],{},"客户端（浏览器前端）","：侧边栏的“",[1157,3593,3594],{},"Message platforms","”可视化配置页面，负责录入密钥参数、发起连通性测试以及直观监控网关实时在线状态。",[434,3597,3598],{},"为网关接入一个全新通讯平台通常需要经历以下三步：",[560,3600,3601,3619,3633],{},[563,3602,3603,3606,3607,3610,3611,3614,3615,3618],{},[1157,3604,3605],{},"实现 Bridge 桥接类","：提供 ",[459,3608,3609],{},"start\u002Fstop\u002Fstatus"," 生命周期方法以及 ",[459,3612,3613],{},"onText(text, frame)"," 消息回调，结构规范与现有的 ",[459,3616,3617],{},"wecom-bridge.ts"," 完全一致。",[563,3620,3621,3624,3625,3628,3629,3632],{},[1157,3622,3623],{},"接入 bridge-manager 调度器","：复用既有的多会话调度管线（",[459,3626,3627],{},"ensureAgentForKey"," + ",[459,3630,3631],{},"pendingMap","），并将底层文本输出流挂载至该平台的专用回复接收器。",[563,3634,3635,3638,3639,2034,3642,3645,3646,3649,3650,3653,3654,3657],{},[1157,3636,3637],{},"对接持久化存储与配置路由","：在 ",[459,3640,3641],{},"\u002Fgateway\u002Fsave",[459,3643,3644],{},"\u002Fgateway\u002Fdelete"," 逻辑中实现：",[1157,3647,3648],{},"保存配置即自动启动桥接服务，删除配置则优雅停止桥接服务","，配合 ",[459,3651,3652],{},"autoStartXxx"," 状态标记确保 ",[459,3655,3656],{},"dsh web"," 守护进程开机自动重连。",[429,3659,3661],{"id":3660},"buzz-网关桥接实现nostr-协议标准与事件生命周期","Buzz 网关桥接实现：Nostr 协议标准与事件生命周期",[434,3663,3664,3665,3668],{},"本次接入直接使用 ",[1157,3666,3667],{},"DeepSeek Harness"," 自行编写完成了完整的 Buzz 适配桥接器。底层严格遵循了如下 Nostr 协议规范标准：",[3296,3670,3671,3683],{},[3299,3672,3673],{},[3302,3674,3675,3680],{},[3305,3676,3677],{},[1157,3678,3679],{},"维度 \u002F 阶段",[3305,3681,3682],{},"协议实现规范与技术细节",[3315,3684,3685,3706,3724,3751,3769,3794,3819,3841,3855,3869,3888,3905,3919],{},[3302,3686,3687,3692],{},[3320,3688,3689],{},[1157,3690,3691],{},"底层传输（Transport）",[3320,3693,3694,3695,3698,3699,3702,3703],{},"单条经过 NIP-42 鉴权认证的 WebSocket 链路；默认中继连接地址为 ",[459,3696,3697],{},"ws:\u002F\u002Flocalhost:3000","；输入的 ",[459,3700,3701],{},"http(s):\u002F\u002F"," 会自动规整为 ",[459,3704,3705],{},"ws(s):\u002F\u002F",[3302,3707,3708,3713],{},[3320,3709,3710],{},[1157,3711,3712],{},"鉴权认证（Auth）",[3320,3714,3715,3716,3719,3720,3723],{},"AUTH 事件 ",[459,3717,3718],{},"kind 22242","，携带标签 ",[459,3721,3722],{},"[[\"relay\", url], [\"challenge\", challenge]]","，内容为空字符串，由 Agent 的私钥完成签名",[3302,3725,3726,3731],{},[3320,3727,3728],{},[1157,3729,3730],{},"订阅机制（Subs）",[3320,3732,3733,593,3736,3739,3740,3743,3744,3747,3748],{},[1157,3734,3735],{},"严格基于频道隔离",[459,3737,3738],{},"REQ {\"kinds\":[9], \"#h\":[\u003Cuuid>]}"," — 每个频道独立建立一条订阅。全局性的 ",[459,3741,3742],{},"kinds:[9]"," 虽能收到 EOSE 但绝不广播推送；多值 ",[459,3745,3746],{},"#h"," 标签过滤在协议中",[1157,3749,3750],{},"无法正常分发",[3302,3752,3753,3758],{},[3320,3754,3755],{},[1157,3756,3757],{},"频道发现（Discovery）",[3320,3759,3760,3761,3764,3765,3768],{},"历史元数据回溯查询 ",[459,3762,3763],{},"REQ {kinds:[39000]}"," 提取频道详情（其中 ",[459,3766,3767],{},"type == \"dm\""," 用于标记单聊私信频道）",[3302,3770,3771,3776],{},[3320,3772,3773],{},[1157,3774,3775],{},"成员变动订阅",[3320,3777,3778,3779,3782,3783,3785,3786,3789,3790,3793],{},"实时长连接订阅 ",[459,3780,3781],{},"REQ {kinds:[44100,44101], \"#p\":[Agent 公钥], since: now-60s}"," — 44100 为入群，44101 为被移出，均附带 ",[459,3784,434],{},"+",[459,3787,3788],{},"h","；成员关系变更时",[1157,3791,3792],{},"无需重连","即可动态热更新订阅状态",[3302,3795,3796,3801],{},[3320,3797,3798],{},[1157,3799,3800],{},"即时聊天事件",[3320,3802,3803,3806,3807,3810,3811,3814,3815,3818],{},[459,3804,3805],{},"kind 9"," 事件，携带 ",[459,3808,3809],{},"[\"h\", channel]"," 频道标签，可选附带 ",[459,3812,3813],{},"[\"e\", replyTo]"," 回复目标与 ",[459,3816,3817],{},"[\"p\", mention]"," 被提及者标签",[3302,3820,3821,3826],{},[3320,3822,3823],{},[1157,3824,3825],{},"原位更新编辑",[3320,3827,3828,3831,3832,2034,3834,3837,3838,3840],{},[459,3829,3830],{},"kind 40003"," 事件，附带 ",[459,3833,3788],{},[459,3835,3836],{},"e"," 目标标签；内容完全替换；中继单包上限 64 KB → 严控载荷 ≤ 60,000 B；超长回复分块处理 — 首块用于原位编辑替换，超出部分作为回复串线程的 ",[459,3839,3805],{}," 消息追加",[3302,3842,3843,3848],{},[3320,3844,3845],{},[1157,3846,3847],{},"CLOSED 异常帧处理",[3320,3849,3850,3851,3854],{},"鉴权未完成前收到 ",[459,3852,3853],{},"auth-required"," 属于正常引导阶段（完成 AUTH 后重新拉起订阅）；鉴权完成后遇断连 → 阶梯式限次重试（最多 3 次，间隔 0\u002F1\u002F2 秒退避）；整链重连时全量重构上下文",[3302,3856,3857,3862],{},[3320,3858,3859],{},[1157,3860,3861],{},"中继拉取上限",[3320,3863,3864,3865,3868],{},"每次订阅最多拉取 2000 条历史事件，即使配置了 ",[459,3866,3867],{},"since"," 过滤参数，中继仍按自最新向过去的时间倒序返回",[3302,3870,3871,3876],{},[3320,3872,3873],{},[1157,3874,3875],{},"消息命中判定",[3320,3877,3878,3879,3881,3882,3884,3885,3887],{},"仅当满足以下任一条件时才激活处理入站 ",[459,3880,3805],{},"：(a) ",[459,3883,434],{}," 标签明确包含自身公钥，(b) 处于 DM 私信频道，(c) 回复关联的 ",[459,3886,3836],{}," 根事件为自身发出的消息。自动过滤自身公钥发送的内容（彻底杜绝自环）",[3302,3889,3890,3895],{},[3320,3891,3892],{},[1157,3893,3894],{},"出站 @ 提及",[3320,3896,3897,3898,3901,3902,3904],{},"出站内容按纯文本原样发布 — 中继端不对正文中的 ",[459,3899,3900],{},"@"," 符号进行预校验；",[459,3903,434],{}," 标签填入当前对话原作者以及至多 7 位其他被提及者的公钥（单条上限 8 位）",[3302,3906,3907,3912],{},[3320,3908,3909],{},[1157,3910,3911],{},"私聊消息（DM）",[3320,3913,3914,3915,3918],{},"依赖中继作用域内的明文受限频道（元数据标注 ",[459,3916,3917],{},"type: \"dm\"","） — 当前桥接实现中未引入 NIP-04\u002F44 复杂非对称端到端加密",[3302,3920,3921,3926],{},[3320,3922,3923],{},[1157,3924,3925],{},"媒体附件（入站）",[3320,3927,3928,3929,3932,3933,3936,3937,3936,3940,3943],{},"NIP-92 ",[459,3930,3931],{},"imeta"," 规范（",[459,3934,3935],{},"url",", ",[459,3938,3939],{},"sha256",[459,3941,3942],{},"m","）→ 常规 HTTP(S) 流式下载，本地校验 SHA-256 完整性，单文件限制 20 MB，每条消息最多 4 张；出站图片发布暂无官方中继协议路径，现阶段不支持出站图片",[434,3945,3946],{},"Buzz 适配网关的启动引导时序图如下：",[477,3948],{"src":3949,"alt":3950},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-bootstrap.webp","展示 Buzz 网关引导连接与 NIP-42 协议身份鉴权流程的时序图",[445,3952,3954],{"id":3953},"基于-nostr-40003-事件原位编辑实现的实时流式输出","基于 Nostr 40003 事件原位编辑实现的实时流式输出",[434,3956,3957,3958,593],{},"Nostr 协议缺乏原生打字中（Typing）状态通知，且底层事件设计为严格只增不改。为了让对话过程具备行云流水的实时交互感，Buzz 适配网关",[1157,3959,3960],{},"通过原位编辑巧妙模拟了流式打字输出",[477,3962],{"src":3963,"alt":3964},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-reply.webp","基于 kind 40003 事件原位编辑模拟打字流式响应的逻辑流程图",[804,3966,3967],{},[563,3968,3969],{},[1223,3970,3971,3972,3974,3975,3977],{},"网关首先秒级发出一条 ",[459,3973,3805],{}," 占位消息，随后在 Agent 推理过程中按设定的节流阈值连续发射 ",[459,3976,3830],{}," 原位编辑事件逐步追加渲染内容，并在推理终点落定最终文本。这一设计思路与 Telegram、Discord 桥接器的实现方式一脉相承。",[445,3979,3981],{"id":3980},"通过聊天指令打通-deepseek-harness-本地工作区","通过聊天指令打通 DeepSeek Harness 本地工作区",[434,3983,3984,3985,3988,3989,860],{},"DSH Web 界面所支持的“工作区（Workspaces）”核心能力依赖于底层 ",[459,3986,3987],{},"@deepseek-ai\u002Fdsh-workspace"," 模块中的 ",[459,3990,3991],{},"workspaceRegistry",[453,3993,3997],{"className":3994,"code":3995,"language":3996,"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",[459,3998,3999],{"__ignoreMap":424},[462,4000,4001,4005,4008,4011,4015,4018,4021,4023,4025,4028,4031,4033,4036],{"class":464,"line":465},[462,4002,4004],{"class":4003},"spNyl","const",[462,4006,4007],{"class":539}," existing ",[462,4009,4010],{"class":502},"=",[462,4012,4014],{"class":4013},"s7zQu"," await",[462,4016,4017],{"class":539}," ctx",[462,4019,4020],{"class":502},".",[462,4022,3991],{"class":539},[462,4024,4020],{"class":502},[462,4026,4027],{"class":2939},"resolveByPath",[462,4029,4030],{"class":539},"(request",[462,4032,4020],{"class":502},[462,4034,4035],{"class":539},"path)",[462,4037,4038],{"class":502},";\n",[434,4040,4041,4042,4045],{},"Buzz 桥接器通过引入全新的聊天斜杠指令 ",[459,4043,4044],{},"\u002Fworkspace \u003C目录路径>","，允许在群聊中直接向 DSH 注册并绑定本地现存的文件夹。在此之后，该会话下的所有交互都将牢牢锚定在此目录中，并能实时无缝同步在 DSH Web UI 端查看。",[477,4047],{"src":4048,"alt":4049},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-workspace.webp","通过网关聊天指令动态注册并绑定 DeepSeek Harness 本地工作区的架构示意图",[434,4051,4052],{},"开发与使用过程中需重点明确的三大设计机制：",[804,4054,4055,4065,4075],{},[563,4056,4057,4060,4061,4064],{},[1157,4058,4059],{},"变更目录等同于开启全新会话","：会话的工作目录（",[459,4062,4063],{},"cwd","）在初始化生成 Session Header 时即完成写入，后续在生命周期内不可直接原地篡改。",[563,4066,4067,4070,4071,4074],{},[1157,4068,4069],{},"目标本地目录必须预先存在","：底层 ",[459,4072,4073],{},"create"," 注册函数会对路径进行强校验，若路径在宿主机不存在将直接抛出异常拒绝绑定。",[563,4076,4077,4080,4081,4084],{},[1157,4078,4079],{},"高度安全敏感指令","：通过网关衍生的会话均赋予 ",[1157,4082,4083],{},"auto-approve","（自动批准命令执行）特权，拥有对目标文件夹直接进行读写和工具操作的完全访问权。",[429,4086,4087],{"id":4087},"安装与配置全流程指南",[560,4089,4090],{},[563,4091,4092],{},"在终端运行以下指令完成插件拉取与启动：",[453,4094,4096],{"className":455,"code":4095,"language":457,"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",[459,4097,4098,4117,4121,4126],{"__ignoreMap":424},[462,4099,4100,4103,4106,4109,4112,4114],{"class":464,"line":465},[462,4101,4102],{"class":468},"dsh",[462,4104,4105],{"class":472}," plugin",[462,4107,4108],{"class":472}," --profile",[462,4110,4111],{"class":472}," web",[462,4113,3411],{"class":472},[462,4115,4116],{"class":472}," https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fdsh-message-gateway.git\n",[462,4118,4119],{"class":464,"line":543},[462,4120,977],{"emptyLinePlaceholder":976},[462,4122,4123],{"class":464,"line":604},[462,4124,4125],{"class":2218},"# Start DSH web\n",[462,4127,4128,4130],{"class":464,"line":973},[462,4129,4102],{"class":468},[462,4131,4132],{"class":472}," web\n",[560,4134,4135],{"start":543},[563,4136,4137,4138,4140],{},"待 DSH Web 界面启动并用浏览器打开后，点击界面侧边栏中的“",[1157,4139,3594],{},"”图标：",[434,4142,4143],{},[477,4144],{"alt":4145,"src":4146},"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",[560,4148,4149],{"start":604},[563,4150,4151,4152,4155],{},"在左侧平台列表中选择“",[1157,4153,4154],{},"Buzz","”：",[434,4157,4158],{},[477,4159],{"alt":4160,"src":4161},"DeepSeek Harness 消息网关内的 Buzz 协议参数与密钥对配置面板","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-message-gateway-buzz-config-panel.webp",[560,4163,4164,4175,4186],{"start":973},[563,4165,4166,4167,4170,4171,4174],{},"点击“",[1157,4168,4169],{},"Generate keypair","”按钮即时生成全新的 Nostr 身份密钥对。请务必将生成的 ",[459,4172,4173],{},"npub"," 公钥妥善复制暂存，后续步骤将作为关键身份凭证。",[563,4176,4177,4178,4181,4182,4185],{},"准确填入您的 ",[1157,4179,4180],{},"Relay URL","（中继地址）以及需要监听订阅的 ",[1157,4183,4184],{},"Channels","（允许访问的频道 UUID 白名单列表）。",[563,4187,4188,4189,4191],{},"点击底部的“",[1157,4190,1262],{},"”按钮完成保存。",[434,4193,4194,4195,4198,4199,4202,4203,4205],{},"表单提交后，系统将持久化保存配置并",[1157,4196,4197],{},"立即启动 Buzz 网关服务","。私钥 ",[459,4200,4201],{},"nsec"," 作为最高机密凭证被自动保护，仅独立存放在宿主机本地的 ",[459,4204,3568],{}," 文件中。",[445,4207,4209],{"id":4208},"将-dsh-智能体注册至-buzz-nostr-中继服务","将 DSH 智能体注册至 Buzz Nostr 中继服务",[434,4211,4212,4215,4216,4218],{},[1157,4213,4214],{},"将 DSH 助手作为新成员注册加入中继","。此处公钥填入上文所生成的 ",[459,4217,4173],{}," 字符串：",[453,4220,4222],{"className":455,"code":4221,"language":457,"meta":424,"style":424},"docker compose exec relay buzz-admin add-member --pubkey npub123123123\n",[459,4223,4224],{"__ignoreMap":424},[462,4225,4226,4229,4232,4235,4238,4241,4244,4247],{"class":464,"line":465},[462,4227,4228],{"class":468},"docker",[462,4230,4231],{"class":472}," compose",[462,4233,4234],{"class":472}," exec",[462,4236,4237],{"class":472}," relay",[462,4239,4240],{"class":472}," buzz-admin",[462,4242,4243],{"class":472}," add-member",[462,4245,4246],{"class":472}," --pubkey",[462,4248,4249],{"class":472}," npub123123123\n",[434,4251,4252,4255,4256,4259,4260,4263,4264,4267,4268,4271],{},[1157,4253,4254],{},"将 DSH 助手加入特定的沟通频道","。仅加入中继并不会让助手自动出现在频道成员列表中。需要通过 ",[459,4257,4258],{},"buzz-cli"," 进一步执行入群操作。注意此处 ",[459,4261,4262],{},"--pubkey"," 参数必须使用 ",[1157,4265,4266],{},"HEX 16 进制公钥","格式，而非 npub 格式（在上一步执行 ",[459,4269,4270],{},"buzz-admin add-member"," 时，终端输出中会打印对应的 HEX 公钥）：",[453,4273,4275],{"className":455,"code":4274,"language":457,"meta":424,"style":424},"buzz channels add-member --channel \u003CCHANNEL_UUID> --pubkey \u003CAGENT_HEX> --role member\n",[459,4276,4277],{"__ignoreMap":424},[462,4278,4279,4282,4285,4287,4290,4293,4296,4299,4302,4304,4306,4309,4312,4314,4317],{"class":464,"line":465},[462,4280,4281],{"class":468},"buzz",[462,4283,4284],{"class":472}," channels",[462,4286,4243],{"class":472},[462,4288,4289],{"class":472}," --channel",[462,4291,4292],{"class":502}," \u003C",[462,4294,4295],{"class":472},"CHANNEL_UUI",[462,4297,4298],{"class":539},"D",[462,4300,4301],{"class":502},">",[462,4303,4246],{"class":472},[462,4305,4292],{"class":502},[462,4307,4308],{"class":472},"AGENT_HE",[462,4310,4311],{"class":539},"X",[462,4313,4301],{"class":502},[462,4315,4316],{"class":472}," --role",[462,4318,4319],{"class":472}," member\n",[3536,4321],{"description":4322,"image":3539,"image-alt":3540,"label":4323,"min-read":4324,"title":4325,"to":4326},"手把手教您安装和配置 buzz-cli，以便在 Nostr 中继上管理频道、成员密钥以及 AI 智能体的角色权限。","CLI 指南","5","如何安装并使用 buzz-cli","\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues#install-buzz-cli",[434,4328,4329,4330,4332],{},"随后可通过 ",[459,4331,4258],{}," 灵活更新 DSH 助手在 Nostr 中继中的公开资料，设置更具辨识度的昵称：",[434,4334,4335],{},[477,4336],{"alt":4337,"src":4338},"使用 buzz-cli 命令行工具更新 DSH 助手在 Nostr 中继上的公开个人资料","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-assistant-buzz-cli-profile-update.webp",[434,4340,4341,4342,4345],{},"在客户端向 DSH 助手发送一次 ",[1157,4343,4344],{},"Wave","（Buzz 平台独特的 DM 私信打招呼动作）。助手随后返回回复，代表网关通讯已完全就绪：",[434,4347,4348],{},[477,4349],{"alt":4350,"src":4351},"在 Buzz 客户端向 DeepSeek Harness 助手发送 Wave 私信进行连通性验证","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-dm-wave-greeting-reply.webp",[434,4353,4354],{},[1223,4355,4356],{},"向 DSH 助手发送 Wave 私信打招呼 — 桥接网关正常秒级响应。",[445,4358,4360,4361,4364],{"id":4359},"通过-workspace-指令开启本地工作区联动","通过 ",[459,4362,4363],{},"\u002Fworkspace"," 指令开启本地工作区联动",[434,4366,4367,4368,4371,4372,4375,4376,4378],{},"由于 ",[459,4369,4370],{},"allowWorkspace"," 配置项出于环境安全考虑默认处于禁用（",[459,4373,4374],{},"false","）状态，未经配置直接向助手发送 ",[459,4377,4363],{}," 命令会被系统拦截拒绝：",[434,4380,4381],{},[477,4382],{"alt":4383,"src":4384},"在未开启 allowWorkspace 权限时发送 \u002Fworkspace 命令被系统安全拦截的提示","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-workspace-command-rejected-error.webp",[434,4386,4387,4388,4391,4392,4394],{},"打开配置文件 ",[459,4389,4390],{},"~\u002F.dsh\u002Fprofiles\u002Fweb\u002Fcordis.patch.yml"," 添加开关配置，随后重启 ",[459,4393,3656],{}," 服务即可：",[453,4396,4400],{"className":4397,"code":4398,"language":4399,"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",[459,4401,4402,4415,4422],{"__ignoreMap":424},[462,4403,4404,4407,4410,4412],{"class":464,"line":465},[462,4405,4406],{"class":502},"-",[462,4408,4409],{"class":1665}," id",[462,4411,1669],{"class":502},[462,4413,4414],{"class":472}," ui-message-gateway\n",[462,4416,4417,4420],{"class":464,"line":543},[462,4418,4419],{"class":1665},"  config",[462,4421,2515],{"class":502},[462,4423,4424,4427,4429],{"class":464,"line":604},[462,4425,4426],{"class":1665},"    allowWorkspace",[462,4428,1669],{"class":502},[462,4430,4431],{"class":2535}," true\n",[434,4433,4434],{},"配置生效并重启后即可顺利绑定：",[434,4436,4437],{},[477,4438],{"alt":4439,"src":4440},"在 Buzz 频道成功执行 \u002Fworkspace 命令完成本地工作区绑定的确认消息","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-workspace-command-success-confirmation.webp",[434,4442,4443,4444,4447],{},"实用贴士：此命令默认假设工作区目录名（例如截图中的 ",[459,4445,4446],{},"TechVoyage","）直接位于当前用户的个人主目录之下；若目录处于其他深层路径，请务必传入完整绝对路径。通过 Buzz 频道中注册绑定好的新会话，也都会完全同步在 DeepSeek Harness Web 界面上显示。",[434,4449,4450],{},[477,4451],{"alt":4452,"src":4453},"DeepSeek Harness Web UI 中展示从 Buzz 频道自动同步关联的活跃工作区会话","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-web-ui-synced-workspace-session.webp",[445,4455,4457],{"id":4456},"buzz-频道支持的完整可用指令","Buzz 频道支持的完整可用指令",[434,4459,4460],{},"其他平台支持的几乎全部原生功能在 Buzz 中均可顺畅运行：",[3296,4462,4463,4473],{},[3299,4464,4465],{},[3302,4466,4467,4470],{},[3305,4468,4469],{},"指令语法",[3305,4471,4472],{},"功能说明",[3315,4474,4475,4485,4495,4505,4514,4524,4534,4544,4553,4576,4595],{},[3302,4476,4477,4482],{},[3320,4478,4479],{},[459,4480,4481],{},"\u002Fworkspace \u003Cfolder>",[3320,4483,4484],{},"将本地已存在的文件夹注册绑定为当前对话专属的工作区环境（受配置项开关保护）",[3302,4486,4487,4492],{},[3320,4488,4489],{},[459,4490,4491],{},"\u002Fhelp",[3320,4493,4494],{},"打印并列出所有支持的命令清单",[3302,4496,4497,4502],{},[3320,4498,4499],{},[459,4500,4501],{},"\u002Ftime",[3320,4503,4504],{},"获取并输出当前服务器系统时间",[3302,4506,4507,4511],{},[3320,4508,4509],{},[459,4510,885],{},[3320,4512,4513],{},"丢弃旧上下文，原地重置开启全新会话",[3302,4515,4516,4521],{},[3320,4517,4518],{},[459,4519,4520],{},"\u002Fclear",[3320,4522,4523],{},"清空当前上下文所有历史对话流",[3302,4525,4526,4531],{},[3320,4527,4528],{},[459,4529,4530],{},"\u002Fstatus",[3320,4532,4533],{},"查看当前 Buzz 消息桥接器的实时在线状态",[3302,4535,4536,4541],{},[3320,4537,4538],{},[459,4539,4540],{},"\u002Fstats",[3320,4542,4543],{},"查看当前系统活跃会话总量及所有接入平台（包含 Buzz）的桥接连接详细状态",[3302,4545,4546,4550],{},[3320,4547,4548],{},[459,4549,900],{},[3320,4551,4552],{},"输出全量指令的底层规范与参数描述文档",[3302,4554,4555,4560],{},[3320,4556,4557],{},[459,4558,4559],{},"@path\u002Fto\u002Ffile",[3320,4561,4562,4563,4565,4566,3186,4568,4571,4572,4575],{},"与 Web 端的 ",[459,4564,3900],{}," 文件提及功能完全一致：Agent 自动相对于工作区读取文件内容；单独发送 ",[459,4567,3900],{},[459,4569,4570],{},"@前缀"," 或使用 ",[459,4573,4574],{},"\u002Ffiles \u003C前缀>"," 可返回文件\u002F文件夹列表",[3302,4577,4578,4582],{},[3320,4579,4580],{},[459,4581,910],{},[3320,4583,4584,4587,4588,4590,4591,4594],{},[459,4585,4586],{},"[provider model effort]"," — 校验有效后实时切换该会话的底层推理大模型与思考深度；单独输入 ",[459,4589,910],{}," 显示支持的候选列表，",[459,4592,4593],{},"\u002Fmodel reset"," 恢复系统默认设置",[3302,4596,4597,4602],{},[3320,4598,4599],{},[459,4600,4601],{},"\u002Feffort",[3320,4603,4604,4607,4608,4611],{},[459,4605,4606],{},"\u003Cid>"," 仅针对支持思考深度的模型调整 reasoning effort；",[459,4609,4610],{},"\u002Feffort reset"," 恢复默认推理深度配置",[445,4613,4614],{"id":4614},"核心安全架构总结",[804,4616,4617,4629,4643],{},[563,4618,4619,4622,4623,4625,4626,4628],{},[1157,4620,4621],{},"私钥资产隔离保护","：Agent 专属的私钥 ",[1157,4624,4201],{}," 仅保存在宿主机的 ",[459,4627,3568],{}," 中（0600 文件只读权限，原子写入机制） — 永远不会通过 API 端点对外暴露，也不会打印至日常调试日志中。",[563,4630,4631,4634,4635,4638,4639,4642],{},[1157,4632,4633],{},"全链路加密签名验签","：每一个入站的 Nostr 事件在投递给 Agent 执行之前，都会严密执行",[1157,4636,4637],{},"密码学数字签名检验","（",[459,4640,4641],{},"verifyEvent","）、消息防重放判重、自发自收环路过滤以及 @提及权限校验。",[563,4644,4645,4648,4649,4651,4652,4655],{},[1157,4646,4647],{},"本地工作区指令受限保护","：由于网关会话默认开启特权自动批准机制，",[459,4650,4363],{}," 目录注册能力默认处于禁用状态，必须由开发者在配置文件中明确开启（",[459,4653,4654],{},"allowWorkspace: true","），严防非预期提权暴露敏感目录。",[429,4657,4659],{"id":4658},"结语拥抱-buzz-去中心化人机协作时代","结语：拥抱 Buzz 去中心化人机协作时代",[434,4661,4662,4663,4665],{},"在将 Buzz 接入 ",[459,4664,3522],{}," 的探索过程中，最大的技术挑战在于严密契合 Nostr 协议的去中心化事件生命周期与事件约束规范。所幸插件本身优秀的架构底座已经将多 Agent 会话管理与命令分发高度抽象，一旦建立起可靠的事件监听与原位流式编辑链路，整个桥接网关便能呈现出超预期的流畅度与生产级稳定性。",[429,4667,4669],{"id":4668},"参考文献与资料","参考文献与资料：",[804,4671,4672,4680,4688],{},[563,4673,4674,4679],{},[1565,4675,4678],{"href":4676,"rel":4677},"https:\u002F\u002Fgithub.com\u002Fa792883583\u002Fdsh-message-gateway\u002Fblob\u002Fmain\u002Fdocs\u002Farchitecture.md",[1569],"dsh-message-gateway architecture guide"," — 官方网关架构指南、扩展实践与安全规范",[563,4681,4682,4687],{},[1565,4683,4686],{"href":4684,"rel":4685},"https:\u002F\u002Fgithub.com\u002Fnbd-wtf\u002Fnostr-tools",[1569],"nostr-tools"," — 底层调用的核心 Nostr JavaScript 客户端库",[563,4689,4690,4695],{},[1565,4691,4694],{"href":4692,"rel":4693},"https:\u002F\u002Fgithub.com\u002Fbytedance\u002Fdeer-flow\u002Fblob\u002Fmain\u002Fbackend\u002Fdocs\u002FIM_CHANNEL_CONNECTIONS.md",[1569],"deer-flow IM channel connections"," — 即时通讯平台多通道连接架构设计参考",[1095,4697,4698],{},"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":543,"depth":604,"links":4700},[4701,4702,4706,4713,4714],{"id":3548,"depth":543,"text":3549},{"id":3660,"depth":543,"text":3661,"children":4703},[4704,4705],{"id":3953,"depth":604,"text":3954},{"id":3980,"depth":604,"text":3981},{"id":4087,"depth":543,"text":4087,"children":4707},[4708,4709,4711,4712],{"id":4208,"depth":604,"text":4209},{"id":4359,"depth":604,"text":4710},"通过 \u002Fworkspace 指令开启本地工作区联动",{"id":4456,"depth":604,"text":4457},{"id":4614,"depth":604,"text":4614},{"id":4658,"depth":543,"text":4659},{"id":4668,"depth":543,"text":4669},[1110,4716,4281,4717],"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":4723,"robots":1131,"sitemap":4745},[4724,4725],{"@type":1607,"headline":3504,"description":4719,"image":4720},{"@type":1119,"name":3504,"description":4719,"image":4720,"step":4726},[4727,4730,4733,4736,4739,4742],{"@type":1122,"name":4728,"text":4729},"阶段一：安装与启动消息网关插件","执行 dsh plugin add 命令安装 dsh-message-gateway 并启动 dsh web 服务。",{"@type":1122,"name":4731,"text":4732},"阶段二：访问 Message platforms 配置中心","通过浏览器打开 DSH Web 界面并导航至 Message platforms 菜单。",{"@type":1122,"name":4734,"text":4735},"阶段三：配置 Buzz 桥接参数与生成密钥对","即时生成 Nostr 身份密钥对，准确填入 Relay URL 与订阅频道 UUID 列表。",{"@type":1122,"name":4737,"text":4738},"阶段四：将智能体注册加入 Buzz 中继服务","使用 buzz-admin 命令行工具将 DSH 助手的 npub 公钥加入中继成员。",{"@type":1122,"name":4740,"text":4741},"阶段五：将智能体加入指定的团队频道","使用 buzz-cli 命令行工具将 16 进制 HEX 公钥加入频道成员名单。",{"@type":1122,"name":4743,"text":4744},"阶段六：开启本地工作区绑定权限","在 cordis.patch.yml 中开启 allowWorkspace 配置以允许目录挂载指令。",{"lastmod":4718},{"title":4747,"description":4719,"ogTitle":3504,"ogDescription":4719,"twitterTitle":3504,"twitterDescription":4719},"DeepSeek Harness Buzz 插件开发：构建 Nostr 协议网关与实时流式输出的完整教程","zh\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",[3667,4154,4750,4751,3522],"Nostr","AI智能体","-Uv9S6aUiVlNLLDrGF-a3NbzGbjT5AnW8AjMaIbu1Ao",1792490001812]