[{"data":1,"prerenderedAt":5266},["ShallowReactive",2],{"published-article-paths":3,"search-navigation":348,"\u002Fde\u002Farticle\u002Fbringing-buzz-to-deepseek-harness":421,"\u002Fde\u002Farticle\u002Fbringing-buzz-to-deepseek-harness-surround":1707},[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":1661,"date":1665,"description":1666,"extension":1667,"image":1668,"imageAlt":1669,"isPublished":1066,"meta":1670,"minRead":1698,"navigation":1066,"path":7,"seo":1699,"stem":1701,"tags":1702,"updatedAt":1705,"__hash__":1706},"article\u002Fde\u002Farticle\u002Fbringing-buzz-to-deepseek-harness.md","DeepSeek Harness mit Buzz verbinden: Das Nostr-Gateway","",{"type":426,"value":427,"toc":1645},"minimark",[428,436,461,469,472,477,483,528,531,592,596,602,872,875,879,884,891,895,909,913,924,977,984,988,991,1023,1027,1032,1083,1091,1097,1106,1112,1143,1156,1160,1168,1199,1221,1269,1276,1281,1287,1294,1300,1305,1313,1327,1333,1343,1383,1386,1392,1399,1405,1409,1412,1563,1567,1601,1605,1611,1615,1641],[429,430,431],"p",{},[432,433],"img",{"alt":434,"src":435},"Übersicht über das mit einem Block Buzz-Kanal verbundene DeepSeek Harness Nachrichten-Gateway","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-nostr-gateway-overview.webp",[429,437,438,439,449,450,455,456,460],{},"Das DeepSeek Harness (DSH) Plugin, ",[440,441,442],"strong",{},[443,444,448],"a",{"href":445,"rel":446},"https:\u002F\u002Fgithub.com\u002Fa792883583\u002Fdsh-message-gateway",[447],"nofollow","dsh-message-gateway",", erweitert den DeepSeek Harness Assistenten auf verschiedene Messaging-Plattformen wie Discord, Telegram und WeChat. Das Plugin-Repository wurde geforkt und erweitert, um die Plattform ",[440,451,452],{},[443,453,454],{"href":383},"Block's Buzz selbst hosten: Workspace für Mensch & KI-Agenten"," zur Liste hinzuzufügen. Das geforkte Repository ist auf GitHub unter ",[443,457,458],{"href":458,"rel":459},"https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fdsh-message-gateway",[447]," verfügbar.",[462,463],"article-card",{"description":464,"image":465,"image-alt":466,"label":467,"min-read":468,"title":454,"to":383},"Lernen Sie, wie Sie das Nostr-Relay Block's Buzz auf einem Ubuntu VPS hinter Cloudflare selbst hosten. Ein sicherer Workspace für Menschen und KI-Agenten.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002FDE-Self-Hosting-Buzz-As-The-Workspace-Where-AI-Agents-Become-Colleagues.webp","Eine Premium-Technologiekarte im Format 16:9 mit tiefblauen und orangefarbenen Akzenten, die zeigt, wie man das Buzz-Relay von Block auf einem Ubuntu-VPS selbst hostet, mit einem klaren glassmorphic Panel mit zentrierter Typografie.","Voraussetzungsleitfaden","12",[429,470,471],{},"Der DSH-Assistent tritt einem Buzz-Relay als vollwertiges Mitglied bei, empfängt Direktnachrichten (DMs) sowie Kanalnachrichten, in denen er @erwähnt wird, und antwortet über dieselbe kanalbezogene Agenten-Pipeline, die auch von der Weboberfläche genutzt wird.",[473,474,476],"h2",{"id":475},"architektur-des-dsh-message-gateway-plugins","Architektur des dsh-message-gateway Plugins",[429,478,479,480,482],{},"Die Architektur des ",[440,481,448],{}," Plugins gliedert sich in zwei Kernbereiche:",[484,485,486,518],"ul",{},[487,488,489,492,493,497,498,501,502,505,506,509,510,513,514,517],"li",{},[440,490,491],{},"Host"," (Node): ",[494,495,496],"code",{},"gateway-store"," (Zugangsdaten in ",[494,499,500],{},"~\u002F.dsh\u002Fgateway.json","), ",[494,503,504],{},"platforms.ts"," (Plattformdefinitionen und Verbindungstests), ",[494,507,508],{},"routes.ts"," (",[494,511,512],{},"\u002Fgateway\u002F*"," Endpunkte) und ",[494,515,516],{},"bridge-manager.ts"," (die residenten Bridges: unabhängige Agentensitzungen pro Chat und gestreamte Antworten).",[487,519,520,523,524,527],{},[440,521,522],{},"Client"," (Browser): Die Seite \"",[440,525,526],{},"Message platforms","\" in der Seitenleiste, auf der Sie Zugangsdaten hinterlegen, Verbindungen testen und den Status überwachen.",[429,529,530],{},"Die Anbindung einer neuen Plattform umfasst folgende Schritte:",[532,533,534,552,566],"ol",{},[487,535,536,539,540,543,544,547,548,551],{},[440,537,538],{},"Eine Bridge-Klasse",": Stellt ",[494,541,542],{},"start\u002Fstop\u002Fstatus"," sowie einen ",[494,545,546],{},"onText(text, frame)"," Callback bereit, analog zu ",[494,549,550],{},"wecom-bridge.ts",".",[487,553,554,557,558,561,562,565],{},[440,555,556],{},"Bridge-Manager-Verdrahtung",": Wiederverwendung der bestehenden Chat-Pipeline (",[494,559,560],{},"ensureAgentForKey"," + ",[494,563,564],{},"pendingMap",") unter Einbindung der Antwort-Senke der Plattform.",[487,567,568,571,572,575,576,579,580,583,584,587,588,591],{},[440,569,570],{},"Speicher- und Routen-Anbindung",": In ",[494,573,574],{},"\u002Fgateway\u002Fsave"," und ",[494,577,578],{},"\u002Fgateway\u002Fdelete",": ",[440,581,582],{},"Das Speichern von Zugangsdaten startet die Bridge, das Löschen stoppt sie"," — ergänzt durch ein ",[494,585,586],{},"autoStartXxx","-Flag, damit ",[494,589,590],{},"dsh web"," beim Systemstart automatisch neu verbindet.",[473,593,595],{"id":594},"buzz-bridge-implementierung-nostr-protokoll-event-lebenszyklus","Buzz-Bridge-Implementierung: Nostr-Protokoll & Event-Lebenszyklus",[429,597,598,601],{},[440,599,600],{},"DeepSeek Harness"," wurde direkt verwendet, um die Buzz-Bridge zu implementieren. Die Umsetzung erfüllt die folgenden Nostr-Protokollspezifikationen:",[603,604,605,632],"table",{},[606,607,608],"thead",{},[609,610,611,617],"tr",{},[612,613,614],"th",{},[440,615,616],{},"Transport",[612,618,619,620,623,624,627,628,631],{},"Ein NIP-42-authentifizierter WebSocket; Standard ",[494,621,622],{},"ws:\u002F\u002Flocalhost:3000","; ",[494,625,626],{},"http(s):\u002F\u002F"," wird zu ",[494,629,630],{},"ws(s):\u002F\u002F"," normalisiert",[633,634,635,654,681,699,723,747,772,785,799,818,835,849],"tbody",{},[609,636,637,643],{},[638,639,640],"td",{},[440,641,642],{},"Authentifizierung",[638,644,645,646,649,650,653],{},"AUTH-Event ",[494,647,648],{},"kind 22242",", Tags ",[494,651,652],{},"[[\"relay\", url], [\"challenge\", challenge]]",", leerer Inhalt, signiert mit dem Agenten-Schlüssel",[609,655,656,661],{},[638,657,658],{},[440,659,660],{},"Abonnements",[638,662,663,579,666,669,670,673,674,677,678],{},[440,664,665],{},"Kanalbezogen",[494,667,668],{},"REQ {\"kinds\":[9], \"#h\":[\u003Cuuid>]}"," — ein REQ pro Kanal. Ein globales ",[494,671,672],{},"kinds:[9]"," REQ erhält EOSE, liefert aber keine Events aus; Multi-Wert ",[494,675,676],{},"#h"," funktioniert ",[440,679,680],{},"nicht",[609,682,683,688],{},[638,684,685],{},[440,686,687],{},"Erkennung (Discovery)",[638,689,690,691,694,695,698],{},"Historisches ",[494,692,693],{},"REQ {kinds:[39000]}"," für Kanal-Metadaten (",[494,696,697],{},"type == \"dm\""," markiert Direktnachrichtenkanäle)",[609,700,701,706],{},[638,702,703],{},[440,704,705],{},"Mitgliedschaft",[638,707,708,709,712,713,715,716,719,720],{},"Live ",[494,710,711],{},"REQ {kinds:[44100,44101], \"#p\":[unser pubkey], since: now-60s}"," — 44100 = hinzugefügt, 44101 = entfernt, mit ",[494,714,429],{},"+",[494,717,718],{},"h","; aktualisiert Abonnements ",[440,721,722],{},"ohne Reconnect",[609,724,725,730],{},[638,726,727],{},[440,728,729],{},"Chat-Events",[638,731,732,735,736,739,740,743,744],{},[494,733,734],{},"kind 9"," mit Tags ",[494,737,738],{},"[\"h\", channel]",", optional ",[494,741,742],{},"[\"e\", replyTo]",", ",[494,745,746],{},"[\"p\", mention]",[609,748,749,754],{},[638,750,751],{},[440,752,753],{},"In-Place-Edits",[638,755,756,759,760,561,762,765,766,768,769,771],{},[494,757,758],{},"kind 40003"," mit ",[494,761,718],{},[494,763,764],{},"e","→Ziel; ersetzt Inhalt; Relay-Limit 64 KB → Nutzlasten ≤ 60.000 B halten; lange Antworten werden aufgeteilt — Chunk 0 nutzt das Edit, Überhang folgt als ",[494,767,734],{}," Thread-Nachricht (",[494,770,764],{},"→Root)",[609,773,774,779],{},[638,775,776],{},[440,777,778],{},"CLOSED-Frames",[638,780,781,784],{},[494,782,783],{},"auth-required"," vor AUTH ist normaler Bootstrap (AUTH abschließen, Subs neu öffnen); nach AUTH → begrenzter Neuversuch (3 Versuche, 0\u002F1\u002F2 s Backoff); Reconnect baut alles neu auf",[609,786,787,792],{},[638,788,789],{},[440,790,791],{},"Relay-Limits",[638,793,794,795,798],{},"≤ 2000 historische Events pro Abonnement, chronologisch absteigend (neueste zuerst), selbst mit ",[494,796,797],{},"since","-Filter",[609,800,801,806],{},[638,802,803],{},[440,804,805],{},"Erwähnungs-Filter",[638,807,808,809,811,812,814,815,817],{},"Verarbeitet eingehende ",[494,810,734],{}," nur wenn: (a) ",[494,813,429],{},"-Tag unseren Pubkey enthält, (b) Kanal ein DM ist, oder (c) ",[494,816,764],{},"-Root unser eigenes Event ist. Eigener Pubkey wird ignoriert (Schleifenschutz)",[609,819,820,825],{},[638,821,822],{},[440,823,824],{},"Ausgehende Erwähnungen",[638,826,827,828,831,832,834],{},"Ausgehender Text wird unverändert veröffentlicht — das Relay prüft keine ",[494,829,830],{},"@","-Token; ",[494,833,429],{},"-Tags enthalten den ursprünglichen Autor + bis zu 7 weitere erwähnte Pubkeys (max. 8)",[609,836,837,842],{},[638,838,839],{},[440,840,841],{},"Direktnachrichten (DM)",[638,843,844,845,848],{},"Relay-spezifische Klartext-Kanäle (",[494,846,847],{},"type: \"dm\""," Metadaten) — keine NIP-04\u002F44-Verschlüsselung in dieser Bridge",[609,850,851,856],{},[638,852,853],{},[440,854,855],{},"Anhänge (Eingehend)",[638,857,858,859,509,862,743,865,743,868,871],{},"NIP-92 ",[494,860,861],{},"imeta",[494,863,864],{},"url",[494,866,867],{},"sha256",[494,869,870],{},"m",") → Standard-HTTP(S)-Download, SHA-256-Prüfung, 20 MB Limit, max. 4 pro Nachricht; ausgehende Bilder werden nicht unterstützt",[429,873,874],{},"Das folgende Diagramm veranschaulicht den Bootstrap-Ablauf der Buzz-Bridge:",[432,876],{"src":877,"alt":878},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-bootstrap.webp","Sequenzdiagramm zur Veranschaulichung des Bootstrap- und NIP-42-Authentifizierungsprozesses der Buzz-Bridge",[880,881,883],"h3",{"id":882},"echtzeit-streaming-über-nostr-in-place-edits-kind-40003","Echtzeit-Streaming über Nostr In-Place-Edits (Kind 40003)",[429,885,886,887,890],{},"Da Nostr keine native Tippanzeige besitzt und Events append-only gespeichert werden, ",[440,888,889],{},"simuliert die Buzz-Bridge Streaming über In-Place-Edits",":",[432,892],{"src":893,"alt":894},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-reply.webp","Ablaufdiagramm der In-Place-Bearbeitung zur Simulation gestreamter Antworten mittels Kind-40003-Events",[484,896,897],{},[487,898,899],{},[900,901,902,903,905,906,908],"em",{},"Die Buzz-Bridge veröffentlicht zunächst ein temporäres Platzhalter-Event ",[494,904,734],{},", schreibt dieses kontinuierlich mit ratenlimitierten ",[494,907,758],{}," In-Place-Edits fort und setzt den finalen Edit, sobald der Agent die Generierung beendet hat. Dies entspricht dem bewährten Muster von Telegram- und Discord-Bridges.",[880,910,912],{"id":911},"einbindung-von-deepseek-harness-workspaces-über-chat-befehle","Einbindung von DeepSeek Harness Workspaces über Chat-Befehle",[429,914,915,916,919,920,923],{},"Die \"Workspaces\"-Funktion in der DSH-Weboberfläche basiert auf dem ",[494,917,918],{},"workspaceRegistry","-Dienst (",[494,921,922],{},"@deepseek-ai\u002Fdsh-workspace","):",[925,926,930],"pre",{"className":927,"code":928,"language":929,"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",[494,931,932],{"__ignoreMap":424},[933,934,937,941,945,949,953,956,958,960,962,966,969,971,974],"span",{"class":935,"line":936},"line",1,[933,938,940],{"class":939},"spNyl","const",[933,942,944],{"class":943},"sTEyZ"," existing ",[933,946,948],{"class":947},"sMK4o","=",[933,950,952],{"class":951},"s7zQu"," await",[933,954,955],{"class":943}," ctx",[933,957,551],{"class":947},[933,959,918],{"class":943},[933,961,551],{"class":947},[933,963,965],{"class":964},"s2Zo4","resolveByPath",[933,967,968],{"class":943},"(request",[933,970,551],{"class":947},[933,972,973],{"class":943},"path)",[933,975,976],{"class":947},";\n",[429,978,979,980,983],{},"Die Buzz-Bridge stellt den Chat-Befehl ",[494,981,982],{},"\u002Fworkspace \u003Cordner>"," bereit, der ein bestehendes Verzeichnis in DSH registriert. Jede neue über das Gateway initiierte Sitzung wird diesem Ordner zugeordnet und erscheint in der Weboberfläche.",[432,985],{"src":986,"alt":987},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-workspace.webp","Architektur der Registrierung von DeepSeek Harness-Workspaces über Chat-Befehle",[429,989,990],{},"Drei zentrale Entwurfsentscheidungen:",[484,992,993,1003,1013],{},[487,994,995,998,999,1002],{},[440,996,997],{},"Ordnerwechsel = Neue Sitzung."," Der Parameter ",[494,1000,1001],{},"cwd"," wird bei der Initialisierung im Sitzungs-Header hinterlegt und kann nachträglich nicht geändert werden.",[487,1004,1005,1008,1009,1012],{},[440,1006,1007],{},"Ordner muss bereits existieren."," Der Aufruf ",[494,1010,1011],{},"create"," weist nicht vorhandene Pfade ab.",[487,1014,1015,1018,1019,1022],{},[440,1016,1017],{},"Sicherheitsrelevanter Befehl."," Jede Sitzung läuft unter einer ",[440,1020,1021],{},"Auto-Approve","-Richtlinie und gewährt Dateizugriff auf das Zielverzeichnis.",[473,1024,1026],{"id":1025},"schritt-für-schritt-installations-und-konfigurationsanleitung","Schritt-für-Schritt Installations- und Konfigurationsanleitung",[532,1028,1029],{},[487,1030,1031],{},"Führen Sie folgende Befehle im Terminal aus:",[925,1033,1037],{"className":1034,"code":1035,"language":1036,"meta":424,"style":424},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","dsh plugin --profile web add https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fdsh-message-gateway.git\n\n# Start DSH web\ndsh web\n","bash",[494,1038,1039,1061,1068,1075],{"__ignoreMap":424},[933,1040,1041,1045,1049,1052,1055,1058],{"class":935,"line":936},[933,1042,1044],{"class":1043},"sBMFI","dsh",[933,1046,1048],{"class":1047},"sfazB"," plugin",[933,1050,1051],{"class":1047}," --profile",[933,1053,1054],{"class":1047}," web",[933,1056,1057],{"class":1047}," add",[933,1059,1060],{"class":1047}," https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fdsh-message-gateway.git\n",[933,1062,1064],{"class":935,"line":1063},2,[933,1065,1067],{"emptyLinePlaceholder":1066},true,"\n",[933,1069,1071],{"class":935,"line":1070},3,[933,1072,1074],{"class":1073},"sHwdD","# Start DSH web\n",[933,1076,1078,1080],{"class":935,"line":1077},4,[933,1079,1044],{"class":1043},[933,1081,1082],{"class":1047}," web\n",[532,1084,1085],{"start":1063},[487,1086,1087,1088,1090],{},"Sobald die DSH-Weboberfläche im Browser geladen ist, klicken Sie auf das Symbol \"",[440,1089,526],{},"\":",[429,1092,1093],{},[432,1094],{"alt":1095,"src":1096},"Seitenleiste der DeepSeek Harness-Weboberfläche mit hervorgehobenem Message platforms-Menü","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-web-ui-message-platforms-sidebar-icon.webp",[532,1098,1099],{"start":1070},[487,1100,1101,1102,1105],{},"Wählen Sie \"",[440,1103,1104],{},"Buzz","\" im linken Navigationsbereich:",[429,1107,1108],{},[432,1109],{"alt":1110,"src":1111},"Konfigurationsbereich der Buzz-Bridge im DeepSeek Harness Nachrichten-Gateway","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-message-gateway-buzz-config-panel.webp",[532,1113,1114,1125,1136],{"start":1077},[487,1115,1116,1117,1120,1121,1124],{},"Klicken Sie auf \"",[440,1118,1119],{},"Generate keypair","\", um ein Nostr-Schlüsselpaar zu generieren. Kopieren Sie den öffentlichen Schlüssel ",[494,1122,1123],{},"npub"," an einen sicheren Ort.",[487,1126,1127,1128,1131,1132,1135],{},"Tragen Sie die ",[440,1129,1130],{},"Relay URL"," sowie die ",[440,1133,1134],{},"Channels"," (die Allowlist der zu abonnierenden Kanal-UUIDs) ein.",[487,1137,1138,1139,1142],{},"Klicken Sie auf die Schaltfläche \"",[440,1140,1141],{},"Save","\".",[429,1144,1145,1146,1149,1150,1153,1154,551],{},"Das Speichern des Formulars sichert die Zugangsdaten und ",[440,1147,1148],{},"startet die Bridge",". Der private Schlüssel ",[494,1151,1152],{},"nsec"," wird als vertrauliches Geheimnis behandelt und verbleibt ausschließlich in ",[494,1155,500],{},[880,1157,1159],{"id":1158},"agenten-schlüsselpaar-im-buzz-nostr-relay-registrieren","Agenten-Schlüsselpaar im Buzz Nostr-Relay registrieren",[429,1161,1162,1165,1166,890],{},[440,1163,1164],{},"Fügen Sie den DSH-Assistenten dem Relay als Mitglied hinzu."," Verwenden Sie dazu den zuvor generierten ",[494,1167,1123],{},[925,1169,1171],{"className":1034,"code":1170,"language":1036,"meta":424,"style":424},"docker compose exec relay buzz-admin add-member --pubkey npub123123123\n",[494,1172,1173],{"__ignoreMap":424},[933,1174,1175,1178,1181,1184,1187,1190,1193,1196],{"class":935,"line":936},[933,1176,1177],{"class":1043},"docker",[933,1179,1180],{"class":1047}," compose",[933,1182,1183],{"class":1047}," exec",[933,1185,1186],{"class":1047}," relay",[933,1188,1189],{"class":1047}," buzz-admin",[933,1191,1192],{"class":1047}," add-member",[933,1194,1195],{"class":1047}," --pubkey",[933,1197,1198],{"class":1047}," npub123123123\n",[429,1200,1201,1204,1205,1208,1209,1212,1213,1216,1217,1220],{},[440,1202,1203],{},"Weisen Sie den Assistenten einem bestimmten Kanal zu."," Die Mitgliedschaft im Relay allein macht den Agenten in Kanälen noch nicht sichtbar oder durchsuchbar. Beim Ausführen dieses Schritts mit ",[494,1206,1207],{},"buzz-cli"," muss der Parameter ",[494,1210,1211],{},"--pubkey"," im ",[440,1214,1215],{},"HEX","-Format angegeben werden, nicht als npub (der Befehl ",[494,1218,1219],{},"buzz-admin add-member"," gibt den entsprechenden HEX-Schlüssel aus):",[925,1222,1224],{"className":1034,"code":1223,"language":1036,"meta":424,"style":424},"buzz channels add-member --channel \u003CCHANNEL_UUID> --pubkey \u003CAGENT_HEX> --role member\n",[494,1225,1226],{"__ignoreMap":424},[933,1227,1228,1231,1234,1236,1239,1242,1245,1248,1251,1253,1255,1258,1261,1263,1266],{"class":935,"line":936},[933,1229,1230],{"class":1043},"buzz",[933,1232,1233],{"class":1047}," channels",[933,1235,1192],{"class":1047},[933,1237,1238],{"class":1047}," --channel",[933,1240,1241],{"class":947}," \u003C",[933,1243,1244],{"class":1047},"CHANNEL_UUI",[933,1246,1247],{"class":943},"D",[933,1249,1250],{"class":947},">",[933,1252,1195],{"class":1047},[933,1254,1241],{"class":947},[933,1256,1257],{"class":1047},"AGENT_HE",[933,1259,1260],{"class":943},"X",[933,1262,1250],{"class":947},[933,1264,1265],{"class":1047}," --role",[933,1267,1268],{"class":1047}," member\n",[462,1270],{"description":1271,"image":465,"image-alt":466,"label":1272,"min-read":1273,"title":1274,"to":1275},"Schritt-für-Schritt-Anleitung zur Installation und Konfiguration von buzz-cli zur Verwaltung von Nostr-Kanälen, Mitgliedsschlüsseln und Berechtigungen für KI-Agenten.","CLI-Anleitung","5","So installieren und verwenden Sie buzz-cli","\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues#install-buzz-cli",[429,1277,1278,1279,890],{},"Aktualisieren Sie das Profil des DSH-Assistenten im Nostr-Relay auf einen aussagekräftigen Anzeigenamen mittels ",[494,1280,1207],{},[429,1282,1283],{},[432,1284],{"alt":1285,"src":1286},"Aktualisierung des Profilnamens des DSH-Assistenten auf dem Nostr-Relay mit buzz-cli","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-assistant-buzz-cli-profile-update.webp",[429,1288,1289,1290,1293],{},"Senden Sie ein ",[440,1291,1292],{},"Wave"," (die Direktnachrichten-Begrüßung in Buzz) an den Assistenten. Die Antwort bestätigt die Betriebsbereitschaft:",[429,1295,1296],{},[432,1297],{"alt":1298,"src":1299},"Verbindungstest durch Senden eines Wave-DMs an den DeepSeek Harness-Assistenten in Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-dm-wave-greeting-reply.webp",[429,1301,1302],{},[900,1303,1304],{},"Senden eines Wave als DM an den DSH-Assistenten — die Bridge antwortet prompt.",[880,1306,1308,1309,1312],{"id":1307},"lokalen-ordnerzugriff-mit-workspace-aktivieren","Lokalen Ordnerzugriff mit ",[494,1310,1311],{},"\u002Fworkspace"," aktivieren",[429,1314,1315,1316,1319,1320,1323,1324,1326],{},"Da die Einstellung ",[494,1317,1318],{},"allowWorkspace"," standardmäßig auf ",[494,1321,1322],{},"false"," gesetzt ist, wird der Befehl ",[494,1325,1311],{}," zunächst abgewiesen:",[429,1328,1329],{},[432,1330],{"alt":1331,"src":1332},"Fehlermeldung bei der Ablehnung des Workspace-Befehls bei deaktiviertem allowWorkspace","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-workspace-command-rejected-error.webp",[429,1334,1335,1336,1339,1340,1342],{},"Aktivieren Sie die Option in ",[494,1337,1338],{},"~\u002F.dsh\u002Fprofiles\u002Fweb\u002Fcordis.patch.yml"," und starten Sie ",[494,1341,590],{}," neu:",[925,1344,1348],{"className":1345,"code":1346,"language":1347,"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",[494,1349,1350,1364,1372],{"__ignoreMap":424},[933,1351,1352,1355,1359,1361],{"class":935,"line":936},[933,1353,1354],{"class":947},"-",[933,1356,1358],{"class":1357},"swJcz"," id",[933,1360,890],{"class":947},[933,1362,1363],{"class":1047}," ui-message-gateway\n",[933,1365,1366,1369],{"class":935,"line":1063},[933,1367,1368],{"class":1357},"  config",[933,1370,1371],{"class":947},":\n",[933,1373,1374,1377,1379],{"class":935,"line":1070},[933,1375,1376],{"class":1357},"    allowWorkspace",[933,1378,890],{"class":947},[933,1380,1382],{"class":1381},"sfNiH"," true\n",[429,1384,1385],{},"Nach dem Neustart:",[429,1387,1388],{},[432,1389],{"alt":1390,"src":1391},"Erfolgreiche Bestätigungsmeldung nach Ausführung des Workspace-Registrierungsbefehls in Buzz","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-buzz-workspace-command-success-confirmation.webp",[429,1393,1394,1395,1398],{},"Wichtiger Hinweis: Die Konfiguration geht davon aus, dass der Workspace-Ordner (",[494,1396,1397],{},"TechVoyage"," in den Screenshots) im Standard-Benutzerverzeichnis liegt. Geben Sie andernfalls den vollständigen absoluten Pfad an. Jede neue über Buzz gestartete Sitzung wird auch in der Weboberfläche von DeepSeek Harness aufgeführt.",[429,1400,1401],{},[432,1402],{"alt":1403,"src":1404},"DeepSeek Harness-Weboberfläche mit der aus Buzz synchronisierten aktiven Workspace-Sitzung","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002Fdsh-web-ui-synced-workspace-session.webp",[880,1406,1408],{"id":1407},"verfügbare-befehle-in-buzz","Verfügbare Befehle in Buzz",[429,1410,1411],{},"Alle von anderen Plattformen bekannten Befehle stehen auch in Buzz uneingeschränkt bereit:",[603,1413,1414,1424],{},[606,1415,1416],{},[609,1417,1418,1421],{},[612,1419,1420],{},"Befehl",[612,1422,1423],{},"Funktion",[633,1425,1426,1436,1446,1456,1466,1476,1486,1496,1506,1526,1546],{},[609,1427,1428,1433],{},[638,1429,1430],{},[494,1431,1432],{},"\u002Fworkspace \u003Cfolder>",[638,1434,1435],{},"Registriert einen bestehenden Ordner als Workspace des Chats (erfordert Freigabe in der Konfiguration)",[609,1437,1438,1443],{},[638,1439,1440],{},[494,1441,1442],{},"\u002Fhelp",[638,1444,1445],{},"Listet alle verfügbaren Befehle auf",[609,1447,1448,1453],{},[638,1449,1450],{},[494,1451,1452],{},"\u002Ftime",[638,1454,1455],{},"Zeigt die aktuelle Serverzeit an",[609,1457,1458,1463],{},[638,1459,1460],{},[494,1461,1462],{},"\u002Fnew",[638,1464,1465],{},"Startet eine frische, saubere Sitzung",[609,1467,1468,1473],{},[638,1469,1470],{},[494,1471,1472],{},"\u002Fclear",[638,1474,1475],{},"Löscht den bisherigen Gesprächsverlauf",[609,1477,1478,1483],{},[638,1479,1480],{},[494,1481,1482],{},"\u002Fstatus",[638,1484,1485],{},"Gibt den aktuellen Betriebszustand der Bridge aus",[609,1487,1488,1493],{},[638,1489,1490],{},[494,1491,1492],{},"\u002Fstats",[638,1494,1495],{},"Liefert Chat-Zähler und detaillierte Statuszeilen aller Bridges (inklusive Buzz)",[609,1497,1498,1503],{},[638,1499,1500],{},[494,1501,1502],{},"\u002Fcommands",[638,1504,1505],{},"Detaillierte Übersicht aller Befehlsbeschreibungen",[609,1507,1508,1513],{},[638,1509,1510],{},[494,1511,1512],{},"@path\u002Fto\u002Ffile",[638,1514,1515,1516,743,1518,1521,1522,1525],{},"Verhält sich wie @-Dateierwähnungen im Web: Das Modell liest die Datei relativ zum Chat-Workspace; ",[494,1517,830],{},[494,1519,1520],{},"@präfix"," oder ",[494,1523,1524],{},"\u002Ffiles \u003Cpräfix>"," antwortet mit passenden Dateien\u002FOrdnern",[609,1527,1528,1533],{},[638,1529,1530],{},[494,1531,1532],{},"\u002Fmodel",[638,1534,1535,1538,1539,1541,1542,1545],{},[494,1536,1537],{},"[provider model effort]"," — validiert gegen den aktiven Modellkatalog; ",[494,1540,1532],{}," listet Optionen, ",[494,1543,1544],{},"\u002Fmodel reset"," setzt auf Standard zurück",[609,1547,1548,1553],{},[638,1549,1550],{},[494,1551,1552],{},"\u002Feffort",[638,1554,1555,1558,1559,1562],{},[494,1556,1557],{},"\u003Cid>"," passt gezielt die Reasoning-Anstrengung an; ",[494,1560,1561],{},"\u002Feffort reset"," setzt den Standardwert wieder ein",[880,1564,1566],{"id":1565},"sicherheitsaspekte-im-überblick","Sicherheitsaspekte im Überblick",[484,1568,1569,1582,1592],{},[487,1570,1571,1572,1574,1575,1577,1578,1581],{},"Der private Schlüssel ",[440,1573,1152],{}," liegt geschützt in ",[494,1576,500],{}," (Rechte 0600, atomare Schreibvorgänge) — er wird niemals über ",[494,1579,1580],{},"\u002Fgateway\u002Flist"," exponiert oder in Protokollen ausgegeben.",[487,1583,1584,1585,509,1588,1591],{},"Jedes eingehende Event wird ",[440,1586,1587],{},"kryptografisch signaturgeprüft",[494,1589,1590],{},"verifyEvent","), dedupliziert, auf Selbstaussendung gefiltert und durch Erwähnungsprüfungen geleitet, bevor es den Agenten erreicht.",[487,1593,1594,509,1597,1600],{},[440,1595,1596],{},"Die Workspace-Registrierung ist strikt konfigurationsgesteuert",[494,1598,1599],{},"allowWorkspace: false"," als Standard), um unbefugten Zugriff auf lokale Systemverzeichnisse abzusichern.",[473,1602,1604],{"id":1603},"fazit-dezentrale-ki-zusammenarbeit-in-buzz","Fazit: Dezentrale KI-Zusammenarbeit in Buzz",[429,1606,1607,1608,1610],{},"Die größte Herausforderung bei der Integration von Buzz in ",[494,1609,448],{}," lag in der konsequenten Erfüllung des Nostr-Protokollvertrags. Da die Plugin-Basis bereits eine ausgereifte Sitzungsverwaltung und Befehlsweiterleitung bot, fügte sich die Bridge nahtlos ein, sobald Event-Verarbeitung und In-Place-Streaming etabliert waren.",[473,1612,1614],{"id":1613},"referenzen","Referenzen:",[484,1616,1617,1625,1633],{},[487,1618,1619,1624],{},[443,1620,1623],{"href":1621,"rel":1622},"https:\u002F\u002Fgithub.com\u002Fa792883583\u002Fdsh-message-gateway\u002Fblob\u002Fmain\u002Fdocs\u002Farchitecture.md",[447],"dsh-message-gateway architecture guide"," — Architekturleitfaden, Erweiterungsanleitung und Sicherheitshinweise",[487,1626,1627,1632],{},[443,1628,1631],{"href":1629,"rel":1630},"https:\u002F\u002Fgithub.com\u002Fnbd-wtf\u002Fnostr-tools",[447],"nostr-tools"," — Unter der Haube verwendete Nostr-Bibliothek",[487,1634,1635,1640],{},[443,1636,1639],{"href":1637,"rel":1638},"https:\u002F\u002Fgithub.com\u002Fbytedance\u002Fdeer-flow\u002Fblob\u002Fmain\u002Fbackend\u002Fdocs\u002FIM_CHANNEL_CONNECTIONS.md",[447],"deer-flow IM channel connections"," — Referenzarchitektur für Instant-Messaging-Kanäle",[1642,1643,1644],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":424,"searchDepth":1063,"depth":1070,"links":1646},[1647,1648,1652,1659,1660],{"id":475,"depth":1063,"text":476},{"id":594,"depth":1063,"text":595,"children":1649},[1650,1651],{"id":882,"depth":1070,"text":883},{"id":911,"depth":1070,"text":912},{"id":1025,"depth":1063,"text":1026,"children":1653},[1654,1655,1657,1658],{"id":1158,"depth":1070,"text":1159},{"id":1307,"depth":1070,"text":1656},"Lokalen Ordnerzugriff mit \u002Fworkspace aktivieren",{"id":1407,"depth":1070,"text":1408},{"id":1565,"depth":1070,"text":1566},{"id":1603,"depth":1063,"text":1604},{"id":1613,"depth":1063,"text":1614},[1662,1663,1230,1664],"ai-agents","collaboration","deepseek-harness","2026-09-30","Integrieren Sie DeepSeek Harness über eine Nostr-Bridge in Block Buzz: NIP-42-Auth, In-Place-Streaming-Edits und kanalbezogene Agenten-Workspaces konfigurieren.","md","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FBringing%20Buzz%20to%20DeepSeek%20Harness\u002FDE-Bringing-Buzz-to-DeepSeek-Harness.webp","Eine Premium-Technologiekarte im Format 16:9 mit tiefblauen und bernsteinfarbenen Akzenten, die zeigt, wie DeepSeek Harness über eine Nostr-Bridge mit Block Buzz verbunden wird, mit einem sauberen glassmorphic Panel und zentrierter Typografie.",{"schemaOrg":1671,"robots":1696,"sitemap":1697},[1672,1674],{"@type":1673,"headline":423,"description":1666,"image":1668},"TechArticle",{"@type":1675,"name":423,"description":1666,"image":1668,"step":1676},"HowTo",[1677,1681,1684,1687,1690,1693],{"@type":1678,"name":1679,"text":1680},"HowToStep","Phase 1: Gateway-Plugin installieren","Installieren Sie das dsh-message-gateway-Plugin und starten Sie dsh web.",{"@type":1678,"name":1682,"text":1683},"Phase 2: Message platforms aufrufen","Öffnen Sie die DSH-Weboberfläche und navigieren Sie zu den Message platforms-Einstellungen.",{"@type":1678,"name":1685,"text":1686},"Phase 3: Buzz-Bridge konfigurieren","Erstellen Sie ein Nostr-Schlüsselpaar, geben Sie Relay-URL und Kanäle ein.",{"@type":1678,"name":1688,"text":1689},"Phase 4: Agenten am Relay registrieren","Fügen Sie den DSH-Assistenten dem Buzz-Nostr-Relay mittels buzz-admin hinzu.",{"@type":1678,"name":1691,"text":1692},"Phase 5: Agenten dem Kanal zuweisen","Fügen Sie den HEX-Schlüssel des Agenten den Kanälen mit buzz-cli hinzu.",{"@type":1678,"name":1694,"text":1695},"Phase 6: Workspace-Zugriff aktivieren","Konfigurieren Sie allowWorkspace in cordis.patch.yml für lokale Ordnerbefehle.","index, follow",{"lastmod":1665},10,{"title":1700,"description":1666,"ogTitle":423,"ogDescription":1666,"twitterTitle":423,"twitterDescription":1666},"DeepSeek Harness Buzz-Plugin: Eine Nostr-Bridge bauen","de\u002Farticle\u002Fbringing-buzz-to-deepseek-harness",[600,1104,1703,1704,448],"Nostr","KI-Agenten",null,"W1AnbP8Pn_ksP_Ix4QOaKpOvfVjrKH3GkFsTa1Ui9KA",{"surround":1708,"related":2656},[1709,1705],{"id":1710,"title":1711,"author":424,"body":1712,"category":2608,"date":2610,"description":2611,"extension":1667,"image":2612,"imageAlt":2613,"isPublished":1066,"meta":2614,"minRead":2287,"navigation":1066,"path":11,"seo":2648,"stem":2650,"tags":2651,"updatedAt":2647,"__hash__":2655},"article\u002Fde\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp.md","Den Hermes Agent privat mit Cloudflare WARP freigeben",{"type":426,"value":1713,"toc":2590},[1714,1728,1738,1742,1745,1757,1761,1769,1773,1777,1827,1831,1968,1972,2005,2009,2012,2078,2081,2117,2120,2147,2151,2162,2167,2206,2295,2299,2304,2321,2330,2409,2414,2460,2464,2510,2525,2529,2573,2577,2587],[429,1715,1716,1717,1720,1721,759,1724,1727],{},"Eine häufige Herausforderung entsteht, wenn Sie von anderen Geräten wie Laptops, Tablets oder Telefonen auf Ihren ",[440,1718,1719],{},"Hermes Agent"," zugreifen möchten, ohne ihn dem öffentlichen Internet preiszugeben. Durch die Nutzung von ",[440,1722,1723],{},"Cloudflare WARP",[440,1725,1726],{},"Cloudflare Zero Trust"," können Sie den Hermes Agent weltweit verfügbar machen, ohne einen einzigen eingehenden Port an Ihrer Firewall öffnen zu müssen.",[429,1729,1730,1731,1734,1735,1737],{},"Wenn Sie unserer vorherigen Anleitung, '",[443,1732,1733],{"href":375},"Anleitung zur Bereitstellung des Hermes Agents auf Linux-VPS","', gefolgt sind, läuft bereits ein Hermes Agent rund um die Uhr. Anstatt sich mit dem Mehraufwand herkömmlicher VPNs zu befassen, werden wir den ",[440,1736,1723],{},"-Client verwenden, um den Hermes Agent über das Internet in einem privaten Netzwerk bereitzustellen.",[473,1739,1741],{"id":1740},"die-architektur-verstehen","Die Architektur verstehen",[429,1743,1744],{},"Die beteiligten Komponenten:",[532,1746,1747,1752],{},[487,1748,1749,1751],{},[440,1750,1726],{},": Das Dashboard bei Cloudflare, in dem Sie Routing-Regeln und Zugriffsrichtlinien definieren.",[487,1753,1754,1756],{},[440,1755,1723],{},": Die Client-Anwendung, die auf Ihren Geräten (VPS, Laptops, Telefone) installiert ist. Sie fängt den für Ihr privates Netzwerk bestimmten Datenverkehr ab und leitet ihn sicher weiter.",[880,1758,1760],{"id":1759},"voraussetzungen","Voraussetzungen",[484,1762,1763,1766],{},[487,1764,1765],{},"Ein laufender Hermes Agent auf Ihrem VPS.",[487,1767,1768],{},"Ein kostenloses Cloudflare-Konto.",[473,1770,1772],{"id":1771},"schritt-für-schritt-anleitung","Schritt-für-Schritt-Anleitung",[880,1774,1776],{"id":1775},"schritt-1-cloudflare-zero-trust-einrichten","Schritt 1: Cloudflare Zero Trust einrichten",[532,1778,1779,1788,1795,1806,1813,1820],{},[487,1780,1781,1782,1787],{},"Melden Sie sich bei Ihrem ",[443,1783,1786],{"href":1784,"rel":1785},"https:\u002F\u002Fdash.cloudflare.com\u002F",[447],"Cloudflare Dashboard"," an.",[487,1789,1790,1791],{},"Klicken Sie im linken Menü auf 'Zero Trust'.\n",[432,1792],{"alt":1793,"src":1794},"Navigationsmenü in der linken Seitenleiste des Cloudflare-Dashboards mit der Option Zero Trust","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-left-menu.webp",[487,1796,1797,1798,1801,1802],{},"Wenn dies Ihr erstes Mal ist, werden Sie aufgefordert, einen Tarif zu wählen (der kostenlose Tarif reicht für dieses Setup völlig aus) und Ihr Team zu benennen (z. B. ",[494,1799,1800],{},"ai-team",").\n",[432,1803],{"alt":1804,"src":1805},"Einrichten des ersten Cloudflare Zero Trust-Kontos und Benennen des Teams","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-team-setup.webp",[487,1807,1808,1809],{},"Klicken Sie auf 'Access' und dann auf 'Policies', um eine Zugriffsrichtlinie zu erstellen, die festlegt, wer Zugriff auf das Netzwerk hat.\n",[432,1810],{"alt":1811,"src":1812},"Cloudflare Zero Trust Access-Richtlinienseite mit den neu konfigurierten Zugriffsregeln","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-access-policies-page.webp",[487,1814,1815,1816],{},"Klicken Sie auf 'Create new policy'.\n",[432,1817],{"alt":1818,"src":1819},"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",[487,1821,1822,1823],{},"Wählen Sie 'Emails' und geben Sie Ihre E-Mail-Adresse unter 'Policy rules' ein.\n",[432,1824],{"alt":1825,"src":1826},"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",[880,1828,1830],{"id":1829},"schritt-2-den-cloudflare-warp-client-auf-dem-vps-einrichten","Schritt 2: Den Cloudflare WARP-Client auf dem VPS einrichten",[532,1832,1833,1843,1849,1856,1859,1874,1877,1961],{},[487,1834,1835,1836,575,1839,1842],{},"Führen Sie ",[494,1837,1838],{},"sudo apt update",[494,1840,1841],{},"sudo apt install cloudflare-warp"," im Terminal auf Ihrem VPS aus.",[487,1844,1835,1845,1848],{},[494,1846,1847],{},"warp-cli registration new \u003CTEAM-NAME>"," im Terminal auf Ihrem VPS aus, was eine URL ausgibt.",[487,1850,1851,1852,1855],{},"Kopieren Sie die ausgegebene URL, die wie ",[494,1853,1854],{},"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fwarp"," aussieht, und fügen Sie sie zur Authentifizierung in Ihren Browser ein.",[487,1857,1858],{},"Da bei der oben genannten Richtlinieneinrichtung die E-Mail-Authentifizierung verwendet wird, geben Sie Ihre E-Mail-Adresse ein, um sich zu authentifizieren.",[487,1860,1861,1862,1865,1866,1869,1870,1873],{},"Klicken Sie auf der Seite '",[440,1863,1864],{},"Success","' (Erfolg) im Browser mit der rechten Maustaste auf die blaue Schaltfläche '",[440,1867,1868],{},"Open Cloudflare WARP","' und wählen Sie '",[440,1871,1872],{},"Inspect","' (Untersuchen).",[487,1875,1876],{},"Kopieren Sie den langen Token, der im Link der Schaltfläche angezeigt wird.",[487,1878,1835,1879,1882,1883,1886,1887],{},[494,1880,1881],{},"warp-cli --accept-tos registration token \"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fauth?token=\u003Ccopied_token>\""," im Terminal auf Ihrem VPS aus, um es mit Cloudflare Zero Trust zu verbinden.",[1884,1885],"br",{},"Falls der Fehler 'Error: Failed to communicate with the WARP API' auf Ubuntu 26 auftritt, führen Sie die folgenden Befehle aus:",[925,1888,1890],{"className":1034,"code":1889,"language":1036,"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",[494,1891,1892,1906,1910,1915,1926,1931,1937],{"__ignoreMap":424},[933,1893,1894,1897,1900,1903],{"class":935,"line":936},[933,1895,1896],{"class":1043},"sudo",[933,1898,1899],{"class":1047}," systemctl",[933,1901,1902],{"class":1047}," restart",[933,1904,1905],{"class":1047}," warp-svc.service\n",[933,1907,1908],{"class":935,"line":1063},[933,1909,1067],{"emptyLinePlaceholder":1066},[933,1911,1912],{"class":935,"line":1070},[933,1913,1914],{"class":1073},"# Check status\n",[933,1916,1917,1919,1921,1924],{"class":935,"line":1077},[933,1918,1896],{"class":1043},[933,1920,1899],{"class":1047},[933,1922,1923],{"class":1047}," status",[933,1925,1905],{"class":1047},[933,1927,1929],{"class":935,"line":1928},5,[933,1930,1067],{"emptyLinePlaceholder":1066},[933,1932,1934],{"class":935,"line":1933},6,[933,1935,1936],{"class":1073},"# Run the warp-cli registration token again\n",[933,1938,1940,1943,1946,1949,1952,1955,1958],{"class":935,"line":1939},7,[933,1941,1942],{"class":1043},"warp-cli",[933,1944,1945],{"class":1047}," --accept-tos",[933,1947,1948],{"class":1047}," registration",[933,1950,1951],{"class":1047}," token",[933,1953,1954],{"class":947},"   \"",[933,1956,1957],{"class":1047},"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fauth?token=\u003Ccopied_token>",[933,1959,1960],{"class":947},"\"\n",[487,1962,1963,1964],{},"Kehren Sie zum Cloudflare Zero Trust-Dashboard zurück und klicken Sie auf 'Devices' (Geräte). Ihr VPS-Gerät sollte nun angezeigt werden.\n",[432,1965],{"alt":1966,"src":1967},"Zero Trust-Geräte-Dashboard zur Bestätigung, dass der Linux-VPS verbunden ist","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-devices-vps-connected.webp",[880,1969,1971],{"id":1970},"schritt-3-datenverkehr-routing-einrichten","Schritt 3: Datenverkehr-Routing einrichten",[532,1973,1974,1981,1988,1995],{},[487,1975,1976,1977],{},"Klicken Sie im Geräte-Dashboard auf das Profil Ihres VPS.\n",[432,1978],{"alt":1979,"src":1980},"Zugriff auf Details und Split-Tunnel-Einstellungen für das registrierte VPS-Gerät","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-device-profile.webp",[487,1982,1983,1984],{},"Scrollen Sie nach unten zum Abschnitt 'Split Tunnels'.\n",[432,1985],{"alt":1986,"src":1987},"Abschnitt Split Tunnels unter den VPS-Profil-Einstellungen","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-split-tunnels-section.webp",[487,1989,1990,1991],{},"Klicken Sie auf die Schaltfläche 'Manage' (Verwalten) und konfigurieren Sie die Einstellungen wie unten gezeigt. Ersetzen Sie die IP-Adresse bei Bedarf.\n",[432,1992],{"alt":1993,"src":1994},"Verwalten von Split-Tunnel-IP- und Hostnamen-Ausschlüssen in den Cloudflare-Einstellungen","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-manage-split-tunnels.webp",[487,1996,1997,1998,575,2001,2004],{},"Durch die Freigabe von ",[494,1999,2000],{},"address",[494,2002,2003],{},"host"," wird der Datenverkehr über dasselbe private Netzwerk an Ihre Dienste weitergeleitet.",[880,2006,2008],{"id":2007},"schritt-4-firewall-auf-dem-vps-konfigurieren","Schritt 4: Firewall auf dem VPS konfigurieren",[429,2010,2011],{},"Aktivieren Sie die Firewall so, dass nur das Subnetz '100.96.0.0\u002F12' zugelassen wird und alle anderen öffentlichen eingehenden Zugriffe blockiert werden.",[925,2013,2015],{"className":1034,"code":2014,"language":1036,"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",[494,2016,2017,2030,2047,2061],{"__ignoreMap":424},[933,2018,2019,2021,2024,2027],{"class":935,"line":936},[933,2020,1896],{"class":1043},[933,2022,2023],{"class":1047}," ufw",[933,2025,2026],{"class":1047}," enable",[933,2028,2029],{"class":943}," \n",[933,2031,2032,2034,2036,2039,2042,2045],{"class":935,"line":1063},[933,2033,1896],{"class":1043},[933,2035,2023],{"class":1047},[933,2037,2038],{"class":1047}," default",[933,2040,2041],{"class":1047}," allow",[933,2043,2044],{"class":1047}," outgoing",[933,2046,2029],{"class":943},[933,2048,2049,2051,2053,2055,2058],{"class":935,"line":1070},[933,2050,1896],{"class":1043},[933,2052,2023],{"class":1047},[933,2054,2038],{"class":1047},[933,2056,2057],{"class":1047}," deny",[933,2059,2060],{"class":1047}," incoming\n",[933,2062,2063,2065,2067,2069,2072,2075],{"class":935,"line":1077},[933,2064,1896],{"class":1043},[933,2066,2023],{"class":1047},[933,2068,2041],{"class":1047},[933,2070,2071],{"class":1047}," in",[933,2073,2074],{"class":1047}," from",[933,2076,2077],{"class":1047}," 100.96.0.0\u002F12\n",[429,2079,2080],{},"Lassen Sie Loopback-Datenverkehr zu, um lokale Dienste nicht zu unterbrechen:",[925,2082,2084],{"className":1034,"code":2083,"language":1036,"meta":424,"style":424},"sudo ufw allow in on lo\nsudo ufw allow out on lo\n",[494,2085,2086,2102],{"__ignoreMap":424},[933,2087,2088,2090,2092,2094,2096,2099],{"class":935,"line":936},[933,2089,1896],{"class":1043},[933,2091,2023],{"class":1047},[933,2093,2041],{"class":1047},[933,2095,2071],{"class":1047},[933,2097,2098],{"class":1047}," on",[933,2100,2101],{"class":1047}," lo\n",[933,2103,2104,2106,2108,2110,2113,2115],{"class":935,"line":1063},[933,2105,1896],{"class":1043},[933,2107,2023],{"class":1047},[933,2109,2041],{"class":1047},[933,2111,2112],{"class":1047}," out",[933,2114,2098],{"class":1047},[933,2116,2101],{"class":1047},[429,2118,2119],{},"Laden Sie die Firewall neu und überprüfen Sie den Status:",[925,2121,2123],{"className":1034,"code":2122,"language":1036,"meta":424,"style":424},"sudo ufw reload \nsudo ufw status verbose\n",[494,2124,2125,2136],{"__ignoreMap":424},[933,2126,2127,2129,2131,2134],{"class":935,"line":936},[933,2128,1896],{"class":1043},[933,2130,2023],{"class":1047},[933,2132,2133],{"class":1047}," reload",[933,2135,2029],{"class":943},[933,2137,2138,2140,2142,2144],{"class":935,"line":1063},[933,2139,1896],{"class":1043},[933,2141,2023],{"class":1047},[933,2143,1923],{"class":1047},[933,2145,2146],{"class":1047}," verbose\n",[880,2148,2150],{"id":2149},"schritt-5-den-hermes-agent-im-privaten-netzwerk-freigeben","Schritt 5: Den Hermes Agent im privaten Netzwerk freigeben",[429,2152,2153,2154,2157,2158,2161],{},"Wir werden das ",[440,2155,2156],{},"Hermes Agent Web Dashboard"," für unser privates Netzwerk freigeben und den Standard-Authentifizierungsanbieter ",[440,2159,2160],{},"Nous Research"," verwenden.",[2163,2164,2166],"h4",{"id":2165},"den-authentifizierungsanbieter-einrichten","Den Authentifizierungsanbieter einrichten",[532,2168,2169,2178,2185,2192,2199],{},[487,2170,2171,2172,2177],{},"Gehen Sie zu ",[443,2173,2176],{"href":2174,"rel":2175},"https:\u002F\u002Fportal.nousresearch.com",[447],"portal.nousresearch.com",", um ein Konto zu registrieren.",[487,2179,2180,2181],{},"Wählen Sie 'Local Dashboards' (Lokale Dashboards).\n",[432,2182],{"alt":2183,"src":2184},"Auswählen der Option Local Dashboards im Nous Research-Portal","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fnous-portal-local-dashboards-selection.webp",[487,2186,2187,2188],{},"Klicken Sie auf 'Register Dashboard' (Dashboard registrieren).\n",[432,2189],{"alt":2190,"src":2191},"Klicken auf die Schaltfläche Register Dashboard, um einen neuen Dashboard-Eintrag zu erstellen","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fnous-portal-register-dashboard.webp",[487,2193,2194,2195],{},"Geben Sie die IP-Adresse des privaten Netzwerks Ihres VPS als 'Dashboard redirect URI' ein und klicken Sie auf 'Save' (Speichern).\n",[432,2196],{"alt":2197,"src":2198},"Registrieren der privaten VPS-IP-Adresse als Redirect-URI im Nous Research-Portal","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fnous-portal-register-redirect-uri.webp",[487,2200,2201,2202,2205],{},"Kopieren Sie die 'OAuth client ID' und fügen Sie sie in Ihre ",[494,2203,2204],{},"config.yaml","-Datei ein:",[925,2207,2211],{"className":2208,"code":2209,"language":2210,"meta":424,"style":424},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","dashboard:\n  theme: default\n  show_token_analytics: false\n  oauth:\n    client_id: agent:cmq02x7ha0002jk0ba3kfnb\n    portal_url: https:\u002F\u002Fportal.nousresearch.com\n  basic_auth:\n    username: ''\n    password_hash: ''\n","yaml",[494,2212,2213,2220,2230,2240,2247,2257,2267,2274,2285],{"__ignoreMap":424},[933,2214,2215,2218],{"class":935,"line":936},[933,2216,2217],{"class":1357},"dashboard",[933,2219,1371],{"class":947},[933,2221,2222,2225,2227],{"class":935,"line":1063},[933,2223,2224],{"class":1357},"  theme",[933,2226,890],{"class":947},[933,2228,2229],{"class":1047}," default\n",[933,2231,2232,2235,2237],{"class":935,"line":1070},[933,2233,2234],{"class":1357},"  show_token_analytics",[933,2236,890],{"class":947},[933,2238,2239],{"class":1381}," false\n",[933,2241,2242,2245],{"class":935,"line":1077},[933,2243,2244],{"class":1357},"  oauth",[933,2246,1371],{"class":947},[933,2248,2249,2252,2254],{"class":935,"line":1928},[933,2250,2251],{"class":1357},"    client_id",[933,2253,890],{"class":947},[933,2255,2256],{"class":1047}," agent:cmq02x7ha0002jk0ba3kfnb\n",[933,2258,2259,2262,2264],{"class":935,"line":1933},[933,2260,2261],{"class":1357},"    portal_url",[933,2263,890],{"class":947},[933,2265,2266],{"class":1047}," https:\u002F\u002Fportal.nousresearch.com\n",[933,2268,2269,2272],{"class":935,"line":1939},[933,2270,2271],{"class":1357},"  basic_auth",[933,2273,1371],{"class":947},[933,2275,2277,2280,2282],{"class":935,"line":2276},8,[933,2278,2279],{"class":1357},"    username",[933,2281,890],{"class":947},[933,2283,2284],{"class":947}," ''\n",[933,2286,2288,2291,2293],{"class":935,"line":2287},9,[933,2289,2290],{"class":1357},"    password_hash",[933,2292,890],{"class":947},[933,2294,2284],{"class":947},[2163,2296,2298],{"id":2297},"systemd-einrichten-um-das-hermes-dashboard-automatisch-zu-starten","Systemd einrichten, um das Hermes Dashboard automatisch zu starten",[532,2300,2301],{},[487,2302,2303],{},"Erstellen Sie eine Service-Datei:",[925,2305,2309],{"className":2306,"code":2307,"language":2308,"meta":424,"style":424},"language-shell shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","sudo nano \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-dashboard.service\n","shell",[494,2310,2311],{"__ignoreMap":424},[933,2312,2313,2315,2318],{"class":935,"line":936},[933,2314,1896],{"class":1043},[933,2316,2317],{"class":1047}," nano",[933,2319,2320],{"class":1047}," \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-dashboard.service\n",[532,2322,2323],{"start":1063},[487,2324,2325,2326,2329],{},"Fügen Sie die folgende Konfiguration ein und stellen Sie sicher, dass ",[494,2327,2328],{},"--host 0.0.0.0"," Teil des Befehls ist:",[925,2331,2335],{"className":2332,"code":2333,"language":2334,"meta":424,"style":424},"language-ini shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[Unit]\nDescription=Hermes Dashboard\nAfter=network.target\n\n[Service]\nUser=hermes\nWorkingDirectory=\u002Fhome\u002Fhermes\nExecStart=\u002Fhome\u002Fhermes\u002F.local\u002Fbin\u002Fhermes dashboard --host 0.0.0.0\nRestart=always\nRestartSec=10\nEnvironment=PATH=\u002Fhome\u002Fhermes\u002F.local\u002Fbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fbin:\u002Fbin\n\n[Install]\nWantedBy=multi-user.target\n","ini",[494,2336,2337,2342,2347,2352,2356,2361,2366,2371,2376,2381,2386,2392,2397,2403],{"__ignoreMap":424},[933,2338,2339],{"class":935,"line":936},[933,2340,2341],{},"[Unit]\n",[933,2343,2344],{"class":935,"line":1063},[933,2345,2346],{},"Description=Hermes Dashboard\n",[933,2348,2349],{"class":935,"line":1070},[933,2350,2351],{},"After=network.target\n",[933,2353,2354],{"class":935,"line":1077},[933,2355,1067],{"emptyLinePlaceholder":1066},[933,2357,2358],{"class":935,"line":1928},[933,2359,2360],{},"[Service]\n",[933,2362,2363],{"class":935,"line":1933},[933,2364,2365],{},"User=hermes\n",[933,2367,2368],{"class":935,"line":1939},[933,2369,2370],{},"WorkingDirectory=\u002Fhome\u002Fhermes\n",[933,2372,2373],{"class":935,"line":2276},[933,2374,2375],{},"ExecStart=\u002Fhome\u002Fhermes\u002F.local\u002Fbin\u002Fhermes dashboard --host 0.0.0.0\n",[933,2377,2378],{"class":935,"line":2287},[933,2379,2380],{},"Restart=always\n",[933,2382,2383],{"class":935,"line":1698},[933,2384,2385],{},"RestartSec=10\n",[933,2387,2389],{"class":935,"line":2388},11,[933,2390,2391],{},"Environment=PATH=\u002Fhome\u002Fhermes\u002F.local\u002Fbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fbin:\u002Fbin\n",[933,2393,2395],{"class":935,"line":2394},12,[933,2396,1067],{"emptyLinePlaceholder":1066},[933,2398,2400],{"class":935,"line":2399},13,[933,2401,2402],{},"[Install]\n",[933,2404,2406],{"class":935,"line":2405},14,[933,2407,2408],{},"WantedBy=multi-user.target\n",[532,2410,2411],{"start":1070},[487,2412,2413],{},"Aktivieren und starten Sie den Dienst:",[925,2415,2417],{"className":2306,"code":2416,"language":2308,"meta":424,"style":424},"sudo systemctl daemon-reload\nsudo systemctl enable hermes-dashboard\nsudo systemctl start hermes-dashboard\nsudo systemctl status hermes-dashboard\n",[494,2418,2419,2428,2439,2450],{"__ignoreMap":424},[933,2420,2421,2423,2425],{"class":935,"line":936},[933,2422,1896],{"class":1043},[933,2424,1899],{"class":1047},[933,2426,2427],{"class":1047}," daemon-reload\n",[933,2429,2430,2432,2434,2436],{"class":935,"line":1063},[933,2431,1896],{"class":1043},[933,2433,1899],{"class":1047},[933,2435,2026],{"class":1047},[933,2437,2438],{"class":1047}," hermes-dashboard\n",[933,2440,2441,2443,2445,2448],{"class":935,"line":1070},[933,2442,1896],{"class":1043},[933,2444,1899],{"class":1047},[933,2446,2447],{"class":1047}," start",[933,2449,2438],{"class":1047},[933,2451,2452,2454,2456,2458],{"class":935,"line":1077},[933,2453,1896],{"class":1043},[933,2455,1899],{"class":1047},[933,2457,1923],{"class":1047},[933,2459,2438],{"class":1047},[880,2461,2463],{"id":2462},"schritt-6-den-cloudflare-warp-client-auf-dem-desktop-installieren","Schritt 6: Den Cloudflare WARP-Client auf dem Desktop installieren",[532,2465,2466,2475,2478,2485,2492,2499],{},[487,2467,2468,2469,2474],{},"Laden Sie den Cloudflare WARP-Client vom ",[443,2470,2473],{"href":2471,"rel":2472},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fwarp-client\u002Fget-started\u002F",[447],"Cloudflare-Portal"," herunter.",[487,2476,2477],{},"Öffnen und starten Sie den Cloudflare WARP-Client nach der Installation.",[487,2479,2480,2481],{},"Melden Sie sich an, wenn Sie dazu aufgefordert werden.\n",[432,2482],{"alt":2483,"src":2484},"Anmeldeaufforderung des Cloudflare WARP-Clients auf dem Desktop-Computer","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-warp-desktop-login-prompt.webp",[487,2486,2487,2488],{},"Nach erfolgreicher Anmeldung wird eine Seite mit der Meldung 'Success' (Erfolg) angezeigt.\n",[432,2489],{"alt":2490,"src":2491},"Authentifizierungserfolg-Webseite nach der Anmeldung bei Cloudflare Zero Trust auf dem Desktop","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-warp-desktop-login-success.webp",[487,2493,2494,2495],{},"Der WARP-Client sollte nun anzeigen, dass er mit Ihrem Zero Trust-Team verbunden ist.\n",[432,2496],{"alt":2497,"src":2498},"Desktop-Cloudflare WARP-Client bestätigt aktive Verbindung zum privaten Zero Trust-Netzwerk","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-warp-desktop-client-connected.webp",[487,2500,2501,2502,2505,2506],{},"Navigieren Sie zu Ihrem Webbrowser und geben Sie Ihre private IP-Adresse ein (z. B. ",[494,2503,2504],{},"100.96.0.3","). Das Hermes Web Dashboard sollte erfolgreich geladen werden.\n",[432,2507],{"alt":2508,"src":2509},"Zugriff auf das private Hermes Agent Web Dashboard im Browser auf dem Desktop","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fhermes-agent-dashboard-desktop-view.webp",[2511,2512,2513],"blockquote",{},[429,2514,2515,2518,2519,2524],{},[440,2516,2517],{},"Profi-Tipp für macOS-Nutzer:"," Wenn Sie den WARP-Client verwenden, um auf mehrere Cloudflare-Konten zuzugreifen, sehen Sie sich unsere Kurzanleitung an: ",[440,2520,2521],{},[443,2522,2523],{"href":399},"Wechseln zwischen mehreren Cloudflare WARP-Profilen auf Mac",", um einen nahtlosen Kontowechsel zu ermöglichen.",[880,2526,2528],{"id":2527},"schritt-7-den-cloudflare-warp-client-auf-ios-geräten-installieren","Schritt 7: Den Cloudflare WARP-Client auf iOS-Geräten installieren",[532,2530,2531,2538,2546,2554,2562],{},[487,2532,2533,2534,2537],{},"Installieren Sie ",[440,2535,2536],{},"Cloudflare One"," aus dem App Store.",[487,2539,2540,2541],{},"Öffnen Sie die Cloudflare One-App und geben Sie Ihren Teamnamen ein, wenn Sie dazu aufgefordert werden.\n",[432,2542],{"alt":2543,"src":2544,"width":2545},"Eingeben des Cloudflare Zero Trust-Teamnamens in der Cloudflare One-App auf iOS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-one-ios-team-name-prompt.webp",239,[487,2547,2548,2549],{},"Melden Sie sich mit derselben E-Mail-Adresse an, die in der obigen Richtlinienregel konfiguriert wurde.\n",[432,2550],{"alt":2551,"src":2552,"width":2553},"E-Mail-Authentifizierungsaufforderung für Cloudflare Zero Trust auf iOS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-one-ios-email-login.webp",229,[487,2555,2556,2557],{},"Sobald eine Verbindung hergestellt ist, sollte es folgendermaßen aussehen:\n",[432,2558],{"alt":2559,"src":2560,"width":2561},"Cloudflare One-App zeigt den Verbindungsstatus auf dem iOS-Mobilgerät an","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-one-ios-client-connected.webp",322,[487,2563,2564,2565,2567,2568],{},"Navigieren Sie zu Ihrem Webbrowser und geben die private IP-Adresse ",[494,2566,2504],{}," ein, um auf Ihrem Mobilgerät auf das Hermes Web Dashboard zuzugreifen.\n",[432,2569],{"alt":2570,"src":2571,"width":2572},"Zugriff auf die Benutzeroberfläche des Hermes Agent Web Dashboards im mobilen Browser","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fhermes-agent-dashboard-mobile-view.webp",345,[473,2574,2576],{"id":2575},"fazit","Fazit",[429,2578,2579,2580,2582,2583,2586],{},"Da ",[440,2581,1726],{}," die Identitätsrichtlinien verwaltet und der ",[440,2584,2585],{},"WARP","-Client den Datenverkehr über einen verschlüsselten Tunnel weiterleitet, ist Ihr Hermes Agent weltweit sicher von Ihren Geräten aus erreichbar. Dieses Setup bildet eine sichere, robuste Grundlage für den Aufbau und den Zugriff auf eine vollständig dezentrale, private KI-Infrastruktur.",[1642,2588,2589],{},"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":1063,"depth":1070,"links":2591},[2592,2595,2607],{"id":1740,"depth":1063,"text":1741,"children":2593},[2594],{"id":1759,"depth":1070,"text":1760},{"id":1771,"depth":1063,"text":1772,"children":2596},[2597,2598,2599,2600,2601,2605,2606],{"id":1775,"depth":1070,"text":1776},{"id":1829,"depth":1070,"text":1830},{"id":1970,"depth":1070,"text":1971},{"id":2007,"depth":1070,"text":2008},{"id":2149,"depth":1070,"text":2150,"children":2602},[2603,2604],{"id":2165,"depth":1077,"text":2166},{"id":2297,"depth":1077,"text":2298},{"id":2462,"depth":1070,"text":2463},{"id":2527,"depth":1070,"text":2528},{"id":2575,"depth":1063,"text":2576},[1662,2609],"security","2026-07-09","Erfahren Sie, wie Sie mit Cloudflare WARP und Zero Trust weltweit sicher auf Ihren Hermes Agent zugreifen können, ohne eingehende Firewall-Ports zu öffnen.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002FDE-Exposing-Hermes-Agent-to-Private-Network-Using-Cloudflare-WARP.webp","Sichere Freigabe des Hermes Agent in einem privaten Netzwerk mittels Cloudflare Zero Trust und WARP-Tunnel",{"schemaOrg":2615,"robots":1696,"sitemap":2646},[2616],{"@type":1675,"headline":1711,"description":2611,"name":1711,"image":2612,"step":2617},[2618,2622,2626,2630,2634,2638,2642],{"@type":1678,"name":2619,"text":2620,"url":2621,"image":1794},"Cloudflare Zero Trust einrichten","Melden Sie sich bei Ihrem Cloudflare Dashboard an. Klicken Sie im linken Menü auf 'Zero Trust'. Wenn dies Ihr erstes Mal ist, werden Sie aufgefordert, einen Tarif zu wählen (der kostenlose Tarif reicht für dieses Setup völlig aus) und Ihr Team zu ben","#step-1",{"@type":1678,"name":2623,"text":2624,"url":2625,"image":1967},"Den Cloudflare WARP-Client auf dem VPS einrichten","Führen Sie sudo apt update und sudo apt install cloudflare-warp im Terminal auf Ihrem VPS aus. Führen Sie warp-cli registration new \u003CTEAM-NAME> im Terminal auf Ihrem VPS aus, was eine URL ausgibt. Kopieren Sie die ausgegebene URL, die wie https:\u002F\u002F\u003Cte","#step-2",{"@type":1678,"name":2627,"text":2628,"url":2629,"image":1980},"Datenverkehr-Routing einrichten","Klicken Sie im Geräte-Dashboard auf das Profil Ihres VPS. Scrollen Sie nach unten zum Abschnitt 'Split Tunnels'. Klicken Sie auf die Schaltfläche 'Manage' (Verwalten) und konfigurieren Sie die Einstellungen wie unten gezeigt. Ersetzen Sie die IP-Adre","#step-3",{"@type":1678,"name":2631,"text":2632,"url":2633},"Firewall auf dem VPS konfigurieren","Aktivieren Sie die Firewall so, dass nur das Subnetz '100.96.0.0\u002F12' zugelassen wird und alle anderen öffentlichen eingehenden Zugriffe blockiert werden. bash Lassen Sie Loopback-Datenverkehr zu, um lokale Dienste nicht zu unterbrechen: bash Laden Si","#step-4",{"@type":1678,"name":2635,"text":2636,"url":2637},"Den Hermes Agent im privaten Netzwerk freigeben","Wir werden das Hermes Agent Web Dashboard für unser privates Netzwerk freigeben und den Standard-Authentifizierungsanbieter Nous Research verwenden.","#step-5",{"@type":1678,"name":2639,"text":2640,"url":2641,"image":2484},"Den Cloudflare WARP-Client auf dem Desktop installieren","Laden Sie den Cloudflare WARP-Client vom Cloudflare-Portal herunter. Öffnen und starten Sie den Cloudflare WARP-Client nach der Installation. Melden Sie sich an, wenn Sie dazu aufgefordert werden. Nach erfolgreicher Anmeldung wird eine Seite mit der","#step-6",{"@type":1678,"name":2643,"text":2644,"url":2645,"image":2544},"Den Cloudflare WARP-Client auf iOS-Geräten installieren","Installieren Sie Cloudflare One aus dem App Store. Öffnen Sie die Cloudflare One-App und geben Sie Ihren Teamnamen ein, wenn Sie dazu aufgefordert werden. Melden Sie sich mit derselben E-Mail-Adresse an, die in der obigen Richtlinienregel konfigurier","#step-7",{"lastmod":2647},"2026-09-28",{"title":2649,"description":2611,"ogTitle":1711,"ogDescription":2611,"twitterTitle":1711,"twitterDescription":2611},"Sicherer Hermes Agent-Zugriff mit Cloudflare Zero Trust","de\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",[1723,2652,1719,2653,2654],"Zero Trust","Privates Netzwerk","Anleitung","OWyvw7JrzeJL6Ks3SschIQF-JKVNxc0v5dM6KjfvVtE",[2657,4862,5265],{"id":2658,"title":454,"author":424,"body":2659,"category":4830,"date":4831,"description":464,"extension":1667,"image":465,"imageAlt":466,"isPublished":1066,"meta":4832,"minRead":3105,"navigation":1066,"path":383,"seo":4854,"stem":4856,"tags":4857,"updatedAt":1705,"__hash__":4861},"article\u002Fde\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues.md",{"type":426,"value":2660,"toc":4800},[2661,2664,2670,2675,2679,2682,2720,2724,2730,2768,2772,2776,2790,2796,2802,2806,2810,2825,2831,2879,2908,2912,2920,2926,2930,2933,3152,3156,3202,3209,3216,3224,3275,3281,3308,3312,3316,3343,3371,3376,3418,3427,3708,3712,3758,3763,3770,3775,3779,3803,3806,3812,3815,3819,3827,3833,3836,3842,3849,3873,3879,3885,3888,3894,3898,3901,3904,3907,3913,3916,3922,3928,3934,3939,3943,3954,3961,3967,3970,3976,3980,3987,3993,3999,4003,4012,4076,4089,4144,4147,4217,4223,4237,4243,4247,4292,4298,4301,4307,4310,4316,4320,4335,4351,4357,4454,4457,4463,4474,4520,4526,4532,4544,4560,4563,4569,4573,4580,4602,4612,4710,4722,4728,4735,4741,4744,4750,4753,4759,4761,4764,4767,4797],[429,2662,2663],{},"Die Fragmentierung des Kontexts ist eine frustrierende Hürde bei der Arbeit mit mehreren KI-Agenten. Wenn Konversationen über verschiedene Tools verstreut sind, agieren Sie letztendlich als menschlicher Router, indem Sie Gespräche aus Claude Code kopieren, um sie in die Gemini-CLI einzufügen, und dann aus der Gemini-CLI kopieren, um sie in den Hermes-Agenten einzufügen. Diese Reibung nimmt zu, wenn auch noch menschliche Kollegen im selben Team sind.",[429,2665,2666],{},[432,2667],{"alt":2668,"src":2669},"Die Benutzeroberfläche des kollaborativen Buzz-Workspace mit Chat-Kanälen und aktiven KI-Agenten","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-workspace-interface.webp",[429,2671,2672,2674],{},[440,2673,1104],{},", ein Open-Source-Kollaborations-Workspace, bringt menschliche Teams und KI-Agenten in einer einzigen, einheitlichen Umgebung zusammen. Hier teilen sich menschliche Kollegen und KI-Agenten dieselbe Aufgaben- und Projekthistorie und übergeben sich nahtlos gegenseitig die Arbeit.",[473,2676,2678],{"id":2677},"was-ist-blocks-buzz-der-kollaborative-workspace-für-ki-agenten","Was ist Block's Buzz? Der kollaborative Workspace für KI-Agenten",[429,2680,2681],{},"Buzz ist ein Open-Source-Kollaborations-Workspace von Block (dem Unternehmen von Jack Dorsey), in dem Menschen und KI-Agenten dieselben Kanäle und Projekte teilen. Es bietet die folgenden Hauptfunktionen:",[484,2683,2684,2690,2696,2702,2708,2714],{},[487,2685,2686,2689],{},[440,2687,2688],{},"Gemeinsamer Kontext:"," In den Kanälen arbeiten Menschen und Agenten zusammen. Der gesamte Konversations- und Projektverlauf ist im Kanal enthalten.",[487,2691,2692,2695],{},[440,2693,2694],{},"Agent-zu-Agent-Kommunikation:"," Agenten können miteinander kommunizieren, selbst über verschiedene Maschinen hinweg. Ein Agent kann einen anderen Agenten per @-Mention erwähnen, um Arbeit zu übergeben oder Code abzugleichen.",[487,2697,2698,2701],{},[440,2699,2700],{},"Erwähnungsveranlasste Aktivierung (Mention-driven):"," Agenten agieren nur, wenn sie per @-Mention erwähnt werden, ansonsten verhalten sie sich ruhig. Bei einer Erwähnung liest ein Agent den relevanten Kontext im Kanal und beginnt mit der Arbeit.",[487,2703,2704,2707],{},[440,2705,2706],{},"Einheitliches Identitätssystem:"," Menschen und Agenten nutzen dasselbe Identitätssystem, das über kryptografische Schlüssel authentifiziert wird.",[487,2709,2710,2713],{},[440,2711,2712],{},"Delegierte Befehle:"," Sie können menschlichen Kollegen die Berechtigung erteilen, Ihre Agenten zu steuern, sodass das gesamte Team die digitalen Helfer der anderen instruieren und nutzen kann.",[487,2715,2716,2719],{},[440,2717,2718],{},"Selbst gehostete Server (Self-hosted):"," Da Sie den Server selbst hosten, bleiben Ihre Daten vollständig unter Ihrer Kontrolle. Sie entscheiden, wer beitritt, und definieren Ihre eigenen Betriebsregeln.",[473,2721,2723],{"id":2722},"die-kryptografische-nostr-basierte-architektur-von-buzz","Die kryptografische, Nostr-basierte Architektur von Buzz",[429,2725,2726],{},[432,2727],{"alt":2728,"src":2729},"Kryptografisches, Nostr-basiertes Architekturdiagramm des Buzz-Workspace","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-nostr-cryptographic-architecture.webp",[484,2731,2732,2738,2744,2750,2756,2762],{},[487,2733,2734,2737],{},[440,2735,2736],{},"Das Nostr-Relay fungiert als Server:"," Nachrichten, Workflows, Repositories und andere Events werden kryptografisch signiert, verifiziert und auf einem Nostr-Relay-Server gespeichert. Das Nostr-Protokoll unterstützt nativ die Kommunikation über WebSockets und REST-APIs.",[487,2739,2740,2743],{},[440,2741,2742],{},"Einheitliche kryptografische Identität:"," Sowohl Menschen als auch Agenten authentifizieren sich mit ihren eigenen kryptografischen Schlüsseln. Diese Identität bleibt auf der Client-Seite und wird niemals auf dem Server gespeichert.",[487,2745,2746,2749],{},[440,2747,2748],{},"Erstklassige Agenten-Mitgliedschaft:"," Jeder Agent besitzt seine eigene Identität, Kanalmitgliedschaften und ein Audit-Protokoll. Agenten verbinden sich über das Agent Communication Protocol (ACP) mit dem Workspace.",[487,2751,2752,2755],{},[440,2753,2754],{},"Dezentrale Git-Repositories:"," Code-Repositories werden auf S3-kompatiblem Objektspeicher gesichert, während Aufgaben, Pull Requests und Code-Reviews im Nostr-Event-Log nachverfolgt werden. Folglich wird ein Buzz-Git-Repository auf dem Nostr-Relay und nicht auf GitHub gehostet.",[487,2757,2758,2761],{},[440,2759,2760],{},"Die Buzz-App is ein Nostr-Client:"," Buzz ist unabhängig vom Nostr-Relay; es ist eine Desktop-\u002FMobile-Client-Anwendung, die sich mit der URL des Relays verbindet.",[487,2763,2764,2767],{},[440,2765,2766],{},"Infrastruktur-Stack:"," Eine PostgreSQL-Datenbank übernimmt die Event-Speicherung und Volltextsuche, Redis verwaltet das Pub\u002FSub-Messaging und MinIO (S3-kompatibel) wird für die Medienspeicherung verwendet.",[473,2769,2771],{"id":2770},"blocks-buzz-relay-auf-einem-linux-vps-selbst-hosten-eine-anleitung","Block's Buzz Relay auf einem Linux-VPS selbst hosten: Eine Anleitung",[880,2773,2775],{"id":2774},"_0-voraussetzungen","0. Voraussetzungen",[484,2777,2778,2781,2784,2787],{},[487,2779,2780],{},"Ein Linux-VPS",[487,2782,2783],{},"Eine Domain, die auf Ihren Server zeigt",[487,2785,2786],{},"Docker und das Docker Compose-Plugin",[487,2788,2789],{},"Cloudflare-Konto (kostenlose Version)",[429,2791,2792,2793,2795],{},"In diesem Guide werden wir das Nostr-Relay auf einem Ubuntu-VPS hinter einem privaten Netzwerk von ",[443,2794,1711],{"href":363}," betreiben. Der Stack besteht aus vier Diensten in Docker Compose — Relay, PostgreSQL, Redis und MinIO — plus Caddy für HTTPS.",[462,2797],{"description":2798,"image":2612,"image-alt":2799,"label":2800,"min-read":2801,"title":1711,"to":363},"Erfahren Sie, wie Sie Ihren Hermes-Agenten mithilfe von Cloudflare WARP und Zero Trust sicher weltweit freigeben und darauf zugreifen können, ohne eingehende Firewall-Ports zu öffnen.","Sicheres Freigeben des Hermes-Agenten in einem privaten Netzwerk mithilfe von Cloudflare Zero Trust und einem WARP-Tunnel","Ähnlicher Leitfaden","8",[880,2803,2805],{"id":2804},"_1-cloudflare-dns-und-api-token","1. Cloudflare-DNS und API-Token",[2163,2807,2809],{"id":2808},"cloudflare-api-token-erstellen","Cloudflare-API-Token erstellen",[532,2811,2812,2819],{},[487,2813,2814,2815,2818],{},"Klicken Sie auf das Profilsymbol oben rechts und wählen Sie das Menü ",[440,2816,2817],{},"Profile"," aus.",[487,2820,2821,2822,551],{},"Klicken Sie auf ",[440,2823,2824],{},"API Tokens",[429,2826,2827],{},[432,2828],{"alt":2829,"src":2830},"Cloudflare-Benutzerprofilseite mit dem Menü zur Erstellung von API-Tokens","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fcloudflare-profile-api-tokens.webp",[532,2832,2833,2838,2844,2864,2869,2873,2876],{"start":1070},[487,2834,2821,2835,551],{},[440,2836,2837],{},"Create Token",[487,2839,2840,2841,551],{},"Nutzen Sie die Vorlage ",[440,2842,2843],{},"Edit zone DNS",[487,2845,2846,2847],{},"Konfigurieren Sie die Vorlage wie folgt:\n",[484,2848,2849,2855],{},[487,2850,2851,2854],{},[440,2852,2853],{},"Permissions",": Zone — DNS — Edit",[487,2856,2857,2860,2861],{},[440,2858,2859],{},"Zone Resources",": Include — Specific zone — ",[494,2862,2863],{},"example.com",[487,2865,2821,2866,551],{},[440,2867,2868],{},"Continue to summary",[487,2870,2821,2871,551],{},[440,2872,2837],{},[487,2874,2875],{},"Kopieren Sie das generierte Token, da es nach dem Schließen der Seite nicht mehr angezeigt wird.",[487,2877,2878],{},"Testen Sie das generierte Token in Ihrem Terminal, um sicherzustellen, dass es funktioniert:",[925,2880,2882],{"className":1034,"code":2881,"language":1036,"meta":424,"style":424},"curl \"https:\u002F\u002Fapi.cloudflare.com\u002Fclient\u002Fv4\u002Fuser\u002Ftokens\u002Fverify\" -H \"Authorization: Bearer YOUR_TOKEN_HERE\"\n",[494,2883,2884],{"__ignoreMap":424},[933,2885,2886,2889,2892,2895,2898,2901,2903,2906],{"class":935,"line":936},[933,2887,2888],{"class":1043},"curl",[933,2890,2891],{"class":947}," \"",[933,2893,2894],{"class":1047},"https:\u002F\u002Fapi.cloudflare.com\u002Fclient\u002Fv4\u002Fuser\u002Ftokens\u002Fverify",[933,2896,2897],{"class":947},"\"",[933,2899,2900],{"class":1047}," -H",[933,2902,2891],{"class":947},[933,2904,2905],{"class":1047},"Authorization: Bearer YOUR_TOKEN_HERE",[933,2907,1960],{"class":947},[2163,2909,2911],{"id":2910},"dns-einträge","DNS-Einträge",[484,2913,2914],{},[487,2915,2916,2917,551],{},"Erstellen Sie einen A-Eintrag und setzen Sie ihn auf ",[440,2918,2919],{},"DNS only",[429,2921,2922],{},[432,2923],{"alt":2924,"src":2925},"Konfigurieren eines DNS-A-Eintrags für die Buzz-Domain im Cloudflare-Dashboard, Status auf 'DNS only'","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fcloudflare-dns-a-record-configuration.webp",[880,2927,2929],{"id":2928},"_2-docker-auf-ubuntu-installieren","2. Docker auf Ubuntu installieren",[429,2931,2932],{},"Führen Sie die folgenden Befehle aus, um Docker auf Ubuntu zu installieren:",[925,2934,2936],{"className":1034,"code":2935,"language":1036,"meta":424,"style":424},"# Add Docker's official GPG key and set up the Docker repository\ncurl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fusr\u002Fshare\u002Fkeyrings\u002Fdocker-archive-keyring.gpg\n\n# Add the official Docker repository\necho \"deb [arch=amd64 signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fdocker-archive-keyring.gpg] https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu $(lsb_release -cs) stable\" | sudo tee \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list > \u002Fdev\u002Fnull\n\n# Update package list\nsudo apt update\n\n# Install Docker Engine, Docker Community Edition, and containerd runtime\nsudo apt install docker-ce docker-ce-cli containerd.io -y\n\n# Start automatically when the system boots\nsudo systemctl enable docker\n\n# Verify docker is installed\ndocker --version\n\nsudo apt install -y docker-compose-plugin\n\n# Verify the compose plugin is installed\ndocker compose version\n\n",[494,2937,2938,2943,2971,2975,2980,3023,3027,3032,3042,3046,3051,3072,3076,3081,3092,3097,3103,3111,3116,3131,3136,3142],{"__ignoreMap":424},[933,2939,2940],{"class":935,"line":936},[933,2941,2942],{"class":1073},"# Add Docker's official GPG key and set up the Docker repository\n",[933,2944,2945,2947,2950,2953,2956,2959,2962,2965,2968],{"class":935,"line":1063},[933,2946,2888],{"class":1043},[933,2948,2949],{"class":1047}," -fsSL",[933,2951,2952],{"class":1047}," https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg",[933,2954,2955],{"class":947}," |",[933,2957,2958],{"class":1043}," sudo",[933,2960,2961],{"class":1047}," gpg",[933,2963,2964],{"class":1047}," --dearmor",[933,2966,2967],{"class":1047}," -o",[933,2969,2970],{"class":1047}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fdocker-archive-keyring.gpg\n",[933,2972,2973],{"class":935,"line":1070},[933,2974,1067],{"emptyLinePlaceholder":1066},[933,2976,2977],{"class":935,"line":1077},[933,2978,2979],{"class":1073},"# Add the official Docker repository\n",[933,2981,2982,2985,2987,2990,2993,2996,2999,3002,3005,3007,3009,3011,3014,3017,3020],{"class":935,"line":1928},[933,2983,2984],{"class":964},"echo",[933,2986,2891],{"class":947},[933,2988,2989],{"class":1047},"deb [arch=amd64 signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fdocker-archive-keyring.gpg] https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu ",[933,2991,2992],{"class":947},"$(",[933,2994,2995],{"class":1043},"lsb_release",[933,2997,2998],{"class":1047}," -cs",[933,3000,3001],{"class":947},")",[933,3003,3004],{"class":1047}," stable",[933,3006,2897],{"class":947},[933,3008,2955],{"class":947},[933,3010,2958],{"class":1043},[933,3012,3013],{"class":1047}," tee",[933,3015,3016],{"class":1047}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[933,3018,3019],{"class":947}," >",[933,3021,3022],{"class":1047}," \u002Fdev\u002Fnull\n",[933,3024,3025],{"class":935,"line":1933},[933,3026,1067],{"emptyLinePlaceholder":1066},[933,3028,3029],{"class":935,"line":1939},[933,3030,3031],{"class":1073},"# Update package list\n",[933,3033,3034,3036,3039],{"class":935,"line":2276},[933,3035,1896],{"class":1043},[933,3037,3038],{"class":1047}," apt",[933,3040,3041],{"class":1047}," update\n",[933,3043,3044],{"class":935,"line":2287},[933,3045,1067],{"emptyLinePlaceholder":1066},[933,3047,3048],{"class":935,"line":1698},[933,3049,3050],{"class":1073},"# Install Docker Engine, Docker Community Edition, and containerd runtime\n",[933,3052,3053,3055,3057,3060,3063,3066,3069],{"class":935,"line":2388},[933,3054,1896],{"class":1043},[933,3056,3038],{"class":1047},[933,3058,3059],{"class":1047}," install",[933,3061,3062],{"class":1047}," docker-ce",[933,3064,3065],{"class":1047}," docker-ce-cli",[933,3067,3068],{"class":1047}," containerd.io",[933,3070,3071],{"class":1047}," -y\n",[933,3073,3074],{"class":935,"line":2394},[933,3075,1067],{"emptyLinePlaceholder":1066},[933,3077,3078],{"class":935,"line":2399},[933,3079,3080],{"class":1073},"# Start automatically when the system boots\n",[933,3082,3083,3085,3087,3089],{"class":935,"line":2405},[933,3084,1896],{"class":1043},[933,3086,1899],{"class":1047},[933,3088,2026],{"class":1047},[933,3090,3091],{"class":1047}," docker\n",[933,3093,3095],{"class":935,"line":3094},15,[933,3096,1067],{"emptyLinePlaceholder":1066},[933,3098,3100],{"class":935,"line":3099},16,[933,3101,3102],{"class":1073},"# Verify docker is installed\n",[933,3104,3106,3108],{"class":935,"line":3105},17,[933,3107,1177],{"class":1043},[933,3109,3110],{"class":1047}," --version\n",[933,3112,3114],{"class":935,"line":3113},18,[933,3115,1067],{"emptyLinePlaceholder":1066},[933,3117,3119,3121,3123,3125,3128],{"class":935,"line":3118},19,[933,3120,1896],{"class":1043},[933,3122,3038],{"class":1047},[933,3124,3059],{"class":1047},[933,3126,3127],{"class":1047}," -y",[933,3129,3130],{"class":1047}," docker-compose-plugin\n",[933,3132,3134],{"class":935,"line":3133},20,[933,3135,1067],{"emptyLinePlaceholder":1066},[933,3137,3139],{"class":935,"line":3138},21,[933,3140,3141],{"class":1073},"# Verify the compose plugin is installed\n",[933,3143,3145,3147,3149],{"class":935,"line":3144},22,[933,3146,1177],{"class":1043},[933,3148,1180],{"class":1047},[933,3150,3151],{"class":1047}," version\n",[880,3153,3155],{"id":3154},"_3-klonen-und-konfigurieren","3. Klonen und konfigurieren",[925,3157,3159],{"className":1034,"code":3158,"language":1036,"meta":424,"style":424},"git clone https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz.git\n\ncd buzz\u002Fdeploy\u002Fcompose\ncp .env.example .env\nnano .env\n",[494,3160,3161,3172,3176,3184,3195],{"__ignoreMap":424},[933,3162,3163,3166,3169],{"class":935,"line":936},[933,3164,3165],{"class":1043},"git",[933,3167,3168],{"class":1047}," clone",[933,3170,3171],{"class":1047}," https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz.git\n",[933,3173,3174],{"class":935,"line":1063},[933,3175,1067],{"emptyLinePlaceholder":1066},[933,3177,3178,3181],{"class":935,"line":1070},[933,3179,3180],{"class":964},"cd",[933,3182,3183],{"class":1047}," buzz\u002Fdeploy\u002Fcompose\n",[933,3185,3186,3189,3192],{"class":935,"line":1077},[933,3187,3188],{"class":1043},"cp",[933,3190,3191],{"class":1047}," .env.example",[933,3193,3194],{"class":1047}," .env\n",[933,3196,3197,3200],{"class":935,"line":1928},[933,3198,3199],{"class":1043},"nano",[933,3201,3194],{"class":1047},[429,3203,3204,3205,3208],{},"Editieren Sie die ",[494,3206,3207],{},".env"," in Gruppen:",[484,3210,3211],{},[487,3212,3213],{},[440,3214,3215],{},"Domain:",[925,3217,3222],{"className":3218,"code":3220,"language":3221},[3219],"language-text","BUZZ_DOMAIN=buzz.pafor.me\nRELAY_URL=wss:\u002F\u002Fbuzz.pafor.me\nBUZZ_PAIRING_RELAY_URL=wss:\u002F\u002Fbuzz.pafor.me\u002Fpair\nBUZZ_MEDIA_BASE_URL=https:\u002F\u002Fbuzz.pafor.me\u002Fmedia\nBUZZ_MEDIA_SERVER_DOMAIN=buzz.pafor.me\nBUZZ_CORS_ORIGINS=https:\u002F\u002Fbuzz.pafor.me\n","text",[494,3223,3220],{"__ignoreMap":424},[484,3225,3226,3236],{},[487,3227,3228,3231,3232,3235],{},[440,3229,3230],{},"Besitzerschlüssel:"," ",[494,3233,3234],{},"RELAY_OWNER_PUBKEY"," erfordert Ihren 64-stelligen hexadezimalen öffentlichen Schlüssel. Erstellen Sie zuerst eine Identität in der Desktop-App ('Create a new identity key' → kopieren Sie Ihre öffentliche ID, die im npub-Format vorliegt) und konvertieren Sie diese dann in Hex.",[487,3237,3238,3241],{},[440,3239,3240],{},"Geheimnisse (Secrets):",[484,3242,3243,3255,3269],{},[487,3244,3245,3246,3250,3251,3254],{},"Generieren Sie Geheimnisse mit diesem ",[443,3247,3249],{"href":3248},"\u002Fde\u002Ftools\u002Fsecret-key-hex","Online-Tool"," oder mit ",[494,3252,3253],{},"openssl rand -hex 32"," (führen Sie es siebenmal aus)",[487,3256,3257,3258,3261,3262,743,3265,3268],{},"Ersetzen Sie jeden ",[494,3259,3260],{},"CHANGE_ME","-Platzhalter: ",[494,3263,3264],{},"BUZZ_RELAY_PRIVATE_KEY",[494,3266,3267],{},"BUZZ_GIT_HOOK_HMAC_SECRET",", die Passwörter für Postgres\u002FRedis\u002FTypesense und die S3-Zugangs-\u002FGeheimschlüssel.",[487,3270,3271,3272,551],{},"Verbleibende Platzhalter sind die häufigste Ursache für Container-Neustartschleifen; überprüfen Sie Ihre mit ",[494,3273,3274],{},"grep CHANGE_ME .env",[925,3276,3279],{"className":3277,"code":3278,"language":3221},[3219],"    BUZZ_RELAY_PRIVATE_KEY=CHANGE_ME_64_HEX_PRIVATE_KEY\n    BUZZ_GIT_HOOK_HMAC_SECRET=CHANGE_ME_RANDOM_64_HEX\n    POSTGRES_PASSWORD=CHANGE_ME_RANDOM_PASSWORD\n    REDIS_PASSWORD=CHANGE_ME_RANDOM_PASSWORD\n    TYPESENSE_API_KEY=CHANGE_ME_RANDOM_API_KEY\n    BUZZ_S3_ACCESS_KEY=CHANGE_ME_RANDOM_ACCESS_KEY\n    BUZZ_S3_SECRET_KEY=CHANGE_ME_RANDOM_SECRET_KEY\n",[494,3280,3278],{"__ignoreMap":424},[484,3282,3283],{},[487,3284,3285,3288],{},[440,3286,3287],{},"Sonstiges:",[484,3289,3290,3297],{},[487,3291,3292,3293,3296],{},"Fügen Sie ",[494,3294,3295],{},"CLOUDFLARE_API_TOKEN"," als Umgebungsvariable hinzu und weisen Sie das zuvor generierte API-Token zu. Dies wird für Caddy benötigt.",[487,3298,3299,3300,743,3302,575,3305,551],{},"Buzz wird mit offenen Standardeinstellungen ausgeliefert — jeder, der Ihre Relay-URL kennt, kann sich authentifizieren und beitreten. Setzen Sie ",[494,3301,3234],{},[494,3303,3304],{},"BUZZ_REQUIRE_RELAY_MEMBERSHIP=true",[494,3306,3307],{},"BUZZ_REQUIRE_AUTH_TOKEN=true",[880,3309,3311],{"id":3310},"_4-https-mit-caddy-aktivieren","4. HTTPS mit Caddy aktivieren",[2163,3313,3315],{"id":3314},"eigenes-caddy-image-mit-dem-cloudflare-dns-modul-erstellen","Eigenes Caddy-Image mit dem Cloudflare-DNS-Modul erstellen",[484,3317,3318,3329,3340],{},[487,3319,3320,3321,3324,3325,3328],{},"Wir richten DNS-01 mit Cloudflare für Caddy ein. DNS-01 funktioniert, indem das Plugin einen TXT-Eintrag ",[494,3322,3323],{},"_acme-challenge.buzz.pafor.me"," in das ",[440,3326,3327],{},"öffentliche DNS"," schreibt;",[487,3330,3331,3332,3335,3336,3339],{},"Let's Encrypt ruft den Eintrag dann aus dem öffentlichen Internet ab, um die Domaininhaberschaft zu überprüfen. Das bedeutet, dass ",[494,3333,3334],{},"pafor.me"," eine öffentliche Zone in Ihrem Cloudflare-Konto sein muss — nicht nur ein privater Hostname, der nur im privaten DNS von Zero Trust \u002F WARP existiert. Wenn ",[494,3337,3338],{},"buzz.pafor.me"," nur privat aufgelöst wird und keine öffentliche Zone vorhanden ist, schlägt DNS-01 fehl, was einen anderen Ansatz erfordert.",[487,3341,3342],{},"Fügen Sie Folgendes zum Caddyfile hinzu:",[925,3344,3346],{"className":1345,"code":3345,"language":1347,"meta":424,"style":424},"{\n  acme_dns cloudflare {env.CLOUDFLARE_API_TOKEN}\n}\n",[494,3347,3348,3353,3367],{"__ignoreMap":424},[933,3349,3350],{"class":935,"line":936},[933,3351,3352],{"class":947},"{\n",[933,3354,3355,3358,3361,3364],{"class":935,"line":1063},[933,3356,3357],{"class":1047},"  acme_dns cloudflare",[933,3359,3360],{"class":947}," {",[933,3362,3363],{"class":1047},"env.CLOUDFLARE_API_TOKEN",[933,3365,3366],{"class":947},"}\n",[933,3368,3369],{"class":935,"line":1070},[933,3370,3366],{"class":947},[484,3372,3373],{},[487,3374,3375],{},"Erstellen Sie eine Dockerfile.caddy mit dem folgenden Inhalt, der für compose.caddy.yml erforderlich ist:",[925,3377,3379],{"className":1345,"code":3378,"language":1347,"meta":424,"style":424},"FROM caddy:2-builder AS builder\n\nRUN xcaddy build \\\n    --with github.com\u002Fcaddy-dns\u002Fcloudflare\n\nFROM caddy:2-alpine\n\nCOPY --from=builder \u002Fusr\u002Fbin\u002Fcaddy \u002Fusr\u002Fbin\u002Fcaddy\n",[494,3380,3381,3386,3390,3395,3400,3404,3409,3413],{"__ignoreMap":424},[933,3382,3383],{"class":935,"line":936},[933,3384,3385],{"class":1047},"FROM caddy:2-builder AS builder\n",[933,3387,3388],{"class":935,"line":1063},[933,3389,1067],{"emptyLinePlaceholder":1066},[933,3391,3392],{"class":935,"line":1070},[933,3393,3394],{"class":1047},"RUN xcaddy build \\\n",[933,3396,3397],{"class":935,"line":1077},[933,3398,3399],{"class":1047},"    --with github.com\u002Fcaddy-dns\u002Fcloudflare\n",[933,3401,3402],{"class":935,"line":1928},[933,3403,1067],{"emptyLinePlaceholder":1066},[933,3405,3406],{"class":935,"line":1933},[933,3407,3408],{"class":1047},"FROM caddy:2-alpine\n",[933,3410,3411],{"class":935,"line":1939},[933,3412,1067],{"emptyLinePlaceholder":1066},[933,3414,3415],{"class":935,"line":2276},[933,3416,3417],{"class":1047},"COPY --from=builder \u002Fusr\u002Fbin\u002Fcaddy \u002Fusr\u002Fbin\u002Fcaddy\n",[484,3419,3420],{},[487,3421,3422,3423,3426],{},"Ändern Sie ",[494,3424,3425],{},"compose.caddy.yml",", um das Image mit dem Cloudflare-Modul zu verwenden und das Cloudflare-API-Token zu übergeben:",[925,3428,3430],{"className":1345,"code":3429,"language":1347,"meta":424,"style":424},"services:\n  relay:\n    ports: !reset []\n\n  caddy:\n    build:\n      context: .\n      dockerfile: Dockerfile.caddy\n    image: buzz-caddy:cloudflare\n    depends_on:\n      relay:\n        condition: service_healthy\n    environment:\n      BUZZ_DOMAIN: ${BUZZ_DOMAIN:?set BUZZ_DOMAIN}\n      CLOUDFLARE_API_TOKEN: ${CLOUDFLARE_API_TOKEN:?set CLOUDFLARE_API_TOKEN}\n    ports:\n      - \"${CADDY_HTTP_PORT:-80}:80\"\n      - \"${CADDY_HTTPS_PORT:-443}:443\"\n    volumes:\n      - .\u002FCaddyfile:\u002Fetc\u002Fcaddy\u002FCaddyfile:ro\n      - buzz-caddy-data:\u002Fdata\n      - buzz-caddy-config:\u002Fconfig\n    restart: unless-stopped\n    networks:\n      - buzz-net\n\nvolumes:\n  buzz-caddy-data:\n    labels:\n      com.buzz.volume: caddy-data\n  buzz-caddy-config:\n    labels:\n      com.buzz.volume: caddy-config\n",[494,3431,3432,3439,3446,3459,3463,3470,3477,3488,3498,3508,3515,3522,3532,3539,3549,3559,3565,3577,3588,3595,3602,3609,3616,3627,3635,3643,3648,3656,3664,3672,3683,3691,3698],{"__ignoreMap":424},[933,3433,3434,3437],{"class":935,"line":936},[933,3435,3436],{"class":1357},"services",[933,3438,1371],{"class":947},[933,3440,3441,3444],{"class":935,"line":1063},[933,3442,3443],{"class":1357},"  relay",[933,3445,1371],{"class":947},[933,3447,3448,3451,3453,3456],{"class":935,"line":1070},[933,3449,3450],{"class":1357},"    ports",[933,3452,890],{"class":947},[933,3454,3455],{"class":939}," !reset",[933,3457,3458],{"class":947}," []\n",[933,3460,3461],{"class":935,"line":1077},[933,3462,1067],{"emptyLinePlaceholder":1066},[933,3464,3465,3468],{"class":935,"line":1928},[933,3466,3467],{"class":1357},"  caddy",[933,3469,1371],{"class":947},[933,3471,3472,3475],{"class":935,"line":1933},[933,3473,3474],{"class":1357},"    build",[933,3476,1371],{"class":947},[933,3478,3479,3482,3484],{"class":935,"line":1939},[933,3480,3481],{"class":1357},"      context",[933,3483,890],{"class":947},[933,3485,3487],{"class":3486},"sbssI"," .\n",[933,3489,3490,3493,3495],{"class":935,"line":2276},[933,3491,3492],{"class":1357},"      dockerfile",[933,3494,890],{"class":947},[933,3496,3497],{"class":1047}," Dockerfile.caddy\n",[933,3499,3500,3503,3505],{"class":935,"line":2287},[933,3501,3502],{"class":1357},"    image",[933,3504,890],{"class":947},[933,3506,3507],{"class":1047}," buzz-caddy:cloudflare\n",[933,3509,3510,3513],{"class":935,"line":1698},[933,3511,3512],{"class":1357},"    depends_on",[933,3514,1371],{"class":947},[933,3516,3517,3520],{"class":935,"line":2388},[933,3518,3519],{"class":1357},"      relay",[933,3521,1371],{"class":947},[933,3523,3524,3527,3529],{"class":935,"line":2394},[933,3525,3526],{"class":1357},"        condition",[933,3528,890],{"class":947},[933,3530,3531],{"class":1047}," service_healthy\n",[933,3533,3534,3537],{"class":935,"line":2399},[933,3535,3536],{"class":1357},"    environment",[933,3538,1371],{"class":947},[933,3540,3541,3544,3546],{"class":935,"line":2405},[933,3542,3543],{"class":1357},"      BUZZ_DOMAIN",[933,3545,890],{"class":947},[933,3547,3548],{"class":1047}," ${BUZZ_DOMAIN:?set BUZZ_DOMAIN}\n",[933,3550,3551,3554,3556],{"class":935,"line":3094},[933,3552,3553],{"class":1357},"      CLOUDFLARE_API_TOKEN",[933,3555,890],{"class":947},[933,3557,3558],{"class":1047}," ${CLOUDFLARE_API_TOKEN:?set CLOUDFLARE_API_TOKEN}\n",[933,3560,3561,3563],{"class":935,"line":3099},[933,3562,3450],{"class":1357},[933,3564,1371],{"class":947},[933,3566,3567,3570,3572,3575],{"class":935,"line":3105},[933,3568,3569],{"class":947},"      -",[933,3571,2891],{"class":947},[933,3573,3574],{"class":1047},"${CADDY_HTTP_PORT:-80}:80",[933,3576,1960],{"class":947},[933,3578,3579,3581,3583,3586],{"class":935,"line":3113},[933,3580,3569],{"class":947},[933,3582,2891],{"class":947},[933,3584,3585],{"class":1047},"${CADDY_HTTPS_PORT:-443}:443",[933,3587,1960],{"class":947},[933,3589,3590,3593],{"class":935,"line":3118},[933,3591,3592],{"class":1357},"    volumes",[933,3594,1371],{"class":947},[933,3596,3597,3599],{"class":935,"line":3133},[933,3598,3569],{"class":947},[933,3600,3601],{"class":1047}," .\u002FCaddyfile:\u002Fetc\u002Fcaddy\u002FCaddyfile:ro\n",[933,3603,3604,3606],{"class":935,"line":3138},[933,3605,3569],{"class":947},[933,3607,3608],{"class":1047}," buzz-caddy-data:\u002Fdata\n",[933,3610,3611,3613],{"class":935,"line":3144},[933,3612,3569],{"class":947},[933,3614,3615],{"class":1047}," buzz-caddy-config:\u002Fconfig\n",[933,3617,3619,3622,3624],{"class":935,"line":3618},23,[933,3620,3621],{"class":1357},"    restart",[933,3623,890],{"class":947},[933,3625,3626],{"class":1047}," unless-stopped\n",[933,3628,3630,3633],{"class":935,"line":3629},24,[933,3631,3632],{"class":1357},"    networks",[933,3634,1371],{"class":947},[933,3636,3638,3640],{"class":935,"line":3637},25,[933,3639,3569],{"class":947},[933,3641,3642],{"class":1047}," buzz-net\n",[933,3644,3646],{"class":935,"line":3645},26,[933,3647,1067],{"emptyLinePlaceholder":1066},[933,3649,3651,3654],{"class":935,"line":3650},27,[933,3652,3653],{"class":1357},"volumes",[933,3655,1371],{"class":947},[933,3657,3659,3662],{"class":935,"line":3658},28,[933,3660,3661],{"class":1357},"  buzz-caddy-data",[933,3663,1371],{"class":947},[933,3665,3667,3670],{"class":935,"line":3666},29,[933,3668,3669],{"class":1357},"    labels",[933,3671,1371],{"class":947},[933,3673,3675,3678,3680],{"class":935,"line":3674},30,[933,3676,3677],{"class":1357},"      com.buzz.volume",[933,3679,890],{"class":947},[933,3681,3682],{"class":1047}," caddy-data\n",[933,3684,3686,3689],{"class":935,"line":3685},31,[933,3687,3688],{"class":1357},"  buzz-caddy-config",[933,3690,1371],{"class":947},[933,3692,3694,3696],{"class":935,"line":3693},32,[933,3695,3669],{"class":1357},[933,3697,1371],{"class":947},[933,3699,3701,3703,3705],{"class":935,"line":3700},33,[933,3702,3677],{"class":1357},[933,3704,890],{"class":947},[933,3706,3707],{"class":1047}," caddy-config\n",[2163,3709,3711],{"id":3710},"docker-container-starten","Docker-Container starten",[925,3713,3715],{"className":1034,"code":3714,"language":1036,"meta":424,"style":424},"docker compose -f compose.yml -f compose.caddy.yml up -d\n\n#Check the Docker status\ndocker compose ps\n",[494,3716,3717,3740,3744,3749],{"__ignoreMap":424},[933,3718,3719,3721,3723,3726,3729,3731,3734,3737],{"class":935,"line":936},[933,3720,1177],{"class":1043},[933,3722,1180],{"class":1047},[933,3724,3725],{"class":1047}," -f",[933,3727,3728],{"class":1047}," compose.yml",[933,3730,3725],{"class":1047},[933,3732,3733],{"class":1047}," compose.caddy.yml",[933,3735,3736],{"class":1047}," up",[933,3738,3739],{"class":1047}," -d\n",[933,3741,3742],{"class":935,"line":1063},[933,3743,1067],{"emptyLinePlaceholder":1066},[933,3745,3746],{"class":935,"line":1070},[933,3747,3748],{"class":1073},"#Check the Docker status\n",[933,3750,3751,3753,3755],{"class":935,"line":1077},[933,3752,1177],{"class":1043},[933,3754,1180],{"class":1047},[933,3756,3757],{"class":1047}," ps\n",[432,3759],{"src":3760,"alt":3761,"style":3762},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fdocker-compose-ps-status-terminal.webp","Terminalfenster mit laufenden Containern für Buzz-Dienste über docker compose ps","max-width: 700px; width: 100%; height: auto;",[429,3764,3765,3766,3769],{},"Öffnen Sie Ihren Webbrowser und navigieren Sie zu ",[494,3767,3768],{},"http:\u002F\u002Fbuzz.pafor.me",", um zu überprüfen, ob das Relay läuft.",[432,3771],{"src":3772,"alt":3773,"style":3774},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-relay-running-browser-verification.webp","Browser-Verifizierung mit erfolgreicher Antwort des selbst gehosteten Block's Buzz-Relays","max-width: 500px; width: 100%; height: auto;",[880,3776,3778],{"id":3777},"schritt-5-backup-von-tag-eins-an-einrichten","Schritt 5: Backup von Tag eins an einrichten",[925,3780,3782],{"className":1034,"code":3781,"language":1036,"meta":424,"style":424},"mkdir -p \u002Fbuzz_backups\ncrontab -e\n",[494,3783,3784,3795],{"__ignoreMap":424},[933,3785,3786,3789,3792],{"class":935,"line":936},[933,3787,3788],{"class":1043},"mkdir",[933,3790,3791],{"class":1047}," -p",[933,3793,3794],{"class":1047}," \u002Fbuzz_backups\n",[933,3796,3797,3800],{"class":935,"line":1063},[933,3798,3799],{"class":1043},"crontab",[933,3801,3802],{"class":1047}," -e\n",[429,3804,3805],{},"Einen nächtlichen Datenbank-Dump-Cronjob hinzufügen:",[925,3807,3810],{"className":3808,"code":3809,"language":3221},[3219],"0 3 * * * cd \u002Fhome\u002F\u003Cuser>\u002Fbuzz\u002Fdeploy\u002Fcompose && docker compose exec -T postgres pg_dump -U buzz buzz > \u002Fbuzz_backups\u002Fbuzz-$(date +\\%Y\\%m\\%d).sql\n",[494,3811,3809],{"__ignoreMap":424},[429,3813,3814],{},"Hinweis: Behandeln Sie BUZZ_RELAY_PRIVATE_KEY als permanent. Events, die damit signiert wurden, schlagen bei der Verifizierung fehl, wenn sich der Schlüssel ändert; eine wiederhergestellte Datenbank gepaart mit einem neuen Schlüssel wird nicht als dasselbe Relay behandelt.",[473,3816,3818],{"id":3817},"einrichtung-des-buzz-desktop-clients-und-der-nostr-identitäten","Einrichtung des Buzz-Desktop-Clients und der Nostr-Identitäten",[429,3820,3821,3822,3826],{},"Laden Sie die Buzz-Desktop-App von ",[443,3823,3824],{"href":3824,"rel":3825},"https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz\u002Freleases",[447]," herunter und starten Sie sie. Füllen Sie die Profildetails aus, bis Sie die Seite \"Join or create a community\" erreichen.",[429,3828,3829],{},[432,3830],{"alt":3831,"src":3832},"Ersteinrichtungsbildschirm des Buzz-Desktop-Clients zum Beitreten oder Erstellen einer Community","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-setup-community.webp",[429,3834,3835],{},"Klicken Sie auf \"Join a community\" und kopieren Sie Ihren öffentlichen Schlüssel.",[429,3837,3838],{},[432,3839],{"alt":3840,"src":3841},"Buzz-Client-Anzeige mit der öffentlichen Schlüssel-Identität vor dem Beitritt zur Community","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-join-community-public-key.webp",[429,3843,3844,3845,3848],{},"Führen Sie den folgenden Befehl auf dem ",[440,3846,3847],{},"VPS"," aus, um sich selbst als erstes Mitglied hinzuzufügen:",[925,3850,3852],{"className":1034,"code":3851,"language":1036,"meta":424,"style":424},"docker compose exec relay buzz-admin add-member --pubkey npub1yourkeyhere\n",[494,3853,3854],{"__ignoreMap":424},[933,3855,3856,3858,3860,3862,3864,3866,3868,3870],{"class":935,"line":936},[933,3857,1177],{"class":1043},[933,3859,1180],{"class":1047},[933,3861,1183],{"class":1047},[933,3863,1186],{"class":1047},[933,3865,1189],{"class":1047},[933,3867,1192],{"class":1047},[933,3869,1195],{"class":1047},[933,3871,3872],{"class":1047}," npub1yourkeyhere\n",[429,3874,3292,3875,3878],{},[494,3876,3877],{},"wss:\u002F\u002Fbuzz.pafor.me"," als Community-URL hinzu und klicken Sie auf \"Next\".",[429,3880,3881],{},[432,3882],{"alt":3883,"src":3884},"Eingabe der selbst gehosteten Community-Relay-URL in der Buzz-Desktop-App","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-input-community-url.webp",[429,3886,3887],{},"Geben Sie einen Namen ein und klicken Sie auf die Schaltfläche Next.",[429,3889,3890],{},[432,3891],{"alt":3892,"src":3893},"Profilkonfigurationsbildschirm in der Buzz-App zur Eingabe des Anzeigenamens","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-profile-name-input.webp",[880,3895,3897],{"id":3896},"kanäle-channels-und-agenten","Kanäle (Channels) und Agenten",[429,3899,3900],{},"Kanäle sind Aufgabengruppen oder Projektgruppen. Erstellen Sie einen Kanal pro Aufgabe oder Projekt und laden Sie Menschen und Agenten hinein.",[429,3902,3903],{},"Alles innerhalb eines Kanals wird automatisch geteilt, sodass kein Mitglied einzeln instruiert werden muss. Jeder Agent kann über @ erwähnt werden und liest die relevanten Nachrichten. Zudem können Agenten sich gegenseitig per @ erwähnen.",[429,3905,3906],{},"Senden wir eine DM an einen vorkonfigurierten Agenten",[429,3908,3909],{},[432,3910],{"alt":3911,"src":3912},"Senden einer Direktnachricht an einen KI-Agenten im kollaborativen Buzz-Desktop-Client","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-dm-agent.webp",[429,3914,3915],{},"Erstellen wir einen Kanal und fügen einige Agenten hinzu",[429,3917,3918],{},[432,3919],{"alt":3920,"src":3921},"Erstellen eines neuen Aufgaben- oder Projektkanals in der Buzz-Desktop-App","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-create-channel-dialog.webp",[429,3923,3924],{},[432,3925],{"alt":3926,"src":3927},"Hinzufügen von menschlichen Mitgliedern und KI-Agenten zum neu erstellten Kanal","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-add-agents-to-channel.webp",[429,3929,3930],{},[432,3931],{"alt":3932,"src":3933},"Aktive Kanalansicht mit konsolidiertem Chat-Verlauf und Projektaufgaben","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-channel-view.webp",[432,3935],{"src":3936,"alt":3937,"style":3938},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-channel-active-agents.webp","Detailansicht der aktiven KI-Agenten, die in den kollaborativen Projektkanal integriert sind","max-width: 367px; width: 100%; height: auto;",[880,3940,3942],{"id":3941},"agenten-runtimes-aktivieren","Agenten-Runtimes aktivieren",[429,3944,3945,3946,3949,3950,3953],{},"Vordefinierte Runtimes verlassen sich auf die automatische Erkennung, die Start-Binärdateien (z. B. ",[494,3947,3948],{},"hermes-acp",") in Standardverzeichnissen wie ",[494,3951,3952],{},"~\u002F.local\u002Fbin"," sucht. Wenn ein Tool an einem nicht standardmäßigen Speicherort installiert wurde, kann Buzz es nicht auflösen.",[429,3955,3956,3957,3960],{},"Für Kimi Code lautet die Agenten-ID kimi, und Buzz sucht nach der Binärdatei unter ",[494,3958,3959],{},"~\u002F.local\u002Fbin\u002Fkimi",". Ein symbolischer Link erledigt die Arbeit:",[925,3962,3965],{"className":3963,"code":3964,"language":3221},[3219],"ln -s kimi-cli \u002FUsers\u002F\u003Cuser>\u002F.local\u002Fbin\u002Fkimi\n",[494,3966,3964],{"__ignoreMap":424},[429,3968,3969],{},"Kimi Code erscheint nun unter den Agenten-Runtimes.",[429,3971,3972],{},[432,3973],{"alt":3974,"src":3975},"Buzz-Anwendungseinstellungen mit konfigurierten KI-Agenten-Runtimes, einschließlich Kimi","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-settings-agent-runtimes-list.webp",[880,3977,3979],{"id":3978},"projekte-und-repositories","Projekte und Repositories",[429,3981,3982,3983,3986],{},"Aktivieren Sie zuerst die Funktion '",[440,3984,3985],{},"Projects","' unter Settings → Experiments:",[429,3988,3989],{},[432,3990],{"alt":3991,"src":3992},"Aktivieren der experimentellen Projects-Funktion in den Buzz-Einstellungen","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-settings-experiments-projects.webp",[429,3994,3995,3996,3998],{},"Derzeit muss ein Projekt mit dem ",[494,3997,1207],{}," erstellt werden (obwohl die direkte Projekterstellung über die Benutzeroberfläche für ein zukünftiges Release geplant ist).",[2163,4000,4002],{"id":4001},"installieren-des-buzz-cli","Installieren des buzz-cli",[429,4004,4005,4006,4008,4009,4011],{},"Führen Sie die folgenden Befehle aus, um ",[494,4007,1207],{}," auf dem ",[440,4010,3847],{}," zu installieren:",[925,4013,4015],{"className":1034,"code":4014,"language":1036,"meta":424,"style":424},"sudo apt install cargo\ncd ~\u002Fbuzz\ncargo install --path crates\u002Fbuzz-cli\necho 'export PATH=\"$HOME\u002F.cargo\u002Fbin:$PATH\"' >> ~\u002F.bashrc && source ~\u002F.bashrc\n",[494,4016,4017,4028,4035,4048],{"__ignoreMap":424},[933,4018,4019,4021,4023,4025],{"class":935,"line":936},[933,4020,1896],{"class":1043},[933,4022,3038],{"class":1047},[933,4024,3059],{"class":1047},[933,4026,4027],{"class":1047}," cargo\n",[933,4029,4030,4032],{"class":935,"line":1063},[933,4031,3180],{"class":964},[933,4033,4034],{"class":1047}," ~\u002Fbuzz\n",[933,4036,4037,4040,4042,4045],{"class":935,"line":1070},[933,4038,4039],{"class":1043},"cargo",[933,4041,3059],{"class":1047},[933,4043,4044],{"class":1047}," --path",[933,4046,4047],{"class":1047}," crates\u002Fbuzz-cli\n",[933,4049,4050,4052,4055,4058,4061,4064,4067,4070,4073],{"class":935,"line":1077},[933,4051,2984],{"class":964},[933,4053,4054],{"class":947}," '",[933,4056,4057],{"class":1047},"export PATH=\"$HOME\u002F.cargo\u002Fbin:$PATH\"",[933,4059,4060],{"class":947},"'",[933,4062,4063],{"class":947}," >>",[933,4065,4066],{"class":1047}," ~\u002F.bashrc",[933,4068,4069],{"class":947}," &&",[933,4071,4072],{"class":964}," source",[933,4074,4075],{"class":1047}," ~\u002F.bashrc\n",[429,4077,4078,4079,4082,4083,4085,4086,4088],{},"Generieren Sie ein Paar aus privatem und öffentlichem Schlüssel mit dem ",[443,4080,3249],{"href":4081},"\u002Fde\u002Ftools\u002Fnostr-key-generator"," oder dem ",[494,4084,1207],{},". Dieses Paar ist die Identität des ",[494,4087,1207],{}," im Nostr-Relay.",[925,4090,4092],{"className":1034,"code":4091,"language":1036,"meta":424,"style":424},"docker run --rm --entrypoint \u002Fusr\u002Flocal\u002Fbin\u002Fbuzz-admin ghcr.io\u002Fblock\u002Fbuzz:main generate-key\n\n# Use the generated Public Key\ndocker compose exec relay buzz-admin add-member --pubkey generated_Public_key\n",[494,4093,4094,4116,4120,4125],{"__ignoreMap":424},[933,4095,4096,4098,4101,4104,4107,4110,4113],{"class":935,"line":936},[933,4097,1177],{"class":1043},[933,4099,4100],{"class":1047}," run",[933,4102,4103],{"class":1047}," --rm",[933,4105,4106],{"class":1047}," --entrypoint",[933,4108,4109],{"class":1047}," \u002Fusr\u002Flocal\u002Fbin\u002Fbuzz-admin",[933,4111,4112],{"class":1047}," ghcr.io\u002Fblock\u002Fbuzz:main",[933,4114,4115],{"class":1047}," generate-key\n",[933,4117,4118],{"class":935,"line":1063},[933,4119,1067],{"emptyLinePlaceholder":1066},[933,4121,4122],{"class":935,"line":1070},[933,4123,4124],{"class":1073},"# Use the generated Public Key\n",[933,4126,4127,4129,4131,4133,4135,4137,4139,4141],{"class":935,"line":1077},[933,4128,1177],{"class":1043},[933,4130,1180],{"class":1047},[933,4132,1183],{"class":1047},[933,4134,1186],{"class":1047},[933,4136,1189],{"class":1047},[933,4138,1192],{"class":1047},[933,4140,1195],{"class":1047},[933,4142,4143],{"class":1047}," generated_Public_key\n",[429,4145,4146],{},"Konfigurieren Sie die CLI:",[925,4148,4150],{"className":1034,"code":4149,"language":1036,"meta":424,"style":424},"# Copy the Secret key as the BUZZ_PRIVATE_KEY\necho 'export BUZZ_PRIVATE_KEY=\"nsec1...\"'  >> \u002Fhome\u002F\u003Cuser>\u002F.bashrc\n\necho 'export BUZZ_RELAY_URL=\"wss:\u002F\u002Fbuzz.pafor.me\"'  >> \u002Fhome\u002F\u003Cuser>\u002F.bashrc\n",[494,4151,4152,4157,4188,4192],{"__ignoreMap":424},[933,4153,4154],{"class":935,"line":936},[933,4155,4156],{"class":1073},"# Copy the Secret key as the BUZZ_PRIVATE_KEY\n",[933,4158,4159,4161,4163,4166,4168,4171,4174,4177,4180,4183,4185],{"class":935,"line":1063},[933,4160,2984],{"class":964},[933,4162,4054],{"class":947},[933,4164,4165],{"class":1047},"export BUZZ_PRIVATE_KEY=\"nsec1...\"",[933,4167,4060],{"class":947},[933,4169,4170],{"class":947},"  >>",[933,4172,4173],{"class":1047}," \u002Fhome\u002F",[933,4175,4176],{"class":947},"\u003C",[933,4178,4179],{"class":1047},"use",[933,4181,4182],{"class":943},"r",[933,4184,1250],{"class":947},[933,4186,4187],{"class":1047},"\u002F.bashrc\n",[933,4189,4190],{"class":935,"line":1070},[933,4191,1067],{"emptyLinePlaceholder":1066},[933,4193,4194,4196,4198,4201,4203,4205,4207,4209,4211,4213,4215],{"class":935,"line":1077},[933,4195,2984],{"class":964},[933,4197,4054],{"class":947},[933,4199,4200],{"class":1047},"export BUZZ_RELAY_URL=\"wss:\u002F\u002Fbuzz.pafor.me\"",[933,4202,4060],{"class":947},[933,4204,4170],{"class":947},[933,4206,4173],{"class":1047},[933,4208,4176],{"class":947},[933,4210,4179],{"class":1047},[933,4212,4182],{"class":943},[933,4214,1250],{"class":947},[933,4216,4187],{"class":1047},[429,4218,4219,4220,4222],{},"Führen Sie den folgenden Befehl aus, um zu überprüfen, ob das ",[494,4221,1207],{}," ordnungsgemäß konfiguriert ist:",[925,4224,4226],{"className":1034,"code":4225,"language":1036,"meta":424,"style":424},"buzz channels list\n",[494,4227,4228],{"__ignoreMap":424},[933,4229,4230,4232,4234],{"class":935,"line":936},[933,4231,1230],{"class":1043},[933,4233,1233],{"class":1047},[933,4235,4236],{"class":1047}," list\n",[429,4238,4239],{},[432,4240],{"alt":4241,"src":4242},"Terminal-Befehlsausführung zur Überprüfung der buzz-cli-Konfiguration durch Auflistung aktiver Kanäle","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-cli-channels-list-terminal.webp",[2163,4244,4246],{"id":4245},"ein-projekt-mit-dem-buzz-cli-erstellen","Ein Projekt mit dem buzz-cli erstellen",[925,4248,4250],{"className":1034,"code":4249,"language":1036,"meta":424,"style":424},"# --channel refers to the UUID of the channel\nbuzz repos create --id TestKOA --name 'Display Name' --channel \"bd92b3d1-8fac-441c-a9ac-2b2f3aac5c5b\"\n",[494,4251,4252,4257],{"__ignoreMap":424},[933,4253,4254],{"class":935,"line":936},[933,4255,4256],{"class":1073},"# --channel refers to the UUID of the channel\n",[933,4258,4259,4261,4264,4267,4270,4273,4276,4278,4281,4283,4285,4287,4290],{"class":935,"line":1063},[933,4260,1230],{"class":1043},[933,4262,4263],{"class":1047}," repos",[933,4265,4266],{"class":1047}," create",[933,4268,4269],{"class":1047}," --id",[933,4271,4272],{"class":1047}," TestKOA",[933,4274,4275],{"class":1047}," --name",[933,4277,4054],{"class":947},[933,4279,4280],{"class":1047},"Display Name",[933,4282,4060],{"class":947},[933,4284,1238],{"class":1047},[933,4286,2891],{"class":947},[933,4288,4289],{"class":1047},"bd92b3d1-8fac-441c-a9ac-2b2f3aac5c5b",[933,4291,1960],{"class":947},[429,4293,4294,4295,4297],{},"Ein Projekt kann nur von seinem Besitzer entfernt werden. Da das Projekt \"Display Name\" über das ",[494,4296,1207],{}," erstellt wurde, welches keinen Löschbefehl besitzt, kann es auf diese Weise nicht gelöscht werden.",[429,4299,4300],{},"Prüfen Sie in der Buzz-Desktop-App nach, ob das Projekt erstellt wurde.",[429,4302,4303],{},[432,4304],{"alt":4305,"src":4306},"Projektansicht der Buzz-Desktop-Anwendung zur Bestätigung der erfolgreichen Projekterstellung","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-project-view.webp",[429,4308,4309],{},"Sobald ein Projekt in Projects verfügbar ist, können weitere Projekte über die Schaltfläche \"+\" in der oberen rechten Ecke hinzugefügt werden.",[429,4311,4312],{},[432,4313],{"alt":4314,"src":4315},"Hinzufügen neuer Entwicklerprojekte über das Plus-Symbol im Buzz-Desktop-Client","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-add-project-button.webp",[2163,4317,4319],{"id":4318},"bestehende-git-repositories-einbinden","Bestehende Git-Repositories einbinden",[429,4321,2533,4322,4325,4326,4329,4330,890],{},[494,4323,4324],{},"git-credential-nostr"," auf dem Rechner, auf dem sich die Git-Repositories befinden. Es erfordert ",[440,4327,4328],{},"Git 2.46+"," und die Rust-Toolchain. Beziehen Sie sich auf diese ",[443,4331,4334],{"href":4332,"rel":4333},"https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz\u002Ftree\u002Fmain\u002Fcrates\u002Fgit-credential-nostr",[447],"Readme",[925,4336,4338],{"className":1034,"code":4337,"language":1036,"meta":424,"style":424},"cargo install --path crates\u002Fgit-credential-nostr\n",[494,4339,4340],{"__ignoreMap":424},[933,4341,4342,4344,4346,4348],{"class":935,"line":936},[933,4343,4039],{"class":1043},[933,4345,3059],{"class":1047},[933,4347,4044],{"class":1047},[933,4349,4350],{"class":1047}," crates\u002Fgit-credential-nostr\n",[429,4352,4353,4354,4356],{},"Richten Sie ",[494,4355,4324],{}," für die Buzz-Relay-Autorisierung ein:",[925,4358,4360],{"className":1034,"code":4359,"language":1036,"meta":424,"style":424},"# 1. Register the helper and enable per-path credentials.\ngit config --global credential.helper nostr\ngit config --global credential.useHttpPath true\n\n# 2. Store your nsec in a key file (must be 0600). Replace \"nsec1...\" with your private key\nmkdir -p ~\u002F.nostr\necho \"nsec1...\" > ~\u002F.nostr\u002Fkey && chmod 600 ~\u002F.nostr\u002Fkey\ngit config --global nostr.keyfile ~\u002F.nostr\u002Fkey\n",[494,4361,4362,4367,4383,4396,4400,4405,4414,4441],{"__ignoreMap":424},[933,4363,4364],{"class":935,"line":936},[933,4365,4366],{"class":1073},"# 1. Register the helper and enable per-path credentials.\n",[933,4368,4369,4371,4374,4377,4380],{"class":935,"line":1063},[933,4370,3165],{"class":1043},[933,4372,4373],{"class":1047}," config",[933,4375,4376],{"class":1047}," --global",[933,4378,4379],{"class":1047}," credential.helper",[933,4381,4382],{"class":1047}," nostr\n",[933,4384,4385,4387,4389,4391,4394],{"class":935,"line":1070},[933,4386,3165],{"class":1043},[933,4388,4373],{"class":1047},[933,4390,4376],{"class":1047},[933,4392,4393],{"class":1047}," credential.useHttpPath",[933,4395,1382],{"class":947},[933,4397,4398],{"class":935,"line":1077},[933,4399,1067],{"emptyLinePlaceholder":1066},[933,4401,4402],{"class":935,"line":1928},[933,4403,4404],{"class":1073},"# 2. Store your nsec in a key file (must be 0600). Replace \"nsec1...\" with your private key\n",[933,4406,4407,4409,4411],{"class":935,"line":1933},[933,4408,3788],{"class":1043},[933,4410,3791],{"class":1047},[933,4412,4413],{"class":1047}," ~\u002F.nostr\n",[933,4415,4416,4418,4420,4423,4425,4427,4430,4432,4435,4438],{"class":935,"line":1939},[933,4417,2984],{"class":964},[933,4419,2891],{"class":947},[933,4421,4422],{"class":1047},"nsec1...",[933,4424,2897],{"class":947},[933,4426,3019],{"class":947},[933,4428,4429],{"class":1047}," ~\u002F.nostr\u002Fkey",[933,4431,4069],{"class":947},[933,4433,4434],{"class":1043}," chmod",[933,4436,4437],{"class":3486}," 600",[933,4439,4440],{"class":1047}," ~\u002F.nostr\u002Fkey\n",[933,4442,4443,4445,4447,4449,4452],{"class":935,"line":2276},[933,4444,3165],{"class":1043},[933,4446,4373],{"class":1047},[933,4448,4376],{"class":1047},[933,4450,4451],{"class":1047}," nostr.keyfile",[933,4453,4440],{"class":1047},[429,4455,4456],{},"Erstellen Sie ein Repository auf dem Buzz-Relay:",[925,4458,4461],{"className":4459,"code":4460,"language":3221},[3219],"buzz repos create --id koa-email-routing --name \"KOA Email Routing\" --clone \"https:\u002F\u002Fbuzz.pafor.me\u002Fgit\u002F\u003Cpub_key>\u002Fkoa-email-routing\" --nostr-relay \"wss:\u002F\u002Fbuzz.pafor.me\"\n",[494,4462,4460],{"__ignoreMap":424},[429,4464,4465,4466,4469,4470,4473],{},"Bei Ihrem ersten ",[494,4467,4468],{},"git push"," stoßen Sie auf den Fehler ",[494,4471,4472],{},"remote: missing Authorization header",". Um dies zu beheben, müssen Sie die Repository-ID an einen Buzz-Kanal binden, da die Kanalmitgliedschaft die Git-Schreibrechte (ACLs) vorgibt:",[925,4475,4477],{"className":1034,"code":4476,"language":1036,"meta":424,"style":424},"buzz repos bind --id koa-email-routing --channel \u003CCHANNEL_UUID>\n\n# push the code again\ngit push\n",[494,4478,4479,4504,4508,4513],{"__ignoreMap":424},[933,4480,4481,4483,4485,4488,4490,4493,4495,4497,4499,4501],{"class":935,"line":936},[933,4482,1230],{"class":1043},[933,4484,4263],{"class":1047},[933,4486,4487],{"class":1047}," bind",[933,4489,4269],{"class":1047},[933,4491,4492],{"class":1047}," koa-email-routing",[933,4494,1238],{"class":1047},[933,4496,1241],{"class":947},[933,4498,1244],{"class":1047},[933,4500,1247],{"class":943},[933,4502,4503],{"class":947},">\n",[933,4505,4506],{"class":935,"line":1063},[933,4507,1067],{"emptyLinePlaceholder":1066},[933,4509,4510],{"class":935,"line":1070},[933,4511,4512],{"class":1073},"# push the code again\n",[933,4514,4515,4517],{"class":935,"line":1077},[933,4516,3165],{"class":1043},[933,4518,4519],{"class":1047}," push\n",[429,4521,4522,4523,4525],{},"Die Überprüfung des Projekts in der Buzz-Desktop-App zeigt Folgendes, da die App ",[440,4524,4328],{}," benötigt — das direkte Starten der App verwendet möglicherweise eine ältere Git-Version:",[429,4527,4528],{},[432,4529],{"alt":4530,"src":4531},"Buzz-Client zeigt Git-Ladefehler aufgrund einer veralteten lokalen Git-Version unter 2.46","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-git-version-error.webp",[429,4533,4534,4535,4538,4539,551],{},"Exportieren Sie den PATH über ",[494,4536,4537],{},"launchctl setenv PATH \"\u002Fopt\u002Fhomebrew\u002Fbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fbin:\u002Fbin:\u002Fusr\u002Fsbin:\u002Fsbin\""," im Shell-Profil und starten Sie die Buzz-App aus der Shell heraus. Beziehen Sie sich auf dieses ",[443,4540,4543],{"href":4541,"rel":4542},"https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz\u002Fissues\u002F5348",[447],"Issue",[925,4545,4547],{"className":1034,"code":4546,"language":1036,"meta":424,"style":424},"open -a Buzz\n",[494,4548,4549],{"__ignoreMap":424},[933,4550,4551,4554,4557],{"class":935,"line":936},[933,4552,4553],{"class":1043},"open",[933,4555,4556],{"class":1047}," -a",[933,4558,4559],{"class":1047}," Buzz\n",[429,4561,4562],{},"Überprüfen Sie die Projects in der Buzz-App; die Repository-Details sind jetzt geladen.",[429,4564,4565],{},[432,4566],{"alt":4567,"src":4568},"Buzz-Desktop-Schnittstelle mit erfolgreich geladenen Git-Repository-Details und Commit-Logs","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-repository-details-loaded.webp",[473,4570,4572],{"id":4571},"ki-agenten-per-qr-code-mit-der-buzz-mobile-app-synchronisieren","KI-Agenten per QR-Code mit der Buzz Mobile App synchronisieren",[429,4574,4575,4576,4579],{},"Die Kopplung der Buzz Mobile App akzeptiert nur das HTTPS-Protokoll und das ",[494,4577,4578],{},"buzz-pair-relay"," wird auf dem VPS standardmäßig nicht gestartet.",[925,4581,4583],{"className":1034,"code":4582,"language":1036,"meta":424,"style":424},"cd ~\u002Fbuzz\ncargo install --path crates\u002Fbuzz-pair-relay\n",[494,4584,4585,4591],{"__ignoreMap":424},[933,4586,4587,4589],{"class":935,"line":936},[933,4588,3180],{"class":964},[933,4590,4034],{"class":1047},[933,4592,4593,4595,4597,4599],{"class":935,"line":1063},[933,4594,4039],{"class":1043},[933,4596,3059],{"class":1047},[933,4598,4044],{"class":1047},[933,4600,4601],{"class":1047}," crates\u002Fbuzz-pair-relay\n",[429,4603,4604,4605,4608,4609,4611],{},"Fügen Sie Folgendes zu ",[494,4606,4607],{},"compose.yml"," hinzu, um den ",[494,4610,4578],{},"-Dienst zu starten:",[925,4613,4615],{"className":1345,"code":4614,"language":1347,"meta":424,"style":424},"  pair:\n    image: ${BUZZ_IMAGE:-ghcr.io\u002Fblock\u002Fbuzz:main}\n    entrypoint: [\"\u002Fusr\u002Flocal\u002Fbin\u002Fbuzz-pair-relay\"]\n    environment:\n      BUZZ_PAIR_RELAY_BIND_ADDR: 0.0.0.0:5000\n    ports:\n      - \"${BUZZ_PAIR_RELAY_PORT:-5000}:5000\"\n    restart: unless-stopped\n    networks:\n      [buzz-net]\n",[494,4616,4617,4624,4633,4653,4659,4669,4675,4686,4694,4700],{"__ignoreMap":424},[933,4618,4619,4622],{"class":935,"line":936},[933,4620,4621],{"class":1357},"  pair",[933,4623,1371],{"class":947},[933,4625,4626,4628,4630],{"class":935,"line":1063},[933,4627,3502],{"class":1357},[933,4629,890],{"class":947},[933,4631,4632],{"class":1047}," ${BUZZ_IMAGE:-ghcr.io\u002Fblock\u002Fbuzz:main}\n",[933,4634,4635,4638,4640,4643,4645,4648,4650],{"class":935,"line":1070},[933,4636,4637],{"class":1357},"    entrypoint",[933,4639,890],{"class":947},[933,4641,4642],{"class":947}," [",[933,4644,2897],{"class":947},[933,4646,4647],{"class":1047},"\u002Fusr\u002Flocal\u002Fbin\u002Fbuzz-pair-relay",[933,4649,2897],{"class":947},[933,4651,4652],{"class":947},"]\n",[933,4654,4655,4657],{"class":935,"line":1077},[933,4656,3536],{"class":1357},[933,4658,1371],{"class":947},[933,4660,4661,4664,4666],{"class":935,"line":1928},[933,4662,4663],{"class":1357},"      BUZZ_PAIR_RELAY_BIND_ADDR",[933,4665,890],{"class":947},[933,4667,4668],{"class":1047}," 0.0.0.0:5000\n",[933,4670,4671,4673],{"class":935,"line":1933},[933,4672,3450],{"class":1357},[933,4674,1371],{"class":947},[933,4676,4677,4679,4681,4684],{"class":935,"line":1939},[933,4678,3569],{"class":947},[933,4680,2891],{"class":947},[933,4682,4683],{"class":1047},"${BUZZ_PAIR_RELAY_PORT:-5000}:5000",[933,4685,1960],{"class":947},[933,4687,4688,4690,4692],{"class":935,"line":2276},[933,4689,3621],{"class":1357},[933,4691,890],{"class":947},[933,4693,3626],{"class":1047},[933,4695,4696,4698],{"class":935,"line":2287},[933,4697,3632],{"class":1357},[933,4699,1371],{"class":947},[933,4701,4702,4705,4708],{"class":935,"line":1698},[933,4703,4704],{"class":947},"      [",[933,4706,4707],{"class":1047},"buzz-net",[933,4709,4652],{"class":947},[429,4711,3292,4712,575,4715,4718,4719,4721],{},[494,4713,4714],{},"BUZZ_PAIRING_RELAY_URL",[494,4716,4717],{},"BUZZ_PAIR_RELAY_PORT"," zur Datei ",[494,4720,3207],{}," hinzu:",[925,4723,4726],{"className":4724,"code":4725,"language":3221},[3219],"BUZZ_PAIRING_RELAY_URL=wss:\u002F\u002Fbuzz.pafor.me\u002Fpair\nBUZZ_PAIR_RELAY_PORT=5000\n",[494,4727,4725],{"__ignoreMap":424},[429,4729,4730,4731,4734],{},"Gehen Sie in den Desktop-Einstellungen von Buzz zu '",[440,4732,4733],{},"Mobile","':",[429,4736,4737],{},[432,4738],{"alt":4739,"src":4740},"Einstellungsdialog in der Buzz-App mit der Registerkarte für Mobilgeräte-Konfiguration","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-settings-mobile-tab.webp",[429,4742,4743],{},"Klicken Sie auf \"Start pairing\" — ein QR-Code wird generiert. Scannen Sie diesen QR-Code mit der Buzz-App auf dem Mobilgerät. Die Geräte werden gekoppelt, nachdem Sie auf \"Code Match\" geklickt haben.",[429,4745,4746],{},[432,4747],{"alt":4748,"src":4749},"Generieren eines sicheren Kopplungs-QR-Codes im Desktop-Client für die Buzz-Mobil-Synchronisierung","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-desktop-client-pairing-qr-code.webp",[429,4751,4752],{},"Die Agenten in der Buzz Mobile App sind verfügbar, wenn sie in der Buzz-Desktop-App ausgeführt werden. Der Desktop-Rechner muss laufen, damit die Agenten funktionieren.",[429,4754,4755],{},[432,4756],{"alt":4757,"src":4758},"Schnittstelle der Buzz-Mobil-App mit synchronisierten aktiven KI-Begleitagenten","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002Fbuzz-mobile-app-active-agents.webp",[473,4760,2576],{"id":2575},[429,4762,4763],{},"Obwohl Buzz für große Produktionsumgebungen aufgrund einiger Bugs und Einschränkungen in der Benutzeroberfläche noch zu früh ist, stellt es eine aufregende Erfahrung für kleine Teams und Solo-Entwickler dar. Es bietet einen Vorgeschmack darauf, wie sich ein kollaborativer, KI-zentrierter Workspace wirklich anfühlt.",[473,4765,4766],{"id":1613},"Referenzen",[484,4768,4769,4776,4783,4790],{},[487,4770,4771],{},[443,4772,4775],{"href":4773,"rel":4774},"https:\u002F\u002Fgithub.com\u002Fblock\u002Fbuzz",[447],"Buzz releases",[487,4777,4778],{},[443,4779,4782],{"href":4780,"rel":4781},"https:\u002F\u002Fblock.xyz\u002Finside\u002Fintroducing-buzz-where-humans-and-agents-work-together",[447],"Introducing Buzz",[487,4784,4785],{},[443,4786,4789],{"href":4787,"rel":4788},"https:\u002F\u002Fwww.hostinger.com\u002Ftutorials\u002Fwhat-is-buzz",[447],"What is buzz",[487,4791,4792],{},[443,4793,4796],{"href":4794,"rel":4795},"https:\u002F\u002Fmiget.com\u002Fblog\u002Fhow-to-self-host-buzz",[447],"How to self-host Buzz (Miget)",[1642,4798,4799],{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}",{"title":424,"searchDepth":1063,"depth":1070,"links":4801},[4802,4803,4804,4818,4827,4828,4829],{"id":2677,"depth":1063,"text":2678},{"id":2722,"depth":1063,"text":2723},{"id":2770,"depth":1063,"text":2771,"children":4805},[4806,4807,4811,4812,4813,4817],{"id":2774,"depth":1070,"text":2775},{"id":2804,"depth":1070,"text":2805,"children":4808},[4809,4810],{"id":2808,"depth":1077,"text":2809},{"id":2910,"depth":1077,"text":2911},{"id":2928,"depth":1070,"text":2929},{"id":3154,"depth":1070,"text":3155},{"id":3310,"depth":1070,"text":3311,"children":4814},[4815,4816],{"id":3314,"depth":1077,"text":3315},{"id":3710,"depth":1077,"text":3711},{"id":3777,"depth":1070,"text":3778},{"id":3817,"depth":1063,"text":3818,"children":4819},[4820,4821,4822],{"id":3896,"depth":1070,"text":3897},{"id":3941,"depth":1070,"text":3942},{"id":3978,"depth":1070,"text":3979,"children":4823},[4824,4825,4826],{"id":4001,"depth":1077,"text":4002},{"id":4245,"depth":1077,"text":4246},{"id":4318,"depth":1077,"text":4319},{"id":4571,"depth":1063,"text":4572},{"id":2575,"depth":1063,"text":2576},{"id":1613,"depth":1063,"text":4766},[1663,1662,1230],"2026-09-08",{"schemaOrg":4833,"robots":1696,"sitemap":4852},[4834,4835],{"@type":1673,"headline":454,"description":464,"image":465},{"@type":1675,"name":454,"description":464,"image":465,"step":4836},[4837,4840,4843,4846,4849],{"@type":1678,"name":4838,"text":4839},"Phase 1: Cloudflare-Einrichtung","Erstellen Sie ein Cloudflare-API-Token und konfigurieren Sie die DNS-Einstellungen.",{"@type":1678,"name":4841,"text":4842},"Phase 2: Docker installieren","Richten Sie die Docker Engine auf dem Ubuntu-VPS ein.",{"@type":1678,"name":4844,"text":4845},"Phase 3: Klonen und konfigurieren","Klonen Sie das Repository und konfigurieren Sie die Compose-Variablen.",{"@type":1678,"name":4847,"text":4848},"Phase 4: Caddy-Integration","Erstellen Sie ein benutzerdefiniertes Caddy-Image mit dem Cloudflare-DNS-Modul.",{"@type":1678,"name":4850,"text":4851},"Phase 5: Automatische Sicherung","Konfigurieren Sie einen Cronjob zur automatischen Sicherung von PostgreSQL.",{"lastmod":4853},"2026-09-03",{"title":4855,"description":464,"ogTitle":454,"ogDescription":464,"twitterTitle":454,"twitterDescription":464},"Nostr-Relay Block's Buzz auf Ubuntu VPS selbst hosten","de\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues",[1703,4858,1104,4859,4860],"Docker","Caddy","Cloudflare","gPrDB3p5pEk5T2URZ9nRmfiQOtv482xmqYWhLE65PI8",{"id":4863,"title":4864,"author":424,"body":4865,"category":5249,"date":5250,"description":5251,"extension":1667,"image":5252,"imageAlt":5253,"isPublished":1066,"meta":5254,"minRead":1928,"navigation":1066,"path":351,"seo":5258,"stem":5259,"tags":5260,"updatedAt":1705,"__hash__":5264},"article\u002Fde\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them.md","KI-Agenten-Skills: Was sie sind und wie man sie erstellt",{"type":426,"value":4866,"toc":5239},[4867,4871,4882,4893,4954,4960,4964,4967,4976,4982,4986,5040,5051,5057,5060,5119,5123,5130,5137,5140,5151,5155,5200,5203,5220,5222,5233,5236],[473,4868,4870],{"id":4869},"was-ist-ein-ki-agenten-skill","Was ist ein KI-Agenten-Skill?",[429,4872,4873,4874,4877,4878,4881],{},"Ein Agenten-Skill (agent skill) ist eine wiederverwendbare ",[440,4875,4876],{},"Sammlung von Anweisungen"," – ein standardisiertes Verfahren, das einem Agenten zeigt, wie er eine bestimmte Art von Aufgabe hervorragend erledigt. Ein Skill besteht aus einer einzelnen Markdown-Datei (",[494,4879,4880],{},"SKILL.md",") und kann alle weiteren für die Aufgabe erforderlichen Dateien wie Referenzdokumente, Vorlagen oder ausführbare Skripte bündeln.",[429,4883,4884,4885,4892],{},"Nehmen wir den Skill ",[443,4886,4889],{"href":4887,"rel":4888},"https:\u002F\u002Fgithub.com\u002Fmattpocock\u002Fskills\u002Fblob\u002F733d312884b3878a9a9cff693c5886943753a741\u002Fskills\u002Fproductivity\u002Fgrill-me\u002FSKILL.md",[447],[494,4890,4891],{},"grill-me"," als Beispiel:",[925,4894,4896],{"className":2208,"code":4895,"language":2210,"meta":424,"style":424},"---\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",[494,4897,4898,4903,4913,4923,4927,4931,4936,4940,4945,4949],{"__ignoreMap":424},[933,4899,4900],{"class":935,"line":936},[933,4901,4902],{"class":1043},"---\n",[933,4904,4905,4908,4910],{"class":935,"line":1063},[933,4906,4907],{"class":1357},"name",[933,4909,890],{"class":947},[933,4911,4912],{"class":1047}," grill-me\n",[933,4914,4915,4918,4920],{"class":935,"line":1070},[933,4916,4917],{"class":1357},"description",[933,4919,890],{"class":947},[933,4921,4922],{"class":1047}," 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",[933,4924,4925],{"class":935,"line":1077},[933,4926,4902],{"class":1043},[933,4928,4929],{"class":935,"line":1928},[933,4930,1067],{"emptyLinePlaceholder":1066},[933,4932,4933],{"class":935,"line":1933},[933,4934,4935],{"class":1047},"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",[933,4937,4938],{"class":935,"line":1939},[933,4939,1067],{"emptyLinePlaceholder":1066},[933,4941,4942],{"class":935,"line":2276},[933,4943,4944],{"class":1047},"Ask the questions one at a time.\n",[933,4946,4947],{"class":935,"line":2287},[933,4948,1067],{"emptyLinePlaceholder":1066},[933,4950,4951],{"class":935,"line":1698},[933,4952,4953],{"class":1047},"If a question can be answered by exploring the codebase, explore the codebase instead.\n",[429,4955,4956,4957,4959],{},"Eine ",[494,4958,4880],{},"-Datei enthält einen kleinen Metadatenblock und die eigentlichen Anweisungen. Die Metadaten bestehen aus dem Namen und der Beschreibung des Skills, die der KI-Agent beim Start lädt.",[473,4961,4963],{"id":4962},"wie-ki-agenten-skills-funktionieren-progressive-disclosure","Wie KI-Agenten-Skills funktionieren: Progressive Disclosure",[429,4965,4966],{},"Anfangs werden nur der Name und die Beschreibung in den Kontext geladen. Sobald die Anfrage des Benutzers mit der Beschreibung eines Skills übereinstimmt, werden die vollständigen Anweisungen in denselben Kontext geladen (Progressive Disclosure).",[429,4968,4969,4970,4975],{},"Sehen wir uns an, wie der Skill ",[443,4971,4973],{"href":4887,"rel":4972},[447],[494,4974,4891],{}," in der Praxis abläuft.",[429,4977,4978],{},[432,4979],{"alt":4980,"src":4981},"Sequenzdiagramm zur Veranschaulichung des Progressive-Disclosure-Mechanismus bei der Ausführung von KI-Agenten-Skills","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",[880,4983,4985],{"id":4984},"schritt-für-schritt","Schritt für Schritt",[532,4987,4988,4994,5000,5006,5012,5024,5034],{},[487,4989,4990,4993],{},[440,4991,4992],{},"Anfrage (Request)"," – Der Benutzer bittet den Agenten um etwas („Hinterfrage meinen Workflow-Entwurf“).",[487,4995,4996,4999],{},[440,4997,4998],{},"Auswahlprompt (Selection prompt)"," – Die Anfrage des Benutzers wird zusammen mit den Beschreibungen aller verfügbaren Skills an das LLM gesendet.",[487,5001,5002,5005],{},[440,5003,5004],{},"Auswahl durch das LLM"," – Das LLM vergleicht die Anfrage mit den Beschreibungen und gibt den\u002Fdie passenden Skill(s) zurück.",[487,5007,5008,5011],{},[440,5009,5010],{},"Bestätigung"," – Der Agent schlägt dem Benutzer den entsprechenden Skill vor. Dieser bestätigt die Auswahl (oder lehnt sie ab\u002Fpasst sie an).",[487,5013,5014,5017,5018,5021,5022,551],{},[440,5015,5016],{},"Anweisungen geladen"," – Der Agent ruft die ",[900,5019,5020],{},"vollständigen"," Anweisungen für den bestätigten Skill ab: den Inhalt von ",[494,5023,4880],{},[487,5025,5026,5029,5030,5033],{},[440,5027,5028],{},"Ausführungsprompt (Execution prompt)"," – Die Anfrage des Benutzers ",[440,5031,5032],{},"zusammen mit den Anweisungen des ausgewählten Skills"," wird an das LLM gesendet.",[487,5035,5036,5039],{},[440,5037,5038],{},"Antwort"," – Das LLM generiert die Ausgabe, in diesem Fall die erste Frage für das Stresstest-Interview.",[429,5041,5042,5043,5050],{},"Schauen wir uns nun am Beispiel des ",[443,5044,5047],{"href":5045,"rel":5046},"https:\u002F\u002Fgithub.com\u002Fcoleam00\u002Fexcalidraw-diagram-skill",[447],[494,5048,5049],{},"excalidraw-diagram-skill"," an, wie ein Skill mit einem Referenzdokument verwendet wird:",[429,5052,5053],{},[432,5054],{"alt":5055,"src":5056},"Sequenzdiagramm, das die Ausführung eines KI-Agenten-Skills mit externen Referenzdateien und Vorlagen zeigt","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",[880,5058,4985],{"id":5059},"schritt-für-schritt-1",[532,5061,5062,5067,5073,5081,5086,5100,5110],{},[487,5063,5064,5066],{},[440,5065,4992],{}," – Der Benutzer bittet den Agenten um eine Aktion („Zeichne den Workflow des Deployment-Prozesses“).",[487,5068,5069,5072],{},[440,5070,5071],{},"Auswahlprompt"," – Die Anfrage des Benutzers wird zusammen mit den Beschreibungen aller verfügbaren Skills an das LLM übermittelt.",[487,5074,5075,5077,5078,551],{},[440,5076,5004],{}," – Das LLM vergleicht die Anfrage mit den Beschreibungen und wählt den passenden Skill aus. Hier passt „Zeichne den Workflow“ zur Beschreibung von ",[494,5079,5080],{},"excalidraw-diagram",[487,5082,5083,5085],{},[440,5084,5010],{}," – Der Agent zeigt dem Benutzer den vorgeschlagenen Skill an, und dieser bestätigt (oder ändert) die Wahl.",[487,5087,5088,5090,5091,5093,5094,5096,5097,5099],{},[440,5089,5016],{}," – Der Agent lädt die ",[900,5092,5020],{}," Anweisungen des Skills: den Inhalt der ",[494,5095,4880],{}," sowie alle referenzierten Dateien (bei ",[494,5098,5080],{}," sind das Farbpaletten, das JSON-Schema und Elementvorlagen).",[487,5101,5102,5105,5106,5109],{},[440,5103,5104],{},"Ausführungsprompt"," – Die Benutzeranfrage ",[440,5107,5108],{},"plus die geladenen Skill-Anweisungen"," wird an das LLM geschickt. Das Modell verfügt nun über die detaillierte Methodik.",[487,5111,5112,5114,5115,5118],{},[440,5113,5038],{}," – Das LLM erstellt die Ausgabe (eine ",[494,5116,5117],{},".excalidraw","-JSON-Datei), die der Agent an den Benutzer zurückgibt.",[473,5120,5122],{"id":5121},"ki-agenten-skills-vs-tools-und-mcp","KI-Agenten-Skills vs. Tools und MCP",[429,5124,5125,5126,5129],{},"Skills ersetzen keine Prompts, Tools oder MCP-Integrationen. Tools und MCP-Schnittstellen erweitern die Reichweite des Agenten auf externe Systeme – wie Datenbankabfragen, API-Aufrufe usw. Skills hingegen vertiefen das praktische Wissen (",[900,5127,5128],{},"Know-how",") des Agenten bei der Ausführung einer bestimmten Aufgabe.",[429,5131,5132,5133,5136],{},"Ein MCP wie das ",[443,5134,5135],{"href":395},"NetSuite MCP auf ChatGPT und Claude einrichten"," ermöglicht es dem Agenten, Fragen durch Zugriff auf Live-Finanz- und Betriebsdaten in NetSuite zu beantworten. Ein NetSuite-Skill für operative Berichte leitet den Agenten wiederum an, wie er diesen Bericht verfassen und die Antwort dem Benutzer optimal präsentieren soll.",[429,5138,5139],{},"Einige typische Einsatzszenarien für Skills sind:",[484,5141,5142,5145,5148],{},[487,5143,5144],{},"Mehrstufige Workflows (Multi-step Workflows)",[487,5146,5147],{},"Dokumentenverarbeitung (z. B. Datenextraktion aus PDFs)",[487,5149,5150],{},"Richtlinien zur Code-Generierung",[473,5152,5154],{"id":5153},"wie-man-ki-agenten-skills-erstellt","Wie man KI-Agenten-Skills erstellt",[532,5156,5157,5167,5181,5190],{},[487,5158,5159,5162,5163,5166],{},[440,5160,5161],{},"Erstellen Sie einen Ordner",", der nach dem Skill benannt ist (z. B. ",[494,5164,5165],{},"netsuite-operation-report\u002F",").",[487,5168,5169,5174,5175,5177,5178,5180],{},[440,5170,5171,5172],{},"Schreiben Sie eine ",[494,5173,4880],{}," mit einem eindeutigen ",[494,5176,4907],{},", einer präzisen ",[494,5179,4917],{}," und einer prägnanten Anleitung (unter 200 Wörtern).",[487,5182,5183,5186,5187,5189],{},[440,5184,5185],{},"Fügen Sie Ressourcen hinzu",", die für die Aufgabe benötigt werden – Referenzdokumente, Vorlagen oder Skripte. Halten Sie die ",[494,5188,4880],{}," kurz und verweisen Sie auf die Details in separaten Dateien.",[487,5191,5192,5195,5196,5199],{},[440,5193,5194],{},"Installieren Sie den Skill"," dort, wo Agenten ihn finden können. Lesen Sie ",[443,5197,5198],{"href":359},"Zentralisierung von KI-Agenten-Skills",", um zu erfahren, wie Sie Skills für mehrere Agenten zentral verwalten.",[429,5201,5202],{},"Ein paar Tipps für effektive Skills:",[484,5204,5205,5208,5214,5217],{},[487,5206,5207],{},"Formulieren Sie die Beschreibung als System-Trigger, nicht primär für menschliche Leser.",[487,5209,5210,5211,5213],{},"Halten Sie die ",[494,5212,4880],{}," schlank (unter 200 Wörtern). Beschreiben Sie den Standardfall im Haupttext; lagern Sie Edge-Cases in Referenzdokumente aus.",[487,5215,5216],{},"Nutzen Sie Skripte für alle deterministischen Aufgaben. Überlassen Sie dem LLM keine Rechenaufgaben.",[487,5218,5219],{},"Nutzen Sie Versionsverwaltung. Checken Sie den Skill in Git ein.",[473,5221,2576],{"id":2575},[429,5223,5224,5225,5228,5229,5232],{},"Während Tools und MCP festlegen, ",[900,5226,5227],{},"womit sich der Agent verbinden soll",", kapseln Agenten-Skills, ",[900,5230,5231],{},"wie die eigentliche Arbeit erledigt wird",". Sie sind eine essenzielle Ergänzung, kein Ersatz.",[429,5234,5235],{},"Durch das Prinzip des Progressive Disclosure halten Skills das Kontextfenster Ihres Agenten sauber und effizient – detaillierte Anweisungen, Referenzdokumente und ausführbare Skripte werden nur dann geladen, wenn die Anfrage des Benutzers sie tatsächlich triggert.",[1642,5237,5238],{},"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":1063,"depth":1070,"links":5240},[5241,5242,5246,5247,5248],{"id":4869,"depth":1063,"text":4870},{"id":4962,"depth":1063,"text":4963,"children":5243},[5244,5245],{"id":4984,"depth":1070,"text":4985},{"id":5059,"depth":1070,"text":4985},{"id":5121,"depth":1063,"text":5122},{"id":5153,"depth":1063,"text":5154},{"id":2575,"depth":1063,"text":2576},[1662],"2026-06-26","Erfahren Sie, was KI-Agenten-Skills sind, wie Progressive Disclosure funktioniert, und lernen Sie Schritt für Schritt, wie man eigene Skills effizient erstellt.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FAI%20Agent%20Skills%20What%20They%20Are%20%26%20How%20to%20Create%20Them\u002FDE-AI-Agent-Skills-What-They-Are-%26-How-to-Create-Them.webp","Leitfaden für KI-Agenten-Skills: Workflows erstellen",{"schemaOrg":5255,"robots":1696,"sitemap":5257},[5256],{"@type":1675,"headline":4864,"description":5251},{"lastmod":5250},{"title":5253,"description":5251,"ogTitle":4864,"ogDescription":5251,"twitterTitle":4864,"twitterDescription":5251},"de\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",[1704,5261,5262,5263],"Agenten-Skills","Wiederverwendbare Workflows","KI-Tutorial","aYz_d5erwncS3R6Ctv40_hkfPn7RzXJJObWrsg5Etrg",{"id":1710,"title":1711,"author":424,"body":1712,"category":2608,"date":2610,"description":2611,"extension":1667,"image":2612,"imageAlt":2613,"isPublished":1066,"meta":2614,"minRead":2287,"navigation":1066,"path":363,"seo":2648,"stem":2650,"tags":2651,"updatedAt":2647,"__hash__":2655},1792489997238]