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