Superset 사용 현황을 살펴보고 아직 쓰지 않는 기능 중 업무 방식에 맞는 항목을 제안합니다. 각 기능을 설명하고, 사용자가 고른 예약 실행 에이전트나 병렬 작업 공간, 공유 작업 등을 설정합니다.
- 사용하지 않는 Superset 기능 찾기
- 에이전트 예약 실행 설정
- 여러 작업 공간에서 병렬 작업
iOS 시뮬레이터에서 로컬 서비스에 연결해 앱을 실행하고 Maestro로 실제 화면 흐름을 재현해 녹화나 스크린샷을 만듭니다. 실제 앱 동작 시연과 변경 사항 확인에 쓸 수 있습니다.
Run apps/mobile on the iOS simulator against the local stack, drive it with Maestro, and capture clean screen recordings. Use when asked to record, film, screenshot, or demo the mobile app, or to verify a mobile change in the real app.
실행 점수 미검증
설치 방법 보기iOS 시뮬레이터에서 로컬 API 등의 서비스에 연결해 apps/mobile을 실행하고, Maestro 흐름으로 앱을 조작해 화면 녹화나 스크린샷을 만듭니다. 실제 앱 상태를 사용하며, 촬영 전에 데모 내용에 필요한 데이터를 준비합니다. 녹화 전에는 시뮬레이터 화면과 상태 표시줄을 정돈할 수 있고, 녹화 후에는 영상을 일정한 프레임률로 변환해 편집하기 쉽게 만들 수 있습니다. 촬영에 사용한 데이터와 서비스, 시뮬레이터 설정을 정리하는 절차도 포함됩니다.
앱의 실제 조작을 짧은 영상이나 이미지로 공유하거나, 시뮬레이터에서 앱을 직접 조작해 변경 사항을 확인할 때 유용합니다. 매번 같은 데모 흐름으로 촬영하려는 경우에도 사용할 수 있습니다.
iOS 시뮬레이터, Xcode의 simctl, Maestro, Java, FFmpeg를 사용합니다. 촬영 내용에 따라 로컬 API나 데이터베이스 같은 서비스도 준비해야 합니다. 녹화 화면에 실제 데이터가 나오지 않는지 확인하고, 촬영용으로 만든 데이터와 설정은 이후 삭제하거나 원래대로 복원합니다.
이 소개문은 공개된 SKILL.md를 바탕으로 AI(OpenAI Codex)가 작성했습니다. 정확한 사양은 아래 원문을 확인하세요.
AI가 SKILL.md의 내용에서 주의가 필요한 작업과 도입 전제를 확인했습니다. 점수는 실제로 실행한 결과(실행 검증)만으로 매깁니다.
점수에는 넣지 않았습니다. 2026년 10월 29일 기준으로 AI(OpenAI Codex)가 판정했습니다. 참고용이므로 설치 전에 원문도 확인해 주세요.
설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.
There is no CDP for mobile. The equivalent is the iOS simulator, booted headless, driven by
Maestro, recorded with simctl. Nothing here opens a window on the user's display.
admin@local.test) and a demo org with demo
projects. Read every frame of the contact sheet for names, emails, repo names, and tokens
before sharing anything.Start each in its own Paradev terminal
(superset terminals create --local --workspace $SUPERSET_WORKSPACE_ID --command "...";
without --local the call silently returns nothing). Ports come from .superset/ports.json
and the root .env.
| Service | Command | Trap |
|---|---|---|
| API | cd apps/api && bun run dev | A 500 "password authentication failed" means the worktree's Neon branch was cleaned up. Recreate it and rewrite the "# Workspace Database" lines in .env. |
| Relay | cd apps/relay && while true; do CI=1 WRANGLER_SEND_METRICS=false node_modules/.bin/wrangler dev --port $RELAY_PORT --var NEXT_PUBLIC_API_URL:http://localhost:$API_PORT --local; done | wrangler dev dies with an empty error whenever a client aborts mid-request, which every app relaunch does. Hence the loop. |
| Metro | cd apps/mobile && CI=1 bunx expo start --dev-client --port 8081 | CI=1 disables file watching: restart Metro after code edits. Pre-warm the first bundle by curling the launchAsset.url from curl -H 'expo-platform: ios' localhost:8081, or the dev client times out. |
apps/mobile/app.config.ts loads the repo-root .env with override: true, so every local
bundle points at this workspace's API no matter what apps/mobile/.env says.
U=$(xcrun simctl list devices available | grep -m1 "iPhone 17 Pro (" | grep -oE '[0-9A-F-]{36}')
xcrun simctl boot $U && xcrun simctl bootstatus $U -b
xcrun simctl ui $U appearance light
xcrun simctl status_bar $U override --time "9:41" --batteryState discharging \
--batteryLevel 100 --cellularBars 4 --wifiBars 3 --dataNetwork wifi
xcrun simctl spawn $U defaults write sh.superset.mobile EXDevMenuIsOnboardingFinished -bool YES
xcrun simctl openurl $U "superset://expo-development-client/?url=http%3A%2F%2Flocalhost%3A8081&disableAutoLaunch=1&disableFab=1"
simctl boot does not launch Simulator.app. Keep it that way.apps/mobile (cd apps/mobile from the repo root), run
bunx expo prebuild -p ios, then xcodebuild -workspace ios/Superset.xcworkspace -scheme Superset -configuration Debug -sdk iphonesimulator -derivedDataPath <scratch>/dd
(about 10 minutes), then xcrun simctl install $U <path to Superset.app>. Set
SENTRY_DISABLE_AUTO_UPLOAD=true. Never set CODE_SIGNING_ALLOWED=NO: it drops the keychain
entitlement and the app crashes on first SecureStore read. Pure JS changes need no rebuild.Maestro needs JAVA_HOME=/opt/homebrew/opt/openjdk/libexec/openjdk.jdk/Contents/Home. Flows
live in apps/mobile/.maestro/flows/. Sign in with tapOn: { id: dev-sign-in-button }.
Write one flow per story. Prefer tapOn by visible text, add a testID when text is
ambiguous. inputText types character by character, which reads as a person typing on film.
Maestro takes 7 to 25 seconds to start. Launch it before you start recording, and begin the
flow with a waitForAnimationToEnd or a short extendedWaitUntil so the take opens on a
settled screen.
The dev session has plan: null, so Home shows the paywall. Seed a subscriptions row on
the worktree's Neon branch (plan pro, reference_id = the org id,
stripe_subscription_id sub_temp_...) and delete it after.
Need a host without a second machine? POST /api/trpc/host.ensure with the session JWT
registers one, and holding ws://localhost:$RELAY_PORT/v2/control?hostId=<org>:<machineId>
open with Authorization: Bearer <jwt> marks it online. Delete the v2_users_hosts and
v2_hosts rows after. For a story with a real agent working, point the app at a real local
host-service instead.
Maestro matches the whole accessibility label, and rows carry extra text (the Settings row is
, Pages, ). Match with a regex: tapOn: ".*Pages.*". Dump what it sees with
maestro --udid $U hierarchy.
Metro fails with ENOENT ... react-native-worklets/.worklets/<n>.js? Its cache outlived the
generated files. Restart it with --clear.
Pages need three more things locally, none of which setup provides:
R2_ENDPOINT (localhost:9000, nothing
listens there) while the usercontent Worker reads its own local R2. Run a minimal S3 stand-in
on :9000 (PUT with x-amz-copy-source, GET, HEAD, POST ?delete), publish through
page.assets.upload then page.publish, then copy every stored object across with
bunx wrangler r2 object put superset-private-dev/<key> --local --env dev --file <f> --content-type <type> from apps/usercontent.apps/usercontent/.dev.vars needs USERCONTENT_TOKEN_SECRET set to
the value in the root .env, or every page answers 500. Start it with
cd apps/usercontent && bun run dev.<id>.frame.usercontent.localhost does not count, so the page fails with error -1022. On the
simulator's installed copy only:
PlistBuddy -c "Set :NSAppTransportSecurity:NSAllowsArbitraryLoads true" -c "Add :NSAppTransportSecurity:NSAllowsArbitraryLoadsInWebContent bool true" "$(xcrun simctl get_app_container $U sh.superset.mobile app)/Info.plist", then relaunch. Revert it after.tRPC calls from a script need authorization: Bearer <jwt> plus
x-superset-organization-id, because the JWT carries no active organization. Tap to comment
did not open the comment popover under Maestro on the simulator (2026-09-19, cause unknown);
film comments through "Show all comments" and Reply instead.
Run capture commands from a scratch directory. Use an absolute path to the Maestro flow when recording outside the repo.
mkdir -p raw shots cfr
xcrun simctl io $U recordVideo --codec h264 --force raw/01-story.mov & REC=$!
maestro test <repo>/apps/mobile/.maestro/flows/<story>.yml
kill -INT $REC; wait $REC
xcrun simctl io $U screenshot shots/01.png
SIGINT only. Any other signal leaves an unplayable file.recordVideo writes a frame only when the screen changes, so the file is variable frame
rate and wall-clock marks do not map to video time. Normalize before choosing cut points:
ffmpeg -i raw/01-story.mov -vf fps=30 -an -c:v libx264 -crf 14 -pix_fmt yuv420p cfr/01.mp4.sleep never catches a sub-second flash. Record, then extract frames
with ffmpeg -vf fps=10.AppleLanguages value (including whether it was unset) so cleanup can restore them.simctl ui $U appearance dark, simctl ui $U content_size extra-extra-extra-large,
and simctl spawn $U defaults write "Apple Global Domain" AppleLanguages -array de-DE
followed by a relaunch.For a framed demo video, use the shared mobile-demo-film skill after recording.
Delete only the rows and objects created for this recording: subscriptions, hosts, demo sessions, and, for Pages, published pages, comments, and their objects in the S3 stand-in and local R2. Restore any organization or user names changed for the demo.
Stop every service started for the recording, including the usercontent Worker and storage
stand-in when used. Restore the simulator's prior appearance, content size, and
AppleLanguages value (remove the override if it was originally unset), revert any installed
app transport-security changes, clear status-bar overrides, then xcrun simctl shutdown $U.
Recordings and screenshots stay in the scratch directory unless the user asks for them in
the repo.
아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.
로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.
Superset 사용 현황을 살펴보고 아직 쓰지 않는 기능 중 업무 방식에 맞는 항목을 제안합니다. 각 기능을 설명하고, 사용자가 고른 예약 실행 에이전트나 병렬 작업 공간, 공유 작업 등을 설정합니다.
반복 작업을 Superset 자동화로 설정합니다. 에이전트 지침, 일정 또는 이벤트 조건, 실행 작업 공간을 정리하고 명시적인 확인을 받은 뒤 자동화를 만듭니다. 저장된 조건과 첫 실행 결과를 살펴 지침을 조정합니다.
Superset 작업 공간의 브라우저에서 페이지를 열고 클릭하거나 입력하며, 화면과 콘솔 정보를 확인합니다. 개발 중인 웹 앱 미리 보기, 폼 동작 및 화면 이동 점검에 활용할 수 있습니다.
Stripe 공식 문서와 API 매개변수 정의를 확인해 결제, 구독, 청구서, 웹훅 연동을 구현합니다. 적절한 제품 선택부터 샌드박스 테스트와 웹훅 처리까지 다루며, 결제와 구독 상태를 웹훅 이벤트로 판단합니다.
Chrome DevTools Protocol로 실행 중인 Electron 데스크톱 앱을 조작해 UI 변경을 확인하고 문제를 재현합니다. 실제 사용 흐름을 따라 화면 전환을 검증하고, 스크린샷과 경로·스크롤 위치·포커스·저장 상태를 기록해 비교합니다.
GitHub Actions 실패 로그에서 최초 오류를 찾아 코드 결함, 환경 문제, 간헐적 실패, 기존 장애로 구분합니다. 기준 브랜치와 PR 변경 사항을 비교해 관련성을 설명하고 다음 조치를 정리합니다.