Community编程与开发github.com

csansoon/hostel-platforms

理解并管理 Hostel 平台——包括默认平台(ios、android、macos、windows、linux)、每台机器所需的条件、设备和标签,以及带自定义脚本的私有平台。当用户提到“为机器添加 iOS/Android”、“Mac 需要什么才能支持 iOS”、“Android 模拟器无法启动”、“添加设备”、“创建自己的平台”(如 tvOS)或“修改 provision/prepare 脚本”时使用此技能。

hostel-platforms 是什么?

该技能是 Hostel 编排工具的核心部分,用于管理“平台”概念——即客户端通过 `hostel acquire <platform>` 请求的环境。它区分操作系统平台(linux、macos、windows,自动在对应操作系统的每台机器上提供)和设备平台(ios、android 或用户自定义的,仅显式在其 `platforms` 列表中列出的机器提供)。技能详细说明了每个内置平台(ios、android、macos、windows)的要求:ios 需要 Xcode 和特定标签,android 依赖 Java 和 `/dev/kvm`,macos 桌面应用需要自动登录和屏幕录制权限,windows 需要 OpenSSH Server 和桌面任务。此外,它还解释了设备和标签系统:通过 `--device <d>` 选择设备,标签用于匹配机器的能力(如 `xcode-26.5`、`desktop`、`kvm`)。用户可以使用 `hostel config platforms new` 创建自己的平台(如 tvOS),并通过 `platform.toml` 和操作系统的特定脚本(provision、prepare、screenshot、reset、health)进行配置。该技能在运行 Cloude Code、Cursor 或 Codex 的终端中通过 `hostel` CLI 命令使用,支持 macOS、Linux 和 Windows 环境。

兼容平台~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 <platform>)。有两种类型:

类型名称提供服务的机器
操作系统平台linux、macos、windows具有该操作系统的每台机器自动提供,无需在 platforms 中列出。
设备平台ios、android 或自定义平台在 platforms 中列出该平台的机器。

Node、Java 或 pnpm 等工具不是平台:它们由仓库的 mise 文件声明(hostel-use),或由机器的 tools 键声明(hostel-rooms)。

hostel platforms              # 面向所有人:空闲槽位、队列、等待、设备
hostel config platforms       # 面向管理员:名称、类型、机器、来源

默认平台

二进制内置了 ios、android、macos 和 windows。linux 是一个没有脚本的操作系统平台。

平台设备机器操作系统机器所需条件
iosiphone-17-pro、ipad-pro-13(最多 2 台)macOSXcode 和 iOS 模拟器运行时,由人员安装。该平台需要标签 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。Provision 大约下载 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 desktop” 任务。
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          # 保存您的版本(来源:已更改)
hostel config platforms reset ios           # 恢复为本版本的原始文件
hostel config platforms remove tvos         # 如果机器列表中仍包含则拒绝

push --name <n> 将文件夹保存为另一个名称。推送立即生效。平台更改后,空闲房间会重新进行 provision。推送仅发送 platform.toml、README.md 和脚本。

platform.toml

description = "tvOS 模拟器"
devices = ["apple-tv-4k"]          # 第一个是默认设备(仅限设备平台)
max_devices = 1                    # 默认 1
requires = ["xcode-26.5"]          # 每台机器必须具备的标签
exclusive = false                  # true:租约占用整个房间
script_timeouts = { provision = "20m" }   # 默认:provision 20 分钟,其他 3 分钟

操作系统平台文件夹(linux、macos、windows)可以包含 description、requires、exclusive 和 script_timeouts,但不能包含 devices。

脚本

文件名:对于 macos 和 linux,使用 <step>.<os>.sh;对于 windows,使用 <step>.<os>.ps1。房间的操作系统选择相应文件。拼写错误的脚本名会报错。

步骤触发时机运行目录
provision每个房间运行一次(脚本更改时再次运行):安装并检查平台所需内容hostel/
prepare每次租约准备就绪前:启动设备,将其信息写入 device.envslots/<slot>/
screenshothostel screenshot:$1 是输出 PNG 路径,$2 是设备slots/<slot>/
reset清理时:停止并删除 prepare 启动的内容slots/<slot>/
health清理后、修复时、预热房间接受租约前:如果房间无法提供该平台,则退出并返回非零值hostel/

规则:

  • 每个步骤都是可选的,但设备平台在其所有提供该平台的机器操作系统上,prepare 是必需的。
  • 每个步骤必须能够安全地重复运行。
  • 非零退出码表示失败。Provision 或 prepare 失败会使房间进入 Broken 状态,并将租约放回队列。最后 4 KB 输出会记录到事件日志中(hostel status <room>)。
  • 助手运行 /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_* 变量、provider、机器和槽位的 env、以及 device.env(用于 screenshot 和 reset)。使用机器 env 可以在不同机器之间改变脚本行为。

device.env 中的行(名称=值)会进入每个租约命令的环境中。请记录您的平台写入的名称。

检查

hostel config platforms
hostel status mac-mini       # 事件会显示 provision 输出和错误

Individual skills in this repo

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

相关技能