just tell your agent
WoowTech 提示詞庫

用自然語言操作 Tailscale:40+ 條給 AI agent 的範例

Claude、Cursor、Codex、Continue、Cline——這些 AI agent 只要接得到 Tailscale REST API(api.tailscale.com/api/v2/)、tailscale CLI,或 tailscale 的 MCP server,就能被你「用中文交代事情」。這本收錄 40+ 條真實可用的提示詞,每一條都能直接複製,貼到 agent 對話框改成你家的細節就送出。

這本是什麼

這是一份「開口範例集」,讓你把 AI agent 當成 Tailscale 副手:寫 ACL policy 不用背 hujson 語法、宣告 subnet router 不用查 flag、查裝置清單不用 SSH 進去下 CLI——講一句話,agent 幫你調 API 或 CLI 完成。

每一條卡片右上角有「複製」按鈕,貼進 Claude Code/Cursor Chat/Codex Agent 對話框(agent 需已配置 Tailscale API key 或 tailscale CLI 可執行權限),把「你家的裝置名/CIDR/使用者 email」換一換就能送。

觀念:提示詞不是咒語。真正的價值是示範哪些欄位要講清楚(tailnet、user email、tag、CIDR、hostname)。照抄能動,改成你家的版本更精準。
Tailscale API 前提:大部分「寫 policy/approve node/管 key」的操作走 REST API(https://api.tailscale.com/api/v2/tailnet/<tailnet>/...),需要在 Tailscale 主控台建立 OAuth client 或 API access token。查看類(who's online、routes)也能用本機 tailscale status --json。詳見 tailscale.com/api。

怎麼用這些提示詞

  1. 先把 agent 接到 Tailscale

    三種常見接法:(a) 給 agent 一支 API token(例:Claude Code + Bash tool);(b) agent 直接呼叫本機 tailscale CLI;(c) 掛 Tailscale MCP server(例:tailscale-mcp、headscale-mcp 之類的社群 server)。任一種都好用。

  2. 挑最接近你需求的一條,按複製

    貼進 agent 對話框。這本每條提示詞的措辭都是寫給 agent 讀的,不是給你自己看的。

  3. 把佔位符換掉

    <tailnet>、<[email protected]>、192.168.1.0/24、ha-home 這類是佔位——改成你的實況。有寫「先給我摘要再改」的一定保留。

  4. 危險操作先看 dry-run

    會改 policy 或撤銷 auth key 的操作,第一次跑一定先看 agent 提供的 diff/摘要,確認再放行。

提示:Tailscale API 的 policy 更新是整包覆蓋(PUT hujson)——所以「加一條規則」的正確做法一定是「拉當前 policy → 改 → PUT 回去」,本冊每條相關提示詞都有寫。

ACL policy 生成與編輯

Tailscale policy 是一份 hujson,難點在寫對又不寫過頭。用 agent 生成後手動 review,比自己從頭寫快得多。

用 Tailscale API 拉我 tailnet「<tailnet-name>」的目前 ACL policy,pretty-print hujson 給我看,並用白話解釋每一條 grants/acls/tagOwners/nodeAttrs 各在做什麼。只讀不改。

API 端點:GET /api/v2/tailnet/{tailnet}/acl。這條當作「先讀後改」的第一步。

請幫我把當前 policy 加一條規則:tag:family 群組的裝置可以連 tag:ha 群組的 8123 port(Home Assistant Web UI),但不能連其他任何 port。先拉當前 policy、產出修改後版本給我看 diff、我按確認你才 PUT。

policy 更新是整包覆蓋(PUT)——所以流程一定是 read-modify-write。

幫我把 policy 的 acls 舊格式重寫成新的 grants 格式(Tailscale 2024 之後推薦寫法),語義完全等價。改完先做 POST /api/v2/tailnet/{tailnet}/acl/validate 檢查通過,才 PUT 上去。

寫一份最小權限的 policy 骨架給我家用:3 個 tag(tag:ha、tag:family、tag:guest)。tagOwners 都指向 <[email protected]>。規則:family 可以連 ha 的 8123、guest 只能連我對外開放的 *:80/443、其他一切拒絕。附上每一段的中文註解。

我要幫外包工程師「<[email protected]>」開一週的臨時存取:只能連 tag:zigbee-gateway 這一台的 22 port,8 天後自動失效。用 autoApprovers + autoDelete/expiry 設好給我。改動前先看 diff。

請 dry-run 我這份 policy 對現有裝置的影響:跑 POST /api/v2/tailnet/{tailnet}/acl/preview,帶上 policy 內容和實際 tailnet 節點清單,告訴我哪些原本能通的路徑會被切斷、哪些新開通。

把我這份 policy 交叉檢查一次:找出 (a) 沒被任何規則使用的 tag、(b) 授權太寬的 *:*、(c) 沒設 tagOwners 的 tag。給我一張改善清單,不要動 policy。

把我這份 Tailscale policy 轉譯成等價的 Headscale ACL(v0.23+ 的格式);有 Headscale 不支援的欄位標出來並說明替代做法。輸出兩份:Tailscale 原版、Headscale 對應版。

要從 Tailscale 搬到 Headscale 時的必備一步。

Subnet router 設定

Subnet router 讓 tailnet 看見某一段 LAN,是 Tailscale 最實用也最容易設錯的功能之一。

在這台 Home Assistant 主機上把 Tailscale 設成 subnet router,宣告 192.168.1.0/24 進 tailnet。步驟:(1) 用 tailscale up --advertise-routes=192.168.1.0/24 --reset 重新宣告;(2) 檢查 tailscale status --json 確認狀態;(3) 提醒我到管理主控台按核准。

用 Tailscale API 核准 tailnet 中裝置「ha-home」宣告的所有 subnet routes:先 GET /api/v2/device/{id}/routes 看目前 advertised vs enabled,把 advertised 的全部加進 enabled 再 POST 回去。改動前先給我列出來確認。

Subnet route「被宣告」不等於「已核准」——這是最常見的踩雷。

我家有兩個站點:家(LAN 192.168.1.0/24,subnet router = ha-home)、工作室(LAN 10.10.0.0/24,subnet router = studio-nas)。請寫 policy 讓:(a) 我自己可以從家看工作室、工作室看家;(b) 家人只能看家;(c) 工作室的訪客不能連任何一段。改動先 preview。

列出 tailnet 裡目前所有 subnet routers 與各自宣告的 CIDR,用表格輸出:hostname、tags、advertised routes、enabled routes、last seen。用 tailscale status --json 或 API 都行,挑你手邊有的。

我要撤掉 subnet router「old-nas」的所有宣告:把它 enabled routes 清空、把 hostname 也 rename 標記為 DEPRECATED-old-nas,最後產出撤除紀錄(時間、原因、影響哪些 tag)。動之前先給我 checklist 確認。

用 exit node 模式啟用「ha-home」:tailscale up --advertise-exit-node,然後叫我到主控台核准 exit node 使用權。列出核准後手機端要下的指令(tailscale set --exit-node=ha-home)。

MagicDNS 與 DNS 設定

MagicDNS 讓每台裝置有一個好記的短網址(例:ha-home),也可以設 split DNS 或加自訂 nameserver。

用 API 打開我 tailnet 的 MagicDNS:GET /api/v2/tailnet/{tailnet}/dns/preferences 看現況,如果沒開就 POST 設 {"magicDNS": true}。同時檢查 nameservers 有沒有設,沒設就跳過先不動。

幫我在 tailnet DNS 加一組 split DNS:對 *.internal.example.com 這個 domain 用 192.168.1.53 這台 DNS 伺服器解析;其他 domain 走原本設定。用 POST /api/v2/tailnet/{tailnet}/dns/nameservers 或 /dns/searchpaths,看正確端點是哪個。

重新命名 tailnet 裡的裝置「laptop-1234」為 work-laptop:用 POST /api/v2/device/{id}/name。改完給我看 MagicDNS 生效後對應的 *.tailXXXX.ts.net 短網址。

產出 tailnet 所有裝置的 MagicDNS 短網址對照表:hostname、magicDNS FQDN、tailnet IP、tags。輸出成 markdown 表格,我要貼進 Notion。

用 Tailscale API 把 tailnet 的 override local DNS 設成開啟(overrideLocalDNS: true),這樣所有裝置優先用 tailnet DNS。改動前告訴我對「家裡本來用 router 當 DNS」的影響。

Serve/Funnel HTTPS 反代

Serve 讓 tailnet 內裝置得到合法 HTTPS 短網址(*.tailXXXX.ts.net);Funnel 進一步讓它可以對公網開放——後者比較危險,本冊優先做 Serve。

在這台 HA 主機上用 tailscale serve 幫 Home Assistant Web UI 掛一個 tailnet 內的 HTTPS 短網址:把 localhost:8123 反代到 https://ha-home.tailXXXX.ts.net。不要開 Funnel,只給 tailnet 內看。設完 tailscale serve status 給我確認。

列出這台機器目前所有 Serve/Funnel 設定:跑 tailscale serve status --json,解析出來用表格呈現「路徑 → 後端」對應,並標示哪些是 Serve、哪些是 Funnel(公網可見)。有 Funnel 的請特別標紅。

幫我把 tailscale serve 的 HA 反代設定寫成 systemd unit 或 add-on 啟動 hook,確保 HA 或機器重啟後 serve 會自動恢復。給我完整的 unit 檔內容和放置位置。

我想把 tailnet 內 ha-home.tailXXXX.ts.net 反代到 HA 的 trusted_proxies:幫我生成 Home Assistant configuration.yaml 需要加的 http: 區塊,並解釋為什麼要加。只給我 YAML,不要真的改 HA 設定。

警告分析:如果我把 HA 從 Serve 改成 Funnel(公網可見),有哪些風險?列成 checklist:驗證機制、rate limit、公開的 attack surface、Funnel 有沒有 IP 白名單機制。不動任何設定。

Tailscale SSH 授權

Tailscale SSH 讓你用 tailnet 身分登入其他裝置,不用管 authorized_keys,policy 中直接寫誰能 SSH 到哪。

幫我在 policy 中開啟 Tailscale SSH:讓 <[email protected]> 可以用 root 或 admin 身分 SSH 進 tag:ha 群組的所有機器;其他任何人都不行。寫成 ssh 區塊給我看 diff、確認再 PUT。

在這台機器上打開 Tailscale SSH server:跑 tailscale up --ssh(保留原有 flags),確認 tailscale status 顯示 SSH 已啟用。改動前提醒我這會取代傳統 sshd 的授權路徑。

為外包工程師「<[email protected]>」開只有 7 天有效期的 Tailscale SSH 存取,只能 SSH 進 tag:sandbox,check-mode 為 check(登入前需二次確認)。用 policy 的 ssh block 完成,加上 expiry。改前先給我 diff。

產出 tailnet SSH 稽核報告:拉最近 30 天所有 SSH 連線紀錄(GET /api/v2/tailnet/{tailnet}/logging/network/read),聚合出「誰連了哪台、幾次、平均連線時長」的表格,找出異常。

Node approval 與 key 管理

Node approval 讓新裝置加入 tailnet 時要人工核准;auth key 是自動化加入的憑證。兩者都需要照顧。

列出 tailnet 中目前狀態為 pending approval 的新裝置:hostname、user、tags、requested at。列完問我要不要 approve;我按 approve 你就 POST /api/v2/device/{id}/authorized。

建立一支可重用、24 小時內有效、只能建立 tag:ephemeral-test 標籤裝置的 auth key。用 POST /api/v2/tailnet/{tailnet}/keys,設 reusable: true、ephemeral: true、expirySeconds: 86400。回傳 key 之後提醒我立即安全保存。

找出 tailnet 中 keyExpiryDisabled: true(永不過期)的裝置——這通常代表有人偷懶。列出來,並建議:哪些適合開回 expiry、哪些是 subnet router 本來就該關的。只列不改。

批次撤銷 tailnet 中所有 90 天沒有 lastSeen 的裝置:先列給我看清單並讓我確認,我按確認你才呼叫 DELETE /api/v2/device/{id}。過程中每刪一台印一行 log。

審計目前 tailnet 上所有 auth keys:查 GET /api/v2/tailnet/{tailnet}/keys,列出「哪支還沒被用過」「哪支已經過期沒刪」「哪支 reusable 又永不過期」。給我一份清理建議清單,不動 keys。

網路拓撲查詢與清點

問你的 tailnet 現在長什麼樣、誰在線、走什麼 relay,都是 read-only 但很常用的操作。

用 tailscale status --json 列出目前 tailnet 中所有線上裝置,輸出成表格:hostname、tailnet IP、OS、tags、last seen、目前是走 direct 還是 DERP relay。DERP 的另外標出哪個 region。

畫出我 tailnet 的 mermaid graph:節點是裝置(以 tag 分色),邊代表 policy 中允許的存取關係,subnet router 帶進來的 LAN CIDR 標成 cloud shape。輸出成一段 ```mermaid 區塊我要貼到 GitHub README。

用 tailscale ping 測所有其他線上裝置的 P2P 連線:迴圈跑 tailscale ping --c 1 <hostname>,把「走 direct 還是 DERP」「延遲」整理成表格。DERP 的建議我開 UPnP/NAT-PMP 看能不能 NAT 打洞成 direct。

產出 tailnet 月報:用 API 拉本月新增/移除裝置、subnet route 變更、policy 修改次數、SSH 連線總數。輸出成 markdown 給我貼到工作群。

找出 tailnet 中沒有任何 tag的裝置——這些通常是「用個人 email 隨手加進來的」漏管理裝置。列給我看,並幫每一台建議一組適合的 tag(用 hostname 猜)。只建議不改。

故障排除 prompts

連不上、看不到、慢——這幾條給 agent 跑診斷,比自己盲拆快。

診斷:我從手機(iphone-15)連 ha-home 打不開。請 agent 依序:(1) tailscale status 看兩台都在線;(2) tailscale ping ha-home 看能不能通;(3) tailscale netcheck 看網路健檢;(4) 拉 policy 看有沒有規則擋;(5) 給我一段結論說是哪一層的問題。

我宣告了 192.168.1.0/24 但 tailnet 裡的手機還是連不到 192.168.1.50。跑:(a) subnet route enabled 檢查、(b) 目標 IP 是否真在該段、(c) 目標裝置有沒有防火牆擋 tailnet 來源、(d) HA 主機 IP forwarding 是否開(sysctl net.ipv4.ip_forward)。給我逐項結論。

Tailscale SSH 突然登不進去了。診斷:(1) tailscale status --json 看目標裝置的 sshHostKeys;(2) 拉 policy 的 ssh block 看規則有沒有動過;(3) 目標機器 journalctl -u tailscaled 最後 30 行;(4) 給我可能原因排序。

為什麼我的裝置全部走 DERP 而不是 direct?請跑 tailscale netcheck 分析報告:UPnP/NAT-PMP/PCP 狀態、preferred DERP、Global v4/v6 是否有、home NAT type。給我改善建議清單(例如:改用 --advertise-exit-node、開路由器 UPnP、換 DERP region)。

拉最近 24 小時 tailnet 的 audit log(GET /api/v2/tailnet/{tailnet}/logging/configuration/read),列出所有「policy 變更、key 建立、node approval」操作,格式 [時刻] <actor> <action> <object>,並標出看起來異常的。

Home Assistant Tailscale add-on 起不來。診斷:(1) HA supervisor logs 找 tailscaled 相關;(2) 檢查 add-on 設定裡的 auth_key 是不是過期;(3) 檢查 supervisor 對 NET_ADMIN capability 是否給滿;(4) 給我三個最可能原因+對應解法。

寫法小抄:讓 agent 少猜一輪

  • 先讀後改:所有會動 policy 的動作,第一句都寫「先拉當前 policy」。避免 agent 誤覆蓋。
  • 指定 API 端點:例如寫「GET /api/v2/tailnet/{tailnet}/acl」比說「查 ACL」精準十倍。
  • tailnet 用符號:Tailscale 官方接受 - 代替 tailnet 名(用當前 OAuth 對應的 tailnet),寫 {tailnet} 讓 agent 自己填。
  • 要求 dry-run/diff:加一句「先給我 diff 或摘要、我按確認你才 apply」是最便宜的保險。
  • tag 加冒號:Tailscale tag 一定是 tag:xxx,別漏冒號 agent 會生成錯格式。
  • 操作範圍要限縮:寫「只找 last seen 超過 90 天的」比「找沒在用的」清楚,避免誤刪。
  • 回傳格式指定:要 markdown 表格、mermaid、CSV,先講清楚——agent 產文貼哪都不用再修。
觀念:提示詞的價值不是「完美措辭」,是「讓 agent 少做假設」。每加一個具體條件,就少一次來回修改。

常見問題

沒有 Tailscale API token 也能用嗎?
很多提示詞可以——凡是走 tailscale CLI(status、ping、up、serve、netcheck)的,agent 只需要能執行 shell 指令就行。要動 policy/keys/device authorization 才需要 API token。
這些 prompts 用在 Headscale 也可以嗎?
CLI 相關的完全通用(Tailscale client 連 Headscale 也是同一支)。REST API 的部分:Headscale 有自己的 API(headscale api ... CLI 或 gRPC),提示詞的意圖能重用,端點與參數要換成 Headscale 版本。有一條專門的 policy 轉譯提示詞。
Agent 執行時要不要開什麼權限?
看你的 agent。Claude Code/Cursor 需要允許 Bash 或 Terminal 工具;MCP 版本用戶只需要授權 tailscale-mcp server 存取。有 policy 變更的建議都在受控環境(測試 tailnet)跑第一遍。
會不會有 prompt 讓 agent 亂改我 policy?
本冊每一條會改動的都有「先給 diff、我確認再 PUT」句子。如果 agent 直接跳過確認上 policy,那是 agent 沒讀清楚指令,你可以在提示詞後加一句「禁止未經確認就 PUT」。正式環境建議 policy 走 GitHub PR 流程。
我要接哪個 MCP server?
2026-08 目前社群主流有兩個方向:(1) tailscale-mcp(社群包裝 REST API)、(2) 通用 bash/shell MCP + 本機 tailscale CLI。前者裝置操作更安全(有型別檢查),後者最靈活。若走 Headscale,直接用 headscale CLI 或它的 gRPC MCP 適配。

把這本帶走

整本是自包含單檔 HTML,圖示全部內嵌,下載後離線可開、可直接轉寄給同事。

下載本冊 HTML 回資源總覽