[{"data":1,"prerenderedAt":4620},["ShallowReactive",2],{"published-article-paths":3,"search-navigation":348,"\u002Ftw\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac":421,"\u002Ftw\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac-surround":1017},[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":994,"date":997,"description":998,"extension":999,"image":1000,"imageAlt":1001,"isPublished":1002,"meta":1003,"minRead":512,"navigation":1002,"path":269,"seo":1009,"stem":1010,"tags":1011,"updatedAt":1015,"__hash__":1016},"article\u002Ftw\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac.md","使用MDM設定檔在macOS上無縫切換與設定多個Cloudflare WARP零信任組織的完整教學指南","",{"type":426,"value":427,"toc":987},"minimark",[428,433,437,445,449,452,455,458,462,465,473,494,824,944,947,950,953,983],[429,430,432],"h2",{"id":431},"什麼是-cloudflare-warp","什麼是 Cloudflare WARP？",[434,435,436],"p",{},"Cloudflare WARP 是一款用戶端應用程式，它會將指定裝置的網路流量引導至 Cloudflare 的全球網路進行路由，而不是直接傳送到公共網際網路。",[434,438,439,440,444],{},"它基於 ",[441,442,443],"strong",{},"WireGuard"," 通訊協定建立一條加密隧道，從而保護從裝置到最近的 Cloudflare 資料中心之間的流量安全。隨後，您可以在 Cloudflare 控制面板中建立原則，對這些流入的流量進行篩選、記錄、檢查或路由。",[429,446,448],{"id":447},"為什麼我們需要-cloudflare-warp","為什麼我們需要 Cloudflare WARP？",[434,450,451],{},"為了向員工、承包商和其他專案關係人安全地公開內部資源（如私有 Web 服務或 SaaS 應用程式），Cloudflare WARP 用戶端被用作**零信任網路存取 (ZTNA)**的用戶端強制執行點。",[434,453,454],{},"Cloudflare WARP 用戶端安裝在用戶的筆記型電腦或手機上。它要求用戶在授予存取權限之前進行身分驗證，並滿足特定的安全性狀態檢查（例如來自經過核准的 IP 範圍、使用已註冊的電子郵件網域或執行處於作用狀態的防火牆）。",[434,456,457],{},"透過將裝置流量直接通道化傳輸到 Cloudflare，用戶的身分、裝置和原則將在要求到達內部資源之前得到驗證。因此，內部資源永遠不會暴露在公共網際網路上，每一次要求都將得到完整的記錄和稽核。",[429,459,461],{"id":460},"在單一裝置上支援多個-warp-設定檔","在單一裝置上支援多個 WARP 設定檔",[434,463,464],{},"當用戶需要在個人和企業 Cloudflare 帳戶之間進行切換，或者當系統管理員需要管理多個租戶（tenant）時，在單一裝置上支援多個 WARP 設定檔就顯得至关重要。",[434,466,467,468,472],{},"要在 macOS 上實現此目標，我們可以使用 ",[469,470,471],"code",{},".mobileconfig"," MDM 設定檔來定義和註冊不同的 WARP 環境。",[474,475,476,491],"ul",{},[477,478,479,480,490],"li",{},"直接從 Cloudflare ",[481,482,486,487,489],"a",{"href":483,"rel":484},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fstatic\u002Fmdm\u002Fmultiple-orgs\u002FCloudflareWARP.mobileconfig",[485],"nofollow","下載 ",[469,488,471],{}," 範例檔案","。",[477,492,493],{},"以下是該設定檔的範例文本：",[495,496,500],"pre",{"className":497,"code":498,"language":499,"meta":424,"style":424},"language-xml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\u003C!DOCTYPE plist PUBLIC \"-\u002F\u002FApple\u002F\u002FDTD PLIST 1.0\u002F\u002FEN\" \"http:\u002F\u002Fwww.apple.com\u002FDTDs\u002FPropertyList-1.0.dtd\">\n\u003Cplist version=\"1.0\">\n\u003Cdict>\n  \u003Ckey>PayloadContent\u003C\u002Fkey>\n  \u003Carray>\n    \u003Cdict>\n      \u003Ckey>PayloadDisplayName\u003C\u002Fkey>\n      \u003Cstring>Warp Configuration\u003C\u002Fstring>\n      \u003Ckey>PayloadIdentifier\u003C\u002Fkey>\n      \u003Cstring>com.cloudflare.warp.CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n      \u003Ckey>PayloadOrganization\u003C\u002Fkey>\n      \u003Cstring>Cloudflare Ltd.\u003C\u002Fstring>\n      \u003Ckey>PayloadType\u003C\u002Fkey>\n      \u003Cstring>com.cloudflare.warp\u003C\u002Fstring>\n      \u003Ckey>PayloadUUID\u003C\u002Fkey>\n      \u003Cstring>CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n      \u003Ckey>PayloadVersion\u003C\u002Fkey>\n      \u003Cinteger>1\u003C\u002Finteger>\n      \u003Ckey>configs\u003C\u002Fkey>\n      \u003Carray>\n        \u003Cdict>\n          \u003Ckey>organization\u003C\u002Fkey>\n          \u003Cstring>your-team-name-1\u003C\u002Fstring>\n          \u003Ckey>display_name\u003C\u002Fkey>\n          \u003Cstring>Team 1\u003C\u002Fstring>\n        \u003C\u002Fdict>\n        \u003Cdict>\n          \u003Ckey>organization\u003C\u002Fkey>\n          \u003Cstring>your-team-name-2\u003C\u002Fstring>\n          \u003Ckey>display_name\u003C\u002Fkey>\n          \u003Cstring>Team 2\u003C\u002Fstring>\n        \u003C\u002Fdict>\n      \u003C\u002Farray>\n    \u003C\u002Fdict>\n  \u003C\u002Farray>\n  \u003Ckey>PayloadDisplayName\u003C\u002Fkey>\n  \u003Cstring>Cloudflare WARP\u003C\u002Fstring>\n  \u003Ckey>PayloadIdentifier\u003C\u002Fkey>\n  \u003Cstring>cloudflare_warp\u003C\u002Fstring>\n  \u003Ckey>PayloadOrganization\u003C\u002Fkey>\n  \u003Cstring>Cloudflare, Ltd.\u003C\u002Fstring>\n  \u003Ckey>PayloadRemovalDisallowed\u003C\u002Fkey>\n  \u003Cfalse\u002F>\n  \u003Ckey>PayloadScope\u003C\u002Fkey>\n  \u003Cstring>System\u003C\u002Fstring>\n  \u003Ckey>PayloadType\u003C\u002Fkey>\n  \u003Cstring>Configuration\u003C\u002Fstring>\n  \u003Ckey>PayloadUUID\u003C\u002Fkey>\n  \u003Cstring>2B7763B8-64F6-41EB-AA5E-7761651B8131\u003C\u002Fstring>\n  \u003Ckey>PayloadVersion\u003C\u002Fkey>\n  \u003Cinteger>1\u003C\u002Finteger>\n\u003C\u002Fdict>\n\u003C\u002Fplist>\n","xml",[469,501,502,510,516,522,528,534,540,546,552,558,564,570,576,582,588,594,600,606,612,618,624,630,636,642,648,654,660,666,671,676,682,687,693,698,704,710,716,722,728,734,740,746,752,758,764,770,776,782,788,794,800,806,812,818],{"__ignoreMap":424},[503,504,507],"span",{"class":505,"line":506},"line",1,[503,508,509],{},"\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n",[503,511,513],{"class":505,"line":512},2,[503,514,515],{},"\u003C!DOCTYPE plist PUBLIC \"-\u002F\u002FApple\u002F\u002FDTD PLIST 1.0\u002F\u002FEN\" \"http:\u002F\u002Fwww.apple.com\u002FDTDs\u002FPropertyList-1.0.dtd\">\n",[503,517,519],{"class":505,"line":518},3,[503,520,521],{},"\u003Cplist version=\"1.0\">\n",[503,523,525],{"class":505,"line":524},4,[503,526,527],{},"\u003Cdict>\n",[503,529,531],{"class":505,"line":530},5,[503,532,533],{},"  \u003Ckey>PayloadContent\u003C\u002Fkey>\n",[503,535,537],{"class":505,"line":536},6,[503,538,539],{},"  \u003Carray>\n",[503,541,543],{"class":505,"line":542},7,[503,544,545],{},"    \u003Cdict>\n",[503,547,549],{"class":505,"line":548},8,[503,550,551],{},"      \u003Ckey>PayloadDisplayName\u003C\u002Fkey>\n",[503,553,555],{"class":505,"line":554},9,[503,556,557],{},"      \u003Cstring>Warp Configuration\u003C\u002Fstring>\n",[503,559,561],{"class":505,"line":560},10,[503,562,563],{},"      \u003Ckey>PayloadIdentifier\u003C\u002Fkey>\n",[503,565,567],{"class":505,"line":566},11,[503,568,569],{},"      \u003Cstring>com.cloudflare.warp.CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n",[503,571,573],{"class":505,"line":572},12,[503,574,575],{},"      \u003Ckey>PayloadOrganization\u003C\u002Fkey>\n",[503,577,579],{"class":505,"line":578},13,[503,580,581],{},"      \u003Cstring>Cloudflare Ltd.\u003C\u002Fstring>\n",[503,583,585],{"class":505,"line":584},14,[503,586,587],{},"      \u003Ckey>PayloadType\u003C\u002Fkey>\n",[503,589,591],{"class":505,"line":590},15,[503,592,593],{},"      \u003Cstring>com.cloudflare.warp\u003C\u002Fstring>\n",[503,595,597],{"class":505,"line":596},16,[503,598,599],{},"      \u003Ckey>PayloadUUID\u003C\u002Fkey>\n",[503,601,603],{"class":505,"line":602},17,[503,604,605],{},"      \u003Cstring>CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n",[503,607,609],{"class":505,"line":608},18,[503,610,611],{},"      \u003Ckey>PayloadVersion\u003C\u002Fkey>\n",[503,613,615],{"class":505,"line":614},19,[503,616,617],{},"      \u003Cinteger>1\u003C\u002Finteger>\n",[503,619,621],{"class":505,"line":620},20,[503,622,623],{},"      \u003Ckey>configs\u003C\u002Fkey>\n",[503,625,627],{"class":505,"line":626},21,[503,628,629],{},"      \u003Carray>\n",[503,631,633],{"class":505,"line":632},22,[503,634,635],{},"        \u003Cdict>\n",[503,637,639],{"class":505,"line":638},23,[503,640,641],{},"          \u003Ckey>organization\u003C\u002Fkey>\n",[503,643,645],{"class":505,"line":644},24,[503,646,647],{},"          \u003Cstring>your-team-name-1\u003C\u002Fstring>\n",[503,649,651],{"class":505,"line":650},25,[503,652,653],{},"          \u003Ckey>display_name\u003C\u002Fkey>\n",[503,655,657],{"class":505,"line":656},26,[503,658,659],{},"          \u003Cstring>Team 1\u003C\u002Fstring>\n",[503,661,663],{"class":505,"line":662},27,[503,664,665],{},"        \u003C\u002Fdict>\n",[503,667,669],{"class":505,"line":668},28,[503,670,635],{},[503,672,674],{"class":505,"line":673},29,[503,675,641],{},[503,677,679],{"class":505,"line":678},30,[503,680,681],{},"          \u003Cstring>your-team-name-2\u003C\u002Fstring>\n",[503,683,685],{"class":505,"line":684},31,[503,686,653],{},[503,688,690],{"class":505,"line":689},32,[503,691,692],{},"          \u003Cstring>Team 2\u003C\u002Fstring>\n",[503,694,696],{"class":505,"line":695},33,[503,697,665],{},[503,699,701],{"class":505,"line":700},34,[503,702,703],{},"      \u003C\u002Farray>\n",[503,705,707],{"class":505,"line":706},35,[503,708,709],{},"    \u003C\u002Fdict>\n",[503,711,713],{"class":505,"line":712},36,[503,714,715],{},"  \u003C\u002Farray>\n",[503,717,719],{"class":505,"line":718},37,[503,720,721],{},"  \u003Ckey>PayloadDisplayName\u003C\u002Fkey>\n",[503,723,725],{"class":505,"line":724},38,[503,726,727],{},"  \u003Cstring>Cloudflare WARP\u003C\u002Fstring>\n",[503,729,731],{"class":505,"line":730},39,[503,732,733],{},"  \u003Ckey>PayloadIdentifier\u003C\u002Fkey>\n",[503,735,737],{"class":505,"line":736},40,[503,738,739],{},"  \u003Cstring>cloudflare_warp\u003C\u002Fstring>\n",[503,741,743],{"class":505,"line":742},41,[503,744,745],{},"  \u003Ckey>PayloadOrganization\u003C\u002Fkey>\n",[503,747,749],{"class":505,"line":748},42,[503,750,751],{},"  \u003Cstring>Cloudflare, Ltd.\u003C\u002Fstring>\n",[503,753,755],{"class":505,"line":754},43,[503,756,757],{},"  \u003Ckey>PayloadRemovalDisallowed\u003C\u002Fkey>\n",[503,759,761],{"class":505,"line":760},44,[503,762,763],{},"  \u003Cfalse\u002F>\n",[503,765,767],{"class":505,"line":766},45,[503,768,769],{},"  \u003Ckey>PayloadScope\u003C\u002Fkey>\n",[503,771,773],{"class":505,"line":772},46,[503,774,775],{},"  \u003Cstring>System\u003C\u002Fstring>\n",[503,777,779],{"class":505,"line":778},47,[503,780,781],{},"  \u003Ckey>PayloadType\u003C\u002Fkey>\n",[503,783,785],{"class":505,"line":784},48,[503,786,787],{},"  \u003Cstring>Configuration\u003C\u002Fstring>\n",[503,789,791],{"class":505,"line":790},49,[503,792,793],{},"  \u003Ckey>PayloadUUID\u003C\u002Fkey>\n",[503,795,797],{"class":505,"line":796},50,[503,798,799],{},"  \u003Cstring>2B7763B8-64F6-41EB-AA5E-7761651B8131\u003C\u002Fstring>\n",[503,801,803],{"class":505,"line":802},51,[503,804,805],{},"  \u003Ckey>PayloadVersion\u003C\u002Fkey>\n",[503,807,809],{"class":505,"line":808},52,[503,810,811],{},"  \u003Cinteger>1\u003C\u002Finteger>\n",[503,813,815],{"class":505,"line":814},53,[503,816,817],{},"\u003C\u002Fdict>\n",[503,819,821],{"class":505,"line":820},54,[503,822,823],{},"\u003C\u002Fplist>\n",[474,825,826,837,851,861,867,886,899,918,935],{},[477,827,828,829,832,833,836],{},"將 ",[469,830,831],{},"your-team-name-1"," 和 ",[469,834,835],{},"your-team-name-2"," 替換為您各自的 Cloudflare Zero Trust 團隊名稱。",[477,838,839,840,843,844,846,847,850],{},"在終端機中執行指令 ",[469,841,842],{},"uuidgen"," 產生唯一的 UUID，並使用它們替換 ",[469,845,471],{}," 檔案中的預留位置 ",[469,848,849],{},"PayloadUUID"," 值。",[477,852,853,854,857,858,860],{},"確保 ",[469,855,856],{},"PayloadIdentifier"," 字串中也包含更新後的 ",[469,859,849],{},"，以保證設定檔的唯一性。",[477,862,863,864,866],{},"儲存編輯後的 ",[469,865,471],{}," 檔案。",[477,868,869,870,873,874,877,878,881],{},"打開 Mac 上的",[441,871,872],{},"系統設定","，搜尋並選擇",[441,875,876],{},"描述檔","（Profiles）。",[879,880],"br",{},[882,883],"img",{"alt":884,"src":885},"macOS 系統設定中的描述檔面板","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-system-settings-profiles.webp",[477,887,888,889,892,893,895],{},"按一下",[441,890,891],{},"安裝、檢視或移除...","（Install, view or remove...）開始新增您的新設定檔。",[879,894],{},[882,896],{"alt":897,"src":898},"macOS 描述檔安裝、檢視或移除按鈕","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-profiles-view-remove.webp",[477,900,901,902,905,906,866,908,910,914],{},"按一下左下角的 ",[441,903,904],{},"+","（加號）圖示，並選擇您儲存的 ",[469,907,471],{},[879,909],{},[882,911],{"alt":912,"src":913},"macOS 描述檔左下角新增（+）按鈕","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-profiles-add-profile.webp",[882,915],{"alt":916,"src":917},"在 macOS 上選擇 .mobileconfig 設定檔","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-select-mobileconfig-file.webp",[477,919,920,921,924,925,928,929,931],{},"選擇 ",[441,922,923],{},"Cloudflare WARP"," 並按一下",[441,926,927],{},"安裝","以套用此設定。",[879,930],{},[882,932],{"alt":933,"src":934},"在 macOS 上確認安裝 Cloudflare WARP 描述檔","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-install-cloudflare-warp-profile.webp",[477,936,937,938,940],{},"重新啟動您的 Cloudflare WARP 用戶端。您現在應該可以在使用者介面中看到多組織切換器：",[879,939],{},[882,941],{"alt":942,"src":943},"macOS 上支援多組織切換的 Cloudflare WARP 用戶端介面","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fcloudflare-warp-multi-profile-switcher.webp",[429,945,946],{"id":946},"結論",[434,948,949],{},"Cloudflare WARP 用戶端在用戶裝置上扮演著關鍵的安全邊界角色，使零信任網路存取（ZTNA）既穩固又極具實用性。透過將內部資源與公共網際網路隔離開來，可確保每一次連線嘗試都經過安全的身份驗證、評估與稽核。",[429,951,952],{"id":952},"參考資料",[474,954,955,962,969,976],{},[477,956,957],{},[481,958,961],{"href":959,"rel":960},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fteam-and-resources\u002Fdevices\u002Fcloudflare-one-client\u002Fdeployment\u002Fmdm-deployment\u002F#prepare-file-for-mdm-deployment",[485],"Managed Deployment Preparation",[477,963,964],{},[481,965,968],{"href":966,"rel":967},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fteam-and-resources\u002Fdevices\u002Fcloudflare-one-client\u002Fdeployment\u002Fmdm-deployment\u002Fswitch-organizations\u002F",[485],"Switch Between Zero Trust Organizations",[477,970,971],{},[481,972,975],{"href":973,"rel":974},"https:\u002F\u002Fblog.cloudflare.com\u002Fintroducing-warp-connector-paving-the-path-to-any-to-any-connectivity-2\u002F",[485],"Introducing WARP Connector: Paving the Path to Any-to-Any Connectivity",[477,977,978],{},[481,979,982],{"href":980,"rel":981},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fteam-and-resources\u002Fdevices\u002Fcloudflare-one-client\u002F",[485],"Cloudflare One Client Documentation",[984,985,986],"style",{},"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":512,"depth":518,"links":988},[989,990,991,992,993],{"id":431,"depth":512,"text":432},{"id":447,"depth":512,"text":448},{"id":460,"depth":512,"text":461},{"id":946,"depth":512,"text":946},{"id":952,"depth":512,"text":952},[995,996],"security","cloudflare","2026-07-04","本指南將詳細介紹如何在macOS系統上，通過使用MDM .mobileconfig設定檔，實現多個Cloudflare WARP零信任組織或帳戶之間的無縫切換。本文為企業IT系統管理員提供了一套完整的、可直接落地部署的教學指南與設定步驟範本，幫助企業輕鬆管理並確保終端用戶的網路安全、合規審計與流暢體驗。","md","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002FTW-Switch-Between-Multiple-Cloudflare-WARP-Orgs-on-Mac.webp","在Mac上配置和切換多個Cloudflare WARP組織帳戶",true,{"schemaOrg":1004,"robots":1007,"sitemap":1008},[1005],{"@type":1006,"headline":423,"description":998},"HowTo","index, follow",{"lastmod":997},{"title":1001,"description":998,"ogTitle":423,"ogDescription":998,"twitterTitle":423,"twitterDescription":998},"tw\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",[1012,923,1013,1014],"macOS","MDM","Zero Trust",null,"zclGoAFYNMezL6vd0bCfBa4isSiwsXYfCQa7Cwm9YLI",{"surround":1018,"related":2271},[1019,1429],{"id":1020,"title":1021,"author":424,"body":1022,"category":1411,"date":1413,"description":1414,"extension":999,"image":1415,"imageAlt":1416,"isPublished":1002,"meta":1417,"minRead":512,"navigation":1002,"path":249,"seo":1421,"stem":1422,"tags":1423,"updatedAt":1015,"__hash__":1428},"article\u002Ftw\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them.md","什麼是 AI Agent 技能？深入探討其工作原理並手把手教你如何建構高效、可複用的Agent技能",{"type":426,"value":1023,"toc":1401},[1024,1028,1039,1050,1119,1124,1128,1131,1140,1146,1150,1207,1218,1224,1227,1284,1288,1291,1298,1301,1312,1316,1361,1364,1381,1384,1395,1398],[429,1025,1027],{"id":1026},"什麼是-ai-agent-技能","什麼是 AI Agent 技能？",[434,1029,1030,1031,1034,1035,1038],{},"代理技能（agent skill）是一種可複用的",[441,1032,1033],{},"指令集"," —— 它是一個標準化的流程，旨在指導 Agent 如何卓越地完成某一特定類型的任務。一個技能通常由單個 Markdown 文件 ",[469,1036,1037],{},"SKILL.md"," 構成，並且可以打包該任務所需的任何其他文件，例如參考文件、範本或可執行腳本。",[434,1040,1041,1042,1049],{},"以 ",[481,1043,1046],{"href":1044,"rel":1045},"https:\u002F\u002Fgithub.com\u002Fmattpocock\u002Fskills\u002Fblob\u002F733d312884b3878a9a9cff693c5886943753a741\u002Fskills\u002Fproductivity\u002Fgrill-me\u002FSKILL.md",[485],[469,1047,1048],{},"grill-me"," 技能为例：",[495,1051,1055],{"className":1052,"code":1053,"language":1054,"meta":424,"style":424},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","---\nname: grill-me\ndescription: Interview the user relentlessly about a plan or design until reaching shared understanding, resolving each branch of the decision tree. Use when user wants to stress-test a plan, get grilled on their design, or mentions \"grill me\".\n---\n\nInterview me relentlessly about every aspect of this plan until we reach a shared understanding. Walk down each branch of the design tree, resolving dependencies between decisions one-by-one. For each question, provide your recommended answer.\n\nAsk the questions one at a time.\n\nIf a question can be answered by exploring the codebase, explore the codebase instead.\n","yaml",[469,1056,1057,1063,1077,1087,1091,1096,1101,1105,1110,1114],{"__ignoreMap":424},[503,1058,1059],{"class":505,"line":506},[503,1060,1062],{"class":1061},"sBMFI","---\n",[503,1064,1065,1069,1073],{"class":505,"line":512},[503,1066,1068],{"class":1067},"swJcz","name",[503,1070,1072],{"class":1071},"sMK4o",":",[503,1074,1076],{"class":1075},"sfazB"," grill-me\n",[503,1078,1079,1082,1084],{"class":505,"line":518},[503,1080,1081],{"class":1067},"description",[503,1083,1072],{"class":1071},[503,1085,1086],{"class":1075}," 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",[503,1088,1089],{"class":505,"line":524},[503,1090,1062],{"class":1061},[503,1092,1093],{"class":505,"line":530},[503,1094,1095],{"emptyLinePlaceholder":1002},"\n",[503,1097,1098],{"class":505,"line":536},[503,1099,1100],{"class":1075},"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",[503,1102,1103],{"class":505,"line":542},[503,1104,1095],{"emptyLinePlaceholder":1002},[503,1106,1107],{"class":505,"line":548},[503,1108,1109],{"class":1075},"Ask the questions one at a time.\n",[503,1111,1112],{"class":505,"line":554},[503,1113,1095],{"emptyLinePlaceholder":1002},[503,1115,1116],{"class":505,"line":560},[503,1117,1118],{"class":1075},"If a question can be answered by exploring the codebase, explore the codebase instead.\n",[434,1120,1121,1123],{},[469,1122,1037],{}," 文件包含一小塊元資料（metadata）和指令的正文。元資料由技能的名稱（name）和描述（description）組成，AI Agent 會在啟動時將其載入。",[429,1125,1127],{"id":1126},"ai-agent-技能的工作原理漸進式披露progressive-disclosure","AI Agent 技能的工作原理：漸進式披露（Progressive Disclosure）",[434,1129,1130],{},"在初始階段，只有技能的名稱和描述會被載入到上下文視窗（Context）中。當使用者的請求與技能的描述相匹配時，该技能的完整指令正文才會被載入到相同的上下文中。",[434,1132,1133,1134,1139],{},"讓我們來看看在實際使用中，",[481,1135,1137],{"href":1044,"rel":1136},[485],[469,1138,1048],{}," 技能是如何工作的。",[434,1141,1142],{},[882,1143],{"alt":1144,"src":1145},"展示 AI 代理技能執行中漸進式揭示（Progressive Disclosure）機制的時序圖","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FAI%20Agent%20Skills%20What%20They%20Are%20%26%20How%20to%20Create%20Them\u002Fai-agent-skill-progressive-disclosure-sequence-diagram.webp",[1147,1148,1149],"h3",{"id":1149},"逐步流程",[1151,1152,1153,1159,1165,1171,1177,1191,1201],"ol",{},[477,1154,1155,1158],{},[441,1156,1157],{},"請求（Request）"," —— 使用者向 Agent 提出需求（例如：“對我的工作流設計進行壓力測試剖析”）。",[477,1160,1161,1164],{},[441,1162,1163],{},"選擇提示词（Selection prompt）"," —— 使用者的請求與所有可用技能的描述一起發送給 LLM。",[477,1166,1167,1170],{},[441,1168,1169],{},"LLM 做出選擇"," —— LLM 將請求與每個描述進行對比，並返回匹配的技能。",[477,1172,1173,1176],{},[441,1174,1175],{},"確認（Confirmation）"," —— Agent 将推薦的技能呈現給使用者，由使用者進行確認（或拒絕\u002F調整）該選擇。",[477,1178,1179,1182,1183,1187,1188,1190],{},[441,1180,1181],{},"載入指令"," —— Agent 獲取已確認技能的",[1184,1185,1186],"em",{},"完整","指令：即 ",[469,1189,1037],{}," 的正文內容。",[477,1192,1193,1196,1197,1200],{},[441,1194,1195],{},"執行提示詞（Execution prompt）"," —— 使用者的請求",[441,1198,1199],{},"加上所選技能的具体指令","一起發送給 LLM。",[477,1202,1203,1206],{},[441,1204,1205],{},"響應（Response）"," —— LLM 生成輸出，即壓力測試訪談中的第一個剖析問題。",[434,1208,1209,1210,1217],{},"現在，我們使用 ",[481,1211,1214],{"href":1212,"rel":1213},"https:\u002F\u002Fgithub.com\u002Fcoleam00\u002Fexcalidraw-diagram-skill",[485],[469,1215,1216],{},"excalidraw-diagram-skill"," 來演示帶參考文件的技能是如何工作的：",[434,1219,1220],{},[882,1221],{"alt":1222,"src":1223},"展示 AI 代理執行載有外部參考檔案與範本的技能時序圖","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FAI%20Agent%20Skills%20What%20They%20Are%20%26%20How%20to%20Create%20Them\u002Fai-agent-skill-with-reference-files-sequence-diagram.webp",[1147,1225,1149],{"id":1226},"逐步流程-1",[1151,1228,1229,1234,1239,1248,1254,1266,1274],{},[477,1230,1231,1233],{},[441,1232,1157],{}," —— 使用者向 Agent 提出需求（“繪製部署流程的工作流圖”）。",[477,1235,1236,1164],{},[441,1237,1238],{},"選擇提示詞",[477,1240,1241,1243,1244,1247],{},[441,1242,1169],{}," —— LLM 將請求與每個描述進行對比，並返回匹配的技能。在這裡，“繪製工作流圖”與 ",[469,1245,1246],{},"excalidraw-diagram"," 的描述匹配，因此該技能被選中。",[477,1249,1250,1253],{},[441,1251,1252],{},"確認"," —— Agent 將推薦的技能呈現給使用者，由使用者進行確認（或拒绝\u002F調整）該選擇。",[477,1255,1256,1182,1258,1187,1260,1262,1263,1265],{},[441,1257,1181],{},[1184,1259,1186],{},[469,1261,1037],{}," 的正文內容以及任何引用的參考文件（對於 ",[469,1264,1246],{},"，這包括調色盤、JSON Schema 和圖表元素範本）。",[477,1267,1268,1196,1271,1273],{},[441,1269,1270],{},"執行提示詞",[441,1272,1199],{},"一起發送給 LLM。模型現在擁有了它所需的詳細方法論。",[477,1275,1276,1279,1280,1283],{},[441,1277,1278],{},"響應"," —— LLM 生成輸出（一個 ",[469,1281,1282],{},".excalidraw"," 的 JSON 文件），由 Agent 將其返回給使用者。",[429,1285,1287],{"id":1286},"ai-agent-技能-vs-工具與-mcp","AI Agent 技能 vs. 工具與 MCP",[434,1289,1290],{},"技能並不能替代提示詞、普通工具（Tools）或 MCP。工具和 MCP 整合擴展了 Agent 對外部系統的存取範圍 —— 例如查詢資料庫、呼叫 API 等等。而技能則加深了 Agent 完成特定任務的實戰訣竅（Know-how）和專業深度。",[434,1292,1293,1294,1297],{},"諸如 ",[481,1295,1296],{"href":395},"在 ChatGPT 與 Claude 中配置 NetSuite MCP"," 的 MCP 整合，能夠讓 Agent 透過存取 NetSuite 中的即時財務和營運資料來回答使用者問題。而 NetSuite 業務報告技能則會進一步引導 Agent 如何去撰寫這份報告，并以規範的報表形式呈現給使用者。",[434,1299,1300],{},"使用技能的典型場景包括：",[474,1302,1303,1306,1309],{},[477,1304,1305],{},"多步驟複雜工作流",[477,1307,1308],{},"文件處理，例如從 PDF 中提取特定資料結構",[477,1310,1311],{},"程式碼生成規範與標準",[429,1313,1315],{"id":1314},"如何建立-ai-agent-技能","如何建立 AI Agent 技能",[1151,1317,1318,1328,1342,1351],{},[477,1319,1320,1323,1324,1327],{},[441,1321,1322],{},"建立一個資料夾","，並以技能名稱命名（例如 ",[469,1325,1326],{},"netsuite-operation-report\u002F","）。",[477,1329,1330,1335,1336,1338,1339,1341],{},[441,1331,1332,1333],{},"撰寫 ",[469,1334,1037],{},"，包含 ",[469,1337,1068],{},"、精準的 ",[469,1340,1081],{},"，以及精煉的指令正文（控制在 200 字以內）。",[477,1343,1344,1347,1348,1350],{},[441,1345,1346],{},"添加任務所需資源"," —— 包括參考文件、範本、腳本。保持 ",[469,1349,1037],{}," 短小精悍，並將細節連結至其他文件。",[477,1352,1353,1356,1357,1360],{},[441,1354,1355],{},"進行安裝","，讓 Agent 能夠發現它。參考 ",[481,1358,1359],{"href":359},"解決 AI 智能代理技能碎片化：集中化管理技能"," 以了解如何在多個 Agent 之間集中管理技能。",[434,1362,1363],{},"撰寫優秀技能的幾個技巧：",[474,1365,1366,1369,1375,1378],{},[477,1367,1368],{},"技能描述（description）應當面向系統觸發器（Trigger）來写，而不是給人類閱讀。",[477,1370,1371,1372,1374],{},"保持 ",[469,1373,1037],{}," 極其精簡 —— 限制在 200 字以內。在正文中寫下通用流程，將邊緣情況和細節留給參考文件。",[477,1376,1377],{},"凡是確定性的任務，應當使用腳本（Script）来處理。不要讓 LLM 去做算術。",[477,1379,1380],{},"做好版本控制，將其提交進 Git 中。",[429,1382,1383],{"id":1383},"結語",[434,1385,1386,1387,1390,1391,1394],{},"與定義“",[1184,1388,1389],{},"連接到什麼","”的工具和 MCP 不同，智能代理技能封裝了“",[1184,1392,1393],{},"如何去完成工作","”。它們是不可或缺的互補，而非替代關係。",[434,1396,1397],{},"透過利用漸進式披露（Progressive Disclosure），技能可以使 Agent 的上下文視窗保持整潔和高效 —— 僅在使用者請求觸發时，才會載入詳細的指令、參考文件和可執行腳本。",[984,1399,1400],{},"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":512,"depth":518,"links":1402},[1403,1404,1408,1409,1410],{"id":1026,"depth":512,"text":1027},{"id":1126,"depth":512,"text":1127,"children":1405},[1406,1407],{"id":1149,"depth":518,"text":1149},{"id":1226,"depth":518,"text":1149},{"id":1286,"depth":512,"text":1287},{"id":1314,"depth":512,"text":1315},{"id":1383,"depth":512,"text":1383},[1412],"ai-agents","2026-06-26","全面系統地深入了解什麼是AI Agent技能、漸進式披露（Progressive Disclosure）的工作原理，并手把手教你如何撰寫SKILL.md規範，打包參考文件、範本與腳本。本文也將對比技能、工具與MCP的差異與標準开发流程，助你輕鬆建構出可複用、高效率、能處理複雜上下文管理的自訂代理核心技能。","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FAI%20Agent%20Skills%20What%20They%20Are%20%26%20How%20to%20Create%20Them\u002FTW-AI-Agent-Skills-What-They-Are-%26-How-to-Create-Them.webp","AI Agent技能開發指南：建構可複用、高效率的Agent核心工作流",{"schemaOrg":1418,"robots":1007,"sitemap":1420},[1419],{"@type":1006,"headline":1021,"description":1414},{"lastmod":1413},{"title":1416,"description":1414,"ogTitle":1021,"ogDescription":1414,"twitterTitle":1021,"twitterDescription":1414},"tw\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",[1424,1425,1426,1427],"AI 代理","代理技能","可重複使用的工作流程","AI 教程","G6yqiU4D6vrLB8nujfq3SK0n1l9a3H5iB_pDSICyrk4",{"id":1430,"title":1431,"author":1015,"body":1432,"category":2252,"date":2253,"description":2254,"extension":999,"image":2255,"imageAlt":2256,"isPublished":1002,"meta":2257,"minRead":706,"navigation":1002,"path":277,"seo":2263,"stem":2264,"tags":2265,"updatedAt":1015,"__hash__":2270},"article\u002Ftw\u002Farticle\u002Fuse-cloudflare-as-ai-memory.md","基於Cloudflare Workers與MCP協定構建個人專屬AI持久化記憶系統，完美解決Context空白痛點",{"type":426,"value":1433,"toc":2234},[1434,1438,1441,1444,1448,1451,1466,1470,1477,1491,1494,1497,1541,1545,1627,1631,1657,1774,1785,1789,1794,1839,1864,1868,1873,1946,1951,1955,1988,1996,2035,2038,2070,2074,2082,2087,2128,2132,2182,2185,2188,2191,2194,2197,2231],[429,1435,1437],{"id":1436},"持久化-ai-記憶對智慧體agent的重要性","持久化 AI 記憶對智慧體（Agent）的重要性",[434,1439,1440],{},"隨著 AI 助手逐漸融入我們的日常生活與工作，我們經常會遇到「空白上下文」的問題（Blank Context Issue）。上週已經確認的決策在開啟新對話後便被遺忘，這迫使我们不得不一遍又一遍地輸入相同的技術堆疊（Tech Stack）細節，並在每個新會話中重新設定使用者偏好。",[434,1442,1443],{},"與其每次都從零開始，我們需要構建一個能夠持續演進、深入理解使用者決策的記憶系統，從而徹底消除重複輸入上下文的煩惱。",[429,1445,1447],{"id":1446},"自行架設-ai-記憶系統-vs-內置-ai-記憶功能","自行架設 AI 記憶系統 vs. 內置 AI 記憶功能",[434,1449,1450],{},"雖然許多 AI 智慧體或用戶端（如 ChatGPT、Claude 等）自帶了內建記憶功能，但我們很少在所有場景下只使用單一智慧體。我們可能會用 Claude 來設計和規劃專案架構，用 Kimi 來編寫程式碼，用 ChatGPT 進行深度的背景研究。然而，這些不同的智慧體之間無法直接共享上下文，所有記憶依然被孤立在各自的生態黑盒子中。",[434,1452,1453,1454,1459,1460,1465],{},"從軟體工程的角度來看，我們並不信任無法控制的黑盒子。我們需要的是一個可觀察、可審計且完全處於自己掌控之下的 AI 記憶系統。開放原始碼專案 ",[481,1455,1458],{"href":1456,"rel":1457},"https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fsecond-brain-cloudflare\u002Ftree\u002Fmain",[485],"Second Brain","（Fork 自 ",[481,1461,1464],{"href":1462,"rel":1463},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare%EF%BC%89%E6%8F%90%E4%BE%9B%E4%BA%86%E4%B8%80%E5%80%8B%E6%94%AF%E6%8F%B4%E6%A8%A1%E5%9E%8B%E4%B8%8A%E4%B8%8B%E6%96%87%E5%8D%94%E5%AE%9A%EF%BC%88Model",[485],"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare）提供了一個支援模型上下文協定（Model"," Context Protocol，簡稱 MCP）的持久化自行架設 AI 記憶系統。任何相容 MCP 協定的 AI 智慧體（如 Claude、ChatGPT、Kimi Code 等）都可以完美共享相同的上下文記憶庫。",[429,1467,1469],{"id":1468},"如何在-cloudflare-上構建-second-brain-ai-記憶系統","如何在 Cloudflare 上構建 Second Brain AI 記憶系統",[434,1471,1472,1473,1476],{},"Second Brain 記憶系統部署在 ",[441,1474,1475],{},"Cloudflare Workers"," 之上，其提供了全球分佈式、極低延遲的 Serverless 執行基礎設施。這使得在 AI 的推理和決策循環中，檢索記憶（Recall）及寫入等操作能夠以近乎零延遲的體驗執行。",[434,1478,1479,1480,1483,1484,1487,1488,1490],{},"系統使用 ",[441,1481,1482],{},"Workers AI"," 的嵌入（Embedding）模型来生成高維向量。這些嵌入向量儲存在 ",[441,1485,1486],{},"Cloudflare Vectorize"," 中，這是一項經過高度優化、全球分佈式的高性能向量資料庫服務。",[441,1489,1486],{}," 會執行餘弦相似度（Cosine Similarity）搜尋，以精準匹配具有語意相關性的記憶切片。",[434,1492,1493],{},"Second Brain 還內建了智慧的去重與合併機制。只有在內容相似度低於 85% 時，系統才會將其作為新記憶儲存；否則，該內容將被攔截或標記為潛在的重複候選。超過 1,600 字元的長文字會被系統在句子或換行符邊界處進行合理切分，並保持相鄰分片之間有 200 字元的重疊（Overlap），以防丟失上下文語境。隨後，每個文字分片都會被單獨向量化，從而實現極高精度的語意匹配。",[434,1495,1496],{},"系統為 AI 智慧體直接暴露了以下 MCP 工具介面：",[474,1498,1499,1505,1511,1517,1523,1529,1535],{},[477,1500,1501,1504],{},[469,1502,1503],{},"remember","：儲存想法、決策、偏好及專案整體上下文",[477,1506,1507,1510],{},[469,1508,1509],{},"append","：為已有的記憶內容追加新的更新或補充資訊",[477,1512,1513,1516],{},[469,1514,1515],{},"update","：完全替換已有的某條記憶內容",[477,1518,1519,1522],{},[469,1520,1521],{},"recall","：基於語意相似度檢索相關記憶，而非死板的關鍵字精確匹配",[477,1524,1525,1528],{},[469,1526,1527],{},"list_recent","：瀏覽最近儲存的記憶記錄",[477,1530,1531,1534],{},[469,1532,1533],{},"forget","：永久且徹底地刪除某條記憶",[477,1536,1537,1540],{},[469,1538,1539],{},"link\u002Fconnections","：明示關聯不同的記憶節點（V2 版本提供的圖譜功能）",[1147,1542,1544],{"id":1543},"在-cloudflare-上設定-second-brain","在 Cloudflare 上設定 Second Brain",[1151,1546,1547,1565,1572,1579,1586,1593,1604,1611,1614,1621],{},[477,1548,1549,1550,1555,1556,1559,1560,1564],{},"在 ",[481,1551,1554],{"href":1552,"rel":1553},"https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fsecond-brain-cloudflare",[485],"Github 儲存庫"," 頁面，點擊 ",[469,1557,1558],{},"Deploy to Cloudflare"," 按鈕。 [[",[882,1561],{"alt":1562,"src":1563},"GitHub 頁面上突出顯示的 Deploy to Cloudflare 部署按鈕","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fdeploy-to-cloudflare-button.webp","]]",[477,1566,1567,1568],{},"填寫彈出的 Cloudflare Worker 設定表單。\n",[882,1569],{"alt":1570,"src":1571},"Cloudflare Workers 部署設定表單","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-worker-deployment-form.webp",[477,1573,1574,1575],{},"在 Dimensions（維度）輸入 '384'，Metric（度量指標）選擇 'cosine'，然後點擊 Deploy 按鈕。\n",[882,1576],{"alt":1577,"src":1578},"Cloudflare Vectorize 向量資料庫建立與維度設定","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-vectorize-configuration.webp",[477,1580,1581,1582],{},"部署成功後，以下是 Cloudflare Workers 平台中 Second Brain 實例的概覽資訊：\n",[882,1583],{"alt":1584,"src":1585},"已部署的 Second Brain Worker 實例概覽首頁","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-worker-second-brain-overview.webp",[477,1587,1588,1589],{},"點擊 'Settings'（設定），然後點擊 'AUTH_TOKEN' 環境變數旁的編輯圖示，以建立一條高強度的存取權杖（Token）：\n",[882,1590],{"alt":1591,"src":1592},"Cloudflare Worker 變數設定中高亮顯示的 AUTH_TOKEN","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-worker-auth-token-settings.webp",[477,1594,1595,1596,1600],{},"點擊 'Rotate'（輪換）連結，以便能輸入新的安全值： ",[882,1597],{"alt":1598,"src":1599},"AUTH_TOKEN 變數修改與金鑰輪換介面","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-worker-auth-token-rotate.webp",[882,1601],{"alt":1602,"src":1603},"在 AUTH_TOKEN 值欄位中輸入產生的隨機安全字串","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-worker-auth-token-value-input.webp",[477,1605,1606,1607,1610],{},"在 macOS 終端機中執行 ",[469,1608,1609],{},"openssl rand -base64 32"," 命令來生成一個隨機的安全字串，並將其複製貼上到 'Value' 輸入框中。",[477,1612,1613],{},"點擊 'Deploy' 按鈕，使新設定的 'AUTH_TOKEN' 正式生效。",[477,1615,1616,1617],{},"在瀏覽器中打開您剛剛建立的 Second Brain Worker 存取網域：\n",[882,1618],{"alt":1619,"src":1620},"包含 Bearer Token 輸入欄位收藏的 Second Brain Web 登入介面","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fsecond-brain-web-ui-login.webp",[477,1622,1549,1623,1626],{},[469,1624,1625],{},"Bearer token"," 輸入框中填入剛才建立的 'AUTH_TOKEN'，然後點擊 'Connect' 按鈕登入 Web 主控台。",[1147,1628,1630],{"id":1629},"透過-mcp-協定整合-claude-desktop","透過 MCP 協定整合 Claude Desktop",[1151,1632,1633,1640,1647],{},[477,1634,1635,1636],{},"在 Claude Desktop 用戶端中點擊 'Customize'（自訂）按鈕。\n",[882,1637],{"alt":1638,"src":1639},"Claude Desktop 介面中指向 Customize 自訂按鈕的位置","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-customize-button.webp",[477,1641,1642,1643],{},"點擊 'Developer'（開發者）選項，手動編輯本地的 MCP 設定檔：\n",[882,1644],{"alt":1645,"src":1646},"Claude Desktop 開發者設定選單中用於開啟 MCP 設定檔的選項","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-developer-menu.webp",[477,1648,1549,1649,1652,1653,1656],{},[469,1650,1651],{},"claude_desktop_config.json"," 的 ",[469,1654,1655],{},"mcpServers"," 欄位中加入以下設定程式碼區塊：",[495,1658,1662],{"className":1659,"code":1660,"language":1661,"meta":424,"style":424},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","    \"second-brain\": {\n      \"command\": \"npx\",\n      \"args\": [\n        \"mcp-remote\",\n        \"https:\u002F\u002F\u003Cyour-worker-url>\u002Fmcp\",\n        \"--header\",\n        \"Authorization: Bearer \u003Cyour-token>\"\n      ]\n    }\n","json",[469,1663,1664,1682,1706,1720,1732,1743,1754,1764,1769],{"__ignoreMap":424},[503,1665,1666,1669,1672,1675,1679],{"class":505,"line":506},[503,1667,1668],{"class":1071},"    \"",[503,1670,1671],{"class":1075},"second-brain",[503,1673,1674],{"class":1071},"\"",[503,1676,1678],{"class":1677},"sTEyZ",": ",[503,1680,1681],{"class":1071},"{\n",[503,1683,1684,1687,1691,1693,1695,1698,1701,1703],{"class":505,"line":512},[503,1685,1686],{"class":1071},"      \"",[503,1688,1690],{"class":1689},"spNyl","command",[503,1692,1674],{"class":1071},[503,1694,1072],{"class":1071},[503,1696,1697],{"class":1071}," \"",[503,1699,1700],{"class":1075},"npx",[503,1702,1674],{"class":1071},[503,1704,1705],{"class":1071},",\n",[503,1707,1708,1710,1713,1715,1717],{"class":505,"line":518},[503,1709,1686],{"class":1071},[503,1711,1712],{"class":1689},"args",[503,1714,1674],{"class":1071},[503,1716,1072],{"class":1071},[503,1718,1719],{"class":1071}," [\n",[503,1721,1722,1725,1728,1730],{"class":505,"line":524},[503,1723,1724],{"class":1071},"        \"",[503,1726,1727],{"class":1075},"mcp-remote",[503,1729,1674],{"class":1071},[503,1731,1705],{"class":1071},[503,1733,1734,1736,1739,1741],{"class":505,"line":530},[503,1735,1724],{"class":1071},[503,1737,1738],{"class":1075},"https:\u002F\u002F\u003Cyour-worker-url>\u002Fmcp",[503,1740,1674],{"class":1071},[503,1742,1705],{"class":1071},[503,1744,1745,1747,1750,1752],{"class":505,"line":536},[503,1746,1724],{"class":1071},[503,1748,1749],{"class":1075},"--header",[503,1751,1674],{"class":1071},[503,1753,1705],{"class":1071},[503,1755,1756,1758,1761],{"class":505,"line":542},[503,1757,1724],{"class":1071},[503,1759,1760],{"class":1075},"Authorization: Bearer \u003Cyour-token>",[503,1762,1763],{"class":1071},"\"\n",[503,1765,1766],{"class":505,"line":548},[503,1767,1768],{"class":1071},"      ]\n",[503,1770,1771],{"class":505,"line":554},[503,1772,1773],{"class":1071},"    }\n",[434,1775,1776,1780,1781],{},[882,1777],{"alt":1778,"src":1779},"包含 Second Brain 遠端服務的 Claude Desktop MCP 設定檔","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-mcp-config-json.webp","\n4. 重啟 Claude Desktop 並檢查 'Local MCP servers' 列表，狀態應顯示為 'running'（運行中）。\n",[882,1782],{"alt":1783,"src":1784},"Claude Desktop 用戶端中顯示為執行（running）狀態的的 Second Brain MCP 服務","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-mcp-status-running.webp",[1147,1786,1788],{"id":1787},"透過-mcp-協定整合-claude-code","透過 MCP 協定整合 Claude Code",[474,1790,1791],{},[477,1792,1793],{},"在終端機中執行以下命令以新增該遠端 MCP 服務：",[495,1795,1799],{"className":1796,"code":1797,"language":1798,"meta":424,"style":424},"language-shell shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","claude mcp add --transport http second-brain https:\u002F\u002F\u003Cyour-worker-url>\u002Fmcp\n","shell",[469,1800,1801],{"__ignoreMap":424},[503,1802,1803,1806,1809,1812,1815,1818,1821,1824,1827,1830,1833,1836],{"class":505,"line":506},[503,1804,1805],{"class":1061},"claude",[503,1807,1808],{"class":1075}," mcp",[503,1810,1811],{"class":1075}," add",[503,1813,1814],{"class":1075}," --transport",[503,1816,1817],{"class":1075}," http",[503,1819,1820],{"class":1075}," second-brain",[503,1822,1823],{"class":1075}," https:\u002F\u002F",[503,1825,1826],{"class":1071},"\u003C",[503,1828,1829],{"class":1075},"your-worker-ur",[503,1831,1832],{"class":1677},"l",[503,1834,1835],{"class":1071},">",[503,1837,1838],{"class":1075},"\u002Fmcp\n",[474,1840,1841,1847],{},[477,1842,1843,1844,490],{},"Claude Code 會自動偵測到該端點需要 OAuth 身份驗證，並在您的預設瀏覽器中打開登入頁面，供您輸入並驗證剛才建立的 ",[469,1845,1846],{},"AUTH_TOKEN",[477,1848,1849,1850,1853,1854,1857,1858,1863],{},"在本地的 ",[469,1851,1852],{},"~\u002F.claude"," 目錄下建立 ",[469,1855,1856],{},"CLAUDE.md"," 檔案，並將 ",[481,1859,1862],{"href":1860,"rel":1861},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare\u002Fblob\u002Fmain\u002FAI_Instructions\u002FCLAUDE_INSTRUCTIONS.md",[485],"CLAUDE_INSTRUCTIONS.md"," 檔案中的引導詞和規則完整寫入其中。",[1147,1865,1867],{"id":1866},"透過-mcp-協定整合-gemini-cli","透過 MCP 協定整合 Gemini CLI",[1151,1869,1870],{},[477,1871,1872],{},"将以下 MCP 設定資訊加入您本地的 '.\u002F.gemini\u002Fsettings.json' 檔案：",[495,1874,1876],{"className":1659,"code":1875,"language":1661,"meta":424,"style":424},"    \"second-brain\": {\n      \"httpUrl\": \"https:\u002F\u002F\u003Cyour-worker-url>\u002Fmcp\",\n      \"oauth\": {\n        \"enabled\": true\n      }\n    }\n",[469,1877,1878,1890,1909,1923,1937,1942],{"__ignoreMap":424},[503,1879,1880,1882,1884,1886,1888],{"class":505,"line":506},[503,1881,1668],{"class":1071},[503,1883,1671],{"class":1075},[503,1885,1674],{"class":1071},[503,1887,1678],{"class":1677},[503,1889,1681],{"class":1071},[503,1891,1892,1894,1897,1899,1901,1903,1905,1907],{"class":505,"line":512},[503,1893,1686],{"class":1071},[503,1895,1896],{"class":1689},"httpUrl",[503,1898,1674],{"class":1071},[503,1900,1072],{"class":1071},[503,1902,1697],{"class":1071},[503,1904,1738],{"class":1075},[503,1906,1674],{"class":1071},[503,1908,1705],{"class":1071},[503,1910,1911,1913,1916,1918,1920],{"class":505,"line":518},[503,1912,1686],{"class":1071},[503,1914,1915],{"class":1689},"oauth",[503,1917,1674],{"class":1071},[503,1919,1072],{"class":1071},[503,1921,1922],{"class":1071}," {\n",[503,1924,1925,1927,1930,1932,1934],{"class":505,"line":524},[503,1926,1724],{"class":1071},[503,1928,1929],{"class":1061},"enabled",[503,1931,1674],{"class":1071},[503,1933,1072],{"class":1071},[503,1935,1936],{"class":1071}," true\n",[503,1938,1939],{"class":505,"line":530},[503,1940,1941],{"class":1071},"      }\n",[503,1943,1944],{"class":505,"line":536},[503,1945,1773],{"class":1071},[1151,1947,1948],{"start":512},[477,1949,1950],{},"啟動 Gemini CLI 用戶端。",[1147,1952,1954],{"id":1953},"在不同-ai-智慧體中測試-second-brain-效果","在不同 AI 智慧體中測試 Second Brain 效果",[1151,1956,1957,1967,1981],{},[477,1958,1549,1959,1962,1963],{},[441,1960,1961],{},"Claude Desktop"," 中，如果我們只是進行簡單的品牌色調偏好設定，此時預設並不會呼叫外部的 Second Brain 服務：\n",[882,1964],{"alt":1965,"src":1966},"在未啟用 Second Brain 記憶層時在 Claude Desktop 中進行的首次偏好設定測試","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-first-run-brand-palette.webp",[477,1968,1969,1970,1972,1973,1976,1977],{},"如果我們只是輸入 'remember' 等常規詞，由於其尚未觸發特定提示詞引導，",[441,1971,1961],{}," 此時僅會呼叫本地內建的 ",[469,1974,1975],{},"memory_user-edits"," 工具，並不會同步到雲端的持久化記憶層。\n",[882,1978],{"alt":1979,"src":1980},"Claude Desktop 預設呼叫本地內建使用者編輯工具而忽略雲端 Second Brain","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-remember-built-in-tool-fallback.webp",[477,1982,1983,1984,1987],{},"而當我们在配置了規則引導的 ",[441,1985,1986],{},"Claude Code"," 終端機中，輸入以下具體指令時，系統便成功地在背景觸發並呼叫了 Second Brain 工具：",[495,1989,1994],{"className":1990,"code":1992,"language":1993},[1991],"language-text","Remember Our brand palette uses `#1a1a2e` as primary, `#16213e` as secondary, and `#e94560` as accent. Never use pure black.\"\n","text",[469,1995,1992],{"__ignoreMap":424},[434,1997,1998,2002,2003,2006,2007,2011,2012,2015,2016,2018,2019,2023,2024,2027,2028,2011,2032],{},[882,1999],{"alt":2000,"src":2001},"Claude Code 終端機視窗顯示成功觸發並寫入 Second Brain 遠端記憶","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-code-second-brain-mcp-called.webp","\n4. 登入 ",[441,2004,2005],{},"Cloudflare Workers 主控台"," 查看 Second Brain 的資料庫，確認這些顏色資訊已成功同步並儲存在雲端：\n",[882,2008],{"alt":2009,"src":2010},"在 Second Brain 主控台 Web UI 中驗證已成功儲存的品牌色設定資料","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fsecond-brain-web-ui-color-verification.webp","\n- ",[1184,2013,2014],{},"Claude Code 之所以能夠自動無縫工作，得益於專案目錄下的 CLAUDE_INSTRUCTIONS.md 檔案。該檔案讓智慧體能夠理解並關聯包含 'Second Brain' 關鍵字的記憶流程。","\n5. 在 ",[441,2017,1961],{}," 中若想達到相同效果，我們需要在提示詞中顯式提及 'Second Brain' 相關的指引，以強制智慧體讀取或寫入這一持久化記憶圖層。\n",[882,2020],{"alt":2021,"src":2022},"在提示詞中顯式提及 'Second Brain' 關鍵字以觸發遠端記憶讀寫","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-second-brain-explicit-trigger.webp","\n6. 同樣地，在 ",[441,2025,2026],{},"Gemini CLI"," 互動中，我們也需要提到 'Second Brain' 關鍵字，以喚醒並觸發其對應的遠端 MCP 工具。\n",[882,2029],{"alt":2030,"src":2031},"Gemini CLI 終端機命令列互動中成功觸發 Second Brain 讀寫","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fgemini-cli-second-brain-trigger.webp",[1184,2033,2034],{},"如果您仿照 CLAUDE_INSTRUCTIONS.md 的做法，在本地的 GEMINI.md 檔案中添加類似的上下文引導，AI 便可在背景靜默呼叫 Second Brain 記憶層，不再需要您每次都手動輸入觸發關鍵字。",[1147,2036,2037],{"id":2037},"瀏覽器擴充功能与快捷剪輯",[474,2039,2040,2043],{},[477,2041,2042],{},"系統為 Chrome、Firefox 和 Microsoft Edge 瀏覽器提供了官方外掛程式支援。",[477,2044,2045,2046],{},"透過該外掛程式，您可以非常快捷地完成以下操作：\n",[474,2047,2048,2054,2060],{},[477,2049,2050,2053],{},[441,2051,2052],{},"網頁一鍵剪輯"," — 一鍵將當前頁面的網頁標題與 URL 網址快捷歸檔到您的 Second Brain 中。",[477,2055,2056,2059],{},[441,2057,2058],{},"選取文字摘要剪輯"," — 選取網頁中的任意精彩段落或技術細節後點擊剪輯，該摘錄便會配合網頁標題和 URL 被一併儲存。",[477,2061,2062,2065,2066,2069],{},[441,2063,2064],{},"自由文字速記"," — 在儲存前直接在功能彈窗中輸入額外的補充上下文，或直接附帶 ",[469,2067,2068],{},"#標記","；這些標記會被系統自動識別並提取。",[1147,2071,2073],{"id":2072},"透過-obsidian-外掛程式同步個人本地知識庫","透過 Obsidian 外掛程式同步個人本地知識庫",[474,2075,2076,2079],{},[477,2077,2078],{},"系統提供了一個 Obsidian 專屬外掛程式，支援將您本地 Obsidian Vault（保險庫）中的特定筆記完美同步至 Cloudflare 端自託管的 Second Brain 記憶中心。",[477,2080,2081],{},"透過設定特定的同步標記，您可以精準控制哪些筆記能夠寫入您的持久化 AI 上下文庫中。",[2083,2084,2086],"h4",{"id":2085},"安装-obsidian-外掛程式","安装 Obsidian 外掛程式",[1151,2088,2089,2103,2114,2121],{},[477,2090,2091,2092,2095,2096,2099],{},"啟動 Obsidian 用戶端 → 點擊 ",[503,2093,2094],{},"Settings（設定）"," → ",[503,2097,2098],{},"Community Plugins（第三方外掛程式）",[882,2100],{"alt":2101,"src":2102},"Obsidian 系統設定面板中指向第三方社群外掛程式的入口","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-settings-community-plugins.webp",[477,2104,2105,2106,2109,2110],{},"點擊 ",[503,2107,2108],{},"Browse（瀏覽）"," 按鈕。\n",[882,2111],{"alt":2112,"src":2113},"Obsidian 第三方外掛程式市集並高亮顯示的 Browse 瀏覽按鈕","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-community-plugins-browse.webp",[477,2115,2116,2117],{},"檢索關鍵詞 'Second Brain Sync'。\n",[882,2118],{"alt":2119,"src":2120},"在 Obsidian 第三方外掛程式市集中搜尋 Second Brain Sync 外掛程式","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-community-plugins-search-second-brain.webp",[477,2122,2123,2124],{},"點擊 'Install' 進行安裝，然後點擊 'Enable' 啟用該外掛程式。\n",[882,2125],{"alt":2126,"src":2127},"在 Obsidian 中點擊安裝並啟用 Second Brain Sync 外掛程式","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-plugin-install-and-enable.webp",[2083,2129,2131],{"id":2130},"設定-obsidian-外掛程式","設定 Obsidian 外掛程式",[1151,2133,2134,2144,2151,2158,2165,2175],{},[477,2135,2136,2137,2139,2140,2143],{},"進入 Obsidian 用戶端 ",[503,2138,2094],{}," → 選取 ",[503,2141,2142],{},"Second Brain Sync"," 外掛程式設定頁面：",[477,2145,2146,2147],{},"準確填寫您的 Worker 的端點「URL」和剛才建立的「Auth token（身份權杖）」：\n",[882,2148],{"alt":2149,"src":2150},"在 Obsidian 外掛程式設定頁面中輸入 Worker URL 和 AUTH_TOKEN 身份憑證","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-plugin-configuration-credentials.webp",[477,2152,2153,2154],{},"點擊 'Test' 按鈕來驗證網路連線是否暢通：\n",[882,2155],{"alt":2156,"src":2157},"Obsidian 外掛程式連線測試傳回成功（Success）提示","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-plugin-connection-test-success.webp",[477,2159,2160,2161],{},"設定具體的同步策略。設定您的同步標記「Sync tag」並開啟「Auto-sync on save（儲存時自動同步）」功能：\n",[882,2162],{"alt":2163,"src":2164},"在 Obsidian 外掛程式中設定特定同步標記並啟用儲存時自動同步","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-plugin-sync-behavior-settings.webp",[477,2166,2167,2168,2170,2171],{},"在 Obsidian 知識庫中新建一篇筆記，並為其附帶您設定好的同步標記（例如： ",[469,2169,1671],{},"）：\n",[882,2172],{"alt":2173,"src":2174},"在 Obsidian 中建立一篇帶有 'second-brain' 標籤的待同步本地筆記","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-note-with-sync-tag.webp",[477,2176,2177,2178],{},"筆記儲存後，其內容已成功觸發並自動同步到在 Cloudflare 上運行的自託管 Second Brain 實例中：\n",[882,2179],{"alt":2180,"src":2181},"在雲端 Second Brain 主控台 Web UI 中驗證已成功同步過來的 Obsidian 筆記","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fsecond-brain-web-ui-synced-note-verification.webp",[429,2183,2184],{"id":2184},"總結與展望",[434,2186,2187],{},"Second Brain 記憶系統為困擾當前 AI 生態的最大痛點之一 —— 長期上下文遺忘與記憶斷層，提供了一套極為優雅的開源解決方案。透過將自託管專案與 Cloudflare Workers 彈性、全球分佈的 Serverless 基礎設施深度結合，我們得以在邊緣網路上輕鬆架設起一條低延遲、高回應速度的個人語意記憶閘道。得益於 MCP 這一開放的標準，這條記憶脈絡如今已能無縫流動、並被移植共享於各種主流的 AI 助手和開發終端之間。",[434,2189,2190],{},"Obsidian 專屬同步外掛程式的加入，更是將這套架構完美融合進了個人日常的知識管理（PKM）流程。您平時隨手記錄的雜亂卡片或開發速記，能被有選擇地提煉並重構，轉化為可被 AI 完美解析的結構化上下文。",[434,2192,2193],{},"將私有化部署、高精度的語意向量搜尋以及開放式的 MCP 整合標準相融合，Second Brain 不僅僅是一層記憶的外掛，它正向我們展示著一個由使用者個人掌握核心資料所有權，安全、獨立、互聯的未來 Agent 生態系統基石。",[429,2195,2196],{"id":952},"參考資料：",[474,2198,2199,2205,2211,2218,2225],{},[477,2200,2201],{},[481,2202,2203],{"href":2203,"rel":2204},"https:\u002F\u002Fwww.thesecondbrain.dev\u002F",[485],[477,2206,2207],{},[481,2208,2209],{"href":2209,"rel":2210},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare\u002Fwiki\u002FHow-It-Works",[485],[477,2212,2213],{},[481,2214,2217],{"href":2215,"rel":2216},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare\u002Fwiki\u002FConnect-to-AI-Clients",[485],"Connect to AI Clients",[477,2219,2220],{},[481,2221,2224],{"href":2222,"rel":2223},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare\u002Fwiki\u002FObsidian-Plugin",[485],"Second Brain Obsidian Plugin",[477,2226,2227],{},[481,2228,2229],{"href":2229,"rel":2230},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-obsidian-plugin",[485],[984,2232,2233],{},"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 pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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}",{"title":424,"searchDepth":512,"depth":518,"links":2235},[2236,2237,2238,2250,2251],{"id":1436,"depth":512,"text":1437},{"id":1446,"depth":512,"text":1447},{"id":1468,"depth":512,"text":1469,"children":2239},[2240,2241,2242,2243,2244,2245,2246],{"id":1543,"depth":518,"text":1544},{"id":1629,"depth":518,"text":1630},{"id":1787,"depth":518,"text":1788},{"id":1866,"depth":518,"text":1867},{"id":1953,"depth":518,"text":1954},{"id":2037,"depth":518,"text":2037},{"id":2072,"depth":518,"text":2073,"children":2247},[2248,2249],{"id":2085,"depth":524,"text":2086},{"id":2130,"depth":524,"text":2131},{"id":2184,"depth":512,"text":2184},{"id":952,"depth":512,"text":2196},[996,1412],"2026-08-07","學習如何利用Cloudflare Workers、Vectorize與MCP協定自行架設AI持久化記憶系統（Second Brain）。在Claude、Gemini與Obsidian之間完美共享上下文。","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002FTW-Use-Cloudflare-as-AI-memory.webp","基於 Cloudflare Workers 和 Vectorize 構建的自託管 AI 持久化記憶系統，支援 MCP 協定與 Obsidian 筆記雙向同步。",{"schemaOrg":2258,"robots":1007,"sitemap":2262},[2259],{"@type":2260,"headline":2261,"description":2254},"TechArticle","基於Cloudflare與MCP協定自行架設AI持久化記憶系統",{"lastmod":2253},{"title":2261,"description":2254,"ogTitle":1431,"ogDescription":2254,"twitterTitle":1431,"twitterDescription":2254},"tw\u002Farticle\u002Fuse-cloudflare-as-ai-memory",[2266,2267,2268,1458,2269],"Cloudflare","MCP","AI 記憶","Obsidian","YPOf86d5u4oQ6tOrox0pT9UIC3Wk6d7rbNYqAotfw5s",[2272,3166,3167],{"id":2273,"title":2274,"author":424,"body":2275,"category":3149,"date":3150,"description":3151,"extension":999,"image":3152,"imageAlt":3153,"isPublished":1002,"meta":3154,"minRead":530,"navigation":1002,"path":363,"seo":3159,"stem":3161,"tags":3162,"updatedAt":3158,"__hash__":3165},"article\u002Ftw\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp.md","教學：使用 Cloudflare WARP 安全地將 Hermes Agent 暴露至私有網路",{"type":426,"value":2276,"toc":3131},[2277,2291,2301,2304,2307,2319,2322,2330,2333,2337,2386,2390,2524,2528,2561,2565,2568,2634,2637,2673,2676,2703,2707,2717,2720,2759,2846,2850,2855,2870,2879,2954,2959,3005,3009,3055,3069,3073,3116,3118,3128],[434,2278,2279,2280,2283,2284,2286,2287,2290],{},"當我們希望透過筆記型電腦、平板或手機等其他設備存取 ",[441,2281,2282],{},"Hermes Agent","，同時又不想將其暴露在公共網際網路上時，這往往是一個普遍的挑戰。利用 ",[441,2285,923],{}," 與 ",[441,2288,2289],{},"Cloudflare Zero Trust","，您可以在無需打開任何防火牆入站連接埠的情況下，將其安全地暴露並在全球範圍內進行存取。",[434,2292,2293,2294,2297,2298,2300],{},"如果您之前已經閱讀並遵循了我們的指南 '",[481,2295,2296],{"href":375},"如何在 Linux VPS 上部署 Hermes Agent","'，那麼您應該大約擁有了一個全天候運行的 Hermes Agent。相比於設定傳統 VPN 帶來的繁瑣步驟，我們將使用 ",[441,2299,923],{}," 用戶端，透過網際網路將 Hermes Agent 暴露到私有網路中。",[429,2302,2303],{"id":2303},"架構解析",[434,2305,2306],{},"此方案涉及的兩個核心組件：",[1151,2308,2309,2314],{},[477,2310,2311,2313],{},[441,2312,2289],{},"：Cloudflare 的雲端儀表板，您可以在此定義路由規則和存取策略。",[477,2315,2316,2318],{},[441,2317,923],{},"：安裝在您的設備（VPS、筆記型電腦、手機）上的用戶端應用程式。它能夠攔截發往私有網路的流量，並安全地進行路由。",[1147,2320,2321],{"id":2321},"前置條件",[474,2323,2324,2327],{},[477,2325,2326],{},"一台已經運行 Hermes Agent 的 VPS（虛擬專屬伺服器）。",[477,2328,2329],{},"一個免費的 Cloudflare 帳號。",[429,2331,2332],{"id":2332},"詳細步驟指南",[1147,2334,2336],{"id":2335},"第-1-步設定-cloudflare-zero-trust","第 1 步：設定 Cloudflare Zero Trust",[1151,2338,2339,2347,2354,2365,2372,2379],{},[477,2340,2341,2342,490],{},"登入您的 ",[481,2343,2346],{"href":2344,"rel":2345},"https:\u002F\u002Fdash.cloudflare.com\u002F",[485],"Cloudflare 儀表板 (Dashboard)",[477,2348,2349,2350],{},"點擊左側選單欄中的 'Zero Trust'。\n",[882,2351],{"alt":2352,"src":2353},"Cloudflare 儀表板左側側邊欄導覽選單中的 Zero Trust 選項","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-left-menu.webp",[477,2355,2356,2357,2360,2361],{},"如果這是您第一次使用，系統會提示您選擇方案（免費版對本教學完全足夠）並為您的團隊命名（例如，",[469,2358,2359],{},"ai-team","）。\n",[882,2362],{"alt":2363,"src":2364},"首次設定 Cloudflare Zero Trust 帳戶並為團隊命名","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-team-setup.webp",[477,2366,2367,2368],{},"點擊 'Access'，然后點擊 'Policies' 來建立存取策略，以定義誰有權限存取網路。\n",[882,2369],{"alt":2370,"src":2371},"Cloudflare Zero Trust Access 策略頁面，顯示新設定的存取規則","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-access-policies-page.webp",[477,2373,2374,2375],{},"點击 'Create new policy'。\n",[882,2376],{"alt":2377,"src":2378},"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",[477,2380,2381,2382],{},"選擇 'Emails' 並在 'Policy rules' 下方輸入您的電子郵件地址。\n",[882,2383],{"alt":2384,"src":2385},"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",[1147,2387,2389],{"id":2388},"第-2-步在-vps-上設定-cloudflare-warp-用戶端","第 2 步：在 VPS 上設定 Cloudflare WARP 用戶端",[1151,2391,2392,2401,2407,2414,2417,2432,2435,2517],{},[477,2393,2394,2395,832,2398,490],{},"在 VPS 終端機中執行 ",[469,2396,2397],{},"sudo apt update",[469,2399,2400],{},"sudo apt install cloudflare-warp",[477,2402,2394,2403,2406],{},[469,2404,2405],{},"warp-cli registration new \u003CTEAM-NAME>","，該指令將輸出一個 URL。",[477,2408,2409,2410,2413],{},"複製輸出的 URL（其格式類似於 ",[469,2411,2412],{},"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fwarp","），並將其貼上到瀏覽器中進行認證。",[477,2415,2416],{},"由於前面的策略設定中使用了電子郵件認證，請輸入您的電子郵件以進行認證。",[477,2418,2419,2420,2423,2424,2427,2428,2431],{},"當瀏覽器中顯示 '",[441,2421,2422],{},"Success","' 頁面後，右鍵點擊藍色的 '",[441,2425,2426],{},"Open Cloudflare WARP","' 按鈕並選擇「",[441,2429,2430],{},"檢查 (Inspect)","」。",[477,2433,2434],{},"複製該按鈕連結中的長 Token 字串。",[477,2436,2394,2437,2440,2441,2443,2444],{},[469,2438,2439],{},"warp-cli --accept-tos registration token \"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fauth?token=\u003Ccopied_token>\"","，將您的 VPS 連接到 Cloudflare Zero Trust。",[879,2442],{},"如果在 Ubuntu 26 上遇到 'Error: Failed to communicate with the WARP API'，請執行以下命令：",[495,2445,2449],{"className":2446,"code":2447,"language":2448,"meta":424,"style":424},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","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","bash",[469,2450,2451,2465,2469,2475,2486,2490,2495],{"__ignoreMap":424},[503,2452,2453,2456,2459,2462],{"class":505,"line":506},[503,2454,2455],{"class":1061},"sudo",[503,2457,2458],{"class":1075}," systemctl",[503,2460,2461],{"class":1075}," restart",[503,2463,2464],{"class":1075}," warp-svc.service\n",[503,2466,2467],{"class":505,"line":512},[503,2468,1095],{"emptyLinePlaceholder":1002},[503,2470,2471],{"class":505,"line":518},[503,2472,2474],{"class":2473},"sHwdD","# Check status\n",[503,2476,2477,2479,2481,2484],{"class":505,"line":524},[503,2478,2455],{"class":1061},[503,2480,2458],{"class":1075},[503,2482,2483],{"class":1075}," status",[503,2485,2464],{"class":1075},[503,2487,2488],{"class":505,"line":530},[503,2489,1095],{"emptyLinePlaceholder":1002},[503,2491,2492],{"class":505,"line":536},[503,2493,2494],{"class":2473},"# Run the warp-cli registration token again\n",[503,2496,2497,2500,2503,2506,2509,2512,2515],{"class":505,"line":542},[503,2498,2499],{"class":1061},"warp-cli",[503,2501,2502],{"class":1075}," --accept-tos",[503,2504,2505],{"class":1075}," registration",[503,2507,2508],{"class":1075}," token",[503,2510,2511],{"class":1071},"   \"",[503,2513,2514],{"class":1075},"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fauth?token=\u003Ccopied_token>",[503,2516,1763],{"class":1071},[477,2518,2519,2520],{},"回到 Cloudflare Zero Trust 儀表板，點擊 'Devices'。您現在應該能看到您的 VPS 設備。\n",[882,2521],{"alt":2522,"src":2523},"Zero Trust 設備儀表板，確認 Linux VPS 已成功連線","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-devices-vps-connected.webp",[1147,2525,2527],{"id":2526},"第-3-步設定流量路由","第 3 步：設定流量路由",[1151,2529,2530,2537,2544,2551],{},[477,2531,2532,2533],{},"在 Devices 儀表板中點擊您 VPS 設備的設定檔。\n",[882,2534],{"alt":2535,"src":2536},"存取已登冊 VPS 設備的詳細資訊與分割通道設定","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-device-profile.webp",[477,2538,2539,2540],{},"向下捲動至 'Split Tunnels' 部分。\n",[882,2541],{"alt":2542,"src":2543},"VPS 設備設定檔下的 Split Tunnels 分割通道區段","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-split-tunnels-section.webp",[477,2545,2546,2547],{},"點擊 'Manage' 按鈕，並按照下圖設定。如有需要請替換相應的 IP 位址。\n",[882,2548],{"alt":2549,"src":2550},"在 Cloudflare 設定中管理分割通道 IP 與主機名稱排除規則","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-manage-split-tunnels.webp",[477,2552,2553,2554,832,2557,2560],{},"暴露 ",[469,2555,2556],{},"address",[469,2558,2559],{},"host"," 會將發往您服務的流量路由到該私有網路內。",[1147,2562,2564],{"id":2563},"第-4-步設定-vps-防火牆","第 4 步：設定 VPS 防火牆",[434,2566,2567],{},"啟用防火牆，僅允許 '100.96.0.0\u002F12' 子網的流量通過，並阻擋其他所有公共入站存取。",[495,2569,2571],{"className":2446,"code":2570,"language":2448,"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",[469,2572,2573,2586,2603,2617],{"__ignoreMap":424},[503,2574,2575,2577,2580,2583],{"class":505,"line":506},[503,2576,2455],{"class":1061},[503,2578,2579],{"class":1075}," ufw",[503,2581,2582],{"class":1075}," enable",[503,2584,2585],{"class":1677}," \n",[503,2587,2588,2590,2592,2595,2598,2601],{"class":505,"line":512},[503,2589,2455],{"class":1061},[503,2591,2579],{"class":1075},[503,2593,2594],{"class":1075}," default",[503,2596,2597],{"class":1075}," allow",[503,2599,2600],{"class":1075}," outgoing",[503,2602,2585],{"class":1677},[503,2604,2605,2607,2609,2611,2614],{"class":505,"line":518},[503,2606,2455],{"class":1061},[503,2608,2579],{"class":1075},[503,2610,2594],{"class":1075},[503,2612,2613],{"class":1075}," deny",[503,2615,2616],{"class":1075}," incoming\n",[503,2618,2619,2621,2623,2625,2628,2631],{"class":505,"line":524},[503,2620,2455],{"class":1061},[503,2622,2579],{"class":1075},[503,2624,2597],{"class":1075},[503,2626,2627],{"class":1075}," in",[503,2629,2630],{"class":1075}," from",[503,2632,2633],{"class":1075}," 100.96.0.0\u002F12\n",[434,2635,2636],{},"允許回環網路 (loopback) 的流量，避免導致本地服務異常：",[495,2638,2640],{"className":2446,"code":2639,"language":2448,"meta":424,"style":424},"sudo ufw allow in on lo\nsudo ufw allow out on lo\n",[469,2641,2642,2658],{"__ignoreMap":424},[503,2643,2644,2646,2648,2650,2652,2655],{"class":505,"line":506},[503,2645,2455],{"class":1061},[503,2647,2579],{"class":1075},[503,2649,2597],{"class":1075},[503,2651,2627],{"class":1075},[503,2653,2654],{"class":1075}," on",[503,2656,2657],{"class":1075}," lo\n",[503,2659,2660,2662,2664,2666,2669,2671],{"class":505,"line":512},[503,2661,2455],{"class":1061},[503,2663,2579],{"class":1075},[503,2665,2597],{"class":1075},[503,2667,2668],{"class":1075}," out",[503,2670,2654],{"class":1075},[503,2672,2657],{"class":1075},[434,2674,2675],{},"重新載入防火牆規則並驗證狀態：",[495,2677,2679],{"className":2446,"code":2678,"language":2448,"meta":424,"style":424},"sudo ufw reload \nsudo ufw status verbose\n",[469,2680,2681,2692],{"__ignoreMap":424},[503,2682,2683,2685,2687,2690],{"class":505,"line":506},[503,2684,2455],{"class":1061},[503,2686,2579],{"class":1075},[503,2688,2689],{"class":1075}," reload",[503,2691,2585],{"class":1677},[503,2693,2694,2696,2698,2700],{"class":505,"line":512},[503,2695,2455],{"class":1061},[503,2697,2579],{"class":1075},[503,2699,2483],{"class":1075},[503,2701,2702],{"class":1075}," verbose\n",[1147,2704,2706],{"id":2705},"第-5-步將-hermes-agent-暴露至私有網路","第 5 步：將 Hermes Agent 暴露至私有網路",[434,2708,2709,2710,2713,2714,490],{},"我們將把 ",[441,2711,2712],{},"Hermes Agent Web Dashboard"," 暴露至私有網路，並使用預設的認證提供商 ",[441,2715,2716],{},"Nous Research",[2083,2718,2719],{"id":2719},"設定認證提供商",[1151,2721,2722,2731,2738,2745,2752],{},[477,2723,2724,2725,2730],{},"前往 ",[481,2726,2729],{"href":2727,"rel":2728},"https:\u002F\u002Fportal.nousresearch.com",[485],"portal.nousresearch.com"," 註冊一個帳號。",[477,2732,2733,2734],{},"選擇 'Local Dashboards'。\n",[882,2735],{"alt":2736,"src":2737},"在 Nous Research 入口網站中選擇 Local Dashboards 本地儀表板選項","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fnous-portal-local-dashboards-selection.webp",[477,2739,2740,2741],{},"點擊 'Register Dashboard'。\n",[882,2742],{"alt":2743,"src":2744},"點擊 Register Dashboard 按鈕以建立新的儀表板項目","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fnous-portal-register-dashboard.webp",[477,2746,2747,2748],{},"將 VPS 在私有網路中的 IP 位址填入 'Dashboard redirect URI' 並點擊 'Save'。\n",[882,2749],{"alt":2750,"src":2751},"在 Nous Research 入口網站中註冊私有網路 VPS IP 位址作為重新導向 URI","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fnous-portal-register-redirect-uri.webp",[477,2753,2754,2755,2758],{},"複製 'OAuth client ID' 並將其貼上到您的 ",[469,2756,2757],{},"config.yaml"," 檔案中：",[495,2760,2762],{"className":1052,"code":2761,"language":1054,"meta":424,"style":424},"dashboard:\n  theme: default\n  show_token_analytics: false\n  oauth:\n    client_id: agent:cmq02x7ha0002jk0ba3kfnb\n    portal_url: https:\u002F\u002Fportal.nousresearch.com\n  basic_auth:\n    username: ''\n    password_hash: ''\n",[469,2763,2764,2772,2782,2793,2800,2810,2820,2827,2837],{"__ignoreMap":424},[503,2765,2766,2769],{"class":505,"line":506},[503,2767,2768],{"class":1067},"dashboard",[503,2770,2771],{"class":1071},":\n",[503,2773,2774,2777,2779],{"class":505,"line":512},[503,2775,2776],{"class":1067},"  theme",[503,2778,1072],{"class":1071},[503,2780,2781],{"class":1075}," default\n",[503,2783,2784,2787,2789],{"class":505,"line":518},[503,2785,2786],{"class":1067},"  show_token_analytics",[503,2788,1072],{"class":1071},[503,2790,2792],{"class":2791},"sfNiH"," false\n",[503,2794,2795,2798],{"class":505,"line":524},[503,2796,2797],{"class":1067},"  oauth",[503,2799,2771],{"class":1071},[503,2801,2802,2805,2807],{"class":505,"line":530},[503,2803,2804],{"class":1067},"    client_id",[503,2806,1072],{"class":1071},[503,2808,2809],{"class":1075}," agent:cmq02x7ha0002jk0ba3kfnb\n",[503,2811,2812,2815,2817],{"class":505,"line":536},[503,2813,2814],{"class":1067},"    portal_url",[503,2816,1072],{"class":1071},[503,2818,2819],{"class":1075}," https:\u002F\u002Fportal.nousresearch.com\n",[503,2821,2822,2825],{"class":505,"line":542},[503,2823,2824],{"class":1067},"  basic_auth",[503,2826,2771],{"class":1071},[503,2828,2829,2832,2834],{"class":505,"line":548},[503,2830,2831],{"class":1067},"    username",[503,2833,1072],{"class":1071},[503,2835,2836],{"class":1071}," ''\n",[503,2838,2839,2842,2844],{"class":505,"line":554},[503,2840,2841],{"class":1067},"    password_hash",[503,2843,1072],{"class":1071},[503,2845,2836],{"class":1071},[2083,2847,2849],{"id":2848},"使用-systemd-確保-hermes-dashboard-開機自啟","使用 Systemd 確保 Hermes Dashboard 開機自啟",[1151,2851,2852],{},[477,2853,2854],{},"建立服務檔案：",[495,2856,2858],{"className":1796,"code":2857,"language":1798,"meta":424,"style":424},"sudo nano \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-dashboard.service\n",[469,2859,2860],{"__ignoreMap":424},[503,2861,2862,2864,2867],{"class":505,"line":506},[503,2863,2455],{"class":1061},[503,2865,2866],{"class":1075}," nano",[503,2868,2869],{"class":1075}," \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-dashboard.service\n",[1151,2871,2872],{"start":512},[477,2873,2874,2875,2878],{},"貼上以下設定，確保 ",[469,2876,2877],{},"--host 0.0.0.0"," 包含在指令中：",[495,2880,2884],{"className":2881,"code":2882,"language":2883,"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",[469,2885,2886,2891,2896,2901,2905,2910,2915,2920,2925,2930,2935,2940,2944,2949],{"__ignoreMap":424},[503,2887,2888],{"class":505,"line":506},[503,2889,2890],{},"[Unit]\n",[503,2892,2893],{"class":505,"line":512},[503,2894,2895],{},"Description=Hermes Dashboard\n",[503,2897,2898],{"class":505,"line":518},[503,2899,2900],{},"After=network.target\n",[503,2902,2903],{"class":505,"line":524},[503,2904,1095],{"emptyLinePlaceholder":1002},[503,2906,2907],{"class":505,"line":530},[503,2908,2909],{},"[Service]\n",[503,2911,2912],{"class":505,"line":536},[503,2913,2914],{},"User=hermes\n",[503,2916,2917],{"class":505,"line":542},[503,2918,2919],{},"WorkingDirectory=\u002Fhome\u002Fhermes\n",[503,2921,2922],{"class":505,"line":548},[503,2923,2924],{},"ExecStart=\u002Fhome\u002Fhermes\u002F.local\u002Fbin\u002Fhermes dashboard --host 0.0.0.0\n",[503,2926,2927],{"class":505,"line":554},[503,2928,2929],{},"Restart=always\n",[503,2931,2932],{"class":505,"line":560},[503,2933,2934],{},"RestartSec=10\n",[503,2936,2937],{"class":505,"line":566},[503,2938,2939],{},"Environment=PATH=\u002Fhome\u002Fhermes\u002F.local\u002Fbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fbin:\u002Fbin\n",[503,2941,2942],{"class":505,"line":572},[503,2943,1095],{"emptyLinePlaceholder":1002},[503,2945,2946],{"class":505,"line":578},[503,2947,2948],{},"[Install]\n",[503,2950,2951],{"class":505,"line":584},[503,2952,2953],{},"WantedBy=multi-user.target\n",[1151,2955,2956],{"start":518},[477,2957,2958],{},"啟用並啟動服务：",[495,2960,2962],{"className":1796,"code":2961,"language":1798,"meta":424,"style":424},"sudo systemctl daemon-reload\nsudo systemctl enable hermes-dashboard\nsudo systemctl start hermes-dashboard\nsudo systemctl status hermes-dashboard\n",[469,2963,2964,2973,2984,2995],{"__ignoreMap":424},[503,2965,2966,2968,2970],{"class":505,"line":506},[503,2967,2455],{"class":1061},[503,2969,2458],{"class":1075},[503,2971,2972],{"class":1075}," daemon-reload\n",[503,2974,2975,2977,2979,2981],{"class":505,"line":512},[503,2976,2455],{"class":1061},[503,2978,2458],{"class":1075},[503,2980,2582],{"class":1075},[503,2982,2983],{"class":1075}," hermes-dashboard\n",[503,2985,2986,2988,2990,2993],{"class":505,"line":518},[503,2987,2455],{"class":1061},[503,2989,2458],{"class":1075},[503,2991,2992],{"class":1075}," start",[503,2994,2983],{"class":1075},[503,2996,2997,2999,3001,3003],{"class":505,"line":524},[503,2998,2455],{"class":1061},[503,3000,2458],{"class":1075},[503,3002,2483],{"class":1075},[503,3004,2983],{"class":1075},[1147,3006,3008],{"id":3007},"第-6-步在桌面上安裝-cloudflare-warp-用戶端","第 6 步：在桌面上安裝 Cloudflare WARP 用戶端",[1151,3010,3011,3020,3023,3030,3037,3044],{},[477,3012,3013,3014,3019],{},"從 ",[481,3015,3018],{"href":3016,"rel":3017},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fwarp-client\u002Fget-started\u002F",[485],"Cloudflare 官網"," 下載 Cloudflare WARP 用戶端。",[477,3021,3022],{},"安裝完成後打開並執行 Cloudflare WARP 用戶端。",[477,3024,3025,3026],{},"依提示登入。\n",[882,3027],{"alt":3028,"src":3029},"桌上型電腦上的 Cloudflare WARP 用戶端登入提示","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-warp-desktop-login-prompt.webp",[477,3031,3032,3033],{},"登入成功後會顯示 'Success' 頁面。\n",[882,3034],{"alt":3035,"src":3036},"在桌上型電腦登入 Cloudflare Zero Trust 後的驗證成功網頁","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-warp-desktop-login-success.webp",[477,3038,3039,3040],{},"此時 WARP 用戶端應顯示已連接至您的 Zero Trust 团队。\n",[882,3041],{"alt":3042,"src":3043},"桌面版 Cloudflare WARP 用戶端確認已連線至 Zero Trust 私有網路","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-warp-desktop-client-connected.webp",[477,3045,3046,3047,3050,3051],{},"在瀏覽器中輸入您的私有 IP 位址（例如 ",[469,3048,3049],{},"100.96.0.3","），即可成功載入 Hermes Web Dashboard。\n",[882,3052],{"alt":3053,"src":3054},"在桌面瀏覽器中存取私有 Hermes Agent 網頁儀表板","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fhermes-agent-dashboard-desktop-view.webp",[3056,3057,3058],"blockquote",{},[434,3059,3060,3063,3064,3068],{},[441,3061,3062],{},"macOS 用戶進階提示："," 如果您需要使用 WARP 用戶端存取多個 Cloudflare 帳號，請參閱我們的快速指南 ",[441,3065,3066],{},[481,3067,423],{"href":399},"，實現帳號間的無縫切換。",[1147,3070,3072],{"id":3071},"第-7-步在-ios-設備上安裝-cloudflare-warp-用戶端","第 7 步：在 iOS 設備上安裝 Cloudflare WARP 用戶端",[1151,3074,3075,3081,3089,3097,3105],{},[477,3076,3077,3078,490],{},"在 App Store 中安裝 ",[441,3079,3080],{},"Cloudflare One",[477,3082,3083,3084],{},"打開 Cloudflare One 應用程式並在提示時輸入您的團隊名稱。\n",[882,3085],{"alt":3086,"src":3087,"width":3088},"在 iOS 上的 Cloudflare One 應用程式中輸入 Cloudflare Zero Trust 團隊名稱","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-one-ios-team-name-prompt.webp",239,[477,3090,3091,3092],{},"使用前面在策略規則中設定的同一個電子郵件地址進行登入。\n",[882,3093],{"alt":3094,"src":3095,"width":3096},"iOS 上的 Cloudflare Zero Trust 電子郵件驗證提示","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-one-ios-email-login.webp",229,[477,3098,3099,3100],{},"連接成功後，介面應如下所示：\n",[882,3101],{"alt":3102,"src":3103,"width":3104},"iOS 行動設備上 Cloudflare One 應用程式顯示的已連線狀態","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-one-ios-client-connected.webp",322,[477,3106,3107,3108,3110,3111],{},"在手機瀏覽器中輸入私有 IP ",[469,3109,3049],{}," 即可在行動設備上存取 Hermes Web Dashboard。\n",[882,3112],{"alt":3113,"src":3114,"width":3115},"在手機瀏覽器上存取 Hermes Agent 網頁儀表板介面","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fhermes-agent-dashboard-mobile-view.webp",345,[429,3117,1383],{"id":1383},[434,3119,3120,3121,3123,3124,3127],{},"藉助 ",[441,3122,2289],{}," 管理身分策略以及 ",[441,3125,3126],{},"WARP"," 用戶端透過加密隧道路由流量，您的 Hermes Agent 現在可以被您的設備在全球範圍內安全存取。該配置為構建並存取完全遠端、私有的 AI 基礎架構奠定了堅實而安全的根基。",[984,3129,3130],{},"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":512,"depth":518,"links":3132},[3133,3136,3148],{"id":2303,"depth":512,"text":2303,"children":3134},[3135],{"id":2321,"depth":518,"text":2321},{"id":2332,"depth":512,"text":2332,"children":3137},[3138,3139,3140,3141,3142,3146,3147],{"id":2335,"depth":518,"text":2336},{"id":2388,"depth":518,"text":2389},{"id":2526,"depth":518,"text":2527},{"id":2563,"depth":518,"text":2564},{"id":2705,"depth":518,"text":2706,"children":3143},[3144,3145],{"id":2719,"depth":524,"text":2719},{"id":2848,"depth":524,"text":2849},{"id":3007,"depth":518,"text":3008},{"id":3071,"depth":518,"text":3072},{"id":1383,"depth":512,"text":1383},[1412,995],"2026-07-09","本文深入探討如何使用 Cloudflare WARP 與 Zero Trust 技術，在完全不需要開啟任何防火牆入站連接埠的情況下，安全地將您的 Hermes Agent 暴露到私有網路中，從而實現全球範圍內的安全存取。這為您構建專屬私有遠端 AI 基礎架構打下堅實基礎。","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002FTW-Exposing-Hermes-Agent-to-Private-Network-Using-Cloudflare-WARP.webp","透過 Cloudflare Zero Trust 和 WARP 隧道安全地將 Hermes Agent 暴露至私有網路",{"schemaOrg":3155,"robots":1007,"sitemap":3157},[3156],{"@type":1006,"headline":2274,"description":3151,"name":2274,"image":3152},{"lastmod":3158},"2026-09-28",{"title":3160,"description":3151,"ogTitle":2274,"ogDescription":3151,"twitterTitle":2274,"twitterDescription":3151},"透過 Cloudflare Zero Trust 實現對 Hermes Agent 的安全存取","tw\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",[923,1014,2282,3163,3164],"私有網路","教學","HTGJ42xrWk07SDM4iYiDvZunbYRe0lOzZcsR2BGh8No",{"id":1430,"title":1431,"author":1015,"body":1432,"category":2252,"date":2253,"description":2254,"extension":999,"image":2255,"imageAlt":2256,"isPublished":1002,"meta":2257,"minRead":706,"navigation":1002,"path":415,"seo":2263,"stem":2264,"tags":2265,"updatedAt":1015,"__hash__":2270},{"id":3168,"title":3169,"author":424,"body":3170,"category":4600,"date":4602,"description":4603,"extension":999,"image":4604,"imageAlt":4605,"isPublished":1002,"meta":4606,"minRead":548,"navigation":1002,"path":403,"seo":4613,"stem":4615,"tags":4616,"updatedAt":1015,"__hash__":4619},"article\u002Ftw\u002Farticle\u002Fsync-obsidian-across-devices.md","如何在多台裝置之間安全地同步 Obsidian 本地筆記庫",{"type":426,"value":3171,"toc":4578},[3172,3175,3180,3189,3198,3215,3220,3229,3233,3238,3252,3268,3271,3275,3278,3285,3290,3294,3298,3356,3364,3396,3400,3407,3415,3422,3480,3483,3502,3509,3521,3525,3529,3536,3541,3552,3573,3578,3590,3595,3600,3605,3620,3623,3628,3631,3636,3640,3645,3659,3663,3677,3688,3692,3697,3701,3708,3741,3745,3752,3891,3925,3931,3952,3963,3968,3972,3987,4058,4062,4067,4103,4233,4240,4246,4253,4259,4262,4268,4275,4290,4301,4308,4314,4325,4451,4457,4462,4465,4470,4473,4477,4483,4488,4494,4505,4515,4519,4530,4536,4542,4548,4552,4575],[434,3173,3174],{},"Obsidian 是一款本地優先的知識管理應用。每一個筆記在裝置上都是一個本地 Markdown 檔案，並完全處於您的掌控之中。然而，我們通常希望在筆記型電腦、手機和其他裝置上共享同一個本地筆記庫，或者希望在某些時候能夠透過網頁瀏覽器遠端存取它。",[882,3176],{"src":3177,"alt":3178,"style":3179},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-multi-device-sync-illustration.webp","跨多裝置同步的 Obsidian 本地筆記庫的插圖","max-width: 667px; width: 100%; height: auto;",[434,3181,3182,3183,3188],{},"市面上有許多針對 Obsidian 的同步方案，但在衝突處理、加密和數據自主權方面，它們或多或少都做出了一些妥協。",[481,3184,3187],{"href":3185,"rel":3186},"https:\u002F\u002Fgithub.com\u002Fhjinco\u002Fsynch",[485],"Synch"," 是一款開源應用，它可以在自建伺服器上實現具備端到端加密和衝突解決機制的 Obsidian 筆記庫同步。",[434,3190,3191,3192,3197],{},"雖然 Obsidian 的本地優先方案在絕大多數情况下都能完美運作，但在某些場景下，我們可能仍需要透過網頁瀏覽器遠端存取並編輯筆記。",[481,3193,3196],{"href":3194,"rel":3195},"https:\u002F\u002Fgithub.com\u002FNystik-gh\u002Fignis",[485],"Ignis"," 是一款開源應用，它能夠讓網頁瀏覽器中以接近原生的體驗執行 Obsidian，讓您能够直接讀取和編輯筆記庫。",[434,3199,3200,3201,3204,3205,832,3207,3209,3210,3214],{},"在本文中，我們將在一台 ",[441,3202,3203],{},"VPS","（虛擬專用伺服器）上部署 ",[441,3206,3187],{},[441,3208,3196],{},"，並將它們安全地託管在 ",[441,3211,3212],{},[481,3213,2289],{"href":363}," 私有網路中，而無需將它們直接暴露在公網上。",[882,3216],{"src":3217,"alt":3218,"style":3219},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-sync-cloudflare-zero-trust-architecture.webp","使用 Cloudflare Zero Trust 安全網路同步 Obsidian 的架構圖","max-width: 671px; width: 100%; height: auto;",[3221,3222],"article-card",{"description":3223,"image":3224,"image-alt":3225,"label":3226,"min-read":3227,"title":3228,"to":363},"學習如何使用 Cloudflare WARP 和 Zero Trust 安全地在全網範圍內暴露和存取您的 Hermes Agent，而無需在防火牆上開啟任何入站連接埠。","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002FEN-Exposing-Hermes-Agent-to-Private-Network-Using-Cloudflare-WARP.webp","使用 Cloudflare Zero Trust 和 WARP 隧道安全地將 Hermes Agent 暴露到私有網路中","相關指南","8","如何使用 Cloudflare WARP 私密地公開暴露 Hermes Agent",[429,3230,3232],{"id":3231},"使用-synch-安全同步-obsidian-筆記庫","使用 Synch 安全同步 Obsidian 筆記庫",[434,3234,3235,3237],{},[441,3236,3187],{}," 提供以下特性：",[474,3239,3240,3243,3246,3249],{},[477,3241,3242],{},"偵測到變更時立即即時同步您的筆記庫",[477,3244,3245],{},"並在上傳前對筆記庫資料進行端到端加密",[477,3247,3248],{},"支援從歷史版本記錄中進行復原",[477,3250,3251],{},"內建自動衝突解決機制",[434,3253,3254,3256,3257,3260,3261,3264,3265,3267],{},[441,3255,3187],{}," 會在您的本地裝置上生成一個隨機的 32 位元組",[441,3258,3259],{},"筆記庫金鑰","（Vault Key），該金鑰專門用於加密您的筆記庫資料。當您建立遠端筆記庫時，您需要設定一個",[441,3262,3263],{},"筆記庫密碼","。該密碼用於保護您的",[441,3266,3259],{},"，以便能夠將金鑰安全地儲存在伺服器上，並在其他裝置上進行解密。",[434,3269,3270],{},"筆記的衝突解決是在用戶端裝置上完成的，而不是在伺服器端。如果兩台裝置同時編輯同一個筆記，伺服器會保留最先到達的版本，並通知另一台裝置其本地版本已過期。隨後，該裝置會自動將伺服器上的最新版本與其本地變更進行合併，然後再將合併後的最終筆記上傳。",[1147,3272,3274],{"id":3273},"在您的-vps-上部署-synch","在您的 VPS 上部署 Synch",[2083,3276,3277],{"id":3277},"建立網域名稱解析",[434,3279,3280,3281,3284],{},"在 Cloudflare 中建立一條 A 記錄，並將其代理狀態設定為",[441,3282,3283],{},"僅限 DNS","（繞過 Cloudflare CDN）。",[882,3286],{"src":3287,"alt":3288,"style":3289},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fcloudflare-dns-a-record-synch-server.webp","在 Cloudflare 中為 Synch 同步伺服器設定 DNS A 記錄","max-width: 538px; width: 100%; height: auto;",[2083,3291,3293],{"id":3292},"在-ubuntu-上使用-docker-安裝-synch","在 Ubuntu 上使用 Docker 安裝 Synch",[3295,3296,3297],"h5",{"id":3297},"克隆倉庫",[495,3299,3301],{"className":2446,"code":3300,"language":2448,"meta":424,"style":424},"git clone https:\u002F\u002Fgithub.com\u002Fhjinco\u002Fsynch.git       \n        \n# Navigate to the API folder\ncd synch\u002Fapps\u002Fapi\n        \n# Copy the example environment file:\ncp .env.example .env\n",[469,3302,3303,3317,3322,3327,3336,3340,3345],{"__ignoreMap":424},[503,3304,3305,3308,3311,3314],{"class":505,"line":506},[503,3306,3307],{"class":1061},"git",[503,3309,3310],{"class":1075}," clone",[503,3312,3313],{"class":1075}," https:\u002F\u002Fgithub.com\u002Fhjinco\u002Fsynch.git",[503,3315,3316],{"class":1677},"       \n",[503,3318,3319],{"class":505,"line":512},[503,3320,3321],{"class":1677},"        \n",[503,3323,3324],{"class":505,"line":518},[503,3325,3326],{"class":2473},"# Navigate to the API folder\n",[503,3328,3329,3333],{"class":505,"line":524},[503,3330,3332],{"class":3331},"s2Zo4","cd",[503,3334,3335],{"class":1075}," synch\u002Fapps\u002Fapi\n",[503,3337,3338],{"class":505,"line":530},[503,3339,3321],{"class":1677},[503,3341,3342],{"class":505,"line":536},[503,3343,3344],{"class":2473},"# Copy the example environment file:\n",[503,3346,3347,3350,3353],{"class":505,"line":542},[503,3348,3349],{"class":1061},"cp",[503,3351,3352],{"class":1075}," .env.example",[503,3354,3355],{"class":1075}," .env\n",[3295,3357,3359,3360,3363],{"id":3358},"編輯-env-變數","編輯 ",[469,3361,3362],{},".env"," 變數",[474,3365,3366,3372,3390],{},[477,3367,3368,3371],{},[469,3369,3370],{},"PUBLIC_URL=synch.pafor.me","：輸入您的 Synch 伺服器公网網域名稱（即在上一步中建立的網域名称）。",[477,3373,3374,832,3377,3380,3381,3385,3386,3389],{},[469,3375,3376],{},"BETTER_AUTH_SECRET",[469,3378,3379],{},"SYNC_TOKEN_SECRET","：請使用此 ",[481,3382,3384],{"href":3383},"\u002Ftw\u002Ftools\u002Fsecret-key-hex","線上金鑰產生工具"," 或在終端機中執行兩次 ",[469,3387,3388],{},"openssl rand -hex 32"," 來產生高強度的隨機金鑰。",[477,3391,3392,3395],{},[469,3393,3394],{},"AUTH_ALLOWED_EMAILS","：允許註冊並建立帳號的電子信箱列表（用英文逗號分隔）。",[3295,3397,3399],{"id":3398},"将网域添加至-caddyfile","将网域添加至 Caddyfile",[434,3401,3402,3403,490],{},"有關如何將 Cloudflare DNS 模組整合到 Caddy 中並使用 Docker 容器啟動的詳細設定方法，請參閱我們的 ",[481,3404,3406],{"href":3405},"\u002Farticle\u002Fself-hosting-buzz-as-the-workspace-where-ai-agents-become-colleagues#_4-enable-https-with-caddy","自建 Buzz 協作平台文章",[3221,3408],{"description":3409,"image":3410,"image-alt":3411,"label":3412,"min-read":3413,"title":3414,"to":3405},"學習如何在 Docker 容器中設定 Caddy 反向代理，並利用 Cloudflare DNS Challenge 自動申請和管理 SSL\u002FTLS 憑證。","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf-Hosting%20Buzz%20As%20The%20Workspace%20Where%20AI%20Agents%20Become%20Colleagues\u002FEN-Self-Hosting-Buzz-As-The-Workspace-Where-AI-Agents-Become-Colleagues.webp","在自建工作區中設定帶有 Cloudflare DNS API 權杖的 Caddy，實現 SSL\u002FTLS 憑證的自動申請與管理","自建指南","12","自建 Block 旗下 Buzz 協作平台：輕鬆構建人類與 AI 智能體高效協同工作的全新共享工作空間",[434,3416,3417,3418,3421],{},"在您的 Caddyfile 中添加 ",[469,3419,3420],{},"SYNCH_DOMAIN"," 設定，並將其反向代理指向 8787 連接埠（Synch 容器內部執行的連接埠）：",[495,3423,3425],{"className":1659,"code":3424,"language":1661,"meta":424,"style":424},"{\n  acme_dns cloudflare {env.CLOUDFLARE_API_TOKEN}\n}\n\n{$SYNCH_DOMAIN} {\n  encode zstd gzip\n  reverse_proxy host.docker.internal:8787\n}\n",[469,3426,3427,3431,3439,3443,3447,3460,3465,3476],{"__ignoreMap":424},[503,3428,3429],{"class":505,"line":506},[503,3430,1681],{"class":1071},[503,3432,3433,3436],{"class":505,"line":512},[503,3434,3435],{"class":1677},"  acme_dns cloudflare {env.CLOUDFLARE_API_TOKEN",[503,3437,3438],{"class":1071},"}\n",[503,3440,3441],{"class":505,"line":518},[503,3442,3438],{"class":1677},[503,3444,3445],{"class":505,"line":524},[503,3446,1095],{"emptyLinePlaceholder":1002},[503,3448,3449,3452,3455,3458],{"class":505,"line":530},[503,3450,3451],{"class":1071},"{",[503,3453,3454],{"class":1677},"$SYNCH_DOMAIN",[503,3456,3457],{"class":1071},"}",[503,3459,1922],{"class":1071},[503,3461,3462],{"class":505,"line":536},[503,3463,3464],{"class":1677},"  encode zstd gzip\n",[503,3466,3467,3470,3472],{"class":505,"line":542},[503,3468,3469],{"class":1677},"  reverse_proxy host.docker.internal",[503,3471,1072],{"class":1071},[503,3473,3475],{"class":3474},"sbssI","8787\n",[503,3477,3478],{"class":505,"line":548},[503,3479,3438],{"class":1071},[434,3481,3482],{},"啟動容器：",[495,3484,3486],{"className":2446,"code":3485,"language":2448,"meta":424,"style":424},"docker compose up -d\n",[469,3487,3488],{"__ignoreMap":424},[503,3489,3490,3493,3496,3499],{"class":505,"line":506},[503,3491,3492],{"class":1061},"docker",[503,3494,3495],{"class":1075}," compose",[503,3497,3498],{"class":1075}," up",[503,3500,3501],{"class":1075}," -d\n",[434,3503,3504,3505,3508],{},"執行以下 ",[469,3506,3507],{},"curl"," 命令以驗證服務的可用性：",[495,3510,3512],{"className":2446,"code":3511,"language":2448,"meta":424,"style":424},"curl https:\u002F\u002Fsynch.pafor.me\u002Fhealth\n",[469,3513,3514],{"__ignoreMap":424},[503,3515,3516,3518],{"class":505,"line":506},[503,3517,3507],{"class":1061},[503,3519,3520],{"class":1075}," https:\u002F\u002Fsynch.pafor.me\u002Fhealth\n",[1147,3522,3524],{"id":3523},"將-obsidian-用戶端連接至您的-synch-伺服器","將 Obsidian 用戶端連接至您的 Synch 伺服器",[2083,3526,3528],{"id":3527},"在-obsidian-中安裝-synch-插件","在 Obsidian 中安裝 Synch 插件",[434,3530,3531,3532,3535],{},"打開 Obsidian 的「設定」（Settings），導覽至「第三方外掛」（Community plugins），然后點擊 ",[441,3533,3534],{},"「瀏覽」（Browse）"," 按鈕：",[882,3537],{"src":3538,"alt":3539,"style":3540},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-community-plugins-browse.webp","在 Obsidian 設定中瀏覽第三方社群外掛","max-width: 523px; width: 100%; height: auto;",[434,3542,3543,3544,3547,3548],{},"搜尋並安裝 ",[441,3545,3546],{},"'Synchrun'"," 外掛：\n",[882,3549],{"src":3550,"alt":3551,"style":3289},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-install-synchrun-plugin.webp","在 Obsidian 中安裝 Synchrun 同步外掛",[434,3553,3554,3555,3557,3558,3561,3562,3565,3566,3569,3570,490],{},"安裝完成後，打開 ",[441,3556,3546],{}," 外掛設定，並啟用 ",[441,3559,3560],{},"「使用自建伺服器」（Use a self-hosted server）","。隨後，在 ",[441,3563,3564],{},"「伺服器 URL」（Server URL）"," 欄位中輸入 ",[469,3567,3568],{},"https:\u002F\u002Fsynch.pafor.me","，並點擊 ",[441,3571,3572],{},"「儲存」（Save）",[882,3574],{"src":3575,"alt":3576,"style":3577},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-synchrun-plugin-settings-self-hosted.webp","在 Synchrun 外掛設定中配置您的自建伺服器 URL","max-width: 525px; width: 100%; height: auto;",[434,3579,2105,3580,3583,3584,3586,3587,3589],{},[441,3581,3582],{},"「在當前裝置上登入」（Sign in on this device）"," 按鈕。接著，使用您在 ",[469,3585,3362],{}," 中 ",[469,3588,3394],{}," 列表中指定的信箱地址進行註冊，註冊成功後您将看到以下授權頁面：",[882,3591],{"src":3592,"alt":3593,"style":3594},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynchrun-account-authorization-page.webp","Synchrun 外掛的帳號授權登入頁面","max-width: 494px; width: 100%; height: auto;",[434,3596,2105,3597,3535],{},[441,3598,3599],{},"「允許 Obsidian 登入」（Allow Obsidian sign-in）",[882,3601],{"src":3602,"alt":3603,"style":3604},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynchrun-allow-obsidian-signin.webp","允許 Obsidian 透過 Synch 登入","max-width: 498px; width: 100%; height: auto;",[434,3606,2105,3607,3610,3611,3614,3615],{},[441,3608,3609],{},"「返回 Obsidian」（Return to Obsidian）"," 按鈕，隨後點擊 ",[441,3612,3613],{},"「建立筆記庫」（Create vault）","：\n",[882,3616],{"src":3617,"alt":3618,"style":3619},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-synchrun-create-remote-vault.webp","在 Synchrun 中建立新的遠端同步筆記庫","max-width: 496px; width: 100%; height: auto;",[434,3621,3622],{},"輸入您自訂的筆記庫名稱與高強度密碼來建立遠端筆記庫。",[882,3624],{"src":3625,"alt":3626,"style":3627},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-synchrun-vault-password-setup.webp","為 Obsidian 遠端筆記庫設定高強度安全密碼","max-width: 500px; width: 100%; height: auto;",[434,3629,3630],{},"同步過程將立即開始，根據您的筆記庫檔案大小，這可能會需要一些時間。同步完成後，介面將顯示您所使用的總儲存空間。",[882,3632],{"src":3633,"alt":3634,"style":3635},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-synchrun-sync-completed-storage.webp","Synchrun 同步完成並顯示所使用的總儲存空間","max-width: 508px; width: 100%; height: auto;",[429,3637,3639],{"id":3638},"使用-ignis-實現基於瀏覽器的-obsidian-存取","使用 Ignis 實現基於瀏覽器的 Obsidian 存取",[434,3641,3642,3644],{},[441,3643,3196],{}," 透過將 Obsidian 的 Electron API 替換為 Web API，使得 Obsidian 的 JavaScript 程式碼能够直接在標準網頁瀏覽器中執行。您所有的 Markdown 筆記和附件都將直接儲存在託管伺服器的本地檔案系統中。",[434,3646,3647,3648,3653,3654,490],{},"不過，相比於獨立執行的 Obsidian 桌面用戶端，網頁端還存在一些局限性。由於瀏覽器沙箱環境的限制，某些依賴於 Electron 或 Node.js 特有 API 的功能或第三方外掛將無法正常運作。詳情請參閱 Ignis 官方文件中的 ",[481,3649,3652],{"href":3650,"rel":3651},"https:\u002F\u002Fignis.thiefling.com\u002Fdocs\u002Fusing\u002Flimitations\u002F",[485],"局限性說明"," 以及 ",[481,3655,3658],{"href":3656,"rel":3657},"https:\u002F\u002Fignis.thiefling.com\u002Fdocs\u002Fusing\u002Fplugin-compatibility\u002F",[485],"外掛相容性列表",[1147,3660,3662],{"id":3661},"部署-ignis","部署 Ignis",[434,3664,3665,3666,3668,3669,3672,3673,3676],{},"我們將使用 Docker 在 VPS 上安裝 ",[441,3667,3196],{},"，並將其對應掛載到本地的 ",[469,3670,3671],{},".\u002Fvaults"," 資料夾中。隨後，我們將在伺服器上透過 ",[441,3674,3675],{},"Synch CLI"," 命令列用戶端將該本地目錄與我們之前設定的遠端同步筆記庫進行即時同步。",[434,3678,3679,3680,3682,3683,3687],{},"由於 ",[441,3681,3196],{}," 本身沒有內建的身份驗證機制，為了確保隱私，我們必須將其安全地隱藏在 ",[441,3684,3685],{},[481,3686,2289],{"href":363}," 私有網路中。",[2083,3689,3691],{"id":3690},"建立-dns-記錄","建立 DNS 記錄",[882,3693],{"src":3694,"alt":3695,"style":3696},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fcloudflare-dns-a-record-ignis.webp","在 Cloudflare 中為 Ignis 網頁端設定 DNS A 記錄","max-width: 552px; width: 100%; height: auto;",[2083,3698,3700],{"id":3699},"將網域添加至-caddyfile","將網域添加至 Caddyfile",[434,3702,3703,3704,3707],{},"在您的 Caddyfile 中以相同的方式為 ",[469,3705,3706],{},"obsidian.pafor.me"," 設定反向代理：",[495,3709,3711],{"className":1659,"code":3710,"language":1661,"meta":424,"style":424},"{$OBSIDIAN_DOMAIN} {\n  encode zstd gzip\n  reverse_proxy host.docker.internal:9898\n}\n",[469,3712,3713,3724,3728,3737],{"__ignoreMap":424},[503,3714,3715,3717,3720,3722],{"class":505,"line":506},[503,3716,3451],{"class":1071},[503,3718,3719],{"class":1677},"$OBSIDIAN_DOMAIN",[503,3721,3457],{"class":1071},[503,3723,1922],{"class":1071},[503,3725,3726],{"class":505,"line":512},[503,3727,3464],{"class":1677},[503,3729,3730,3732,3734],{"class":505,"line":518},[503,3731,3469],{"class":1677},[503,3733,1072],{"class":1071},[503,3735,3736],{"class":3474},"9898\n",[503,3738,3739],{"class":505,"line":524},[503,3740,3438],{"class":1071},[2083,3742,3744],{"id":3743},"使用-docker-啟動-ignis","使用 Docker 啟動 Ignis",[434,3746,3747,3748,3751],{},"在 VPS 上將以下 Docker Compose 設定儲存為 ",[469,3749,3750],{},"ignis-docker-compose.yml","：",[495,3753,3757],{"className":3754,"code":3755,"language":3756,"meta":424,"style":424},"language-yml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","services:\n  ignis:\n    image: nobbe\u002Fignis:latest\n    ports:\n      - \"9898:8080\"\n    environment:\n      # match these to your host user (run: id)\n      - PUID=1000\n      - PGID=1000\n      - WS_ORIGINS=https:\u002F\u002Fobsidian.pafor.me\n    volumes:\n      - .\u002Fvaults:\u002Fvaults\n      - .\u002Fdata:\u002Fapp\u002Fdata\n      - obsidian-app:\u002Fapp\u002Fobsidian-app\n    restart: unless-stopped\n\nvolumes:\n  obsidian-app:\n","yml",[469,3758,3759,3766,3773,3783,3790,3802,3809,3814,3821,3828,3835,3842,3849,3856,3863,3873,3877,3884],{"__ignoreMap":424},[503,3760,3761,3764],{"class":505,"line":506},[503,3762,3763],{"class":1067},"services",[503,3765,2771],{"class":1071},[503,3767,3768,3771],{"class":505,"line":512},[503,3769,3770],{"class":1067},"  ignis",[503,3772,2771],{"class":1071},[503,3774,3775,3778,3780],{"class":505,"line":518},[503,3776,3777],{"class":1067},"    image",[503,3779,1072],{"class":1071},[503,3781,3782],{"class":1075}," nobbe\u002Fignis:latest\n",[503,3784,3785,3788],{"class":505,"line":524},[503,3786,3787],{"class":1067},"    ports",[503,3789,2771],{"class":1071},[503,3791,3792,3795,3797,3800],{"class":505,"line":530},[503,3793,3794],{"class":1071},"      -",[503,3796,1697],{"class":1071},[503,3798,3799],{"class":1075},"9898:8080",[503,3801,1763],{"class":1071},[503,3803,3804,3807],{"class":505,"line":536},[503,3805,3806],{"class":1067},"    environment",[503,3808,2771],{"class":1071},[503,3810,3811],{"class":505,"line":542},[503,3812,3813],{"class":2473},"      # match these to your host user (run: id)\n",[503,3815,3816,3818],{"class":505,"line":548},[503,3817,3794],{"class":1071},[503,3819,3820],{"class":1075}," PUID=1000\n",[503,3822,3823,3825],{"class":505,"line":554},[503,3824,3794],{"class":1071},[503,3826,3827],{"class":1075}," PGID=1000\n",[503,3829,3830,3832],{"class":505,"line":560},[503,3831,3794],{"class":1071},[503,3833,3834],{"class":1075}," WS_ORIGINS=https:\u002F\u002Fobsidian.pafor.me\n",[503,3836,3837,3840],{"class":505,"line":566},[503,3838,3839],{"class":1067},"    volumes",[503,3841,2771],{"class":1071},[503,3843,3844,3846],{"class":505,"line":572},[503,3845,3794],{"class":1071},[503,3847,3848],{"class":1075}," .\u002Fvaults:\u002Fvaults\n",[503,3850,3851,3853],{"class":505,"line":578},[503,3852,3794],{"class":1071},[503,3854,3855],{"class":1075}," .\u002Fdata:\u002Fapp\u002Fdata\n",[503,3857,3858,3860],{"class":505,"line":584},[503,3859,3794],{"class":1071},[503,3861,3862],{"class":1075}," obsidian-app:\u002Fapp\u002Fobsidian-app\n",[503,3864,3865,3868,3870],{"class":505,"line":590},[503,3866,3867],{"class":1067},"    restart",[503,3869,1072],{"class":1071},[503,3871,3872],{"class":1075}," unless-stopped\n",[503,3874,3875],{"class":505,"line":596},[503,3876,1095],{"emptyLinePlaceholder":1002},[503,3878,3879,3882],{"class":505,"line":602},[503,3880,3881],{"class":1067},"volumes",[503,3883,2771],{"class":1071},[503,3885,3886,3889],{"class":505,"line":608},[503,3887,3888],{"class":1067},"  obsidian-app",[503,3890,2771],{"class":1071},[474,3892,3893,3904,3918],{},[477,3894,3895,3896,3899,3900,3903],{},"在主機端使用 ",[469,3897,3898],{},"9898"," 連接埠，因為 ",[469,3901,3902],{},"8080"," 是一個非常常用且容易衝突的連接埠。",[477,3905,3906,3907,3910,3911,832,3914,3917],{},"在您的 VPS 上執行 ",[469,3908,3909],{},"id"," 命令，獲取目前主機使用者的 ",[469,3912,3913],{},"UID",[469,3915,3916],{},"GID","，並將其填寫到設定檔中，以確保檔案系統具備正確的讀寫權限。",[477,3919,3920,3921,3924],{},"設定 ",[469,3922,3923],{},"WS_ORIGINS","，僅允許來自您指定網域的 WebSocket 連線，提高安全性。",[434,3926,3927,3928,3930],{},"啟動 ",[441,3929,3196],{}," 容器：",[495,3932,3934],{"className":2446,"code":3933,"language":2448,"meta":424,"style":424},"docker compose -f ignis-docker-compose.yml up -d\n",[469,3935,3936],{"__ignoreMap":424},[503,3937,3938,3940,3942,3945,3948,3950],{"class":505,"line":506},[503,3939,3492],{"class":1061},[503,3941,3495],{"class":1075},[503,3943,3944],{"class":1075}," -f",[503,3946,3947],{"class":1075}," ignis-docker-compose.yml",[503,3949,3498],{"class":1075},[503,3951,3501],{"class":1075},[434,3953,3954,3955,3958,3959,3962],{},"當您在網頁瀏覽器中存取您的網域名稱時，將會彈出 ",[441,3956,3957],{},"'Vault Manager'","（筆記庫管理器）。由於此時資料夾為空，它不會顯示任何本地筆記庫。在下一節中，我們將設定 ",[441,3960,3961],{},"'Synch CLI'","，從我們之前設定的遠端同步伺服器中拉取筆記。",[882,3964],{"src":3965,"alt":3966,"style":3967},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-vault-manager-empty.webp","Ignis 網頁用戶端中當前為空的筆記庫管理器","max-width: 466px; width: 100%; height: auto;",[2083,3969,3971],{"id":3970},"解決-docker-帶來的防火牆失效問題","解決 Docker 帶來的防火牆失效問題",[434,3973,3974,3975,3978,3979,3982,3983,3986],{},"預設情況下，Docker 會自動在系統底層插入自己的 DNAT 與 FORWARD 鏈規則，直接將外部公網流量轉發至作用中的容器連接埠。這會完全繞過 Ubuntu 預設的 UFW 或 iptables ",[469,3976,3977],{},"INPUT"," 鏈防火牆保護。為了阻止外部未經授權的存取並保持容器的絕對私有，我們需要手動將以下規則新增至 ",[469,3980,3981],{},"iptables"," 中的 ",[469,3984,3985],{},"DOCKER-USER"," 鏈：",[495,3988,3990],{"className":2446,"code":3989,"language":2448,"meta":424,"style":424},"# 阻斷所有外部公網流量的直接存取\nsudo iptables -I DOCKER-USER -i ext_if -j DROP \n\n# 僅允許來自您的 Cloudflare WARP 用戶端私有 IP 的存取流量\nsudo iptables -I DOCKER-USER -i ext_if -s 100.96.0.10 -j ACCEPT\n",[469,3991,3992,3997,4024,4028,4033],{"__ignoreMap":424},[503,3993,3994],{"class":505,"line":506},[503,3995,3996],{"class":2473},"# 阻斷所有外部公網流量的直接存取\n",[503,3998,3999,4001,4004,4007,4010,4013,4016,4019,4022],{"class":505,"line":512},[503,4000,2455],{"class":1061},[503,4002,4003],{"class":1075}," iptables",[503,4005,4006],{"class":1075}," -I",[503,4008,4009],{"class":1075}," DOCKER-USER",[503,4011,4012],{"class":1075}," -i",[503,4014,4015],{"class":1075}," ext_if",[503,4017,4018],{"class":1075}," -j",[503,4020,4021],{"class":1075}," DROP",[503,4023,2585],{"class":1677},[503,4025,4026],{"class":505,"line":518},[503,4027,1095],{"emptyLinePlaceholder":1002},[503,4029,4030],{"class":505,"line":524},[503,4031,4032],{"class":2473},"# 僅允許來自您的 Cloudflare WARP 用戶端私有 IP 的存取流量\n",[503,4034,4035,4037,4039,4041,4043,4045,4047,4050,4053,4055],{"class":505,"line":530},[503,4036,2455],{"class":1061},[503,4038,4003],{"class":1075},[503,4040,4006],{"class":1075},[503,4042,4009],{"class":1075},[503,4044,4012],{"class":1075},[503,4046,4015],{"class":1075},[503,4048,4049],{"class":1075}," -s",[503,4051,4052],{"class":3474}," 100.96.0.10",[503,4054,4018],{"class":1075},[503,4056,4057],{"class":1075}," ACCEPT\n",[2083,4059,4061],{"id":4060},"設定-synch-cli-命令列同步工具","設定 Synch CLI 命令列同步工具",[434,4063,4064,4066],{},[441,4065,3675],{}," 是一款無介面的命令列工具，即使在没有安裝 Obsidian 桌面應用的遠端伺服器上，它也能讓本地目錄與遠端筆記庫进行即時同步。",[434,4068,4069,4070,4073,4074,4076,4077,4080,4081,3653,4084,4087,4088,832,4091,4094,4095,4098,4099,4102],{},"從您之前克隆的 ",[469,4071,4072],{},"synch"," 倉庫源碼中建置 ",[441,4075,3675],{},"。建置過程需要 ",[441,4078,4079],{},"Node.js >= 22.5","（因為 CLI 依賴於 ",[469,4082,4083],{},"node:sqlite",[469,4085,4086],{},"fetch","、",[469,4089,4090],{},"WebSocket",[469,4092,4093],{},"WebCrypto"," 等全域瀏覽器原生 API）和 ",[441,4096,4097],{},"pnpm","（由於整個倉庫是一個使用了 ",[469,4100,4101],{},"pnpm@10.33.0"," 版本管理器的 pnpm 工作區）：",[495,4104,4106],{"className":2446,"code":4105,"language":2448,"meta":424,"style":424},"# Check versions\nnode --version   # must be >= 22.5\npnpm --version\n\n# In the repos root\npnpm install\n\n# Build the CLI bundle\npnpm -C apps\u002Fcli build\n\n# After a successful build you have `apps\u002Fcli\u002Fdist\u002Fsynch.js`. Make it executable and put it on your PATH\nchmod +x apps\u002Fcli\u002Fdist\u002Fsynch.js\nln -sf \"$PWD\u002Fapps\u002Fcli\u002Fdist\u002Fsynch.js\" \"$HOME\u002F.local\u002Fbin\u002Fsynch\"\n\n# Verification\nsynch --help\n",[469,4107,4108,4113,4124,4131,4135,4140,4147,4151,4156,4169,4173,4178,4189,4217,4221,4226],{"__ignoreMap":424},[503,4109,4110],{"class":505,"line":506},[503,4111,4112],{"class":2473},"# Check versions\n",[503,4114,4115,4118,4121],{"class":505,"line":512},[503,4116,4117],{"class":1061},"node",[503,4119,4120],{"class":1075}," --version",[503,4122,4123],{"class":2473},"   # must be >= 22.5\n",[503,4125,4126,4128],{"class":505,"line":518},[503,4127,4097],{"class":1061},[503,4129,4130],{"class":1075}," --version\n",[503,4132,4133],{"class":505,"line":524},[503,4134,1095],{"emptyLinePlaceholder":1002},[503,4136,4137],{"class":505,"line":530},[503,4138,4139],{"class":2473},"# In the repos root\n",[503,4141,4142,4144],{"class":505,"line":536},[503,4143,4097],{"class":1061},[503,4145,4146],{"class":1075}," install\n",[503,4148,4149],{"class":505,"line":542},[503,4150,1095],{"emptyLinePlaceholder":1002},[503,4152,4153],{"class":505,"line":548},[503,4154,4155],{"class":2473},"# Build the CLI bundle\n",[503,4157,4158,4160,4163,4166],{"class":505,"line":554},[503,4159,4097],{"class":1061},[503,4161,4162],{"class":1075}," -C",[503,4164,4165],{"class":1075}," apps\u002Fcli",[503,4167,4168],{"class":1075}," build\n",[503,4170,4171],{"class":505,"line":560},[503,4172,1095],{"emptyLinePlaceholder":1002},[503,4174,4175],{"class":505,"line":566},[503,4176,4177],{"class":2473},"# After a successful build you have `apps\u002Fcli\u002Fdist\u002Fsynch.js`. Make it executable and put it on your PATH\n",[503,4179,4180,4183,4186],{"class":505,"line":572},[503,4181,4182],{"class":1061},"chmod",[503,4184,4185],{"class":1075}," +x",[503,4187,4188],{"class":1075}," apps\u002Fcli\u002Fdist\u002Fsynch.js\n",[503,4190,4191,4194,4197,4199,4202,4205,4207,4209,4212,4215],{"class":505,"line":578},[503,4192,4193],{"class":1061},"ln",[503,4195,4196],{"class":1075}," -sf",[503,4198,1697],{"class":1071},[503,4200,4201],{"class":1677},"$PWD",[503,4203,4204],{"class":1075},"\u002Fapps\u002Fcli\u002Fdist\u002Fsynch.js",[503,4206,1674],{"class":1071},[503,4208,1697],{"class":1071},[503,4210,4211],{"class":1677},"$HOME",[503,4213,4214],{"class":1075},"\u002F.local\u002Fbin\u002Fsynch",[503,4216,1763],{"class":1071},[503,4218,4219],{"class":505,"line":584},[503,4220,1095],{"emptyLinePlaceholder":1002},[503,4222,4223],{"class":505,"line":590},[503,4224,4225],{"class":2473},"# Verification\n",[503,4227,4228,4230],{"class":505,"line":596},[503,4229,4072],{"class":1061},[503,4231,4232],{"class":1075}," --help\n",[434,4234,4235,4236,4239],{},"由於 Synch CLI 執行在与您的 Synch 遠端同步伺服端相同的 VPS 上，它能够直接自動連線至本地的 API 服務連接埠。如果您將它們部署在不同的伺服器上，請執行 ",[469,4237,4238],{},"synch login --api-url \u003Cremote-synch-api-url>"," 来手動定義您的遠端目標 API 端點。",[434,4241,4242],{},[882,4243],{"alt":4244,"src":4245},"在終端機中輸入自訂 API URL 執行 synch login 登入指令","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynch-login-api-url-terminal.webp",[434,4247,4248,4249,4252],{},"在您的 VPS 終端機中執行 ",[469,4250,4251],{},"synch login"," 命令，您將獲得一個用於身份驗證的登入 URL：",[434,4254,4255],{},[882,4256],{"alt":4257,"src":4258},"終端機輸出顯示的 Synch CLI 認證 URL","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynch-login-auth-url-terminal.webp",[434,4260,4261],{},"使用與您在 Obsidian 桌面端 Synchrun 插件中註冊的相同信箱地址，透過該網頁連結進行登入授權。",[434,4263,4264],{},[882,4265],{"alt":4266,"src":4267},"Synch CLI 授權網頁端登入成功","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynch-web-login-success.webp",[434,4269,4270,4271,4274],{},"執行 ",[469,4272,4273],{},"synch vault connect --vault ~\u002Fvaults\u002F\u003Cvaultname> --vault-id asadqe-7b29-4677-fsad-234asdafasd"," 來將您 VPS 上的本地筆記庫目錄與遠端自建伺服器上的筆記庫進行關聯：",[434,4276,4277,4278,4281,4282,4285,4286,4289],{},"您可以透過打開桌面端 Obsidian 中的 ",[441,4279,4280],{},"Synchrun"," 外掛設定，點擊 ",[441,4283,4284],{},"「管理遠端筆記庫」（Manage remote vaults）"," 來找到您的遠端筆記庫 ID。該操作會打開一個網頁並列出您所有的遠端筆記庫，每個庫旁邊都附帶有一個 GUID 格式的唯一識別碼（例如：",[469,4287,4288],{},"123e4567-e89b-12d3-a456-426614174000","）：",[434,4291,4292,4297],{},[882,4293],{"src":4294,"alt":4295,"style":4296},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynchrun-manage-remote-vaults.webp","在 Synchrun 外掛中管理遠端筆記庫","max-width: 582px; width: 100%; height: auto;",[882,4298],{"alt":4299,"src":4300},"在 Synchrun 中定位唯一的遠端筆記庫 ID","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynchrun-remote-vault-id.webp",[434,4302,4303,4304,4307],{},"在提示時輸入您的筆記庫密碼以確立關聯。關聯成功後，執行 ",[469,4305,4306],{},"synch sync --vault ~\u002Fvaults\u002F\u003Cvault-name>"," 來進行您的首次全量同步。首次同步根據您的檔案大小，可能會耗費一些時間。",[434,4309,4310],{},[882,4311],{"alt":4312,"src":4313},"Synch CLI 中顯示首次拉取同步筆記庫的進度","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fsynch-cli-initial-sync-progress.webp",[434,4315,4316,4317,4320,4321,4324],{},"為了讓同步全自動進行，我們可以設定並啟用一個 ",[469,4318,4319],{},"systemd"," 系統守護服務，在背景持續執行 ",[469,4322,4323],{},"synch watch"," 監聽檔案變化，以確保 VPS 上的筆記在系統開機時即可實現毫秒級自動同步：",[495,4326,4328],{"className":2446,"code":4327,"language":2448,"meta":424,"style":424},"sudo tee \u002Fetc\u002Fsystemd\u002Fsystem\u002Fsynch-watch.service \u003C\u003C'EOF'\n[Unit]\nDescription=Synch vault watcher\nAfter=network-online.target\nWants=network-online.target\n\n[Service]\nType=simple\nUser=\u003Cusername>\nExecStart=\u002Fhome\u002F\u003Cusername>\u002F.local\u002Fbin\u002Fsynch watch --vault \u002Fhome\u002F\u003Cusername>\u002Fvaults\u002F\u003Cvault-name>\nWorkingDirectory=\u002Fhome\u002F\u003Cusername>\u002Fvaults\nEnvironment=\"PATH=\u002Fhome\u002F\u003Cusername>\u002F.local\u002Fbin:\u002Fhome\u002F\u003Cusername>\u002F.cargo\u002Fbin:\u002Fusr\u002Flocal\u002Fsbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fsbin:\u002Fusr\u002Fbin:\u002Fsbin:\u002Fbin\"\nEnvironment=\"HOME=\u002Fhome\u002F\u003Cusername>\"\nRestart=always\nRestartSec=5\n\n[Install]\nWantedBy=multi-user.target\nEOF\nsudo systemctl daemon-reload\nsudo systemctl enable --now synch-watch.service\n",[469,4329,4330,4346,4350,4355,4360,4365,4369,4373,4378,4383,4388,4393,4398,4403,4407,4412,4416,4420,4424,4429,4437],{"__ignoreMap":424},[503,4331,4332,4334,4337,4340,4343],{"class":505,"line":506},[503,4333,2455],{"class":1061},[503,4335,4336],{"class":1075}," tee",[503,4338,4339],{"class":1075}," \u002Fetc\u002Fsystemd\u002Fsystem\u002Fsynch-watch.service",[503,4341,4342],{"class":1071}," \u003C\u003C",[503,4344,4345],{"class":1071},"'EOF'\n",[503,4347,4348],{"class":505,"line":512},[503,4349,2890],{"class":1075},[503,4351,4352],{"class":505,"line":518},[503,4353,4354],{"class":1075},"Description=Synch vault watcher\n",[503,4356,4357],{"class":505,"line":524},[503,4358,4359],{"class":1075},"After=network-online.target\n",[503,4361,4362],{"class":505,"line":530},[503,4363,4364],{"class":1075},"Wants=network-online.target\n",[503,4366,4367],{"class":505,"line":536},[503,4368,1095],{"emptyLinePlaceholder":1002},[503,4370,4371],{"class":505,"line":542},[503,4372,2909],{"class":1075},[503,4374,4375],{"class":505,"line":548},[503,4376,4377],{"class":1075},"Type=simple\n",[503,4379,4380],{"class":505,"line":554},[503,4381,4382],{"class":1075},"User=\u003Cusername>\n",[503,4384,4385],{"class":505,"line":560},[503,4386,4387],{"class":1075},"ExecStart=\u002Fhome\u002F\u003Cusername>\u002F.local\u002Fbin\u002Fsynch watch --vault \u002Fhome\u002F\u003Cusername>\u002Fvaults\u002F\u003Cvault-name>\n",[503,4389,4390],{"class":505,"line":566},[503,4391,4392],{"class":1075},"WorkingDirectory=\u002Fhome\u002F\u003Cusername>\u002Fvaults\n",[503,4394,4395],{"class":505,"line":572},[503,4396,4397],{"class":1075},"Environment=\"PATH=\u002Fhome\u002F\u003Cusername>\u002F.local\u002Fbin:\u002Fhome\u002F\u003Cusername>\u002F.cargo\u002Fbin:\u002Fusr\u002Flocal\u002Fsbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fsbin:\u002Fusr\u002Fbin:\u002Fsbin:\u002Fbin\"\n",[503,4399,4400],{"class":505,"line":578},[503,4401,4402],{"class":1075},"Environment=\"HOME=\u002Fhome\u002F\u003Cusername>\"\n",[503,4404,4405],{"class":505,"line":584},[503,4406,2929],{"class":1075},[503,4408,4409],{"class":505,"line":590},[503,4410,4411],{"class":1075},"RestartSec=5\n",[503,4413,4414],{"class":505,"line":596},[503,4415,1095],{"emptyLinePlaceholder":1002},[503,4417,4418],{"class":505,"line":602},[503,4419,2948],{"class":1075},[503,4421,4422],{"class":505,"line":608},[503,4423,2953],{"class":1075},[503,4425,4426],{"class":505,"line":614},[503,4427,4428],{"class":1071},"EOF\n",[503,4430,4431,4433,4435],{"class":505,"line":620},[503,4432,2455],{"class":1061},[503,4434,2458],{"class":1075},[503,4436,2972],{"class":1075},[503,4438,4439,4441,4443,4445,4448],{"class":505,"line":626},[503,4440,2455],{"class":1061},[503,4442,2458],{"class":1075},[503,4444,2582],{"class":1075},[503,4446,4447],{"class":1075}," --now",[503,4449,4450],{"class":1075}," synch-watch.service\n",[434,4452,4453,4454,4456],{},"現在，在瀏覽器中打開 ",[469,4455,3706],{},"，您會發現其使用者介面和排版版面與桌面端原生 App 幾乎完全一致：",[882,4458],{"src":4459,"alt":4460,"style":4461},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-web-interface-desktop-view.webp","在桌面端顯示 Obsidian 筆記庫的 Ignis 網頁介面","max-width: 593px; width: 100%; height: auto;",[434,4463,4464],{},"點擊左下角的設定圖示可以發現，除了需要手動重新安裝第三方社群外掛外，幾乎所有的 Obsidian 核心設定與功能均已完美保留：",[882,4466],{"src":4467,"alt":4468,"style":4469},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-settings-community-plugins.webp","Ignis 網頁介面中的社群第三方外掛設定","max-width: 597px; width: 100%; height: auto;",[434,4471,4472],{},"為了測試整個同步閉環，您可以透過 Ignis 網頁端直接新增一篇筆記：",[882,4474],{"src":4475,"alt":4476,"style":4469},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-create-new-note-web.webp","透過 Ignis 網頁介面新增一篇 Markdown 筆記",[434,4478,4479,4480,4482],{},"該筆記會立即被同步回您的 Obsidian 桌面用戶端。需要注意的是，空白資料夾不會在 ",[441,4481,3196],{}," 網頁端中顯示。",[882,4484],{"src":4485,"alt":4486,"style":4487},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fobsidian-desktop-synced-note.webp","新建立的筆記已成功同步到本地 Obsidian 桌面用戶端","max-width: 502px; width: 100%; height: auto;",[434,4489,4490,4491,4493],{},"在行動端手機瀏覽器上存取 ",[469,4492,3706],{}," 的實際效果：",[434,4495,4496,4501],{},[882,4497],{"src":4498,"alt":4499,"style":4500},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-mobile-view-sidebar.webp","在行動端手機瀏覽器上存取 Ignis 網頁用戶端的側邊欄選單","max-width: 269px; width: 100%; height: auto;",[882,4502],{"src":4503,"alt":4504,"style":4500},"https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002Fignis-mobile-view-editor.webp","在行動端手機瀏覽器上存取 Ignis 網頁用戶端的 Markdown 編輯器",[434,4506,4507,4508,4510,4511,4514],{},"當您在 ",[441,4509,3196],{}," 網頁端中刪除筆記時，它們會被安全地移至本地筆記庫的 ",[469,4512,4513],{},"~\u002Fvaults\u002F\u003Cvault-name>\u002F.trash"," 垃圾桶資料夾中，以防誤刪。",[429,4516,4518],{"id":4517},"自建-obsidian-同步服務的一些結語","自建 Obsidian 同步服務的一些結語",[434,4520,4521,4522,2286,4524,4526,4527,4529],{},"透過將 ",[441,4523,3187],{},[441,4525,3196],{}," 結合，您可以使用完全處於自己掌控之下的 VPS 伺服器硬體，無縫地實現 Obsidian 筆記庫的多端同步與網頁端存取。而將這些服務整體託管於 ",[441,4528,2289],{}," 私有網路之中，又為您提供了極致的安全物理邊界，從根本上阻断了公網暴露帶來的安全隱患。",[434,4531,4532,4533,4535],{},"當然，",[441,4534,3196],{}," 的初衷並不是為了完全替代本地的 Obsidian 桌面用戶端。相反，它更像是一個極其便利的臨時橋梁，供您在沒有攜帶主力電腦時，能夠隨時隨地透過任意瀏覽器快速存取和編輯自己的筆記。對於日常高強度的寫作與重度筆記庫管理，本地原生用戶端仍然是更加舒適、高效的選擇。",[434,4537,4538,4539,4541],{},"由於 Synch 採用了堅固的端到端加密機制，您的遠端筆記庫密碼必須具備足夠強的複雜度以抵禦暴力破解攻擊。同時，請務必牢記該密碼，因為同步伺服端不會儲存任何未加密的",[441,4540,3259],{},"。一旦遺忘該密碼，您的全部筆記資料將徹底無法復原。此外，由於所有資料均保存在您的自建 VPS 上，您需要自行承擔並妥善做好伺服器的主機安全防護、以及自動快照與備份管理。",[434,4543,4544,4545,4547],{},"儘管 ",[441,4546,3187],{}," 內建了加密歷史版本管理和已刪除檔案復原機制，能為您規避絕大多數意外資料遺失，但為了萬一失，我們依然強烈建議您在第三方實體介質上定期保留一份獨立的 Obsidian 筆記庫離線備份。",[429,4549,4551],{"id":4550},"references","References",[474,4553,4554,4561,4568],{},[477,4555,4556],{},[481,4557,4560],{"href":4558,"rel":4559},"https:\u002F\u002Fsynch.run\u002Fself-hosting-docker\u002F",[485],"Synch Deploy with Docker Compose",[477,4562,4563],{},[481,4564,4567],{"href":4565,"rel":4566},"https:\u002F\u002Fignis.thiefling.com\u002Fdocs\u002Fserver\u002Fdeploy\u002F",[485],"Ignis Deploy with Docker",[477,4569,4570],{},[481,4571,4574],{"href":4572,"rel":4573},"https:\u002F\u002Fsynch.run\u002Fblog\u002Fencryption-and-decryption\u002F",[485],"How does end-to-end encryption work in Synch?",[984,4576,4577],{},"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 .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}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 .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}",{"title":424,"searchDepth":512,"depth":518,"links":4579},[4580,4589,4598,4599],{"id":3231,"depth":512,"text":3232,"children":4581},[4582,4586],{"id":3273,"depth":518,"text":3274,"children":4583},[4584,4585],{"id":3277,"depth":524,"text":3277},{"id":3292,"depth":524,"text":3293},{"id":3523,"depth":518,"text":3524,"children":4587},[4588],{"id":3527,"depth":524,"text":3528},{"id":3638,"depth":512,"text":3639,"children":4590},[4591],{"id":3661,"depth":518,"text":3662,"children":4592},[4593,4594,4595,4596,4597],{"id":3690,"depth":524,"text":3691},{"id":3699,"depth":524,"text":3700},{"id":3743,"depth":524,"text":3744},{"id":3970,"depth":524,"text":3971},{"id":4060,"depth":524,"text":4061},{"id":4517,"depth":512,"text":4518},{"id":4550,"depth":512,"text":4551},[4601],"productivity","2026-09-15","本文詳細介紹如何利用開源工具 Synch 與 Ignis 在您的 VPS 上搭建私有同步伺服器，從而在多台電腦、手機以及平板裝置之間安全地同步您的 Obsidian 筆記庫。我們還將所有服務全部部署在 Cloudflare Zero Trust 私有網路中，從而完全阻斷來自公網的惡意掃描與未授權存取，保障數據隱私安全。","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSync%20Obsidian%20Across%20Devices\u002FTW-Sync-Obsidian-Across-Devices.webp","使用自建 Synch 平台和 Ignis 網頁端在 Cloudflare Zero Trust 安全私有網路中同步多端 Obsidian 本地筆記庫的架構圖",{"schemaOrg":4607,"robots":1007,"sitemap":4611},[4608,4610],{"@type":4609,"headline":3169,"description":4603,"image":4604},"Article",{"@type":1006,"name":3169,"description":4603,"image":4604},{"lastmod":4612},"2026-09-16",{"title":4614,"description":4603,"ogTitle":3169,"ogDescription":4603,"twitterTitle":3169,"twitterDescription":4603},"基於自建 Synch 與 Ignis 實現 Obsidian 跨裝置安全同步","tw\u002Farticle\u002Fsync-obsidian-across-devices",[4617,2269,4618,1014],"自建服务","云端同步","6DsOPDA5q5K5tiypqYFvhyUvxHAduTMMII_8Mf-xVXM",1792490008531]