Community程式設計與開發github.com

umbra-yurei/agent

使用 Cruma 將本機資源(開發伺服器埠、檔案資料夾、多個命名站點)公開到 HTTPS URL,並可管理這些資源;支援密碼、登入或 IP 保護、代管開發伺服器。也能檢查或修改使用者自己的 Cruma 桌面版或無頭模式代理(站點、路由、程序、日誌),以及安裝 Cruma。

agent 是什麼?

這是一個用於 Cruma 隧道技術的 AI 代理技能,讓使用者能安全地將本機資源(如開發伺服器埠、檔案目錄或多個命名站點)透過公開的 HTTPS URL 暴露出去。它支援多種保護機制,包括密碼驗證、IP 白名單或 OAuth 登入(如 Google/GitHub)。該技能會先詢問使用者是否同意暴露,並在偵測到敏感內容(如管理後台、資料庫工具或憑證檔案)時主動建議加入保護。它相容於 Claude Code、Coder 等支援 MCP 協定的平台,透過 `cruma mcp` 工具運作。技能會聰明地判斷使用者的情境:若發現使用者已運行的桌面版或無頭模式代理,會先詢問要使用哪個代理來建立隧道;若沒有則自動建立臨時匿名隧道。對於進階設定(如自訂網域、路由規則或永久修改),它會查閱 Cruma 的官方文件,不會憑空假設或發明不存在的功能。此外,技能也提供管理功能,包括列出目前公開的 URL、檢查健康狀態、查看程序日誌,以及卸載隧道。

相容平台✓Claude Code~Codex CLI~Cursor
Part ofMobile
npx skills add https://github.com/umbra-yurei/cruma-plugin/tree/HEAD/plugins/cruma/skills/agent

Installed? Explore more 程式設計與開發 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

Cruma 隧道

當使用者想要從自己的機器發布某些內容、管理 Cruma 已提供的服務,或安裝/停止 Cruma 時,使用此技能。任何分享的內容都是公開的:分享前務必詢問,並確切指出哪個埠或資料夾將變得可存取。匿名隧道無需註冊。

使用者的 Cruma 帳戶

帳戶功能(包括方案詳情、帳戶隧道與站點、看板及記憶體)隨選用的 cruma-cloud 外掛提供。對於這類請求,請使用其 cloud 技能。分享埠或資料夾,以及使用者正在運行的代理,會保留在本機 cruma 伺服器上。

搭配 cruma MCP 工具

此外掛透過其啟動器 (mcp/cruma-mcp.mjs) 啟動 cruma mcp,這是一個名為 cruma 的本機 MCP 伺服器,會執行已安裝的 cruma 二進位檔。當其工具出現在你的工具清單中時,請使用它們,而非 shell 指令。該伺服器啟動時不會暴露任何內容。

查詢,而非猜測

此檔案是地圖,而非手冊。對於單純分享一個埠或資料夾,請使用以下工具。對於其他任何情況(驗證、過濾器、網域、路由、程序、規則、或你尚未用過的設定),請先閱讀 Cruma 對自身的說明,再使用它所指向的工具:

  1. 資源 cruma://about(或 describe_cruma):Cruma 能做什麼,以及哪個工具負責它。然後使用 get_config_model_reference 搭配 section 參數(存取控制和請求過濾器使用 middleware_model,其他如 backend_kinds、listener_model、recommended_mcp_usage;完整參考很大)以及 get_cruma_glossary 查詢術語。在使用者自己的代理上(見下方),get_runtime_inventory 會顯示已配置的內容。載入你將呼叫的工具的結構描述。
  2. 如果上述方式未能涵蓋,則參考 Markdown 文件:https://cruma.io/llms.txt、章節清單 https://cruma.io/book/cruma-tunnels.md,以及任何章節 https://cruma.io/book/cruma-tunnels/<chapter>.md。這些文件是為命令列(cruma serve、cruma proxy)編寫的:從中理解 Cruma 的能力,並透過 MCP 工具來應用。
  3. 若僅有 CLI 路徑,則使用 cruma --help 和 cruma <command> --help。

快捷工具(如 expose_local_port)涵蓋常見情況。它們未涵蓋的部分,應使用通用的 upsert_* 工具;切勿將快捷工具的限制視為 Cruma 的限制。如果參考文件和文件不支援使用者提出的請求,請如實告知;不要發明一個不存在的設定或工具。

切勿自行提供服務。 不要啟動 python3 -m http.server、npx serve 或任何其他檔案伺服器,也不要執行 cruma serve 或 cruma proxy:當 MCP 連線時,這些動作會啟動第二個帶有自己隧道的代理。

誰的 Cruma

工具啟動時會依附於一個臨時工作階段代理:一個由你的視窗共享、且不保存使用者任何資料的匿名隧道。這不是使用者自己的 Cruma。

在工作階段中首次分享之前,請呼叫一次 list_agents(它不會從任何代理讀取資料,因此可以優先呼叫)。尋找一個正在運行、且非工作階段代理、且其 tunnel_account 為 registered(桌面版應用程式或無頭模式代理,已登入或具有隧道憑證)的代理。tunnel_account 為 anonymous 的運行中代理則不是。

  • 存在一個這樣的代理:在分享任何內容前,請詢問一次。 說明選擇的名稱,包含其類型、設定檔、網域以及另一個選項的含義,例如:「使用你正在運行的 Cruma(桌面版,設定檔 work,acme.tun.example.test)還是使用一個臨時的匿名隧道(隨機網址、瀏覽器警告頁面、有時效性、會隨工作階段結束而消失)?」在他們回答之前,不要分享任何內容,也不要呼叫其他會讀取或變更代理的工具。如果有多個代理在運行,請在相同的問題中列出它們。
    • 他們選擇自己的代理:對該代理呼叫 use_agent(這就是詢問後再呼叫 use_agent 所要求的確認),並將工作階段的每次分享都建立在該代理上。如果適用,請提及已知的限制:在多個代理共同服務的隧道中,在其中一個代理上建立的分享,只能透過該代理存取。
    • 他們選擇臨時隧道:停留在工作階段代理上。
    • 記住此答案,直到工作階段結束。之後的分享不再詢問,也不需再為此呼叫 list_agents。僅在使用者主動提出時才重新詢問。
  • 沒有這樣的代理運行(沒有,或只有匿名代理,例如工作階段代理):無需詢問。直接使用工作階段代理,並回報 URL。
  • 你無法詢問(非互動式執行,或無法獲得答案):使用工作階段代理,並在交接訊息中說明你採取了此作法,以及當 list_agents 顯示有已登入的 Cruma 可用時,你已使用了工作階段代理。
  • 當使用者已明確指定分享到哪裡時(「在我的桌面版 Cruma 上」、「使用臨時隧道」),則無需提問:遵循使用者的指示。

這些分享歸屬於工作階段,並在工作階段結束時收回;切勿為它們設定 persist。

當請求涉及他們的 Cruma(他們的應用程式、站點、路由、網域、程序或日誌,例如「為什麼我的站點回傳 502?」、「為我的暫存站點加上密碼」、「我的 Cruma 裡正在執行什麼?」),或者他們想要透過自己的隧道、自訂網域或命名設定檔分享時,請在任何會讀取或變更代理的工具之前呼叫 list_agents(describe_cruma、cruma://about、get_config_model_reference 和 get_cruma_glossary 可以先呼叫)。讀取工作階段代理會回答關於一個不屬於他們的設定,因此切勿為這類請求讀取它。列出或建立他們帳戶上的隧道屬於帳戶功能(見上方),而非 list_agents 的職責。

  • 詢問後再呼叫 use_agent,說明代理的類型(桌面版、無頭模式)、設定檔和網域,然後等待回答。對於單純的分享,上述問題即為此詢問;切勿在未經詢問的情況下切換。之後的分享工具將作用於該代理。切換會收回你在前一個代理上建立的分享。
  • 在切換前,僅說明你要切換到哪個代理並詢問。 不要描述任一個代理所含的內容(包括工作階段代理的內容),也不要陳述或暗示原因、診斷結果或已配置的內容,即使 list_agents 顯示了程序摘要(例如 Failed 階段)或站點名稱:這是一個清單,而非診斷。說明目標(類型、設定檔、網域),詢問,並說明在使用者回答之前不會更改任何內容,然後停止。在切換後,才從使用者的代理進行診斷。
  • use_agent 永遠不會啟動一個代理。如果使用者所指的代理沒有在運行,請告知他們並要求他們開啟桌面版應用程式,或執行 cruma --profile <name>(使用 list_agents 為已停止設定檔提供的名稱)。對於關於他們自己站點的請求,不要回退到臨時隧道。
  • 僅說明工具回傳的內容。 list_agents 會列出它所知道的代理;你可以從中說明哪些代理正在運行及其類型、設定檔和網域。除非工具結果顯示,否則不要聲稱設定檔、站點、設定或帳戶存在或缺失(例如,永遠不要說「沒有找到已儲存的設定檔」或「沒有配置任何內容」)。
  • 如果你的工具中沒有 list_agents,表示代理版本較舊:對於分享,使用臨時隧道,並說明需要更新版本的 cruma 才能處理使用者自己的請求(Update 提供了升級指令)。
  • 已經存在於使用者用戶端中的 Cruma HTTP MCP 伺服器(例如 cruma-app)就是他們自己的代理。對於關於他們 Cruma 的請求,使用其工具;對於臨時分享,則使用此外掛的工具。如果它連線失敗,請如實告知,而不是使用工作階段代理。list_agents 會標記服務 HTTP /mcp 的代理。

在使用者自己的代理上,在他們同意切換後:

  • 成功的 use_agent 結果是你現在所依附代理的狀態(網域、前端、程序、allow_persistent_changes)。從此結果開始工作;不要為了確認切換而再次呼叫 list_agents。

  • 讀取是自由的:get_health_summary、get_site_summary、get_proxy_routes、probe_route、get_process_logs、list_recorded_requests。

  • 變更會應用於正在運行的代理,並在代理重新啟動時消失。請說明此點。

  • 永久變更(「一勞永逸地設定一個站點」)需要 persist: true,且代理會拒絕,除非使用者開啟了「允許它們儲存變更」(mcp.local_socket.allow_persistent_changes;桌面版 MCP 頁面,「此電腦上的編碼代理」)。切勿偷偷地改用僅記憶體中的變更。請解釋此設定,並要求使用者將其開啟,或要求他們在應用程式中進行變更。一旦開啟(use_agent 結果中的 allow_persistent_changes 為 true,或切換前的 list_agents 顯示為 true),還不要使用 persist: true 呼叫寫入工具:首先在你的回覆中描述確切的變更(前端、後端、中介軟體),並詢問是否要儲存它,明確說明它將被儲存到磁碟上的代理設定中,並在重新啟動後保留。僅在使用者明確批准該確切變更後,才傳遞 persist: true:這可以是在後續對話中對你描述的肯定回覆,或者在同一則訊息中,一個明確的批准,該批准透過類型和名稱來命名後端和前端,作為一項已儲存的變更(「我批准這項確切的已儲存變更:...」)。要求一個「永久」或「已儲存」的站點,即使附帶了名稱和路徑,也只是一個請求,而非批准:描述變更並詢問。切勿在未經相同批准的情況下,使用 persist: true 重新發送現有設定以使其永久化。這是 persist 的唯一用途,且永遠不能用於工作階段代理。

保護看似私密的內容

在暴露看似私密的內容之前(管理後台、資料庫工具、內部文件、包含憑證的資料夾、.env 檔案或個人資料),請詢問是否需要保護它,並建議使用密碼。等待回答;不要先暴露。如果使用者已要求保護,則不要再次詢問。

  • 密碼或 IP 白名單:將 access 參數傳遞給 expose_local_port 或 expose_local_directory(工具結構描述會列出類型)。生成的密碼會回傳一次。如果在結構描述中沒有 access 參數(較舊的代理),請使用 upsert_backend 和 upsert_frontend 建立站點,並加入 basic_auth 中介軟體;參閱 middleware_model 以了解其結構。
  • 使用帳戶或提供者(Google、GitHub)登入:access 的 sign_in 選項尚無法用於分享。請勿嘗試或尋找替代方案。登入功能需透過 upsert_frontend 並搭配一個 oauth2 中介軟體來實現,該中介軟體會引用使用者自己代理已擁有的提供者。在現有前端的 oauth2 中介軟體中尋找提供者 ID(使用 get_runtime_inventory,設定 full: true 和 `sections: [

相關技能