Community코딩 & 개발github.com

csansoon/hostel-platforms

Hostel 플랫폼을 이해하고 변경합니다. 기본 플랫폼(iOS, Android, macOS, Windows, Linux), 각 플랫폼이 머신에 필요한 사항, 기기 및 레이블, 사용자 정의 플랫폼과 스크립트를 다룹니다. 사용자가 "기계에 iOS/Android 추가", "Mac이 iOS에 필요한 것", "Android 에뮬레이터가 시작되지 않음", "기기 추가", "나만의 플랫폼 만들기(tvOS 등)", "프로비전/준비 스크립트 변경"과 같이 말할 때 사용하세요.

hostel-platforms란 무엇인가요?

이 스킬은 호스텔(Hostel) 플랫폼 시스템을 구성하고 관리하는 방법을 설명합니다. 플랫폼은 게스트가 `hostel acquire <platform>` 명령으로 요청하는 대상으로, OS 플랫폼(linux, macos, windows)과 기기 플랫폼(ios, android, 사용자 정의)의 두 가지 종류가 있습니다. OS 플랫폼은 해당 OS가 설치된 모든 머신에서 자동으로 제공되며, 기기 플랫폼은 명시적으로 `platforms` 목록에 등록된 머신에서만 제공됩니다. 기본 플랫폼으로는 iOS(시뮬레이터), Android(에뮬레이터), macOS, Windows, Linux가 내장되어 있으며, 각각 필요한 머신 환경(Xcode, Java, SSH 서버 등)과 설정이 다릅니다. 또한 사용자 정의 플랫폼을 생성하여 provision, prepare, screenshot, reset, health 등의 스크립트 단계를 통해 완전히 제어할 수 있습니다. 이 스킬은 Claude Code, Cursor, Codex와 같은 AI 에이전트가 호스텔 인프라에서 플랫폼을 효과적으로 관리하고 확장할 수 있도록 지원합니다.

지원 대상~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에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

Platforms (플랫폼)

플랫폼은 게스트가 요청하는 대상입니다(hostel acquire <platform>). 두 가지 종류가 있습니다:

종류이름제공하는 머신
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(비밀번호 없음). 프로비전 시 약 5GB 다운로드(타임아웃 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          # 사용자 버전 저장 (source: changed)
hostel config platforms reset ios           # 이 릴리스의 버전으로 되돌리기
hostel config platforms remove tvos         # 머신이 나열하고 있으면 거부됨

push --name <n>은 다른 이름으로 폴더를 저장합니다. push는 즉시 적용됩니다. 플랫폼이 변경된 여유 방은 다시 프로비전됩니다. push는 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는 가질 수 없습니다.

스크립트

파일 이름: macos 및 linux의 경우 <step>.<os>.sh, windows의 경우 <step>.<os>.ps1입니다. 방의 OS가 파일을 선택합니다. 스크립트 이름을 잘못 입력하면 오류가 발생합니다.

단계시점실행 위치
provision각 방에 대해 한 번, 스크립트가 변경되면 다시 실행: 플랫폼이 필요한 것을 설치하고 확인hostel/
prepare각 임대가 준비되기 전: 기기를 시작하고, 사실(facts)을 device.env에 기록slots/<slot>/
screenshothostel screenshot: $1은 출력 PNG 경로, $2는 기기slots/<slot>/
reset정리 시: prepare가 시작한 것을 중지하고 삭제slots/<slot>/
health정리 후, 복구 시, 웜(warm) 방이 임대를 받기 전: 방이 플랫폼을 제공할 수 없으면 0이 아닌 값으로 종료hostel/

규칙:

  • 각 단계는 선택 사항이지만, 기기 플랫폼에서 해당 플랫폼을 나열한 머신의 각 OS에 대해 prepare는 필수입니다.
  • 각 단계는 다시 실행해도 안전해야 합니다.
  • 0이 아닌 종료 코드는 실패입니다. Provision 또는 prepare 실패는 방을 Broken 상태로 만들고 임대를 대기열로 되돌립니다. 마지막 4KB 출력이 이벤트 로그(hostel status <room>)로 전송됩니다.
  • 헬퍼는 /bin/sh <script>를 실행하며(실행 비트 불필요), 타임아웃 시 프로세스 그룹을 중지합니다.
  • 머신 수준의 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       # 이벤트는 provision 출력 및 오류를 보여줍니다

Individual skills in this repo

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

관련 스킬