Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/tomevault-io/skills-registry --skill simulator-automation명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
| Use when this capability is needed.
> Use when this capability is needed.
Review architecture and API design for the vfs-s3 project. Use when the user mentions @architect, asks to review an issue's design, discuss module boundaries, API shape, or architectural decisions for vfs-s3. Also trigger when the user wants to create an ADR (Architecture Decision Record) or evaluate a technical approach for the project. Intended for dispatch from Codex automation or Claude routines; GitHub trigger phrase: @vfs-s3-bot please prepare design doc Use when this capability is needed.
SOC 직업 분류 기준
SKILL.md 표시 중
| name | simulator-automation |
| description | >- Use when this capability is needed. |
The simulator exposes an HTTP API on localhost when launched with --automation-port <PORT>.
evenhub-simulator https://my-app.example.com --automation-port 9898
Base URL: http://127.0.0.1:<PORT>
GET /api/ping
→ "pong"
Returns the current LVGL framebuffer as image/png (576×288, RGBA).
GET /api/screenshot/glasses
→ image/png binary (RGBA)
RGBA format — critical for image analysis:
(R=0, G=255, B=0, A=0) — transparent (alpha = 0)(R=0, G=255, B=0, A=255) — opaque (alpha = 255)Always work in RGBA mode. Do NOT convert to RGB — it drops the alpha channel and makes background pixels indistinguishable from text pixels (both appear as pure green).
from PIL import Image
img = Image.open('glasses.png') # keep as RGBA — do NOT call img.convert('RGB')
pixels = img.load()
# Lit pixel test:
is_lit = lambda px: px[3] > 0 # alpha > 0
Captures the main browser webview using html2canvas. Returns image/png. May take a few seconds; times out after 10s.
GET /api/screenshot/webview
→ image/png binary
Returns captured console.* output, uncaught exceptions, unhandled promise rejections, and failed fetch calls from the main webview.
GET /api/console
→ { "entries": [...], "total": N }
Each entry:
{ "id": 0, "level": "log|warn|error|info|debug|trace", "message": "...", "ts": 1712150400000 }
Prefixes for non-console sources:
[uncaught] ... — uncaught exception[unhandledrejection] ... — unhandled promise rejection[fetch] ... — failed fetch (non-ok status or network error)Poll for new entries only:
GET /api/console?since_id=42
→ entries with id > 42
since_id must be a non-negative integer. Passing a negative value (e.g. -1) causes
the server to return an error, not an empty list. For the first poll, omit the parameter
entirely to retrieve all current entries, then track last_id from the response:
# First poll — no since_id
resp = requests.get(f"{BASE_URL}/api/console")
entries = resp.json()["entries"]
last_id = max((e["id"] for e in entries), default=0)
# Subsequent polls
resp = requests.get(f"{BASE_URL}/api/console?since_id={last_id}")
Clear the buffer:
DELETE /api/console
Timing caution: Startup logs (e.g. a "ready" signal) are emitted once and lost if you clear the buffer before reading them. Pattern: poll for the ready signal first, then clear if needed.
# Safe: check for ready signal BEFORE clearing
poll_until(target="APP_READY")
requests.delete(f"{BASE_URL}/api/console") # only if you need a clean slate after
Send a touchpad action to the glasses display.
POST /api/input
Content-Type: application/json
{ "action": "up" | "down" | "click" | "double_click" }
Response: { "ok": true }
Actions map to the glasses touchpad:
up / down — scroll through list items or textclick — select the current itemdouble_click — triggers a system-level double-click event (typically "back" or "dismiss")GET /api/ping/api/screenshot/glasses (RGBA) or /api/console to check state.POST /api/input. After each action, wait briefly (~300ms) then confirm state changed.since_id when polling console to avoid re-reading old entries.double_click is typically used to go back or dismiss the current view.createStartUpPageContainer take time.$ARGUMENTS
Source: even-realities/everything-evenhub — distributed by TomeVault.