Community程式設計與開發github.com

csansoon/hostel-platforms

了解並管理 Hostel 平台 — 預設平台 (ios、android、macos、windows、linux)、每種平台所需的機器環境、裝置與標籤,以及自訂平台及其腳本。當使用者提到「把 iOS/Android 加到機器」、「Mac 需要什麼才能跑 iOS」、「Android 模擬器無法啟動」、「新增裝置」、「建立自己的平台」(例如 tvOS) 或「修改 provision/prepare 腳本」時使用。

hostel-platforms 是什麼?

此技能針對 Hostel 平台系統提供全面管理功能。它明確區分兩種平台類型:OS 平台(linux、macos、windows),由所有匹配 OS 的機器自動提供;以及裝置平台(ios、android 或自訂平台),僅由在 `platforms` 設定中列出的機器提供。對於每個預設平台,技能詳細說明支援的裝置(例如 iPhone、iPad、Pixel 手機)、必要的機器條件(Xcode、Java、KVM、自動登入、螢幕錄製權限)、環境變數及標籤。它也解釋了 `--device` 選擇、標籤比對規則與獨佔租用行為。最重要的是,技能支援透過 `hostel config platforms new` 命令建立完全自訂的平台,具有標準化的 `platform.toml` 設定檔以及生命週期腳本(provision、prepare、screenshot、reset、health)。每個腳本階段在特定目錄上下文中執行,具有明確定義的環境變數集合,確保可重複性與錯誤處理。管理員可以使用 push/pull/reset/remove 指令匯入或修改現有平台,變更會立即生效,觸發受影響房間的重新佈建。此技能對於在持續整合/測試基礎設施中管理異質裝置機群的 Devops 與平台工程師特別有價值,支援 Hostel、Claude Code 與 Cursor 等平台。

相容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/csansoon/hostel/tree/HEAD/skills/hostel-platforms

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

在你喜歡的 AI 中提問

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

說明文件

平台

平台是客端要求的內容(hostel acquire <平台>)。有兩種:

種類名稱服務的機器
OS 平台linux、macos、windows每個具有該 OS 的機器,自動服務。永遠不要列在 platforms 中。
裝置平台ios、android 或您自訂的平台在 platforms 中列出該平台的機器

Node、Java 或 pnpm 等工具不是平台:專案的 mise 檔案宣告它們(hostel-use),或機器的 tools 鍵(hostel-rooms)。

hostel platforms              # 對所有人:顯示空閒插槽、佇列、等待、裝置
hostel config platforms       # 對管理員:顯示 NAME、KIND、MACHINES、SOURCE

預設平台

二進位檔內建了 ios、android、macos 和 windows。linux 是沒有腳本的 OS 平台。

平台裝置機器 OS機器需要
iosiphone-17-pro、ipad-pro-13(最多 2 個)macOS由人員安裝 Xcode 和 iOS Simulator 執行環境。平台需要標籤 xcode-26.5。可選的機器 env:HOSTEL_IOS_RUNTIME(例如 26.5)、DEVELOPER_DIR。
androidpixel-9、pixel-tablet(最多 2 個)Linux 或 macOSJava 17 或更新版本:在機器上設定 tools = { java = "21" }。Linux:/dev/kvm 可供房間使用者使用(給機器一個標籤,例如 kvm),以及模擬器的套件或無密碼的 sudo。佈建下載約 5 GB(逾時 30 分鐘)。可選的 env:HOSTEL_ANDROID_API (36)、HOSTEL_ANDROID_TAG (google_apis)、HOSTEL_ANDROID_PORT (5554)。
macos無macOS無頭部建置:不需任何東西。桌面應用程式:標籤 desktop、房間使用者的自動登入、解鎖的螢幕、對 /usr/libexec/sshd-keygen-wrapper 的螢幕錄製權限,以及無密碼的自動化模式(sudo automationmodetool enable-automationmode-without-authentication)。
windows無WindowsOpenSSH 伺服器。桌面應用程式:標籤 desktop,以及在已登入、解鎖的桌面工作階段中的「Hostel 桌面」工作。
linux無LinuxSSH 伺服器。

平台提供給命令的內容:

  • ios:每個租約新且乾淨的模擬器;SIMULATOR_UDID(第一個裝置)和 SIMULATOR_UDIDS。
  • android:從乾淨快照唯讀的模擬器;ANDROID_SERIAL、ANDROID_SERIALS、ANDROID_HOME。
  • 需要 desktop 的租約是獨佔的:它佔用整台機器。

每個房間也會獲得 agent-device(點擊、輸入、讀取螢幕),在 Windows 上則獲得 winapp。mise.agent_device = false(hostel config settings set)可關閉此功能。

完整的 Mac 和 Windows 準備(使用者、遠端登入、自動登入、桌面工作)在 docs/static-room-setup.md 中。

裝置與標籤

  • --device <d> 選擇平台中的裝置(可重複,最多 max_devices 個)。如果不指定,則使用專案的 devices 或平台的第一個裝置。
  • 標籤是機器上的自由文字(labels = [...])。機器只有在擁有每個必要標籤時才是候選者:平台的 requires、專案 hostel.toml 中的 requires,以及每個 --require。
  • 根據機器擁有的內容命名標籤:xcode-26.5、desktop、kvm。
  • 未知的平台或裝置,或沒有任何機器擁有的標籤,會立即失敗並回傳退出碼 69。

您自己的平台

hostel config platforms new tvos ./tvos --os macos     # 一個範本資料夾(--os linux|macos|windows)
# 編輯 ./tvos/platform.toml 和腳本
hostel config platforms push ./tvos                    # 檢查並儲存;名稱是資料夾名稱
hostel config rooms set mac-mini platforms=ios,tvos     # 讓機器服務它

修改預設平台:

hostel config platforms pull ios ./ios      # 將當前檔案拉取到新資料夾
hostel config platforms push ./ios          # 儲存您的版本(source: changed)
hostel config platforms reset ios           # 恢復到此版本的原始狀態
hostel config platforms remove tvos         # 如果仍有機器列出它,則拒絕

push --name <n> 以其他名稱儲存資料夾。推送會立即生效。平台變更後的空房間會重新佈建。推送僅傳送 platform.toml、README.md 和腳本。

platform.toml

description = "tvOS Simulator"
devices = ["apple-tv-4k"]          # 第一個是預設值(僅限裝置平台)
max_devices = 1                    # 預設 1
requires = ["xcode-26.5"]          # 每台機器必須擁有的標籤
exclusive = false                  # true:租約佔用整個房間
script_timeouts = { provision = "20m" }   # 預設:provision 20m,其他 3m

OS 平台資料夾(linux、macos、windows)可以有 description、requires、exclusive 和 script_timeouts,但不能有 devices。

腳本

檔案名稱:<步驟>.<OS>.sh(適用於 macos 和 linux),<步驟>.<OS>.ps1(適用於 windows)。房間的 OS 選擇對應的檔案。拼寫錯誤的腳本名稱會導致錯誤。

步驟執行時機執行目錄
provision每個房間一次,並在腳本變更時再次執行:安裝並檢查平台需要的內容hostel/
prepare每個租約,在準備就緒之前:啟動裝置,將其事實寫入 device.envslots/<slot>/
screenshothostel screenshot:$1 是輸出 PNG 路徑,$2 是裝置slots/<slot>/
reset在清理時:停止並刪除 prepare 啟動的內容slots/<slot>/
health在清理後、修復時、或暖房間接受租約前:如果房間無法服務平台則退出非零hostel/

規則:

  • 每個步驟都是可選的,除了列出該平台的機器上每個 OS 的裝置平台所需的 prepare。
  • 每個步驟必須可安全地重複執行。
  • 非零退出碼表示失敗。佈建或準備失敗會使房間處於 Broken 狀態,並將租約送回佇列。最後 4 KB 的輸出會進入事件日誌(hostel status <房間>)。
  • Helper 會執行 /bin/sh <腳本>(不需要可執行位元),並在逾時時停止其處理程序群組。
  • 機器層級的 tools 在 provision 之前安裝,因此腳本可以使用它們。

腳本的環境變數:HOSTEL_PLATFORM、HOSTEL_PLATFORM_DEVICES(平台的所有裝置)、HOSTEL_SLOT、HOSTEL_SLOT_DIR、HOSTEL_WORK_DIR、HOSTEL_CACHE_DIR(在租約之間保留)、HOSTEL_LEASE_ID,以及對於 prepare、screenshot 和 reset:HOSTEL_DEVICES(租約的裝置,以逗號分隔)和 HOSTEL_EXCLUSIVE(整房間租約為 1)。另外還有 MISE_* 變數、提供者、機器和插槽的 env,以及 device.env(供 screenshot 和 reset 使用)。使用機器 env 在不同的機器之間變化腳本。

device.env 行(NAME=value)會進入每個租約命令的環境。記錄您的平台寫入的名稱。

檢查

hostel config platforms
hostel status mac-mini       # 事件會顯示佈建輸出和錯誤

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

相關技能