Cruma 隧道
當使用者想要從自己的機器發布某些內容、管理 Cruma 已提供的服務,或安裝/停止 Cruma 時,使用此技能。任何分享的內容都是公開的:分享前務必詢問,並確切指出哪個埠或資料夾將變得可存取。匿名隧道無需註冊。
使用者的 Cruma 帳戶
帳戶功能(包括方案詳情、帳戶隧道與站點、看板及記憶體)隨選用的 cruma-cloud 外掛提供。對於這類請求,請使用其 cloud 技能。分享埠或資料夾,以及使用者正在運行的代理,會保留在本機 cruma 伺服器上。
搭配 cruma MCP 工具
此外掛透過其啟動器 (mcp/cruma-mcp.mjs) 啟動 cruma mcp,這是一個名為 cruma 的本機 MCP 伺服器,會執行已安裝的 cruma 二進位檔。當其工具出現在你的工具清單中時,請使用它們,而非 shell 指令。該伺服器啟動時不會暴露任何內容。
查詢,而非猜測
此檔案是地圖,而非手冊。對於單純分享一個埠或資料夾,請使用以下工具。對於其他任何情況(驗證、過濾器、網域、路由、程序、規則、或你尚未用過的設定),請先閱讀 Cruma 對自身的說明,再使用它所指向的工具:
- 資源
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會顯示已配置的內容。載入你將呼叫的工具的結構描述。 - 如果上述方式未能涵蓋,則參考 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 工具來應用。 - 若僅有 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: [