Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add toss/apps-in-toss-harness --skill test-on-devicegit clone --depth 1 https://github.com/toss/apps-in-toss-harnessWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/toss/apps-in-toss-harness/test-on-device)<a href="https://agentmods.dev/skills/toss/apps-in-toss-harness/test-on-device"><img src="https://agentmods.dev/badge/skills/toss/apps-in-toss-harness/test-on-device/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/toss/apps-in-toss-harness/test-on-device"><img src="https://agentmods.dev/badge/skills/toss/apps-in-toss-harness/test-on-device.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00095 | $0.05362 |
| Opus 5.5 | $0.00038 | $0.02145 |
| Sonnet 5.5 | $0.00019 | $0.01072 |
| Haiku 4.5 | $0.00010 | $0.00536 |
Grade A, and why
test-on-device scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 6d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 317 lines — stays where its author put it; the contents beside it link to each section on GitHub.
test-on-device skill
목적
/ait:test-on-device는 지금 만들고 있는 미니앱을 실제 토스 앱에서 확인하는
정규 경로를 한 명령으로 밟는다: 번들 빌드 → 콘솔 업로드 → 컴파일 확인 → 토스
앱에서 열기.
"폰에서 보고 싶다"에 대응하는 경로는 셋이고, 목적이 다르다:
| 원하는 것 | 경로 |
|---|---|
| 브라우저에서 mock으로 개발 | 프로젝트의 dev 스크립트(package.json scripts) + /ait:debug 환경 1 (토스 앱 불필요) |
| 실기기에서 동작 확인 | 이 skill — 번들을 콘솔에 올려 토스 앱에서 연다 |
| 실기기에서 CDP로 관측·디버깅 | /ait:setup-debugger 배선 후 /ait:debug 환경 3(QR attach) |
이 경로는 특정 스택 전용이 아니다 — 전제는 .ait 번들 하나뿐이라, web-framework
프로젝트, React Native, Unity·엔진 HTML5 빌드 모두 업로드부터는 같은 절차를 탄다.
스택마다 다른 것은 빌드 방법과 산출물 위치뿐이고, 이는 프로젝트를 읽어 정한다(3).
의존
- cwd가 미니앱 프로젝트 루트여야 한다. 웹·RN 프로젝트는
package.json과 번들 설정 파일이 있다. 정본 scaffold(create-ait-app 0.2.x,new-miniappskill)는apps-in-toss.config.ts를 쓰고, 구세대--local오프라인 폴백 템플릿 (new-miniappL-5)은granite.config.ts를 쓴다. Unity는Packages/manifest.json이나Assets/에 SDK가 있다. 프로젝트 표지가 하나도 없으면 프로젝트 루트로 이동 안내 후 중단. - 콘솔 MCP(
ait-console) 인가가 1회 필요하다 —/mcp에서 승인한다. 인가되지 않았으면 그 안내만 하고 중단한다. - 콘솔에 등록된 앱이 있어야 한다. 없으면
miniapp_create로 1회 등록한다 (아래 2 — 이미 있으면 절대 새로 만들지 않는다). - 아이콘이 비어 있어도
ait build는 실패하지 않는다. 3.x (apps-in-toss.config.ts) 스키마에는brand.icon이 아예 없고(CLI 3.x 마이그레이션이brand에서primaryColor외 속성을 지운다), 2.x (granite.config.ts)도 스캐폴드 기본값이icon: ''이라 빈 값으로 빌드가 통과한다 — CLI2.10.8·3.0.5소스 확인. 다만 2.x 폴백에서 빈 값으로 빌드한 번들이 콘솔 컴파일(CREATED)은 통과하고 앱 실행 시점에 "잠시 문제가 생겼어요"로 실패했다는 보고가 있다(harness#90 — 이 skill이 재현·확인한 것은 아니다). 등록용 자산 자체가 없으면/ait:design을 먼저 안내한다.
입력
/ait:test-on-device는 인자를 받지 않는다. 대상 앱·워크스페이스는 콘솔 MCP
세션이 결정한다(아래 2).
실행 순서
1. 사전 확인 — appName 일치 가드
ls package.json apps-in-toss.config.ts granite.config.ts Packages/manifest.json 2>/dev/null
프로젝트 표지가 하나도 없으면 중단:
미니앱 프로젝트 파일(package.json과 apps-in-toss.config.ts·granite.config.ts, 또는
Unity의 Packages/manifest.json)을 찾을 수 없습니다. 미니앱 프로젝트 루트에서
다시 실행해주세요. 예: cd <project-root> && /ait:test-on-device
웹·RN은 발견된 번들 설정 파일(apps-in-toss.config.ts가 있으면 그것을, 없으면
granite.config.ts를 — 의존 절 참고)을 Read로 읽어 appName을 확인한다.
Unity·엔진 프로젝트는 SDK의 설정 화면이나 패키지 문서에서 앱 이름을 정하는 곳을
찾아 읽고, 어디인지 모르면 사용자에게 묻는다. Deploy Key가 든 설정 파일은
열지 않는다.
이 값이 콘솔에 등록된 앱의 appName과 정확히 같아야 한다. 불일치 번들은
업로드 자체는 성공하지만 컴파일에서 BUILD_FAILED로 끝난다(에러 메시지: "콘솔에
등록된 앱 ID와 granite.config.ts의 appName이 일치하지 않아요" — 콘솔 쪽 메시지
문구는 설정 파일 종류와 무관하게 고정이다). 불일치를 발견하면 업로드 전에
멈추고 어느 쪽을 맞출지 사용자에게 묻는다 — 이름이 다르다는 이유로 콘솔에 앱을
새로 만들지 않는다.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 6d ago First seen · 317 lines · 95 tokens per session scan A 708b3a8fd613
test-on-device is a skill published in the GitHub repository toss/apps-in-toss-harness (186 stars, last pushed 3d ago), licensed BSD-3-Clause. It adds 95 tokens to every session and 5,362 once invoked, about $0.0004 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-10-23.
Other skills, from other repositories
android_ui_verification
Automated end-to-end UI testing and verification on an Android Emulator using ADB.
solopi-ai
A command-line framework for testing Android apps and devices with SoloPi, including on-device or cloud AI decision models. It manages devices, test cases, recorded interactions, replays, performance history, and evidence.
eas-simulator
Run and control a user's app on a remote iOS/Android simulator hosted on EAS cloud. Read before running any eas simulator: commands - it has the current syntax for this experimental API. Use whenever the user needs a simulator they can't run locally - 'run my app on a cloud simulator', 'use eas simulator to…
dogfood
Systematically explore and test a mobile app on iOS/Android with agent-device to find bugs, UX issues, and other problems. Use when asked to dogfood, QA, exploratory test, find issues, bug hunt, or test this app on mobile.
ios-simulator
Verify and debug native, React Native, Expo, or Flutter apps on an iOS Simulator with agent-device. Use when an agent needs to launch an app, inspect its live UI, tap, type, scroll, validate a code change, collect failure evidence, or reproduce a workflow on an iPhone or iPad Simulator.
test-native-extension
Validate a third-party control repo across four automated layers plus one printed manual recipe. Layer 1 asserts native-source structure (Android getName() and iOS +moduleName to manifest nativeModule; @ReactMethod / RCTEXPORTMETHOD to methods; no @ReactModule) plus load/init readiness (ReactPackage public no-arg…