[{"data":1,"prerenderedAt":4065},["ShallowReactive",2],{"published-article-paths":3,"search-navigation":348,"\u002Fvi\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac":421,"\u002Fvi\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac-surround":1022},[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":999,"date":1002,"description":1003,"extension":1004,"image":1005,"imageAlt":1006,"isPublished":1007,"meta":1008,"minRead":533,"navigation":1007,"path":305,"seo":1014,"stem":1015,"tags":1016,"updatedAt":1020,"__hash__":1021},"article\u002Fvi\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac.md","Chuyển đổi giữa các tổ chức Cloudflare WARP trên máy Mac","",{"type":426,"value":427,"toc":992},"minimark",[428,433,437,445,449,456,459,462,466,469,477,497,827,947,951,954,958,988],[429,430,432],"h2",{"id":431},"cloudflare-warp-là-gì","Cloudflare WARP là gì?",[434,435,436],"p",{},"Cloudflare WARP là một ứng dụng phía máy khách (client-side) giúp định tuyến lưu lượng truy cập của thiết bị được chỉ định qua mạng toàn cầu của Cloudflare thay vì đi trực tiếp ra internet công cộng.",[434,438,439,440,444],{},"Nó tạo ra một đường truyền được mã hóa (encrypted tunnel) xây dựng trên giao thức ",[441,442,443],"strong",{},"WireGuard",", bảo mật lưu lượng truy cập từ thiết bị đến trung tâm dữ liệu Cloudflare gần nhất. Sau đó, các chính sách có thể được tạo trong bảng điều khiển Cloudflare của bạn để lọc, ghi nhật ký, kiểm tra hoặc định tuyến lưu lượng truy cập đến này.",[429,446,448],{"id":447},"tại-sao-chúng-ta-cần-cloudflare-warp","Tại sao chúng ta cần Cloudflare WARP?",[434,450,451,452,455],{},"Để chia sẻ an toàn các tài nguyên nội bộ—như dịch vụ web riêng tư hoặc ứng dụng SaaS—cho nhân viên, nhà thầu và các bên liên quan khác, ứng dụng Cloudflare WARP được sử dụng làm điểm thực thi phía máy khách cho ",[441,453,454],{},"Truy cập mạng Zero Trust (ZTNA)",".",[434,457,458],{},"Ứng dụng Cloudflare WARP được cài đặt trên máy tính xách tay hoặc điện thoại của người dùng. Nó yêu cầu người dùng xác thực và đáp ứng các kiểm tra trạng thái bảo mật cụ thể (chẳng hạn như đến từ dải IP được phê duyệt, sử dụng miền email đã đăng ký hoặc đang chạy tường lửa hoạt động) trước khi cấp quyền truy cập.",[434,460,461],{},"Bằng cách truyền dữ liệu thiết bị trực tiếp đến Cloudflare, danh tính, thiết bị và các chính sách của người dùng được xác minh trước khi các yêu cầu có thể tiếp cận tài nguyên nội bộ. Nhờ đó, tài nguyên nội bộ không bao giờ bị lộ ra internet công cộng, và mọi yêu cầu đơn lẻ đều được ghi nhật ký và kiểm tra đầy đủ.",[429,463,465],{"id":464},"hỗ-trợ-nhiều-cấu-hình-profile-warp-trên-một-thiết-bị","Hỗ trợ nhiều cấu hình (Profile) WARP trên một thiết bị",[434,467,468],{},"Khi người dùng cần chuyển đổi giữa tài khoản cá nhân và tài khoản doanh nghiệp của Cloudflare, hoặc khi quản trị viên hệ thống quản lý nhiều bên thuê (tenant), việc hỗ trợ nhiều cấu hình WARP trên một thiết bị duy nhất trở nên vô cùng quan trọng.",[434,470,471,472,476],{},"Để làm được điều này trên macOS, chúng ta có thể sử dụng file cấu hình MDM ",[473,474,475],"code",{},".mobileconfig"," để định nghĩa và đăng ký các môi trường WARP khác nhau.",[478,479,480,494],"ul",{},[481,482,483,493],"li",{},[484,485,489,490,492],"a",{"href":486,"rel":487},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fstatic\u002Fmdm\u002Fmultiple-orgs\u002FCloudflareWARP.mobileconfig",[488],"nofollow","Download a sample ",[473,491,475],{}," file"," trực tiếp từ Cloudflare.",[481,495,496],{},"Dưới đây là ví dụ về cấu hình này trông như thế nào:",[498,499,503],"pre",{"className":500,"code":501,"language":502,"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",[473,504,505,513,519,525,531,537,543,549,555,561,567,573,579,585,591,597,603,609,615,621,627,633,639,645,651,657,663,669,674,679,685,690,696,701,707,713,719,725,731,737,743,749,755,761,767,773,779,785,791,797,803,809,815,821],{"__ignoreMap":424},[506,507,510],"span",{"class":508,"line":509},"line",1,[506,511,512],{},"\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?>\n",[506,514,516],{"class":508,"line":515},2,[506,517,518],{},"\u003C!DOCTYPE plist PUBLIC \"-\u002F\u002FApple\u002F\u002FDTD PLIST 1.0\u002F\u002FEN\" \"http:\u002F\u002Fwww.apple.com\u002FDTDs\u002FPropertyList-1.0.dtd\">\n",[506,520,522],{"class":508,"line":521},3,[506,523,524],{},"\u003Cplist version=\"1.0\">\n",[506,526,528],{"class":508,"line":527},4,[506,529,530],{},"\u003Cdict>\n",[506,532,534],{"class":508,"line":533},5,[506,535,536],{},"  \u003Ckey>PayloadContent\u003C\u002Fkey>\n",[506,538,540],{"class":508,"line":539},6,[506,541,542],{},"  \u003Carray>\n",[506,544,546],{"class":508,"line":545},7,[506,547,548],{},"    \u003Cdict>\n",[506,550,552],{"class":508,"line":551},8,[506,553,554],{},"      \u003Ckey>PayloadDisplayName\u003C\u002Fkey>\n",[506,556,558],{"class":508,"line":557},9,[506,559,560],{},"      \u003Cstring>Warp Configuration\u003C\u002Fstring>\n",[506,562,564],{"class":508,"line":563},10,[506,565,566],{},"      \u003Ckey>PayloadIdentifier\u003C\u002Fkey>\n",[506,568,570],{"class":508,"line":569},11,[506,571,572],{},"      \u003Cstring>com.cloudflare.warp.CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n",[506,574,576],{"class":508,"line":575},12,[506,577,578],{},"      \u003Ckey>PayloadOrganization\u003C\u002Fkey>\n",[506,580,582],{"class":508,"line":581},13,[506,583,584],{},"      \u003Cstring>Cloudflare Ltd.\u003C\u002Fstring>\n",[506,586,588],{"class":508,"line":587},14,[506,589,590],{},"      \u003Ckey>PayloadType\u003C\u002Fkey>\n",[506,592,594],{"class":508,"line":593},15,[506,595,596],{},"      \u003Cstring>com.cloudflare.warp\u003C\u002Fstring>\n",[506,598,600],{"class":508,"line":599},16,[506,601,602],{},"      \u003Ckey>PayloadUUID\u003C\u002Fkey>\n",[506,604,606],{"class":508,"line":605},17,[506,607,608],{},"      \u003Cstring>CB8B22D4-50E1-48E8-8874-A7594627013A\u003C\u002Fstring>\n",[506,610,612],{"class":508,"line":611},18,[506,613,614],{},"      \u003Ckey>PayloadVersion\u003C\u002Fkey>\n",[506,616,618],{"class":508,"line":617},19,[506,619,620],{},"      \u003Cinteger>1\u003C\u002Finteger>\n",[506,622,624],{"class":508,"line":623},20,[506,625,626],{},"      \u003Ckey>configs\u003C\u002Fkey>\n",[506,628,630],{"class":508,"line":629},21,[506,631,632],{},"      \u003Carray>\n",[506,634,636],{"class":508,"line":635},22,[506,637,638],{},"        \u003Cdict>\n",[506,640,642],{"class":508,"line":641},23,[506,643,644],{},"          \u003Ckey>organization\u003C\u002Fkey>\n",[506,646,648],{"class":508,"line":647},24,[506,649,650],{},"          \u003Cstring>your-team-name-1\u003C\u002Fstring>\n",[506,652,654],{"class":508,"line":653},25,[506,655,656],{},"          \u003Ckey>display_name\u003C\u002Fkey>\n",[506,658,660],{"class":508,"line":659},26,[506,661,662],{},"          \u003Cstring>Team 1\u003C\u002Fstring>\n",[506,664,666],{"class":508,"line":665},27,[506,667,668],{},"        \u003C\u002Fdict>\n",[506,670,672],{"class":508,"line":671},28,[506,673,638],{},[506,675,677],{"class":508,"line":676},29,[506,678,644],{},[506,680,682],{"class":508,"line":681},30,[506,683,684],{},"          \u003Cstring>your-team-name-2\u003C\u002Fstring>\n",[506,686,688],{"class":508,"line":687},31,[506,689,656],{},[506,691,693],{"class":508,"line":692},32,[506,694,695],{},"          \u003Cstring>Team 2\u003C\u002Fstring>\n",[506,697,699],{"class":508,"line":698},33,[506,700,668],{},[506,702,704],{"class":508,"line":703},34,[506,705,706],{},"      \u003C\u002Farray>\n",[506,708,710],{"class":508,"line":709},35,[506,711,712],{},"    \u003C\u002Fdict>\n",[506,714,716],{"class":508,"line":715},36,[506,717,718],{},"  \u003C\u002Farray>\n",[506,720,722],{"class":508,"line":721},37,[506,723,724],{},"  \u003Ckey>PayloadDisplayName\u003C\u002Fkey>\n",[506,726,728],{"class":508,"line":727},38,[506,729,730],{},"  \u003Cstring>Cloudflare WARP\u003C\u002Fstring>\n",[506,732,734],{"class":508,"line":733},39,[506,735,736],{},"  \u003Ckey>PayloadIdentifier\u003C\u002Fkey>\n",[506,738,740],{"class":508,"line":739},40,[506,741,742],{},"  \u003Cstring>cloudflare_warp\u003C\u002Fstring>\n",[506,744,746],{"class":508,"line":745},41,[506,747,748],{},"  \u003Ckey>PayloadOrganization\u003C\u002Fkey>\n",[506,750,752],{"class":508,"line":751},42,[506,753,754],{},"  \u003Cstring>Cloudflare, Ltd.\u003C\u002Fstring>\n",[506,756,758],{"class":508,"line":757},43,[506,759,760],{},"  \u003Ckey>PayloadRemovalDisallowed\u003C\u002Fkey>\n",[506,762,764],{"class":508,"line":763},44,[506,765,766],{},"  \u003Cfalse\u002F>\n",[506,768,770],{"class":508,"line":769},45,[506,771,772],{},"  \u003Ckey>PayloadScope\u003C\u002Fkey>\n",[506,774,776],{"class":508,"line":775},46,[506,777,778],{},"  \u003Cstring>System\u003C\u002Fstring>\n",[506,780,782],{"class":508,"line":781},47,[506,783,784],{},"  \u003Ckey>PayloadType\u003C\u002Fkey>\n",[506,786,788],{"class":508,"line":787},48,[506,789,790],{},"  \u003Cstring>Configuration\u003C\u002Fstring>\n",[506,792,794],{"class":508,"line":793},49,[506,795,796],{},"  \u003Ckey>PayloadUUID\u003C\u002Fkey>\n",[506,798,800],{"class":508,"line":799},50,[506,801,802],{},"  \u003Cstring>2B7763B8-64F6-41EB-AA5E-7761651B8131\u003C\u002Fstring>\n",[506,804,806],{"class":508,"line":805},51,[506,807,808],{},"  \u003Ckey>PayloadVersion\u003C\u002Fkey>\n",[506,810,812],{"class":508,"line":811},52,[506,813,814],{},"  \u003Cinteger>1\u003C\u002Finteger>\n",[506,816,818],{"class":508,"line":817},53,[506,819,820],{},"\u003C\u002Fdict>\n",[506,822,824],{"class":508,"line":823},54,[506,825,826],{},"\u003C\u002Fplist>\n",[478,828,829,840,853,863,869,888,901,921,938],{},[481,830,831,832,835,836,839],{},"Thay thế ",[473,833,834],{},"your-team-name-1"," và ",[473,837,838],{},"your-team-name-2"," bằng tên nhóm Cloudflare Zero Trust tương ứng của bạn.",[481,841,842,843,846,847,850,851,455],{},"Chạy lệnh ",[473,844,845],{},"uuidgen"," trong Terminal của bạn để tạo các UUID duy nhất, và sử dụng chúng để thay thế các giá trị ",[473,848,849],{},"PayloadUUID"," tạm thời trong file ",[473,852,475],{},[481,854,855,856,859,860,862],{},"Đảm bảo rằng chuỗi ",[473,857,858],{},"PayloadIdentifier"," cũng chứa ",[473,861,849],{}," đã cập nhật để giữ cho cấu hình có tính riêng biệt.",[481,864,865,866,868],{},"Lưu file ",[473,867,475],{}," đã chỉnh sửa của bạn.",[481,870,871,872,875,876,879,880,883],{},"Mở ",[441,873,874],{},"Cài đặt hệ thống"," trên máy Mac của bạn, tìm kiếm ",[441,877,878],{},"Cấu hình"," (Profiles), và chọn nó.",[881,882],"br",{},[884,885],"img",{"alt":886,"src":887},"Giao diện cấu hình Profiles trong System Settings trên macOS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-system-settings-profiles.webp",[481,889,890,891,894,895,897],{},"Nhấp vào ",[441,892,893],{},"Cài đặt, xem hoặc xóa..."," để bắt đầu thêm cấu hình mới của bạn.",[881,896],{},[884,898],{"alt":899,"src":900},"Nút cài đặt, xem hoặc xóa Profiles trên macOS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-profiles-view-remove.webp",[481,902,903,904,907,908,910,911,913,917],{},"Nhấp vào biểu tượng ",[441,905,906],{},"+"," (cộng) ở góc dưới bên trái và chọn file ",[473,909,475],{}," đã lưu của bạn.",[881,912],{},[884,914],{"alt":915,"src":916},"Nút cộng (+) trong Profiles trên macOS để thêm cấu hình mới","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-profiles-add-profile.webp",[884,918],{"alt":919,"src":920},"Chọn file cấu hình .mobileconfig trên macOS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-select-mobileconfig-file.webp",[481,922,923,924,927,928,931,932,934],{},"Chọn ",[441,925,926],{},"Cloudflare WARP"," và nhấp vào ",[441,929,930],{},"Cài đặt"," để áp dụng cấu hình.",[881,933],{},[884,935],{"alt":936,"src":937},"Xác nhận cài đặt cấu hình Cloudflare WARP trên macOS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fmacos-install-cloudflare-warp-profile.webp",[481,939,940,941,943],{},"Khởi động lại ứng dụng Cloudflare WARP của bạn. Bây giờ bạn sẽ thấy trình chuyển đổi đa cấu hình trong giao diện người dùng:",[881,942],{},[884,944],{"alt":945,"src":946},"Giao diện chuyển đổi nhiều tài khoản cấu hình trên client Cloudflare WARP trên macOS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002Fcloudflare-warp-multi-profile-switcher.webp",[429,948,950],{"id":949},"kết-luận","Kết luận",[434,952,953],{},"Ứng dụng Cloudflare WARP hoạt động như một điểm bảo mật quan trọng trên thiết bị người dùng, giúp Truy cập mạng Zero Trust trở nên mạnh mẽ và cực kỳ thực tế. Việc cô lập tài nguyên nội bộ khỏi internet công cộng đảm bảo rằng mọi nỗ lực kết nối đều được xác thực, đánh giá và kiểm tra một cách an toàn.",[429,955,957],{"id":956},"tài-liệu-tham-khảo","Tài liệu tham khảo",[478,959,960,967,974,981],{},[481,961,962],{},[484,963,966],{"href":964,"rel":965},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fteam-and-resources\u002Fdevices\u002Fcloudflare-one-client\u002Fdeployment\u002Fmdm-deployment\u002F#prepare-file-for-mdm-deployment",[488],"Managed Deployment Preparation",[481,968,969],{},[484,970,973],{"href":971,"rel":972},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fteam-and-resources\u002Fdevices\u002Fcloudflare-one-client\u002Fdeployment\u002Fmdm-deployment\u002Fswitch-organizations\u002F",[488],"Switch Between Zero Trust Organizations",[481,975,976],{},[484,977,980],{"href":978,"rel":979},"https:\u002F\u002Fblog.cloudflare.com\u002Fintroducing-warp-connector-paving-the-path-to-any-to-any-connectivity-2\u002F",[488],"Introducing WARP Connector: Paving the Path to Any-to-Any Connectivity",[481,982,983],{},[484,984,987],{"href":985,"rel":986},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fcloudflare-one\u002Fteam-and-resources\u002Fdevices\u002Fcloudflare-one-client\u002F",[488],"Cloudflare One Client Documentation",[989,990,991],"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":515,"depth":521,"links":993},[994,995,996,997,998],{"id":431,"depth":515,"text":432},{"id":447,"depth":515,"text":448},{"id":464,"depth":515,"text":465},{"id":949,"depth":515,"text":950},{"id":956,"depth":515,"text":957},[1000,1001],"security","cloudflare","2026-07-04","Hướng dẫn cách cấu hình và chuyển đổi nhanh giữa nhiều tổ chức Cloudflare WARP trên macOS bằng file .mobileconfig. Hướng dẫn MDM đầy đủ cho quản trị viên.","md","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSwitch%20Between%20Multiple%20Cloudflare%20WARP%20Orgs%20on%20Mac\u002FVI-Switch-Between-Multiple-Cloudflare-WARP-Orgs-on-Mac.webp","Cấu hình nhiều tổ chức Cloudflare WARP trên macOS",true,{"schemaOrg":1009,"robots":1012,"sitemap":1013},[1010],{"@type":1011,"headline":423,"description":1003},"HowTo","index, follow",{"lastmod":1002},{"title":1006,"description":1003,"ogTitle":423,"ogDescription":1003,"twitterTitle":423,"twitterDescription":1003},"vi\u002Farticle\u002Fswitch-between-multiple-cloudflare-warp-orgs-on-mac",[1017,926,1018,1019],"macOS","MDM","Zero Trust",null,"AYpQU_BG0n0gA2TN8V-O9UYRB2yhUp2FObpAAE28Vcs",{"surround":1023,"related":2257},[1024,1437],{"id":1025,"title":1026,"author":424,"body":1027,"category":1419,"date":1421,"description":1422,"extension":1004,"image":1423,"imageAlt":1424,"isPublished":1007,"meta":1425,"minRead":545,"navigation":1007,"path":281,"seo":1429,"stem":1430,"tags":1431,"updatedAt":1020,"__hash__":1436},"article\u002Fvi\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them.md","Kỹ năng của Agent AI: Chúng là gì và cách tạo lập chi tiết",{"type":426,"value":1028,"toc":1409},[1029,1033,1044,1055,1124,1130,1134,1137,1146,1152,1157,1213,1224,1230,1233,1289,1293,1300,1307,1310,1321,1325,1370,1373,1390,1392,1403,1406],[429,1030,1032],{"id":1031},"kỹ-năng-của-agent-ai-là-gì","Kỹ năng của Agent AI là gì?",[434,1034,1035,1036,1039,1040,1043],{},"Một kỹ năng của agent (agent skill) là một ",[441,1037,1038],{},"tập hợp hướng dẫn"," có thể tái sử dụng — một quy trình chuẩn hóa chỉ dẫn cho agent cách hoàn thành xuất sắc một loại tác vụ cụ thể. Kỹ năng này bao gồm một tệp Markdown duy nhất có tên ",[473,1041,1042],{},"SKILL.md"," và có thể đóng gói kèm theo bất kỳ tệp nào khác mà tác vụ yêu cầu, chẳng hạn như tài liệu tham chiếu, tệp mẫu (template) hoặc các tập lệnh thực thi (executable script).",[434,1045,1046,1047,1054],{},"Hãy lấy kỹ năng chất vấn ",[484,1048,1051],{"href":1049,"rel":1050},"https:\u002F\u002Fgithub.com\u002Fmattpocock\u002Fskills\u002Fblob\u002F733d312884b3878a9a9cff693c5886943753a741\u002Fskills\u002Fproductivity\u002Fgrill-me\u002FSKILL.md",[488],[473,1052,1053],{},"grill-me"," làm ví dụ:",[498,1056,1060],{"className":1057,"code":1058,"language":1059,"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",[473,1061,1062,1068,1082,1092,1096,1101,1106,1110,1115,1119],{"__ignoreMap":424},[506,1063,1064],{"class":508,"line":509},[506,1065,1067],{"class":1066},"sBMFI","---\n",[506,1069,1070,1074,1078],{"class":508,"line":515},[506,1071,1073],{"class":1072},"swJcz","name",[506,1075,1077],{"class":1076},"sMK4o",":",[506,1079,1081],{"class":1080},"sfazB"," grill-me\n",[506,1083,1084,1087,1089],{"class":508,"line":521},[506,1085,1086],{"class":1072},"description",[506,1088,1077],{"class":1076},[506,1090,1091],{"class":1080}," 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",[506,1093,1094],{"class":508,"line":527},[506,1095,1067],{"class":1066},[506,1097,1098],{"class":508,"line":533},[506,1099,1100],{"emptyLinePlaceholder":1007},"\n",[506,1102,1103],{"class":508,"line":539},[506,1104,1105],{"class":1080},"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",[506,1107,1108],{"class":508,"line":545},[506,1109,1100],{"emptyLinePlaceholder":1007},[506,1111,1112],{"class":508,"line":551},[506,1113,1114],{"class":1080},"Ask the questions one at a time.\n",[506,1116,1117],{"class":508,"line":557},[506,1118,1100],{"emptyLinePlaceholder":1007},[506,1120,1121],{"class":508,"line":563},[506,1122,1123],{"class":1080},"If a question can be answered by exploring the codebase, explore the codebase instead.\n",[434,1125,1126,1127,1129],{},"Tệp ",[473,1128,1042],{}," chứa một khối siêu dữ liệu (metadata) nhỏ và phần nội dung hướng dẫn. Siêu dữ liệu bao gồm tên và mô tả của kỹ năng, được agent AI tải khi khởi động.",[429,1131,1133],{"id":1132},"cách-thức-kỹ-năng-hoạt-động-công-bố-lũy-tiến-progressive-disclosure","Cách thức kỹ năng hoạt động: Công bố lũy tiến (Progressive Disclosure)",[434,1135,1136],{},"Ban đầu, chỉ có tên và mô tả của kỹ năng được tải vào ngữ cảnh (context). Khi yêu cầu của người dùng khớp với mô tả của một kỹ năng, phần nội dung hướng dẫn chi tiết mới được tải vào cùng một ngữ cảnh đó.",[434,1138,1139,1140,1145],{},"Hãy xem kỹ năng chất vấn ",[484,1141,1143],{"href":1049,"rel":1142},[488],[473,1144,1053],{}," được sử dụng như thế nào trong thực tế.",[434,1147,1148],{},[884,1149],{"alt":1150,"src":1151},"Biểu đồ trình tự minh họa cơ chế tiết lộ dần dần (progressive disclosure) khi thực thi kỹ năng của tác tử AI","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FAI%20Agent%20Skills%20What%20They%20Are%20%26%20How%20to%20Create%20Them\u002Fai-agent-skill-progressive-disclosure-sequence-diagram.webp",[1153,1154,1156],"h3",{"id":1155},"các-bước-chi-tiết","Các bước chi tiết",[1158,1159,1160,1166,1172,1178,1184,1197,1207],"ol",{},[481,1161,1162,1165],{},[441,1163,1164],{},"Yêu cầu (Request)"," — Người dùng yêu cầu agent thực hiện một việc (\"hãy chất vấn tôi về thiết kế workflow\").",[481,1167,1168,1171],{},[441,1169,1170],{},"Gợi ý lựa chọn (Selection prompt)"," — Yêu cầu của người dùng, cùng với mô tả của tất cả các kỹ năng hiện có, được gửi đến LLM.",[481,1173,1174,1177],{},[441,1175,1176],{},"LLM lựa chọn"," — LLM so sánh yêu cầu với từng mô tả kỹ năng và trả về (các) kỹ năng phù hợp.",[481,1179,1180,1183],{},[441,1181,1182],{},"Xác nhận"," — Agent hiển thị kỹ năng được đề xuất cho người dùng để xác nhận (hoặc từ chối\u002Fđiều chỉnh) lựa chọn.",[481,1185,1186,1189,1190,1194,1195,455],{},[441,1187,1188],{},"Tải hướng dẫn"," — Agent truy xuất hướng dẫn ",[1191,1192,1193],"em",{},"đầy đủ"," cho kỹ năng đã xác nhận: chính là phần nội dung của ",[473,1196,1042],{},[481,1198,1199,1202,1203,1206],{},[441,1200,1201],{},"Gợi ý thực thi (Execution prompt)"," — Yêu cầu của người dùng ",[441,1204,1205],{},"cộng với hướng dẫn của kỹ năng đã chọn"," được gửi đến LLM.",[481,1208,1209,1212],{},[441,1210,1211],{},"Phản hồi"," — LLM tạo ra kết quả đầu ra, chính là câu hỏi chất vấn đầu tiên.",[434,1214,1215,1216,1223],{},"Bây giờ, hãy sử dụng kỹ năng ",[484,1217,1220],{"href":1218,"rel":1219},"https:\u002F\u002Fgithub.com\u002Fcoleam00\u002Fexcalidraw-diagram-skill",[488],[473,1221,1222],{},"excalidraw-diagram-skill"," để minh họa cách một kỹ năng có kèm theo tài liệu tham chiếu hoạt động:",[434,1225,1226],{},[884,1227],{"alt":1228,"src":1229},"Biểu đồ trình tự thể hiện tác tử AI thực thi một kỹ năng được tải cùng với các tệp tham chiếu và mẫu bên ngoài","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",[1153,1231,1156],{"id":1232},"các-bước-chi-tiết-1",[1158,1234,1235,1240,1245,1254,1259,1272,1280],{},[481,1236,1237,1239],{},[441,1238,1164],{}," — Người dùng yêu cầu agent thực hiện một việc (\"vẽ sơ đồ workflow của quy trình triển khai\").",[481,1241,1242,1171],{},[441,1243,1244],{},"Gợi ý lựa chọn",[481,1246,1247,1249,1250,1253],{},[441,1248,1176],{}," — LLM so sánh yêu cầu với từng mô tả và trả về kỹ năng phù hợp. Ở đây, yêu cầu \"vẽ sơ đồ workflow\" khớp với mô tả của ",[473,1251,1252],{},"excalidraw-diagram",", vì vậy nó được chọn.",[481,1255,1256,1258],{},[441,1257,1182],{}," — Agent hiển thị kỹ năng được đề xuất cho người dùng, người dùng sẽ xác nhận hoặc điều chỉnh lựa chọn đó.",[481,1260,1261,1189,1263,1265,1266,1268,1269,1271],{},[441,1262,1188],{},[1191,1264,1193],{}," cho kỹ năng đã xác nhận: phần nội dung của ",[473,1267,1042],{}," và bất kỳ tệp tham chiếu nào (đối với ",[473,1270,1252],{},", tệp này bao gồm bảng màu, lược đồ JSON và các mẫu phần tử).",[481,1273,1274,1202,1277,1279],{},[441,1275,1276],{},"Gợi ý thực thi",[441,1278,1205],{}," được gửi đến LLM. Mô hình hiện đã có phương pháp luận chi tiết cần thiết.",[481,1281,1282,1284,1285,1288],{},[441,1283,1211],{}," — LLM tạo ra kết quả đầu ra (một tệp JSON ",[473,1286,1287],{},".excalidraw","), tệp này được agent gửi lại cho người dùng.",[429,1290,1292],{"id":1291},"kỹ-năng-của-agent-ai-so-với-công-cụ-tools-và-mcp","Kỹ năng của Agent AI so với Công cụ (Tools) và MCP",[434,1294,1295,1296,1299],{},"Kỹ năng không thay thế cho gợi ý (prompts), công cụ (tools) hay MCP. Công cụ và tích hợp MCP giúp mở rộng phạm vi tiếp cận của agent tới các hệ thống bên ngoài — chẳng hạn như truy vấn cơ sở dữ liệu, gọi một API, v.v. Trong khi đó, kỹ năng giúp làm sâu sắc thêm kiến thức chuyên môn (",[1191,1297,1298],{},"know-how",") của agent để hoàn thành một tác vụ cụ thể.",[434,1301,1302,1303,1306],{},"Một MCP như ",[484,1304,1305],{"href":395},"Thiết lập NetSuite MCP trên ChatGPT và Claude"," cho phép agent trả lời các câu hỏi của người dùng bằng cách truy cập dữ liệu tài chính và hoạt động trực tiếp trong NetSuite. Sau đó, một kỹ năng báo cáo hoạt động NetSuite sẽ hướng dẫn agent cách biên soạn báo cáo đó và trình bày câu trả lời dưới dạng báo cáo hoàn chỉnh cho người dùng.",[434,1308,1309],{},"Một số kịch bản điển hình để sử dụng kỹ năng bao gồm:",[478,1311,1312,1315,1318],{},[481,1313,1314],{},"Quy trình làm việc nhiều bước (multi-step workflows)",[481,1316,1317],{},"Xử lý tài liệu, chẳng hạn như trích xuất dữ liệu từ tệp PDF",[481,1319,1320],{},"Quy chuẩn tạo mã nguồn (code-generation)",[429,1322,1324],{"id":1323},"cách-tạo-kỹ-năng-cho-agent-ai","Cách tạo kỹ năng cho Agent AI",[1158,1326,1327,1337,1351,1360],{},[481,1328,1329,1332,1333,1336],{},[441,1330,1331],{},"Tạo một thư mục"," được đặt tên theo kỹ năng (ví dụ: ",[473,1334,1335],{},"netsuite-operation-report\u002F",").",[481,1338,1339,1344,1345,1347,1348,1350],{},[441,1340,1341,1342],{},"Viết tệp ",[473,1343,1042],{}," bao gồm một trường ",[473,1346,1073],{},", một ",[473,1349,1086],{}," sắc bén và một phần nội dung hướng dẫn ngắn gọn (dưới 200 từ).",[481,1352,1353,1356,1357,1359],{},[441,1354,1355],{},"Thêm tài nguyên"," mà tác vụ cần — tài liệu tham chiếu, biểu mẫu (templates), tập lệnh (scripts). Giữ cho tệp ",[473,1358,1042],{}," ngắn gọn và tạo liên kết đến các tài liệu chi tiết.",[481,1361,1362,1365,1366,1369],{},[441,1363,1364],{},"Cài đặt kỹ năng"," ở nơi agent có thể phát hiện ra nó. Tham khảo bài viết ",[484,1367,1368],{"href":359},"Quản lý tập trung các kỹ năng cho Agent AI"," để biết cách quản lý các kỹ năng trên nhiều agent khác nhau.",[434,1371,1372],{},"Một số mẹo để viết kỹ năng hiệu quả:",[478,1374,1375,1378,1384,1387],{},[481,1376,1377],{},"Hãy viết mô tả hướng đến cơ chế kích hoạt của hệ thống (trigger), thay vì hướng tới người đọc là con người.",[481,1379,1380,1381,1383],{},"Giữ cho tệp ",[473,1382,1042],{}," tinh gọn — dưới 200 từ. Đặt các trường hợp tổng quát trong nội dung chính; chuyển các trường hợp đặc biệt sang tài liệu tham chiếu bên ngoài.",[481,1385,1386],{},"Sử dụng tập lệnh (scripts) cho bất kỳ tác vụ có tính xác định nào. Đừng yêu cầu LLM thực hiện các phép tính số học thuần túy.",[481,1388,1389],{},"Quản lý phiên bản chặt chẽ. Đưa tệp vào hệ thống Git của bạn.",[429,1391,950],{"id":949},[434,1393,1394,1395,1398,1399,1402],{},"Khác với các công cụ và MCP định nghĩa ",[1191,1396,1397],{},"những gì cần kết nối",", kỹ năng của agent đóng gói ",[1191,1400,1401],{},"cách thức thực hiện công việc",". Chúng là một phần bổ sung thiết yếu chứ không phải là sự thay thế.",[434,1404,1405],{},"Bằng cách tận dụng cơ chế công bố lũy tiến, các kỹ năng giúp cửa sổ ngữ cảnh của agent luôn sạch sẽ và hoạt động hiệu quả — chỉ tải các hướng dẫn chi tiết, tài liệu tham chiếu và tập lệnh thực thi khi yêu cầu của người dùng thực sự kích hoạt chúng.",[989,1407,1408],{},"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":515,"depth":521,"links":1410},[1411,1412,1416,1417,1418],{"id":1031,"depth":515,"text":1032},{"id":1132,"depth":515,"text":1133,"children":1413},[1414,1415],{"id":1155,"depth":521,"text":1156},{"id":1232,"depth":521,"text":1156},{"id":1291,"depth":515,"text":1292},{"id":1323,"depth":515,"text":1324},{"id":949,"depth":515,"text":950},[1420],"ai-agents","2026-06-26","Khám phá khái niệm kỹ năng của Agent AI, cơ chế công bố lũy tiến và hướng dẫn thực tế để tự xây dựng các kỹ năng tùy chỉnh có thể tái sử dụng hiệu quả hơn.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FAI%20Agent%20Skills%20What%20They%20Are%20%26%20How%20to%20Create%20Them\u002FVI-AI-Agent-Skills-What-They-Are-%26-How-to-Create-Them.webp","Hướng dẫn kỹ năng Agent AI: Tạo workflow tái sử dụng",{"schemaOrg":1426,"robots":1012,"sitemap":1428},[1427],{"@type":1011,"headline":1026,"description":1422},{"lastmod":1421},{"title":1424,"description":1422,"ogTitle":1026,"ogDescription":1422,"twitterTitle":1026,"twitterDescription":1422},"vi\u002Farticle\u002Fai-agent-skills-what-they-are-how-to-create-them",[1432,1433,1434,1435],"Tác tử AI","Kỹ năng tác tử","Quy trình làm việc tái sử dụng","Hướng dẫn AI","EXntbaG3b7-3Jj5AQqtzIBwpIcSdxcAlZbj79FPeteY",{"id":1438,"title":1439,"author":1020,"body":1440,"category":2238,"date":2239,"description":2240,"extension":1004,"image":2241,"imageAlt":2242,"isPublished":1007,"meta":2243,"minRead":569,"navigation":1007,"path":313,"seo":2249,"stem":2250,"tags":2251,"updatedAt":1020,"__hash__":2256},"article\u002Fvi\u002Farticle\u002Fuse-cloudflare-as-ai-memory.md","Xây dựng hệ thống bộ nhớ AI vĩnh viễn trên Cloudflare",{"type":426,"value":1441,"toc":2220},[1442,1446,1449,1452,1456,1459,1473,1477,1484,1498,1501,1504,1548,1552,1634,1638,1664,1781,1792,1796,1801,1846,1870,1874,1879,1952,1957,1961,1995,2003,2042,2046,2078,2082,2090,2095,2125,2129,2169,2171,2174,2177,2180,2183,2217],[429,1443,1445],{"id":1444},"tầm-quan-trọng-của-bộ-nhớ-ai-vĩnh-viễn-đối-với-agent","Tầm quan trọng của bộ nhớ AI vĩnh viễn đối với Agent",[434,1447,1448],{},"Khi các trợ lý ảo AI ngày càng tích hợp sâu rộng vào đời sống và công việc hàng ngày, chúng ta thường xuyên đối mặt với vấn đề \"ngữ cảnh trống\" (blank context). Các quyết định hoặc thông tin trao đổi từ tuần trước đều bị lãng quên, buộc chúng ta phải nhập lại cùng một thông tin về stack công nghệ và cấu hình lại các tùy chọn người dùng cho mỗi phiên làm việc mới.",[434,1450,1451],{},"Thay vì phải bắt đầu lại từ con số không mỗi lần trò chuyện, chúng ta cần xây dựng một hệ thống bộ nhớ có khả năng tự tiến hóa, liên tục thấu hiểu các quyết định của người dùng và loại bỏ hoàn toàn việc lặp lại ngữ cảnh không cần thiết.",[429,1453,1455],{"id":1454},"so-sánh-hệ-thống-bộ-nhớ-ai-tự-host-và-bộ-nhớ-tích-hợp","So sánh hệ thống bộ nhớ AI tự host và bộ nhớ tích hợp",[434,1457,1458],{},"Nhiều Agent AI hiện nay đi kèm với bộ nhớ tích hợp sẵn, nhưng thực tế chúng ta ít khi chỉ dùng duy nhất một Agent cho mọi công việc. Chúng ta dùng Claude để thiết kế và xây dựng kiến trúc dự án; dùng Kimi để lập trình; và dùng ChatGPT để nghiên cứu chuyên sâu. Ngữ cảnh không thể chia sẻ chéo giữa các Agent này; chúng hoàn toàn bị cô lập trong từng công cụ riêng biệt.",[434,1460,1461,1462,1467,1468,1472],{},"Từ góc độ kỹ thuật phần mềm, chúng ta không tin tưởng vào các hệ thống đóng (black boxes). Chúng ta cần một hệ thống bộ nhớ AI có thể quan sát, kiểm tra và hoàn toàn nằm dưới quyền kiểm soát của mình. Dự án mã nguồn mở ",[484,1463,1466],{"href":1464,"rel":1465},"https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fsecond-brain-cloudflare\u002Ftree\u002Fmain",[488],"Second Brain",", một bản fork từ ",[484,1469,1470],{"href":1470,"rel":1471},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare",[488],", cung cấp một hệ thống bộ nhớ vĩnh viễn và tự host với sự hỗ trợ đầy đủ cho Model Context Protocol (MCP). Bất kỳ Agent AI nào tương thích như Claude, ChatGPT hoặc Kimi Code đều có thể dùng chung một ngữ cảnh bộ nhớ thống nhất này.",[429,1474,1476],{"id":1475},"cách-xây-dựng-bộ-nhớ-ai-second-brain-trên-cloudflare","Cách xây dựng bộ nhớ AI Second Brain trên Cloudflare",[434,1478,1479,1480,1483],{},"Hệ thống bộ nhớ Second Brain được triển khai trên nền tảng ",[441,1481,1482],{},"Cloudflare Workers",", cung cấp một cơ sở hạ tầng serverless phân tán toàn cầu với độ trễ cực kỳ thấp. Điều này đảm bảo rằng các thao tác tìm kiếm bộ nhớ (recall) và lưu trữ diễn ra gần như tức thì trong vòng lặp tư duy của AI.",[434,1485,1486,1487,1490,1491,1494,1495,1497],{},"Mô hình embedding từ ",[441,1488,1489],{},"Workers AI"," được sử dụng để tạo ra các vector sém thức. Các embedding này được lưu trữ trong ",[441,1492,1493],{},"Cloudflare Vectorize",", một cơ sở dữ liệu vector phân tán toàn cầu được tối ưu hóa cao. ",[441,1496,1493],{}," sẽ thực hiện các truy vấn tìm kiếm độ tương đồng cosine (cosine similarity) để xác định chính xác các ký ức có liên quan về mặt ngữ nghĩa.",[434,1499,1500],{},"Second Brain cũng tích hợp sẵn cơ chế chống trùng lặp và hợp nhất thông minh. Các nội dung có độ tương đồng dưới 85% sẽ được lưu trực tiếp; nếu không, chúng sẽ bị chặn hoặc đánh dấu là đối tượng trùng lặp tiềm năng. Các đoạn văn bản dài vượt quá 1.600 ký tự sẽ được cắt nhỏ dựa trên ranh giới câu hoặc dấu xuống dòng, giữ lại phần chồng lấp (overlap) 200 ký tự để duy trì tính liên tục của ngữ cảnh. Mỗi mảnh nhỏ sau đó được vector hóa để đảm bảo độ khớp chính xác cao nhất.",[434,1502,1503],{},"Các công cụ sau đây được cấu hình dưới dạng giao diện MCP để các Agent AI gọi trực tiếp:",[478,1505,1506,1512,1518,1524,1530,1536,1542],{},[481,1507,1508,1511],{},[473,1509,1510],{},"remember",": Lưu trữ ý tưởng, quyết định, sở thích và ngữ cảnh dự án nói chung.",[481,1513,1514,1517],{},[473,1515,1516],{},"append",": Thêm thông tin cập nhật mới vào một ký ức đã có.",[481,1519,1520,1523],{},[473,1521,1522],{},"update",": Thay thế hoàn toàn một ký ức hiện tại.",[481,1525,1526,1529],{},[473,1527,1528],{},"recall",": Tìm kiếm ký ức dựa trên ý nghĩa sém nghĩa của chúng thay vì so khớp từ khóa chính xác.",[481,1531,1532,1535],{},[473,1533,1534],{},"list_recent",": Liệt kê các ký ức vừa được lưu gần đây.",[481,1537,1538,1541],{},[473,1539,1540],{},"forget",": Xóa vĩnh viễn một bản ghi ký ức.",[481,1543,1544,1547],{},[473,1545,1546],{},"link\u002Fconnections",": Kết nối các ký ức có liên quan với nhau (tính năng đồ thị v2).",[1153,1549,1551],{"id":1550},"cài-đặt-second-brain-trên-cloudflare","Cài đặt Second Brain trên Cloudflare",[1158,1553,1554,1572,1579,1586,1593,1600,1611,1617,1620,1627],{},[481,1555,1556,1557,1560,1561,1566,1567,1571],{},"Click vào ",[473,1558,1559],{},"Deploy to Cloudflare"," trên trang ",[484,1562,1565],{"href":1563,"rel":1564},"https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fsecond-brain-cloudflare",[488],"Github repo",". [[",[884,1568],{"alt":1569,"src":1570},"Trang GitHub hiển thị nổi bật nút Deploy to Cloudflare","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fdeploy-to-cloudflare-button.webp","]]",[481,1573,1574,1575],{},"Điền đầy đủ thông tin vào form Cloudflare Worker hiển thị.\n",[884,1576],{"alt":1577,"src":1578},"Biểu mẫu cấu hình triển khai Cloudflare Workers","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-worker-deployment-form.webp",[481,1580,1581,1582],{},"Nhập '384' cho Dimensions; chọn 'cosine' cho Metric; và click nút Deploy.\n",[884,1583],{"alt":1584,"src":1585},"Màn hình cấu hình tạo cơ sở dữ liệu Cloudflare Vectorize","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-vectorize-configuration.webp",[481,1587,1588,1589],{},"Dưới đây là tổng quan giao diện Second Brain của bạn trong Cloudflare Worker:\n",[884,1590],{"alt":1591,"src":1592},"Bảng điều khiển tổng quan của Second Brain worker đã triển khai","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-worker-second-brain-overview.webp",[481,1594,1595,1596],{},"Mở tab 'Settings', sau đó click vào biểu tượng chỉnh sửa ở biến 'AUTH_TOKEN' để tạo một token bảo mật:\n",[884,1597],{"alt":1598,"src":1599},"Cấu hình biến của Cloudflare Worker làm nổi bật AUTH_TOKEN","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-worker-auth-token-settings.webp",[481,1601,1602,1603,1607],{},"Click vào link 'Rotate' để có thể nhập giá trị mới: ",[884,1604],{"alt":1605,"src":1606},"Màn hình chỉnh sửa và luân chuyển biến AUTH_TOKEN","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-worker-auth-token-rotate.webp",[884,1608],{"alt":1609,"src":1610},"Nhập chuỗi ngẫu nhiên đã tạo vào trường giá trị AUTH_TOKEN","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fcloudflare-worker-auth-token-value-input.webp",[481,1612,842,1613,1616],{},[473,1614,1615],{},"openssl rand -base64 32"," tại terminal macOS để tạo một chuỗi ngẫu nhiên bảo mật và dán vào trường nhập liệu 'Value'.",[481,1618,1619],{},"Click nút 'Deploy' để lưu giá trị mới của biến 'AUTH_TOKEN'.",[481,1621,1622,1623],{},"Mở URL worker Second Brain của bạn trên trình duyệt web.\n",[884,1624],{"alt":1625,"src":1626},"Màn hình đăng nhập Web UI của Second Brain với trường nhập Bearer Token","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fsecond-brain-web-ui-login.webp",[481,1628,1629,1630,1633],{},"Nhập token 'AUTH_TOKEN' đã tạo vào ô ",[473,1631,1632],{},"Bearer token"," và click nút 'Connect' để đăng nhập vào bảng điều khiển Web UI.",[1153,1635,1637],{"id":1636},"tích-hợp-claude-desktop-qua-giao-thức-mcp","Tích hợp Claude Desktop qua giao thức MCP",[1158,1639,1640,1647,1654],{},[481,1641,1642,1643],{},"Click vào 'Customize' trong phần cài đặt của Claude Desktop.\n",[884,1644],{"alt":1645,"src":1646},"Giao diện Claude Desktop chỉ vào nút Customize","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-customize-button.webp",[481,1648,1649,1650],{},"Click vào 'Developer' để mở và chỉnh sửa trực tiếp file cấu hình máy chủ MCP:\n",[884,1651],{"alt":1652,"src":1653},"Menu cài đặt Developer của Desktop để truy cập cấu hình MCP","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-developer-menu.webp",[481,1655,1656,1657,1660,1661,1077],{},"Thêm khối mã sau vào phần ",[473,1658,1659],{},"mcpServers"," trong file ",[473,1662,1663],{},"claude_desktop_config.json",[498,1665,1669],{"className":1666,"code":1667,"language":1668,"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",[473,1670,1671,1689,1713,1727,1739,1750,1761,1771,1776],{"__ignoreMap":424},[506,1672,1673,1676,1679,1682,1686],{"class":508,"line":509},[506,1674,1675],{"class":1076},"    \"",[506,1677,1678],{"class":1080},"second-brain",[506,1680,1681],{"class":1076},"\"",[506,1683,1685],{"class":1684},"sTEyZ",": ",[506,1687,1688],{"class":1076},"{\n",[506,1690,1691,1694,1698,1700,1702,1705,1708,1710],{"class":508,"line":515},[506,1692,1693],{"class":1076},"      \"",[506,1695,1697],{"class":1696},"spNyl","command",[506,1699,1681],{"class":1076},[506,1701,1077],{"class":1076},[506,1703,1704],{"class":1076}," \"",[506,1706,1707],{"class":1080},"npx",[506,1709,1681],{"class":1076},[506,1711,1712],{"class":1076},",\n",[506,1714,1715,1717,1720,1722,1724],{"class":508,"line":521},[506,1716,1693],{"class":1076},[506,1718,1719],{"class":1696},"args",[506,1721,1681],{"class":1076},[506,1723,1077],{"class":1076},[506,1725,1726],{"class":1076}," [\n",[506,1728,1729,1732,1735,1737],{"class":508,"line":527},[506,1730,1731],{"class":1076},"        \"",[506,1733,1734],{"class":1080},"mcp-remote",[506,1736,1681],{"class":1076},[506,1738,1712],{"class":1076},[506,1740,1741,1743,1746,1748],{"class":508,"line":533},[506,1742,1731],{"class":1076},[506,1744,1745],{"class":1080},"https:\u002F\u002F\u003Cyour-worker-url>\u002Fmcp",[506,1747,1681],{"class":1076},[506,1749,1712],{"class":1076},[506,1751,1752,1754,1757,1759],{"class":508,"line":539},[506,1753,1731],{"class":1076},[506,1755,1756],{"class":1080},"--header",[506,1758,1681],{"class":1076},[506,1760,1712],{"class":1076},[506,1762,1763,1765,1768],{"class":508,"line":545},[506,1764,1731],{"class":1076},[506,1766,1767],{"class":1080},"Authorization: Bearer \u003Cyour-token>",[506,1769,1770],{"class":1076},"\"\n",[506,1772,1773],{"class":508,"line":551},[506,1774,1775],{"class":1076},"      ]\n",[506,1777,1778],{"class":508,"line":557},[506,1779,1780],{"class":1076},"    }\n",[434,1782,1783,1787,1788],{},[884,1784],{"alt":1785,"src":1786},"File cấu hình JSON MCP của Claude Desktop chứa máy chủ Second Brain","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-mcp-config-json.webp","\n4. Khởi động lại Claude Desktop và kiểm tra danh sách 'Local MCP servers'. Trạng thái cần hiển thị là 'running' (đang hoạt động).\n",[884,1789],{"alt":1790,"src":1791},"Claude Desktop hiển thị trạng thái hoạt động của máy chủ Second Brain MCP","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-mcp-status-running.webp",[1153,1793,1795],{"id":1794},"tích-hợp-claude-code-qua-giao-thức-mcp","Tích hợp Claude Code qua giao thức MCP",[478,1797,1798],{},[481,1799,1800],{},"Chạy lệnh sau trong terminal để thêm máy chủ MCP mới:",[498,1802,1806],{"className":1803,"code":1804,"language":1805,"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",[473,1807,1808],{"__ignoreMap":424},[506,1809,1810,1813,1816,1819,1822,1825,1828,1831,1834,1837,1840,1843],{"class":508,"line":509},[506,1811,1812],{"class":1066},"claude",[506,1814,1815],{"class":1080}," mcp",[506,1817,1818],{"class":1080}," add",[506,1820,1821],{"class":1080}," --transport",[506,1823,1824],{"class":1080}," http",[506,1826,1827],{"class":1080}," second-brain",[506,1829,1830],{"class":1080}," https:\u002F\u002F",[506,1832,1833],{"class":1076},"\u003C",[506,1835,1836],{"class":1080},"your-worker-ur",[506,1838,1839],{"class":1684},"l",[506,1841,1842],{"class":1076},">",[506,1844,1845],{"class":1080},"\u002Fmcp\n",[478,1847,1848,1854],{},[481,1849,1850,1851,455],{},"Claude Code sẽ tự động phát hiện endpoint yêu cầu OAuth và mở trang đăng nhập trên trình duyệt web để bạn xác thực ",[473,1852,1853],{},"AUTH_TOKEN",[481,1855,1856,1857,1860,1861,1864,1865,455],{},"Tạo file ",[473,1858,1859],{},"CLAUDE.md"," trong thư mục ",[473,1862,1863],{},"~\u002F.claude"," với các chỉ dẫn chi tiết lấy từ ",[484,1866,1869],{"href":1867,"rel":1868},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare\u002Fblob\u002Fmain\u002FAI_Instructions\u002FCLAUDE_INSTRUCTIONS.md",[488],"CLAUDE_INSTRUCTIONS.md",[1153,1871,1873],{"id":1872},"tích-hợp-gemini-cli-qua-giao-thức-mcp","Tích hợp Gemini CLI qua giao thức MCP",[1158,1875,1876],{},[481,1877,1878],{},"Thêm cấu hình máy chủ MCP sau vào file '.\u002F.gemini\u002Fsettings.json' của bạn:",[498,1880,1882],{"className":1666,"code":1881,"language":1668,"meta":424,"style":424},"    \"second-brain\": {\n      \"httpUrl\": \"https:\u002F\u002F\u003Cyour-worker-url>\u002Fmcp\",\n      \"oauth\": {\n        \"enabled\": true\n      }\n    }\n",[473,1883,1884,1896,1915,1929,1943,1948],{"__ignoreMap":424},[506,1885,1886,1888,1890,1892,1894],{"class":508,"line":509},[506,1887,1675],{"class":1076},[506,1889,1678],{"class":1080},[506,1891,1681],{"class":1076},[506,1893,1685],{"class":1684},[506,1895,1688],{"class":1076},[506,1897,1898,1900,1903,1905,1907,1909,1911,1913],{"class":508,"line":515},[506,1899,1693],{"class":1076},[506,1901,1902],{"class":1696},"httpUrl",[506,1904,1681],{"class":1076},[506,1906,1077],{"class":1076},[506,1908,1704],{"class":1076},[506,1910,1745],{"class":1080},[506,1912,1681],{"class":1076},[506,1914,1712],{"class":1076},[506,1916,1917,1919,1922,1924,1926],{"class":508,"line":521},[506,1918,1693],{"class":1076},[506,1920,1921],{"class":1696},"oauth",[506,1923,1681],{"class":1076},[506,1925,1077],{"class":1076},[506,1927,1928],{"class":1076}," {\n",[506,1930,1931,1933,1936,1938,1940],{"class":508,"line":527},[506,1932,1731],{"class":1076},[506,1934,1935],{"class":1066},"enabled",[506,1937,1681],{"class":1076},[506,1939,1077],{"class":1076},[506,1941,1942],{"class":1076}," true\n",[506,1944,1945],{"class":508,"line":533},[506,1946,1947],{"class":1076},"      }\n",[506,1949,1950],{"class":508,"line":539},[506,1951,1780],{"class":1076},[1158,1953,1954],{"start":515},[481,1955,1956],{},"Khởi chạy Gemini CLI.",[1153,1958,1960],{"id":1959},"thử-nghiệm-second-brain-với-các-ai-agent","Thử nghiệm Second Brain với các AI Agent",[1158,1962,1963,1974,1988],{},[481,1964,1965,1966,1969,1970],{},"Khi cấu hình một bảng màu thương hiệu cơ bản trên ",[441,1967,1968],{},"Claude Desktop",", mặc định Second Brain không được gọi ngay lập tức.\n",[884,1971],{"alt":1972,"src":1973},"Thử nghiệm đầu tiên trong Claude Desktop khi chưa kích hoạt lớp bộ nhớ Second Brain","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-first-run-brand-palette.webp",[481,1975,1976,1977,1980,1981,1983,1984],{},"Khi dùng các từ khóa đơn giản như 'remember', chỉ có công cụ tích hợp sẵn cục bộ ",[473,1978,1979],{},"memory_user-edits"," trên ",[441,1982,1968],{}," hoạt động, còn lớp lưu trữ đám mây Second Brain thì bị bỏ qua.\n",[884,1985],{"alt":1986,"src":1987},"Claude Desktop tự động chuyển hướng sang công cụ chỉnh sửa cục bộ thay vì Second Brain","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-remember-built-in-tool-fallback.webp",[481,1989,1990,1991,1994],{},"Khi gửi lệnh sau trên ",[441,1992,1993],{},"Claude Code",", kết nối với Second Brain đã được kích hoạt thành công:",[498,1996,2001],{"className":1997,"code":1999,"language":2000},[1998],"language-text","Remember Our brand palette uses `#1a1a2e` as primary, `#16213e` as secondary, and `#e94560` as accent. Never use pure black.\"\n","text",[473,2002,1999],{"__ignoreMap":424},[434,2004,2005,2009,2010,2013,2014,2018,2019,2022,2023,2025,2026,2030,2031,2034,2035,2018,2039],{},[884,2006],{"alt":2007,"src":2008},"Cửa sổ terminal Claude Code hiển thị việc kích hoạt thành công Second Brain MCP","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-code-second-brain-mcp-called.webp","\n4. Xác minh cấu hình màu mới đã được lưu trực tiếp trên bảng điều khiển của ",[441,2011,2012],{},"Second Brain trên Cloudflare",":\n",[884,2015],{"alt":2016,"src":2017},"Xác minh các mã màu thương hiệu đã lưu trên Web UI cơ sở dữ liệu Second Brain","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fsecond-brain-web-ui-color-verification.webp","\n- ",[1191,2020,2021],{},"Claude Code có thể hoạt động hoàn toàn tự động vì file chỉ dẫn CLAUDE_INSTRUCTIONS.md trong dự án có chứa các quy tắc trỏ đến từ khóa của 'Second Brain'.","\n5. Để sử dụng kết nối này trên ",[441,2024,1968],{},", bạn cần chỉ định rõ cụm từ 'Second Brain' trong prompt trò chuyện để ép Agent ghi hoặc đọc ở lớp bộ nhớ vĩnh viễn này.\n",[884,2027],{"alt":2028,"src":2029},"Kích hoạt Second Brain trong Claude Desktop bằng cách nhắc đến từ khóa rõ ràng","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fclaude-desktop-second-brain-explicit-trigger.webp","\n6. Điều tương tự cũng áp dụng cho ",[441,2032,2033],{},"Gemini CLI",", bạn cần nhắc đến từ khóa 'Second Brain' để kích hoạt công cụ MCP tương ứng.\n",[884,2036],{"alt":2037,"src":2038},"Cửa sổ terminal Gemini CLI trình bày việc gọi thành công Second Brain MCP","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fgemini-cli-second-brain-trigger.webp",[1191,2040,2041],{},"Bằng cách thêm các chỉ dẫn tương tự vào file GEMINI.md, mô phỏng theo cách làm của CLAUDE_INSTRUCTIONS.md, hệ thống sẽ tự động gọi Second Brain chạy ngầm mà bạn không cần phải gõ từ khóa một cách thủ công nữa.",[1153,2043,2045],{"id":2044},"tiện-ích-mở-rộng-trên-trình-duyệt-web","Tiện ích mở rộng trên trình duyệt Web",[478,2047,2048,2051],{},[481,2049,2050],{},"Có sẵn các tiện ích mở rộng cho các trình duyệt phổ biến như Chrome, Firefox và Microsoft Edge.",[481,2052,2053,2054],{},"Các tính năng chính bao gồm:\n",[478,2055,2056,2062,2068],{},[481,2057,2058,2061],{},[441,2059,2060],{},"Lưu trang hiện tại"," — lưu ngay tiêu đề và địa chỉ URL của trang vào Second Brain.",[481,2063,2064,2067],{},[441,2065,2066],{},"Lưu văn bản bôi đen"," — bôi đen đoạn văn bản bất kỳ trên trang trước khi click vào biểu tượng tiện ích; đoạn trích dẫn sẽ được lưu kèm theo tiêu đề và URL nguồn.",[481,2069,2070,2073,2074,2077],{},[441,2071,2072],{},"Thêm ghi chú nhanh"," — viết thêm ghi chú nhanh hoặc gán các ",[473,2075,2076],{},"#hashtags"," trực tiếp trên cửa sổ popup của tiện ích trước khi bấm lưu; các hashtag sẽ tự động được trích xuất thành các nhãn phân loại.",[1153,2079,2081],{"id":2080},"đồng-bộ-hóa-kiến-thức-cá-nhân-với-plugin-obsidian","Đồng bộ hóa kiến thức cá nhân với Plugin Obsidian",[478,2083,2084,2087],{},[481,2085,2086],{},"Có sẵn một plugin dành riêng cho Obsidian để đồng bộ hóa các ghi chú cá nhân từ Obsidian Vault trực tiếp lên Second Brain trên Cloudflare.",[481,2088,2089],{},"Bạn có thể đặt các nhãn tag cụ thể trên các ghi chú muốn cho phép đồng bộ lên bộ nhớ đám mây vĩnh viễn.",[2091,2092,2094],"h4",{"id":2093},"cài-đặt-plugin-obsidian","Cài đặt Plugin Obsidian",[1158,2096,2097,2104,2111,2118],{},[481,2098,2099,2100],{},"Mở Obsidian → Settings → Community Plugins\n",[884,2101],{"alt":2102,"src":2103},"Bảng cài đặt Obsidian điều hướng đến mục Community Plugins","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-settings-community-plugins.webp",[481,2105,2106,2107],{},"Click vào nút 'Browse'.\n",[884,2108],{"alt":2109,"src":2110},"Trang tìm kiếm plugin cộng đồng Obsidian hiển thị nút Browse","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-community-plugins-browse.webp",[481,2112,2113,2114],{},"Tìm kiếm từ khóa 'Second Brain Sync'.\n",[884,2115],{"alt":2116,"src":2117},"Tìm kiếm plugin Second Brain Sync trên kho ứng dụng Obsidian","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-community-plugins-search-second-brain.webp",[481,2119,2120,2121],{},"Click nút 'Install' sau đó click 'Enable'.\n",[884,2122],{"alt":2123,"src":2124},"Cài đặt và kích hoạt plugin Second Brain Sync trong Obsidian","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-plugin-install-and-enable.webp",[2091,2126,2128],{"id":2127},"cấu-hình-plugin-obsidian","Cấu hình Plugin Obsidian",[1158,2130,2131,2134,2141,2148,2155,2162],{},[481,2132,2133],{},"Truy cập Obsidian → Settings → Second Brain Sync",[481,2135,2136,2137],{},"Nhập các thông tin 'URL' và 'Auth token' của Worker của bạn vào các ô tương ứng.\n",[884,2138],{"alt":2139,"src":2140},"Nhập URL Worker và Token ủy quyền trong cài đặt plugin Obsidian","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-plugin-configuration-credentials.webp",[481,2142,2143,2144],{},"Click nút 'Test' để xác minh kết nối từ xa đã sẵn sàng hoạt động.\n",[884,2145],{"alt":2146,"src":2147},"Thử nghiệm kết nối của plugin Obsidian hiển thị xác thực thành công","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-plugin-connection-test-success.webp",[481,2149,2150,2151],{},"Cấu hình các hành vi đồng bộ. Đặt tag kích hoạt đồng bộ ở mục 'Sync tag' và bật tùy chọn 'Auto-sync on save'.\n",[884,2152],{"alt":2153,"src":2154},"Cấu hình Sync Tag và kích hoạt tự động đồng bộ khi lưu trong Obsidian","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-plugin-sync-behavior-settings.webp",[481,2156,2157,2158],{},"Tạo một ghi chú mới trong Obsidian kèm theo tag 'second-brain' (như đã cấu hình trong bảng thiết lập).\n",[884,2159],{"alt":2160,"src":2161},"Tạo một ghi chú Obsidian mới có gắn nhãn second-brain để đồng bộ hóa","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fobsidian-note-with-sync-tag.webp",[481,2163,2164,2165],{},"Ghi chú này sau khi lưu sẽ lập tức được đồng bộ tự động lên thực thể Cloudflare của bạn.\n",[884,2166],{"alt":2167,"src":2168},"Xác minh ghi chú Obsidian đã đồng bộ thành công trên Web UI của Second Brain","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002Fsecond-brain-web-ui-synced-note-verification.webp",[429,2170,950],{"id":949},[434,2172,2173],{},"Second Brain mang lại một giải pháp mã nguồn mở thông minh để giải quyết một trong những rào cản gây ức chế nhất của công nghệ AI hiện nay: tình trạng mất ngữ cảnh và thiếu bộ nhớ lưu trữ dài hạn. Bằng cách kết hợp dự án này với cơ sở hạ tầng serverless có tính co giãn cao của Cloudflare, chúng ta sở hữu một lớp bộ nhớ sém thức tự host, phân tán toàn cầu và có độ trễ cực thấp. Với việc hỗ trợ giao thức MCP mở, kho tri thức này hoàn toàn có thể di động và dùng chung cho mọi Agent ảo khác nhau.",[434,2175,2176],{},"Việc tích hợp qua Obsidian còn nâng tầm kiến trúc này hơn nữa bằng cách kết nối việc ghi chép thông thường trực tiếp vào quy trình phân tích logic của AI. Các ghi chú thô của bạn được chuyển hóa thành các dữ liệu cấu trúc mà các Agent có thể thấu hiểu và khai thác bất kỳ lúc nào.",[434,2178,2179],{},"Bằng cách hợp nhất mô hình tự host, tìm kiếm sém nghĩa dạng vector và các chuẩn tích hợp mở như MCP; Second Brain đã chứng minh đây không chỉ đơn thuần là nơi lưu trữ ký ức, mà còn là nền tảng thực tiễn tuyệt vời để xây dựng một hệ sinh thái AI hiệu quả của riêng bạn.",[429,2181,2182],{"id":956},"Tài liệu tham khảo:",[478,2184,2185,2191,2197,2204,2211],{},[481,2186,2187],{},[484,2188,2189],{"href":2189,"rel":2190},"https:\u002F\u002Fwww.thesecondbrain.dev\u002F",[488],[481,2192,2193],{},[484,2194,2195],{"href":2195,"rel":2196},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare\u002Fwiki\u002FHow-It-Works",[488],[481,2198,2199],{},[484,2200,2203],{"href":2201,"rel":2202},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare\u002Fwiki\u002FConnect-to-AI-Clients",[488],"Connect to AI Clients",[481,2205,2206],{},[484,2207,2210],{"href":2208,"rel":2209},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-cloudflare\u002Fwiki\u002FObsidian-Plugin",[488],"Second Brain Obsidian Plugin",[481,2212,2213],{},[484,2214,2215],{"href":2215,"rel":2216},"https:\u002F\u002Fgithub.com\u002Frahilp\u002Fsecond-brain-obsidian-plugin",[488],[989,2218,2219],{},"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":515,"depth":521,"links":2221},[2222,2223,2224,2236,2237],{"id":1444,"depth":515,"text":1445},{"id":1454,"depth":515,"text":1455},{"id":1475,"depth":515,"text":1476,"children":2225},[2226,2227,2228,2229,2230,2231,2232],{"id":1550,"depth":521,"text":1551},{"id":1636,"depth":521,"text":1637},{"id":1794,"depth":521,"text":1795},{"id":1872,"depth":521,"text":1873},{"id":1959,"depth":521,"text":1960},{"id":2044,"depth":521,"text":2045},{"id":2080,"depth":521,"text":2081,"children":2233},[2234,2235],{"id":2093,"depth":527,"text":2094},{"id":2127,"depth":527,"text":2128},{"id":949,"depth":515,"text":950},{"id":956,"depth":515,"text":2182},[1001,1420],"2026-08-07","Tìm hiểu cách xây dựng hệ thống bộ nhớ AI vĩnh viễn và tự host trên Cloudflare với Second Brain và MCP. Chia sẻ ngữ cảnh giữa Claude và Obsidian hiệu quả.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FUse%20Cloudflare%20as%20AI%20memory\u002FVI-Use-Cloudflare-as-AI-memory.webp","Hệ thống bộ nhớ AI vĩnh viễn và tự host triển khai trên Cloudflare Workers và Vectorize với hỗ trợ giao thức MCP và đồng bộ Obsidian.",{"schemaOrg":2244,"robots":1012,"sitemap":2248},[2245],{"@type":2246,"headline":2247,"description":2240},"TechArticle","Hệ thống bộ nhớ AI tự host với Cloudflare và MCP",{"lastmod":2239},{"title":2247,"description":2240,"ogTitle":1439,"ogDescription":2240,"twitterTitle":1439,"twitterDescription":2240},"vi\u002Farticle\u002Fuse-cloudflare-as-ai-memory",[2252,2253,2254,1466,2255],"Cloudflare","MCP","Bộ nhớ AI","Obsidian","UgRl4Al24KEOOPCKlv3MMVU-krBqxz4YEiF9kwtLUIM",[2258,2511,3135],{"id":2259,"title":2260,"author":1020,"body":2261,"category":2498,"date":2499,"description":2500,"extension":1004,"image":2501,"imageAlt":2502,"isPublished":1007,"meta":2503,"minRead":551,"navigation":1007,"path":371,"seo":2507,"stem":2508,"tags":2509,"updatedAt":1020,"__hash__":2510},"article\u002Fvi\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare.md","Ngừng để lộ kho bảo mật của bạn: Bảo mật NodeWarden bằng Cloudflare",{"type":426,"value":2262,"toc":2489},[2263,2266,2269,2283,2287,2294,2297,2301,2304,2308,2338,2342,2345,2412,2416,2419,2482,2486],[434,2264,2265],{},"Ngay khi NodeWarden của bạn được hiển thị công khai trên Internet, nó sẽ bắt đầu thu hút hàng ngàn bot tự động liên tục quét tìm các lỗ hổng bảo mật 24\u002F7. Để bảo vệ dữ liệu nhạy cảm của mình, bạn cần thiết lập mức độ khóa bảo mật cao nhất có thể cho phiên bản (instance) NodeWarden của mình.",[434,2267,2268],{},"Để bảo mật NodeWarden, bạn có thể sử dụng một trong hai tính năng của Cloudflare:",[478,2270,2271,2277],{},[481,2272,2273,2276],{},[441,2274,2275],{},"Cloudflare IP Access Rules (Quy tắc truy cập IP):"," Cho phép bạn chặn, yêu cầu xác thực (challenge) hoặc cho phép lưu lượng truy cập dựa trên các địa chỉ IP hoặc quốc gia cụ thể.",[481,2278,2279,2282],{},[441,2280,2281],{},"Cloudflare Zero Trust (Khuyên dùng):"," Hoạt động như một cổng bảo mật giúp NodeWarden của bạn hoàn toàn tàng hình trước công chúng, chỉ cho phép những người dùng đã được ủy quyền đi qua.",[2091,2284,2286],{"id":2285},"tại-sao-chúng-tôi-khuyên-dùng-cloudflare-zero-trust","Tại sao chúng tôi khuyên dùng Cloudflare Zero Trust",[434,2288,2289,2290,2293],{},"Chúng tôi đặc biệt khuyên bạn nên sử dụng Cloudflare Zero Trust vì IP Access Rules bị ràng buộc với địa chỉ IP hoặc quốc gia. Điều này có nghĩa là bạn phải cập nhật thủ công các quy tắc của mình mỗi khi đi du lịch hoặc nếu bạn đang dùng IP động. Ngược lại, Cloudflare Zero Trust dựa trên ",[441,2291,2292],{},"danh tính"," của bạn chứ không phải vị trí địa lý—mang lại cho bạn quyền truy cập liền mạch và an toàn vào NodeWarden.",[2295,2296],"hr",{},[429,2298,2300],{"id":2299},"hướng-dẫn-cấu-hình","Hướng dẫn cấu hình",[434,2302,2303],{},"Hãy làm theo các bước sau để cấu hình Cloudflare Zero Trust cho NodeWarden.",[2091,2305,2307],{"id":2306},"giai-đoạn-1-bắt-đầu","Giai đoạn 1: Bắt đầu",[1158,2309,2310,2317,2324,2331],{},[481,2311,2312,2313],{},"Trên bảng điều khiển (dashboard) Cloudflare của bạn, nhấp vào 'Zero Trust' từ menu bên trái.\n",[884,2314],{"alt":2315,"src":2316},"Thanh bên của bảng điều khiển Cloudflare hiển thị tùy chọn Zero Trust được chọn trong menu điều hướng.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-dashboard-zero-trust-sidebar.webp",[481,2318,2319,2320],{},"Nhấp vào 'Access controls', sau đó nhấp vào 'Applications'.\n",[884,2321],{"alt":2322,"src":2323},"Menu điều hướng Cloudflare Zero Trust với phần Kiểm soát truy cập được mở rộng.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-zero-trust-access-controls-menu.webp",[481,2325,2326,2327],{},"Hệ thống có thể yêu cầu bạn chọn gói ('Choose a plan').\n",[884,2328],{"alt":2329,"src":2330},"Màn hình thiết lập tài khoản Cloudflare Zero Trust yêu cầu người dùng chọn gói đăng ký.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-zero-trust-choose-plan-setup.webp",[481,2332,2333,2334],{},"Nhấp vào nút 'Choose a plan' và chọn gói 'Zero Trust Free'.\n",[884,2335],{"alt":2336,"src":2337},"Trang chi tiết gói Zero Trust Free trên Cloudflare, làm nổi bật nút Chọn gói.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-zero-trust-free-plan-selection.webp",[2091,2339,2341],{"id":2340},"giai-đoạn-2-bảo-mật-giao-diện-web-của-bạn","Giai đoạn 2: Bảo mật giao diện Web của bạn",[434,2343,2344],{},"Đầu tiên, chúng ta sẽ tạo một ứng dụng để bảo vệ bảng điều khiển web của NodeWarden.",[1158,2346,2347,2354,2361,2368,2375,2382,2389,2392,2399,2402],{},[481,2348,2349,2350],{},"Nhấp vào 'Create new application' để tạo ứng dụng đầu tiên.\n",[884,2351],{"alt":2352,"src":2353},"Bảng điều khiển ứng dụng Cloudflare Access có nút Tạo ứng dụng mới.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-create-new-application.webp",[481,2355,2356,2357],{},"Chọn 'Self-hosted and private'.\n",[884,2358],{"alt":2359,"src":2360},"Cửa sổ thêm ứng dụng trong Cloudflare Access với loại ứng dụng Tự lưu trữ và riêng tư được chọn.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-add-self-hosted-application.webp",[481,2362,2363,2364],{},"Nhập tên miền (domain) của NodeWarden.\n",[884,2365],{"alt":2366,"src":2367},"Màn hình cấu hình ứng dụng Cloudflare Access hiển thị tên máy chủ công khai được đặt thành warden.techvoyage.dev.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-application-public-hostname.webp",[481,2369,2370,2371],{},"Nhấp vào 'Create new policy' để tạo một chính sách.\n",[884,2372],{"alt":2373,"src":2374},"Trang chính sách Cloudflare Access hiển thị không có chính sách nào được thêm và nút để tạo chính sách mới.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-no-policies-create-button.webp",[481,2376,2377,2378],{},"Chọn 'Emails' và nhập một email vào mục 'Policy rules'.\n",[884,2379],{"alt":2380,"src":2381},"Màn hình cấu hình quy tắc chính sách Cloudflare Access với địa chỉ email được chỉ định làm tiêu chí bao gồm.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-policy-rule-email.webp",[481,2383,2384,2385],{},"Nhập tên và chọn 'Allow' trong mục 'Policy details'.\n",[884,2386],{"alt":2387,"src":2388},"Màn hình chi tiết chính sách Cloudflare Access hiển thị tên chính sách NodeWarden-Web và hành động được đặt thành Cho phép.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-policy-details-allow.webp",[481,2390,2391],{},"Nhấp 'Save Policy' để lưu chính sách.",[481,2393,2394,2395],{},"Nhập tên và chọn '1 month' trong phần 'Details'.\n",[884,2396],{"alt":2397,"src":2398},"Bản tóm tắt cấu hình cuối cùng cho ứng dụng Cloudflare Access có tên NodeWarden-Web với thời hạn phiên là một tháng.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-application-final-details.webp",[481,2400,2401],{},"Nhấp vào 'Create' để tạo ứng dụng.",[481,2403,2404,2407,2408],{},[441,2405,2406],{},"Kiểm tra:"," Mở tên miền trên trình duyệt web, bạn sẽ thấy 'Cloudflare Access' yêu cầu nhập email.\n",[884,2409],{"alt":2410,"src":2411},"Bản xem trước màn hình đăng nhập Cloudflare Access cho NodeWarden-Web, yêu cầu nhập địa chỉ email.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-login-screen-preview.webp",[2091,2413,2415],{"id":2414},"giai-đoạn-3-cho-phép-đồng-bộ-hóa-client-bitwarden-bỏ-qua-api-api-bypass","Giai đoạn 3: Cho phép đồng bộ hóa Client BitWarden (Bỏ qua API \u002F API Bypass)",[434,2417,2418],{},"Các ứng dụng BitWarden trên máy tính và thiết bị di động không thể xử lý màn hình đăng nhập email của Cloudflare. Do đó, chúng ta cần tạo ứng dụng thứ hai cho phép lưu lượng truy cập bỏ qua (bypass) màn hình đăng nhập, dành riêng cho việc đồng bộ hóa API.",[1158,2420,2421,2431,2446,2451,2458,2465,2468,2475],{},[481,2422,2423,2424,2427,2428,455],{},"Quay lại phần Applications và nhấp vào ",[441,2425,2426],{},"Create new application",", chọn lại ",[441,2429,2430],{},"Self-hosted and private",[481,2432,2433,2434,2437,2438,2441,2442],{},"Nhập 'api\u002F",[1191,2435,2436],{},"', 'identity\u002F","', 'notifications\u002F",[1191,2439,2440],{},"' và 'icons\u002F","' vào phần Destinations.\n",[884,2443],{"alt":2444,"src":2445},"Cấu hình nhiều tên máy chủ công khai để bỏ qua API trong Cloudflare Access, bao gồm các đường dẫn api, identity, notifications và icons.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-api-bypass-destinations.webp",[481,2447,2448,2449],{},"Nhấp vào 'Create new policy' để tạo chính sách.\n",[884,2450],{"alt":2373,"src":2374},[481,2452,2453,2454],{},"Chọn 'Everyone' trong mục 'Policy rules'.\n",[884,2455],{"alt":2456,"src":2457},"Cấu hình quy tắc chính sách Cloudflare Access với Mọi người được chọn để cho phép truy cập rộng rãi vào các đường dẫn cụ thể.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-policy-rule-everyone.webp",[481,2459,2460,2461],{},"Nhập tên và chọn 'Bypass' trong mục 'Policy details'.\n",[884,2462],{"alt":2463,"src":2464},"Chi tiết chính sách Cloudflare Access cho NodeWarden-API với hành động được đặt thành Bỏ qua.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-policy-details-bypass.webp",[481,2466,2467],{},"Nhấp 'Save Policy' để lưu lại.",[481,2469,2470,2471],{},"Nhập tên và chọn '1 month' cho 'Session Duration'.\n",[884,2472],{"alt":2473,"src":2474},"Màn hình cấu hình cuối cùng cho ứng dụng NodeWarden-API trong Cloudflare Access.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-api-application-final-details.webp",[481,2476,2477,2478],{},"Bạn sẽ thấy có 2 ứng dụng đã được tạo thành công.\n",[884,2479],{"alt":2480,"src":2481},"Bảng điều khiển ứng dụng Cloudflare Access hiển thị cả hai ứng dụng Web và API đã được tạo thành công.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-access-applications-list-final.webp",[429,2483,2485],{"id":2484},"lời-kết","Lời kết",[434,2487,2488],{},"Hãy nhớ rằng Cloudflare chỉ là lớp khiên bảo vệ bên ngoài của bạn. Để duy trì một kho lưu trữ (vault) thực sự an toàn, hãy đảm bảo bạn vẫn đang sử dụng một mật khẩu chính (master password) đủ mạnh, sử dụng Xác thực hai yếu tố (2FA) và giữ cho tài khoản Cloudflare của bạn luôn được bảo mật.",{"title":424,"searchDepth":515,"depth":521,"links":2490},[2491,2492,2497],{"id":2285,"depth":527,"text":2286},{"id":2299,"depth":515,"text":2300,"children":2493},[2494,2495,2496],{"id":2306,"depth":527,"text":2307},{"id":2340,"depth":527,"text":2341},{"id":2414,"depth":527,"text":2415},{"id":2484,"depth":515,"text":2485},[1000,1001],"2026-05-27","Ngay khi NodeWarden của bạn được hiển thị công khai trên Internet, nó sẽ bắt đầu thu hút hàng ngàn bot tự động liên tục quét tìm các lỗ hổng bảo mật 24\u002F7.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FHow%20to%20secure%20NodeWarden%20at%20Cloudflare\u002Fhuong-dan-bao-mat-nodewarden-tich-hop-cloudflare.webp","Hình ảnh thu nhỏ cho hướng dẫn từng bước bảo mật kho lưu trữ NodeWarden bằng cách tích hợp Cloudflare, với hình ảnh két sắt kỹ thuật số và tủ máy chủ được bảo vệ.",{"schemaOrg":2504,"robots":1012,"sitemap":2506},[2505],{"@type":2246,"headline":2260,"description":2500},{"lastmod":2499},{"title":2260,"description":2500,"ogTitle":2260,"ogDescription":2500,"twitterTitle":2260,"twitterDescription":2500},"vi\u002Farticle\u002Fhow-to-secure-nodewarden-at-cloudflare",[],"hvf_vrWNSea9bkBCDq8AZeJm3YOqnieQ_PU0JbxBxb0",{"id":2512,"title":2513,"author":1020,"body":2514,"category":3121,"date":3122,"description":3123,"extension":1004,"image":3124,"imageAlt":3125,"isPublished":1007,"meta":3126,"minRead":557,"navigation":1007,"path":387,"seo":3131,"stem":3132,"tags":3133,"updatedAt":1020,"__hash__":3134},"article\u002Fvi\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare.md","Cách tự host kho mật khẩu tương thích BitWarden",{"type":426,"value":2515,"toc":3107},[2516,2519,2525,2529,2760,2764,2783,2787,2813,2817,2847,2851,2878,2882,2925,2929,2965,2969,2972,2976,3005,3009,3032,3036,3039,3056,3061,3064,3067,3081,3085,3098,3102],[434,2517,2518],{},"Mật khẩu là tài sản kỹ thuật số quan trọng nhất của bạn, và giữ an toàn cho chúng đồng nghĩa với việc bạn phải tự mình kiểm soát. Bằng cách tự host (self-host) trình quản lý mật khẩu của mình, bạn sẽ làm chủ hoàn toàn bảo mật của bản thân.",[434,2520,2521,2524],{},[441,2522,2523],{},"BitWarden"," được đánh giá rộng rãi là một trong những giải pháp đáng tin cậy nhất trong lĩnh vực quản lý mật khẩu và mã nguồn của nó được phát hành theo giấy phép AGPL-3.0. Một máy chủ không chính thức tương thích với BitWarden là NodeWarden, được viết bằng Typescript và có thể được triển khai (deploy) miễn phí trên nền tảng Cloudflare.",[2091,2526,2528],{"id":2527},"so-sánh-tính-năng-với-máy-chủ-bitwarden-chính-thức","So sánh tính năng với Máy chủ BitWarden Chính thức",[2530,2531,2532,2590],"table",{},[2533,2534,2535],"thead",{},[2536,2537,2538,2552,2564,2577],"tr",{},[2539,2540,2541],"th",{},[441,2542,2543,2545,2547,2548,2550],{},[881,2544],{},[881,2546],{},"Tính năng",[881,2549],{},[881,2551],{},[2539,2553,2554],{},[441,2555,2556,2558,2523,2560,2562],{},[881,2557],{},[881,2559],{},[881,2561],{},[881,2563],{},[2539,2565,2566],{},[441,2567,2568,2570,2572,2573,2575],{},[881,2569],{},[881,2571],{},"NodeWarden",[881,2574],{},[881,2576],{},[2539,2578,2579],{},[441,2580,2581,2583,2585,2586,2588],{},[881,2582],{},[881,2584],{},"Ghi chú",[881,2587],{},[881,2589],{},[2591,2592,2593,2610,2625,2637,2649,2665,2682,2697,2712,2724,2736,2749],"tbody",{},[2536,2594,2595,2599,2602,2604],{},[2596,2597,2598],"td",{},"Web Vault (Kho lưu trữ Web)",[2596,2600,2601],{},"✅",[2596,2603,2601],{},[2596,2605,2606,2609],{},[441,2607,2608],{},"Giao diện Web Vault nguyên bản","​",[2536,2611,2612,2618,2620,2622],{},[2596,2613,2614,2615],{},"Đồng bộ hóa đầy đủ ",[473,2616,2617],{},"\u002Fapi\u002Fsync",[2596,2619,2601],{},[2596,2621,2601],{},[2596,2623,2624],{},"Tối ưu hóa tính tương thích cho các client chính thức",[2536,2626,2627,2630,2632,2634],{},[2596,2628,2629],{},"Upload \u002F tải xuống tệp đính kèm",[2596,2631,2601],{},[2596,2633,2601],{},[2596,2635,2636],{},"Cloudflare R2 hoặc KV",[2536,2638,2639,2642,2644,2646],{},[2596,2640,2641],{},"Send (Gửi)",[2596,2643,2601],{},[2596,2645,2601],{},[2596,2647,2648],{},"Hỗ trợ Send cả dạng văn bản và tệp",[2536,2650,2651,2654,2656,2658],{},[2596,2652,2653],{},"Nhập \u002F Xuất (Import\u002FExport)",[2596,2655,2601],{},[2596,2657,2601],{},[2596,2659,2660,2661,2664],{},"Hỗ trợ nhập (import) JSON \u002F CSV \u002F ",[441,2662,2663],{},"ZIP kèm tệp đính kèm","​ của BitWarden",[2536,2666,2667,2672,2675,2677],{},[2596,2668,2669,2609],{},[441,2670,2671],{},"Trung tâm Sao lưu Đám mây",[2596,2673,2674],{},"❌",[2596,2676,2601],{},[2596,2678,2679,2609],{},[441,2680,2681],{},"Sao lưu định kỳ lên WebDAV \u002F S3",[2536,2683,2684,2687,2690,2692],{},[2596,2685,2686],{},"Gợi ý mật khẩu (web)",[2596,2688,2689],{},"⚠️ Hạn chế",[2596,2691,2601],{},[2596,2693,2694,2609],{},[441,2695,2696],{},"Không yêu cầu email",[2536,2698,2699,2702,2704,2706],{},[2596,2700,2701],{},"TOTP \u002F Steam TOTP",[2596,2703,2601],{},[2596,2705,2601],{},[2596,2707,2708,2709],{},"Bao gồm hỗ trợ ",[473,2710,2711],{},"steam:\u002F\u002F",[2536,2713,2714,2717,2719,2721],{},[2596,2715,2716],{},"Nhiều người dùng (Multi-user)",[2596,2718,2601],{},[2596,2720,2601],{},[2596,2722,2723],{},"Đăng ký theo hình thức thư mời",[2536,2725,2726,2729,2731,2733],{},[2596,2727,2728],{},"Tổ chức \u002F Bộ sưu tập \u002F Phân quyền",[2596,2730,2601],{},[2596,2732,2674],{},[2596,2734,2735],{},"Chưa được triển khai",[2536,2737,2738,2741,2743,2746],{},[2596,2739,2740],{},"Đăng nhập 2FA",[2596,2742,2601],{},[2596,2744,2745],{},"⚠️ Một phần",[2596,2747,2748],{},"Hiện tại chỉ hỗ trợ TOTP cấp người dùng",[2536,2750,2751,2754,2756,2758],{},[2596,2752,2753],{},"SSO \u002F SCIM \u002F Danh bạ doanh nghiệp",[2596,2755,2601],{},[2596,2757,2674],{},[2596,2759,2735],{},[1153,2761,2763],{"id":2762},"những-gì-chúng-ta-cần","Những gì chúng ta cần:",[1158,2765,2766,2771,2777],{},[481,2767,2768],{},[441,2769,2770],{},"Một tài khoản GitHub",[481,2772,2773,2776],{},[441,2774,2775],{},"Một tài khoản Cloudflare"," (Miễn phí) đã kích hoạt Cloudflare R2 Storage.",[481,2778,2779,2782],{},[1191,2780,2781],{},"Tùy chọn:"," Một tên miền tùy chỉnh (custom domain) được quản lý trong Cloudflare.",[1153,2784,2786],{"id":2785},"giai-đoạn-1-chuẩn-bị-code","Giai đoạn 1: Chuẩn bị Code",[1158,2788,2789,2806],{},[481,2790,2791,2792,2796,2797,2801,2802],{},"Fork kho lưu trữ NodeWarden từ ",[484,2793,2794],{"href":2794,"rel":2795},"https:\u002F\u002Fgithub.com\u002FTech-Voyage-Dev\u002Fnodewarden",[488]," hoặc kho lưu trữ gốc ",[484,2798,2799],{"href":2799,"rel":2800},"https:\u002F\u002Fgithub.com\u002Fshuaiplus\u002Fnodewarden",[488]," trên GitHub.\n",[884,2803],{"alt":2804,"src":2805},"Fork kho lưu trữ NodeWarden trên GitHub","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Ffork-nodewarden-repo.webp",[481,2807,2808,2809],{},"Bật Workflow \"Sync Upstream\".\n",[884,2810],{"alt":2811,"src":2812},"Bật quy trình Sync Upstream trong GitHub Actions","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fenable-sync-upstream.webp",[1153,2814,2816],{"id":2815},"giai-đoạn-2-triển-khai-deploy-lên-cloudflare","Giai đoạn 2: Triển khai (Deploy) lên Cloudflare",[1158,2818,2819,2828,2841],{},[481,2820,2821,2822,2824],{},"Tạo một ứng dụng Worker trong Cloudflare.",[881,2823],{},[884,2825],{"alt":2826,"src":2827},"Tạo ứng dụng Worker mới trong bảng điều khiển Cloudflare","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fcreate-cloudflare-worker.webp",[481,2829,2830,2831,2833,2837],{},"Chọn 'Continue with GitHub' để deploy ứng dụng.",[881,2832],{},[884,2834],{"alt":2835,"src":2836},"Triển khai ứng dụng NodeWarden bằng cách kết nối với GitHub","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fdeploy-github-repo.webp",[884,2838],{"alt":2839,"src":2840},"Tiến trình xây dựng và triển khai Cloudflare Worker","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-deploy-status.webp",[481,2842,2843,2844,455],{},"Chờ một vài phút để Cloudflare build và deploy ứng dụng của bạn. Nó sẽ cung cấp cho bạn một URL mặc định có đuôi ",[473,2845,2846],{},"worker.dev",[1153,2848,2850],{"id":2849},"tùy-chọn-thêm-tên-miền-tùy-chỉnh","(Tùy chọn) Thêm Tên miền Tùy chỉnh:",[478,2852,2853,2859,2865],{},[481,2854,2855,2856,455],{},"Trong cài đặt Cloudflare Worker của bạn, hãy vào tab ",[441,2857,2858],{},"Settings",[481,2860,2861,2862,455],{},"Nhấp vào ",[441,2863,2864],{},"+ Add",[481,2866,2867,2868,2870,2874],{},"Nhập tên miền bạn muốn và làm theo hướng dẫn.",[881,2869],{},[884,2871],{"alt":2872,"src":2873},"Điều hướng đến cài đặt tên miền tùy chỉnh trong Cloudflare Worker","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fworker-settings-custom-domain.webp",[884,2875],{"alt":2876,"src":2877},"Thêm tên miền tùy chỉnh vào Cloudflare Worker","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fadd-custom-domain.webp",[1153,2879,2881],{"id":2880},"giai-đoạn-3-bảo-mật-máy-chủ-của-bạn-khóa-bảo-mật-jwt","Giai đoạn 3: Bảo mật Máy chủ của bạn (Khóa bảo mật JWT)",[1158,2883,2884,2887,2899,2919],{},[481,2885,2886],{},"Mở trình duyệt web và nhập tên miền tùy chỉnh của bạn hoặc tên miền 'worker.dev' vừa được tạo.",[481,2888,2889,2890,455,2893,2895],{},"Bạn sẽ nhận được thông báo '",[441,2891,2892],{},"JWT_SECRET is missing'",[881,2894],{},[884,2896],{"alt":2897,"src":2898},"Thông báo lỗi JWT_SECRET is missing trên máy chủ NodeWarden","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fjwt-secret-missing-error.webp",[481,2900,2901,2902,2904,2905,2908,2909,2911,2915],{},"Sao chép secret key (khóa bí mật) được tạo ra và quay lại tab Settings trên NodeWarden Worker của bạn, sau đó nhấp vào nút '",[441,2903,2864],{},"' trong phần '",[441,2906,2907],{},"Variables and Secrets","'.",[881,2910],{},[884,2912],{"alt":2913,"src":2914},"Phần Biến và Bí mật trong cài đặt Cloudflare Worker","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fworker-variables-secrets.webp",[884,2916],{"alt":2917,"src":2918},"Thêm bí mật JWT đã tạo vào các biến Cloudflare Worker","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fadd-jwt-secret.webp",[481,2920,2921,2922,2908],{},"Dán chuỗi bí mật vừa tạo vào và nhấp vào nút '",[441,2923,2924],{},"Deploy \u002F Save",[1153,2926,2928],{"id":2927},"giai-đoạn-4-tạo-tài-khoản-admin-của-bạn","Giai đoạn 4: Tạo Tài khoản Admin của bạn",[1158,2930,2931,2940,2953,2962],{},[481,2932,2933,2934,2936],{},"Quay lại trình duyệt web và tải lại (refresh) trang, bạn sẽ thấy trang đăng nhập như sau.",[881,2935],{},[884,2937],{"alt":2938,"src":2939},"Trang đăng nhập máy chủ NodeWarden","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fnodewarden-login.webp",[481,2941,2942,2943,2946,2947,2949],{},"Nhấp vào '",[441,2944,2945],{},"Create Account","' để tạo tài khoản quản trị (admin).",[881,2948],{},[884,2950],{"alt":2951,"src":2952},"Nhấp vào nút Create Account trên trang đăng nhập NodeWarden","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fcreate-account-button.webp",[481,2954,2955,2956,2958],{},"Đăng nhập vào bảng điều khiển (Dashboard) bằng tài khoản admin vừa được tạo.",[881,2957],{},[884,2959],{"alt":2960,"src":2961},"Tổng quan về bảng điều khiển quản trị NodeWarden","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fnodewarden-dashboard.webp",[481,2963,2964],{},"Bây giờ máy chủ của chúng ta đã được deploy và đang hoạt động. Chúng ta sẽ bắt đầu thiết lập các client BitWarden.",[1153,2966,2968],{"id":2967},"giai-đoạn-5-kết-nối-các-thiết-bị-của-bạn","Giai đoạn 5: Kết nối Các Thiết bị của bạn",[434,2970,2971],{},"Bạn có thể sử dụng các ứng dụng BitWarden chính thức trên tất cả thiết bị của mình.",[1153,2973,2975],{"id":2974},"tiện-ích-mở-rộng-trên-chrome","Tiện ích mở rộng trên Chrome",[1158,2977,2978,2981,2984,2993,3002],{},[481,2979,2980],{},"Cài đặt tiện ích mở rộng BitWarden cho Chrome.",[481,2982,2983],{},"Mở tiện ích mở rộng lên.",[481,2985,2986,2987,2989],{},"Nhấp vào đường link bên cạnh chữ 'Accessing:' ở dưới cùng của cửa sổ popup.",[881,2988],{},[884,2990],{"alt":2991,"src":2992},"Chọn tùy chọn tự lưu trữ trong tiện ích mở rộng Bitwarden Chrome","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fbitwarden-extension-self-hosted.webp",[481,2994,2995,2996,2998],{},"Nhập tên miền của máy chủ NodeWarden của bạn vào.",[881,2997],{},[884,2999],{"alt":3000,"src":3001},"Nhập URL máy chủ trong tiện ích mở rộng Bitwarden Chrome","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fbitwarden-extension-domain.webp",[481,3003,3004],{},"Lưu các cài đặt và đăng nhập bằng tài khoản của bạn.",[2091,3006,3008],{"id":3007},"ứng-dụng-ios","Ứng dụng iOS",[1158,3010,3011,3014,3023],{},[481,3012,3013],{},"Cài đặt ứng dụng BitWarden từ App Store.",[481,3015,3016,3017,3019],{},"Mở ứng dụng và nhấp vào '' bên cạnh phần 'Logging in on:'.",[881,3018],{},[884,3020],{"alt":3021,"src":3022},"Truy cập cài đặt tự lưu trữ trong ứng dụng Bitwarden iOS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fbitwarden-ios-self-hosted.webp",[481,3024,3025,3026,3028],{},"Nhập tên miền của máy chủ NodeWarden và nhấp vào nút '✓'.",[881,3027],{},[884,3029],{"alt":3030,"src":3031},"Cấu hình URL máy chủ trong ứng dụng Bitwarden iOS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fbitwarden-ios-domain.webp",[1153,3033,3035],{"id":3034},"các-client-khác","Các Client Khác",[434,3037,3038],{},"NodeWarden đã được thử nghiệm và xác nhận tương thích với các client BitWarden chính thức sau:",[478,3040,3041,3044,3047,3050,3053],{},[481,3042,3043],{},"✅ Windows desktop",[481,3045,3046],{},"✅ Ứng dụng di động Android\u002FiOS",[481,3048,3049],{},"✅ Tiện ích mở rộng trình duyệt",[481,3051,3052],{},"✅ Linux desktop",[481,3054,3055],{},"⚠️ macOS desktop (chưa xác minh hoàn toàn)",[3057,3058,3060],"h1",{"id":3059},"sao-lưu-kho-lưu-trữ-vault-backup","Sao lưu Kho lưu trữ (Vault Backup)",[434,3062,3063],{},"NodeWarden cho phép bạn sao lưu vault của mình vào một máy tính cục bộ hoặc lưu trữ từ xa (remote storage hỗ trợ S3 hoặc WebDAV).",[434,3065,3066],{},"Để tự động hóa sao lưu từ xa:",[478,3068,3069,3072],{},[481,3070,3071],{},"Cấu hình thông tin lưu trữ từ xa ngay trong bảng điều khiển của NodeWarden.",[481,3073,3074,3075,3077],{},"Đảm bảo rằng Cron task đã được thiết lập trên cài đặt của Cloudflare Worker để tự động sao lưu từ xa.",[881,3076],{},[884,3078],{"alt":3079,"src":3080},"Cấu hình trình kích hoạt Cron để sao lưu kho tiền tự động trong Cloudflare","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Fcloudflare-worker-cron.webp",[3057,3082,3084],{"id":3083},"lưu-ý-bảo-mật-cuối-cùng","Lưu ý Bảo mật Cuối cùng",[478,3086,3087,3090,3093],{},[481,3088,3089],{},"Bảo mật quyền truy cập vào tài khoản Cloudflare của bạn, nếu không dữ liệu có thể bị đánh cắp. Hãy kích hoạt Xác thực Hai Yếu tố (2FA) hoặc Passkey trên tài khoản Cloudflare của bạn ngay lập tức.",[481,3091,3092],{},"Hãy host NodeWarden trên một tài khoản Cloudflare chuyên dụng. Không chia sẻ tài nguyên với các ứng dụng web khác để giảm thiểu các rủi ro về mặt an ninh.",[481,3094,3095],{},[484,3096,3097],{"href":371},"Bảo mật NodeWarden với Cloudflare",[3057,3099,3101],{"id":3100},"tham-khảo","Tham khảo",[478,3103,3104],{},[481,3105,3106],{},"Hướng dẫn Bắt đầu NodeWarden Chính thức",{"title":424,"searchDepth":515,"depth":521,"links":3108},[3109,3110,3111,3112,3113,3114,3115,3116,3117,3120],{"id":2527,"depth":527,"text":2528},{"id":2762,"depth":521,"text":2763},{"id":2785,"depth":521,"text":2786},{"id":2815,"depth":521,"text":2816},{"id":2849,"depth":521,"text":2850},{"id":2880,"depth":521,"text":2881},{"id":2927,"depth":521,"text":2928},{"id":2967,"depth":521,"text":2968},{"id":2974,"depth":521,"text":2975,"children":3118},[3119],{"id":3007,"depth":527,"text":3008},{"id":3034,"depth":521,"text":3035},[1000,1001],"2026-05-25","Mật khẩu là tài sản kỹ thuật số quan trọng nhất của bạn, và giữ an toàn cho chúng đồng nghĩa với việc bạn phải tự mình kiểm soát.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FSelf%20hosting%20NodeWarden%20at%20Cloudflare\u002Ftu-host-may-chu-bitwarden.webp","Thumbnail hướng dẫn tự host máy chủ tương thích BitWarden, hiển thị két sắt kỹ thuật số và tủ máy chủ bảo mật.",{"schemaOrg":3127,"robots":1012,"sitemap":3130},[3128],{"@type":2246,"headline":3129,"description":3123},"Cách bảo mật mật khẩu trong kho lưu trữ riêng bằng cách tự host máy chủ tương thích BitWarden",{"lastmod":3122},{"title":3129,"description":3123,"ogTitle":3129,"ogDescription":3123,"twitterTitle":3129,"twitterDescription":3123},"vi\u002Farticle\u002Fself-hosting-nodewarden-at-cloudflare",[],"wFsOImxCPu81QXiz_6SElODOS0VJeUgTl521q1bIvWw",{"id":3136,"title":3137,"author":424,"body":3138,"category":4018,"date":4019,"description":4020,"extension":1004,"image":4021,"imageAlt":4022,"isPublished":1007,"meta":4023,"minRead":563,"navigation":1007,"path":363,"seo":4058,"stem":4060,"tags":4061,"updatedAt":4057,"__hash__":4064},"article\u002Fvi\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp.md","Cách hiển thị riêng tư Hermes Agent với Cloudflare WARP",{"type":426,"value":3139,"toc":4000},[3140,3154,3164,3168,3171,3183,3187,3195,3199,3203,3253,3257,3391,3395,3428,3432,3435,3501,3504,3540,3543,3570,3574,3584,3588,3627,3713,3717,3722,3737,3746,3821,3826,3872,3876,3921,3935,3939,3983,3987,3997],[434,3141,3142,3143,3146,3147,3149,3150,3153],{},"Một thách thức phổ biến nảy sinh khi bạn muốn truy cập ",[441,3144,3145],{},"Hermes Agent"," của mình từ các thiết bị khác như máy tính xách tay, máy tính bảng hoặc điện thoại mà không làm lộ nó với mạng internet công cộng. Việc tận dụng ",[441,3148,926],{}," cùng với ",[441,3151,3152],{},"Cloudflare Zero Trust"," cho phép bạn hiển thị Hermes Agent trên toàn cầu mà không cần mở bất kỳ cổng đến (inbound port) nào trên tường lửa của mình.",[434,3155,3156,3157,3160,3161,3163],{},"Nếu bạn đã làm theo hướng dẫn trước đây của chúng tôi, '",[484,3158,3159],{"href":375},"Hướng dẫn cài đặt và triển khai Hermes Agent trên VPS Linux","', thì Hermes Agent của bạn đã được thiết lập và chạy 24\u002F7. Thay vì phải xử lý sự phức tạp của VPN truyền thống, chúng ta sẽ sử dụng máy khách ",[441,3162,926],{}," để kết nối Hermes Agent vào mạng riêng (private network) qua internet.",[429,3165,3167],{"id":3166},"hiểu-về-kiến-trúc","Hiểu về Kiến trúc",[434,3169,3170],{},"Các thành phần đang hoạt động:",[1158,3172,3173,3178],{},[481,3174,3175,3177],{},[441,3176,3152],{},": Bảng điều khiển tại Cloudflare, nơi bạn xác định các quy tắc định tuyến và chính sách truy cập.",[481,3179,3180,3182],{},[441,3181,926],{},": Ứng dụng máy khách được cài đặt trên các thiết bị của bạn (VPS, máy tính xách tay, điện thoại). Nó sẽ chặn lưu lượng truy cập được gửi tới mạng riêng của bạn và định tuyến nó một cách an toàn.",[1153,3184,3186],{"id":3185},"điều-kiện-tiên-quyết","Điều kiện tiên quyết",[478,3188,3189,3192],{},[481,3190,3191],{},"Một Hermes Agent đang chạy trên VPS của bạn.",[481,3193,3194],{},"Một tài khoản Cloudflare miễn phí.",[429,3196,3198],{"id":3197},"hướng-dẫn-từng-bước","Hướng dẫn Từng bước",[1153,3200,3202],{"id":3201},"bước-1-thiết-lập-cloudflare-zero-trust","Bước 1: Thiết lập Cloudflare Zero Trust",[1158,3204,3205,3214,3221,3232,3239,3246],{},[481,3206,3207,3208,3213],{},"Đăng nhập vào ",[484,3209,3212],{"href":3210,"rel":3211},"https:\u002F\u002Fdash.cloudflare.com\u002F",[488],"Bảng điều khiển Cloudflare"," của bạn.",[481,3215,3216,3217],{},"Nhấp vào 'Zero Trust' từ menu bên trái.\n",[884,3218],{"alt":3219,"src":3220},"Trình đơn điều hướng thanh bên trái bảng điều khiển Cloudflare với tùy chọn Zero Trust","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-left-menu.webp",[481,3222,3223,3224,3227,3228],{},"Nếu đây là lần đầu tiên, bạn akan được nhắc chọn một gói (bản Miễn phí hoàn toàn phù hợp cho thiết lập này) và đặt tên cho nhóm của bạn (ví dụ: ",[473,3225,3226],{},"ai-team",").\n",[884,3229],{"alt":3230,"src":3231},"Thiết lập tài khoản Cloudflare Zero Trust lần đầu tiên và đặt tên nhóm","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-team-setup.webp",[481,3233,3234,3235],{},"Nhấp vào 'Access' rồi chọn 'Policies' để tạo một chính sách truy cập, xác định những ai có quyền truy cập vào mạng.\n",[884,3236],{"alt":3237,"src":3238},"Trang chính sách truy cập Cloudflare Zero Trust hiển thị các quy tắc truy cập mới cấu hình","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-access-policies-page.webp",[481,3240,3241,3242],{},"Nhấp vào 'Create new policy'.\n",[884,3243],{"alt":3244,"src":3245},"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",[481,3247,3248,3249],{},"Chọn 'Emails' và nhập email của bạn dưới mục 'Policy rules'.\n",[884,3250],{"alt":3251,"src":3252},"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",[1153,3254,3256],{"id":3255},"bước-2-thiết-lập-máy-khách-cloudflare-warp-trên-vps","Bước 2: Thiết lập máy khách Cloudflare WARP trên VPS",[1158,3258,3259,3269,3275,3282,3285,3299,3302,3384],{},[481,3260,3261,3262,835,3265,3268],{},"Chạy ",[473,3263,3264],{},"sudo apt update",[473,3266,3267],{},"sudo apt install cloudflare-warp"," trong terminal trên VPS của bạn.",[481,3270,3261,3271,3274],{},[473,3272,3273],{},"warp-cli registration new \u003CTEAM-NAME>"," trong terminal trên VPS của bạn, một URL sẽ được in ra.",[481,3276,3277,3278,3281],{},"Sao chép URL vừa được in, nó sẽ có dạng ",[473,3279,3280],{},"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fwarp",", và dán vào trình duyệt của bạn để tiến hành xác thực.",[481,3283,3284],{},"Vì phương thức xác thực bằng email đã được cấu hình trong bước trước, hãy nhập email của bạn để xác thực.",[481,3286,3287,3288,3291,3292,3295,3296,2908],{},"Trên trang '",[441,3289,3290],{},"Success","' (Thành công) trong trình duyệt, hãy nhấp chuột phải và chọn '",[441,3293,3294],{},"Inspect","' (Kiểm tra) ở nút màu xanh '",[441,3297,3298],{},"Open Cloudflare WARP",[481,3300,3301],{},"Sao chép chuỗi mã token dài nằm trong liên kết của nút.",[481,3303,3261,3304,3307,3308,3310,3311],{},[473,3305,3306],{},"warp-cli --accept-tos registration token \"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fauth?token=\u003Ccopied_token>\""," trong terminal trên VPS của bạn để kết nối nó với Cloudflare Zero Trust.",[881,3309],{},"Nếu gặp lỗi 'Error: Failed to communicate with the WARP API' trên Ubuntu 26, hãy chạy các lệnh sau:",[498,3312,3316],{"className":3313,"code":3314,"language":3315,"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",[473,3317,3318,3332,3336,3342,3353,3357,3362],{"__ignoreMap":424},[506,3319,3320,3323,3326,3329],{"class":508,"line":509},[506,3321,3322],{"class":1066},"sudo",[506,3324,3325],{"class":1080}," systemctl",[506,3327,3328],{"class":1080}," restart",[506,3330,3331],{"class":1080}," warp-svc.service\n",[506,3333,3334],{"class":508,"line":515},[506,3335,1100],{"emptyLinePlaceholder":1007},[506,3337,3338],{"class":508,"line":521},[506,3339,3341],{"class":3340},"sHwdD","# Check status\n",[506,3343,3344,3346,3348,3351],{"class":508,"line":527},[506,3345,3322],{"class":1066},[506,3347,3325],{"class":1080},[506,3349,3350],{"class":1080}," status",[506,3352,3331],{"class":1080},[506,3354,3355],{"class":508,"line":533},[506,3356,1100],{"emptyLinePlaceholder":1007},[506,3358,3359],{"class":508,"line":539},[506,3360,3361],{"class":3340},"# Run the warp-cli registration token again\n",[506,3363,3364,3367,3370,3373,3376,3379,3382],{"class":508,"line":545},[506,3365,3366],{"class":1066},"warp-cli",[506,3368,3369],{"class":1080}," --accept-tos",[506,3371,3372],{"class":1080}," registration",[506,3374,3375],{"class":1080}," token",[506,3377,3378],{"class":1076},"   \"",[506,3380,3381],{"class":1080},"https:\u002F\u002F\u003Cteam>.cloudflareaccess.com\u002Fauth?token=\u003Ccopied_token>",[506,3383,1770],{"class":1076},[481,3385,3386,3387],{},"Quay trở lại bảng điều khiển Cloudflare Zero Trust, và nhấp vào 'Devices' (Thiết bị). Thiết bị VPS của bạn lúc này sẽ được hiển thị.\n",[884,3388],{"alt":3389,"src":3390},"Bảng điều khiển thiết bị Zero Trust xác nhận máy chủ Linux VPS đã kết nối","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-devices-vps-connected.webp",[1153,3392,3394],{"id":3393},"bước-3-thiết-lập-định-tuyến-lưu-lượng","Bước 3: Thiết lập Định tuyến Lưu lượng",[1158,3396,3397,3404,3411,3418],{},[481,3398,3399,3400],{},"Nhấp vào cấu hình VPS của bạn trên bảng điều khiển Devices.\n",[884,3401],{"alt":3402,"src":3403},"Truy cập chi tiết và cài đặt đường hầm phân tách cho thiết bị VPS đã đăng ký","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-device-profile.webp",[481,3405,3406,3407],{},"Cuộn xuống phần 'Split Tunnels'.\n",[884,3408],{"alt":3409,"src":3410},"Phần Đường hầm phân tách (Split Tunnels) dưới cài đặt hồ sơ VPS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-split-tunnels-section.webp",[481,3412,3413,3414],{},"Nhấp vào nút 'Manage' (Quản lý) và định cấu hình các thiết lập như minh họa bên dưới. Thay thế địa chỉ IP nếu cần.\n",[884,3415],{"alt":3416,"src":3417},"Quản lý ngoại lệ IP và tên máy chủ Split Tunnels trong cài đặt Cloudflare","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-zero-trust-manage-split-tunnels.webp",[481,3419,3420,3421,835,3424,3427],{},"Hiển thị ",[473,3422,3423],{},"address",[473,3425,3426],{},"host"," sẽ định tuyến lưu lượng truy cập tới các dịch vụ của bạn trên cùng một mạng riêng.",[1153,3429,3431],{"id":3430},"bước-4-cấu-hình-tường-lửa-trên-vps","Bước 4: Cấu hình Tường lửa trên VPS",[434,3433,3434],{},"Bật tường lửa để chỉ cho phép mạng con '100.96.0.0\u002F12', đồng thời chặn tất cả các quyền truy cập công cộng đến khác.",[498,3436,3438],{"className":3313,"code":3437,"language":3315,"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",[473,3439,3440,3453,3470,3484],{"__ignoreMap":424},[506,3441,3442,3444,3447,3450],{"class":508,"line":509},[506,3443,3322],{"class":1066},[506,3445,3446],{"class":1080}," ufw",[506,3448,3449],{"class":1080}," enable",[506,3451,3452],{"class":1684}," \n",[506,3454,3455,3457,3459,3462,3465,3468],{"class":508,"line":515},[506,3456,3322],{"class":1066},[506,3458,3446],{"class":1080},[506,3460,3461],{"class":1080}," default",[506,3463,3464],{"class":1080}," allow",[506,3466,3467],{"class":1080}," outgoing",[506,3469,3452],{"class":1684},[506,3471,3472,3474,3476,3478,3481],{"class":508,"line":521},[506,3473,3322],{"class":1066},[506,3475,3446],{"class":1080},[506,3477,3461],{"class":1080},[506,3479,3480],{"class":1080}," deny",[506,3482,3483],{"class":1080}," incoming\n",[506,3485,3486,3488,3490,3492,3495,3498],{"class":508,"line":527},[506,3487,3322],{"class":1066},[506,3489,3446],{"class":1080},[506,3491,3464],{"class":1080},[506,3493,3494],{"class":1080}," in",[506,3496,3497],{"class":1080}," from",[506,3499,3500],{"class":1080}," 100.96.0.0\u002F12\n",[434,3502,3503],{},"Cho phép lưu lượng loopback (quay vòng) để tránh làm hỏng các dịch vụ cục bộ:",[498,3505,3507],{"className":3313,"code":3506,"language":3315,"meta":424,"style":424},"sudo ufw allow in on lo\nsudo ufw allow out on lo\n",[473,3508,3509,3525],{"__ignoreMap":424},[506,3510,3511,3513,3515,3517,3519,3522],{"class":508,"line":509},[506,3512,3322],{"class":1066},[506,3514,3446],{"class":1080},[506,3516,3464],{"class":1080},[506,3518,3494],{"class":1080},[506,3520,3521],{"class":1080}," on",[506,3523,3524],{"class":1080}," lo\n",[506,3526,3527,3529,3531,3533,3536,3538],{"class":508,"line":515},[506,3528,3322],{"class":1066},[506,3530,3446],{"class":1080},[506,3532,3464],{"class":1080},[506,3534,3535],{"class":1080}," out",[506,3537,3521],{"class":1080},[506,3539,3524],{"class":1080},[434,3541,3542],{},"Tải lại tường lửa và xác minh trạng thái:",[498,3544,3546],{"className":3313,"code":3545,"language":3315,"meta":424,"style":424},"sudo ufw reload \nsudo ufw status verbose\n",[473,3547,3548,3559],{"__ignoreMap":424},[506,3549,3550,3552,3554,3557],{"class":508,"line":509},[506,3551,3322],{"class":1066},[506,3553,3446],{"class":1080},[506,3555,3556],{"class":1080}," reload",[506,3558,3452],{"class":1684},[506,3560,3561,3563,3565,3567],{"class":508,"line":515},[506,3562,3322],{"class":1066},[506,3564,3446],{"class":1080},[506,3566,3350],{"class":1080},[506,3568,3569],{"class":1080}," verbose\n",[1153,3571,3573],{"id":3572},"bước-5-hiển-thị-hermes-agent-vào-mạng-riêng","Bước 5: Hiển thị Hermes Agent vào Mạng Riêng",[434,3575,3576,3577,3580,3581,455],{},"Chúng ta sẽ hiển thị ",[441,3578,3579],{},"Hermes Agent Web Dashboard"," vào mạng riêng của mình và sử dụng nhà cung cấp xác thực mặc định là ",[441,3582,3583],{},"Nous Research",[2091,3585,3587],{"id":3586},"thiết-lập-nhà-cung-cấp-xác-thực","Thiết lập Nhà cung cấp Xác thực",[1158,3589,3590,3599,3606,3613,3620],{},[481,3591,3592,3593,3598],{},"Đi tới ",[484,3594,3597],{"href":3595,"rel":3596},"https:\u002F\u002Fportal.nousresearch.com",[488],"portal.nousresearch.com"," để đăng ký một tài khoản.",[481,3600,3601,3602],{},"Chọn 'Local Dashboards'.\n",[884,3603],{"alt":3604,"src":3605},"Chọn tùy chọn Bảng điều khiển cục bộ (Local Dashboards) trên cổng thông tin Nous Research","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fnous-portal-local-dashboards-selection.webp",[481,3607,3608,3609],{},"Nhấp vào 'Register Dashboard'.\n",[884,3610],{"alt":3611,"src":3612},"Nhấp vào nút Đăng ký bảng điều khiển để tạo mới một thực thể bảng điều khiển","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fnous-portal-register-dashboard.webp",[481,3614,3615,3616],{},"Nhập địa chỉ IP mạng riêng của VPS của bạn làm 'Dashboard redirect URI' và nhấp vào 'Save'.\n",[884,3617],{"alt":3618,"src":3619},"Đăng ký địa chỉ IP riêng của máy chủ VPS làm URI chuyển hướng trong cổng Nous Research","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fnous-portal-register-redirect-uri.webp",[481,3621,3622,3623,3626],{},"Sao chép 'OAuth client ID' và dán nó vào tệp ",[473,3624,3625],{},"config.yaml"," của bạn:",[498,3628,3630],{"className":1057,"code":3629,"language":1059,"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",[473,3631,3632,3639,3649,3660,3667,3677,3687,3694,3704],{"__ignoreMap":424},[506,3633,3634,3637],{"class":508,"line":509},[506,3635,3636],{"class":1072},"dashboard",[506,3638,2013],{"class":1076},[506,3640,3641,3644,3646],{"class":508,"line":515},[506,3642,3643],{"class":1072},"  theme",[506,3645,1077],{"class":1076},[506,3647,3648],{"class":1080}," default\n",[506,3650,3651,3654,3656],{"class":508,"line":521},[506,3652,3653],{"class":1072},"  show_token_analytics",[506,3655,1077],{"class":1076},[506,3657,3659],{"class":3658},"sfNiH"," false\n",[506,3661,3662,3665],{"class":508,"line":527},[506,3663,3664],{"class":1072},"  oauth",[506,3666,2013],{"class":1076},[506,3668,3669,3672,3674],{"class":508,"line":533},[506,3670,3671],{"class":1072},"    client_id",[506,3673,1077],{"class":1076},[506,3675,3676],{"class":1080}," agent:cmq02x7ha0002jk0ba3kfnb\n",[506,3678,3679,3682,3684],{"class":508,"line":539},[506,3680,3681],{"class":1072},"    portal_url",[506,3683,1077],{"class":1076},[506,3685,3686],{"class":1080}," https:\u002F\u002Fportal.nousresearch.com\n",[506,3688,3689,3692],{"class":508,"line":545},[506,3690,3691],{"class":1072},"  basic_auth",[506,3693,2013],{"class":1076},[506,3695,3696,3699,3701],{"class":508,"line":551},[506,3697,3698],{"class":1072},"    username",[506,3700,1077],{"class":1076},[506,3702,3703],{"class":1076}," ''\n",[506,3705,3706,3709,3711],{"class":508,"line":557},[506,3707,3708],{"class":1072},"    password_hash",[506,3710,1077],{"class":1076},[506,3712,3703],{"class":1076},[2091,3714,3716],{"id":3715},"thiết-lập-systemd-để-tự-khởi-động-bảng-điều-khiển-hermes","Thiết lập Systemd để Tự khởi động Bảng điều khiển Hermes",[1158,3718,3719],{},[481,3720,3721],{},"Tạo một tệp dịch vụ:",[498,3723,3725],{"className":1803,"code":3724,"language":1805,"meta":424,"style":424},"sudo nano \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-dashboard.service\n",[473,3726,3727],{"__ignoreMap":424},[506,3728,3729,3731,3734],{"class":508,"line":509},[506,3730,3322],{"class":1066},[506,3732,3733],{"class":1080}," nano",[506,3735,3736],{"class":1080}," \u002Fetc\u002Fsystemd\u002Fsystem\u002Fhermes-dashboard.service\n",[1158,3738,3739],{"start":515},[481,3740,3741,3742,3745],{},"Dán cấu hình sau, đảm bảo ",[473,3743,3744],{},"--host 0.0.0.0"," là một phần của lệnh:",[498,3747,3751],{"className":3748,"code":3749,"language":3750,"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",[473,3752,3753,3758,3763,3768,3772,3777,3782,3787,3792,3797,3802,3807,3811,3816],{"__ignoreMap":424},[506,3754,3755],{"class":508,"line":509},[506,3756,3757],{},"[Unit]\n",[506,3759,3760],{"class":508,"line":515},[506,3761,3762],{},"Description=Hermes Dashboard\n",[506,3764,3765],{"class":508,"line":521},[506,3766,3767],{},"After=network.target\n",[506,3769,3770],{"class":508,"line":527},[506,3771,1100],{"emptyLinePlaceholder":1007},[506,3773,3774],{"class":508,"line":533},[506,3775,3776],{},"[Service]\n",[506,3778,3779],{"class":508,"line":539},[506,3780,3781],{},"User=hermes\n",[506,3783,3784],{"class":508,"line":545},[506,3785,3786],{},"WorkingDirectory=\u002Fhome\u002Fhermes\n",[506,3788,3789],{"class":508,"line":551},[506,3790,3791],{},"ExecStart=\u002Fhome\u002Fhermes\u002F.local\u002Fbin\u002Fhermes dashboard --host 0.0.0.0\n",[506,3793,3794],{"class":508,"line":557},[506,3795,3796],{},"Restart=always\n",[506,3798,3799],{"class":508,"line":563},[506,3800,3801],{},"RestartSec=10\n",[506,3803,3804],{"class":508,"line":569},[506,3805,3806],{},"Environment=PATH=\u002Fhome\u002Fhermes\u002F.local\u002Fbin:\u002Fusr\u002Flocal\u002Fbin:\u002Fusr\u002Fbin:\u002Fbin\n",[506,3808,3809],{"class":508,"line":575},[506,3810,1100],{"emptyLinePlaceholder":1007},[506,3812,3813],{"class":508,"line":581},[506,3814,3815],{},"[Install]\n",[506,3817,3818],{"class":508,"line":587},[506,3819,3820],{},"WantedBy=multi-user.target\n",[1158,3822,3823],{"start":521},[481,3824,3825],{},"Bật và khởi động dịch vụ:",[498,3827,3829],{"className":1803,"code":3828,"language":1805,"meta":424,"style":424},"sudo systemctl daemon-reload\nsudo systemctl enable hermes-dashboard\nsudo systemctl start hermes-dashboard\nsudo systemctl status hermes-dashboard\n",[473,3830,3831,3840,3851,3862],{"__ignoreMap":424},[506,3832,3833,3835,3837],{"class":508,"line":509},[506,3834,3322],{"class":1066},[506,3836,3325],{"class":1080},[506,3838,3839],{"class":1080}," daemon-reload\n",[506,3841,3842,3844,3846,3848],{"class":508,"line":515},[506,3843,3322],{"class":1066},[506,3845,3325],{"class":1080},[506,3847,3449],{"class":1080},[506,3849,3850],{"class":1080}," hermes-dashboard\n",[506,3852,3853,3855,3857,3860],{"class":508,"line":521},[506,3854,3322],{"class":1066},[506,3856,3325],{"class":1080},[506,3858,3859],{"class":1080}," start",[506,3861,3850],{"class":1080},[506,3863,3864,3866,3868,3870],{"class":508,"line":527},[506,3865,3322],{"class":1066},[506,3867,3325],{"class":1080},[506,3869,3350],{"class":1080},[506,3871,3850],{"class":1080},[1153,3873,3875],{"id":3874},"bước-6-cài-đặt-máy-khách-cloudflare-warp-trên-máy-tính-bàn","Bước 6: Cài đặt Máy khách Cloudflare WARP trên Máy tính bàn",[1158,3877,3878,3886,3889,3896,3903,3910],{},[481,3879,3880,3881,455],{},"Tải xuống máy khách Cloudflare WARP từ ",[484,3882,3885],{"href":3883,"rel":3884},"https:\u002F\u002Fdevelopers.cloudflare.com\u002Fwarp-client\u002Fget-started\u002F",[488],"cổng thông tin của Cloudflare",[481,3887,3888],{},"Mở và khởi chạy máy khách Cloudflare WARP sau khi cài đặt.",[481,3890,3891,3892],{},"Đăng nhập khi được nhắc.\n",[884,3893],{"alt":3894,"src":3895},"Yêu cầu đăng nhập của ứng dụng khách Cloudflare WARP trên máy tính để bàn","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-warp-desktop-login-prompt.webp",[481,3897,3898,3899],{},"Một trang 'Success' (Thành công) sẽ được hiển thị sau khi đăng nhập thành công.\n",[884,3900],{"alt":3901,"src":3902},"Trang web xác thực thành công sau khi đăng nhập vào Cloudflare Zero Trust trên máy tính","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-warp-desktop-login-success.webp",[481,3904,3905,3906],{},"Máy khách WARP hiện sẽ cho thấy nó đã được kết nối với nhóm Zero Trust của bạn.\n",[884,3907],{"alt":3908,"src":3909},"Khách hàng Cloudflare WARP máy tính xác nhận kết nối đang hoạt động tới mạng riêng","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-warp-desktop-client-connected.webp",[481,3911,3912,3913,3916,3917],{},"Điều hướng đến trình duyệt web của bạn và nhập IP riêng (ví dụ: ",[473,3914,3915],{},"100.96.0.3","). Bảng điều khiển Hermes Web sẽ tải thành công.\n",[884,3918],{"alt":3919,"src":3920},"Truy cập giao diện Web Dashboard riêng tư của Hermes Agent trên trình duyệt máy tính","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fhermes-agent-dashboard-desktop-view.webp",[3922,3923,3924],"blockquote",{},[434,3925,3926,3929,3930,3934],{},[441,3927,3928],{},"Mẹo hữu ích cho Người dùng macOS:"," Nếu bạn đang sử dụng máy khách WARP để truy cập nhiều tài khoản Cloudflare, hãy xem hướng dẫn nhanh của chúng tôi về ",[441,3931,3932],{},[484,3933,423],{"href":399}," để chuyển đổi giữa các tài khoản một cách liền mạch.",[1153,3936,3938],{"id":3937},"bước-7-cài-đặt-máy-khách-cloudflare-warp-trên-thiết-bị-ios","Bước 7: Cài đặt Máy khách Cloudflare WARP trên Thiết bị iOS",[1158,3940,3941,3948,3956,3964,3972],{},[481,3942,3943,3944,3947],{},"Cài đặt ",[441,3945,3946],{},"Cloudflare One"," từ App Store.",[481,3949,3950,3951],{},"Mở ứng dụng Cloudflare One và nhập tên nhóm của bạn khi được nhắc.\n",[884,3952],{"alt":3953,"src":3954,"width":3955},"Nhập tên nhóm Cloudflare Zero Trust trong ứng dụng Cloudflare One trên thiết bị iOS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-one-ios-team-name-prompt.webp",239,[481,3957,3958,3959],{},"Đăng nhập bằng cùng một địa chỉ email đã được định cấu hình trong quy tắc chính sách ở trên.\n",[884,3960],{"alt":3961,"src":3962,"width":3963},"Yêu cầu xác thực email cho hệ thống Cloudflare Zero Trust trên thiết bị iOS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-one-ios-email-login.webp",229,[481,3965,3966,3967],{},"Sau khi được kết nối, nó sẽ trông giống như sau:\n",[884,3968],{"alt":3969,"src":3970,"width":3971},"Ứng dụng Cloudflare One hiển thị trạng thái kết nối trên thiết bị di động iOS","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fcloudflare-one-ios-client-connected.webp",322,[481,3973,3974,3975,3977,3978],{},"Điều hướng đến trình duyệt web của bạn và nhập IP riêng ",[473,3976,3915],{}," để truy cập Bảng điều khiển Hermes Web trên thiết bị di động của bạn.\n",[884,3979],{"alt":3980,"src":3981,"width":3982},"Truy cập vào giao diện web điều khiển Hermes Agent trên trình duyệt điện thoại di động","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002Fhermes-agent-dashboard-mobile-view.webp",345,[429,3984,3986],{"id":3985},"phần-kết-luận","Phần Kết luận",[434,3988,3989,3990,3992,3993,3996],{},"Với ",[441,3991,3152],{}," xử lý các chính sách nhận dạng và máy khách ",[441,3994,3995],{},"WARP"," định tuyến lưu lượng truy cập qua một đường hầm mã hóa, Hermes Agent của bạn đã có thể được truy cập an toàn từ các thiết bị của bạn trên phạm vi toàn cầu. Thiết lập này đặt nền móng an toàn và vững chắc cho việc xây dựng và truy cập một cơ sở hạ tầng AI riêng tư, vận hành hoàn toàn từ xa.",[989,3998,3999],{},"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":515,"depth":521,"links":4001},[4002,4005,4017],{"id":3166,"depth":515,"text":3167,"children":4003},[4004],{"id":3185,"depth":521,"text":3186},{"id":3197,"depth":515,"text":3198,"children":4006},[4007,4008,4009,4010,4011,4015,4016],{"id":3201,"depth":521,"text":3202},{"id":3255,"depth":521,"text":3256},{"id":3393,"depth":521,"text":3394},{"id":3430,"depth":521,"text":3431},{"id":3572,"depth":521,"text":3573,"children":4012},[4013,4014],{"id":3586,"depth":527,"text":3587},{"id":3715,"depth":527,"text":3716},{"id":3874,"depth":521,"text":3875},{"id":3937,"depth":521,"text":3938},{"id":3985,"depth":515,"text":3986},[1420,1000],"2026-07-09","Tìm hiểu cách hiển thị và truy cập an toàn Hermes Agent trên toàn cầu bằng nền tảng Cloudflare WARP và Zero Trust mà không cần mở bất kỳ cổng tường lửa nào.","https:\u002F\u002Finimages.techvoyage.dev\u002Farticles\u002FExposing%20Hermes%20Agent%20to%20Private%20Network%20Using%20Cloudflare%20WARP\u002FVI-Exposing-Hermes-Agent-to-Private-Network-Using-Cloudflare-WARP.webp","Hiển thị an toàn Hermes Agent vào mạng riêng bằng Cloudflare Zero Trust và đường hầm WARP",{"schemaOrg":4024,"robots":1012,"sitemap":4056},[4025],{"@type":1011,"headline":3137,"description":4020,"name":3137,"image":4021,"step":4026},[4027,4032,4036,4040,4044,4048,4052],{"@type":4028,"name":4029,"text":4030,"url":4031,"image":3220},"HowToStep","Thiết lập Cloudflare Zero Trust","Đăng nhập vào Bảng điều khiển Cloudflare của bạn. Nhấp vào 'Zero Trust' từ menu bên trái. Nếu đây là lần đầu tiên, bạn akan được nhắc chọn một gói (bản Miễn phí hoàn toàn phù hợp cho thiết lập này) và đặt tên cho nhóm của bạn (ví dụ: ai-team). Nhấp v","#step-1",{"@type":4028,"name":4033,"text":4034,"url":4035,"image":3390},"Thiết lập máy khách Cloudflare WARP trên VPS","Chạy sudo apt update và sudo apt install cloudflare-warp trong terminal trên VPS của bạn. Chạy warp-cli registration new \u003CTEAM-NAME> trong terminal trên VPS của bạn, một URL sẽ được in ra. Sao chép URL vừa được in, nó sẽ có dạng https:\u002F\u002F\u003Cteam>.cloudf","#step-2",{"@type":4028,"name":4037,"text":4038,"url":4039,"image":3403},"Thiết lập Định tuyến Lưu lượng","Nhấp vào cấu hình VPS của bạn trên bảng điều khiển Devices. Cuộn xuống phần 'Split Tunnels'. Nhấp vào nút 'Manage' (Quản lý) và định cấu hình các thiết lập như minh họa bên dưới. Thay thế địa chỉ IP nếu cần. Hiển thị address và host sẽ định tuyến lưu","#step-3",{"@type":4028,"name":4041,"text":4042,"url":4043},"Cấu hình Tường lửa trên VPS","Bật tường lửa để chỉ cho phép mạng con '100.96.0.0\u002F12', đồng thời chặn tất cả các quyền truy cập công cộng đến khác. bash Cho phép lưu lượng loopback (quay vòng) để tránh làm hỏng các dịch vụ cục bộ: bash Tải lại tường lửa và xác minh trạng thái: bas","#step-4",{"@type":4028,"name":4045,"text":4046,"url":4047},"Hiển thị Hermes Agent vào Mạng Riêng","Chúng ta sẽ hiển thị Hermes Agent Web Dashboard vào mạng riêng của mình và sử dụng nhà cung cấp xác thực mặc định là Nous Research.","#step-5",{"@type":4028,"name":4049,"text":4050,"url":4051,"image":3895},"Cài đặt Máy khách Cloudflare WARP trên Máy tính bàn","Tải xuống máy khách Cloudflare WARP từ cổng thông tin của Cloudflare. Mở và khởi chạy máy khách Cloudflare WARP sau khi cài đặt. Đăng nhập khi được nhắc. Một trang 'Success' (Thành công) sẽ được hiển thị sau khi đăng nhập thành công. Máy khách WARP h","#step-6",{"@type":4028,"name":4053,"text":4054,"url":4055,"image":3954},"Cài đặt Máy khách Cloudflare WARP trên Thiết bị iOS","Cài đặt Cloudflare One từ App Store. Mở ứng dụng Cloudflare One và nhập tên nhóm của bạn khi được nhắc. Đăng nhập bằng cùng một địa chỉ email đã được định cấu hình trong quy tắc chính sách ở trên. Sau khi được kết nối, nó sẽ trông giống như sau: Điều","#step-7",{"lastmod":4057},"2026-09-28",{"title":4059,"description":4020,"ogTitle":3137,"ogDescription":4020,"twitterTitle":3137,"twitterDescription":4020},"Truy cập an toàn Hermes Agent bằng Cloudflare Zero Trust","vi\u002Farticle\u002Fexposing-hermes-agent-to-private-network-using-cloudflare-warp",[926,1019,3145,4062,4063],"Mạng riêng","Hướng dẫn","cj9xDUr4OU-vTUS6m18q2Qy2nRQKSVmUduRnaiOxXEc",1792490007957]