Design typed frontend test harnesses, e2e checks, test automation, and QA proof loops for put.io web, extension, TV, native, emulator, simulator, and device surfaces.
72
90%
Does it follow best practices?
Impact
—
No eval scenarios have been run
Passed
No known issues
Use this skill when designing or reviewing a test harness for a put.io frontend-owned surface. The harness should wrap platform tools, expose a typed command surface, prepare auth/session state, drive real product flows, assert meaningful state, and leave proof artifacts.
devs-fe-auto / devs+fe+auto@put.io through global putio profiles, not a human account. Use the putio-cli skill first and inspect putio describe --output json before assuming commands, flags, output shape, or auth behavior.putio profile checks, device approval, authorization, seeding, and reset commands. Browser put.io/link completion, repeated human secret approvals, human browser sessions, and personal accounts are explicit fallback paths.Mini-example command surface:
harness package --profile <profile-name>
harness install --device <device-alias>
harness launch --app <app-id>
harness open-flow --name playback --fixture <fixture-name>
harness press --key play-pause
harness auth-status --profile <profile-name>
harness auth-prepare --profile <profile-name>
harness auth-render-vars --profile <profile-name> --env-file <ignored-env-file>
harness auth-approve-device --profile <profile-name> --code <device-code>
harness seed-account --profile <profile-name> --scenario <scenario-name>
harness assert-screen --name player --artifact artifacts/live/player.pngThe exact command names should follow the target repo, but the shape should stay narrow, typed, and proof-producing.
Minimal TypeScript shape:
type HarnessArtifact = {
kind: "screenshot" | "log" | "state" | "review-html";
path: string;
};
type HarnessResult = {
status: "ok" | "failed";
device: string;
artifacts: HarnessArtifact[];
message?: string;
};
interface PlatformAdapter {
package(profile: string): Promise<HarnessResult>;
install(device: string): Promise<HarnessResult>;
launch(appId: string): Promise<HarnessResult>;
press(key: string): Promise<HarnessResult>;
screenshot(path: string): Promise<HarnessResult>;
}For a harness design or implementation plan, report:
putio auth, use putio auth status --profile <profile-name> --output json, putio auth profiles list --output json, PUTIO_CLI_PROFILE, and PUTIO_CLI_CONFIG_PATH as the stable automation boundary. Keep CLI config paths ignored and isolated when a run needs disposable auth state.secrets-setup, infisical run, or equivalent typed wrapper for the one-shot Infisical step. Do not spin on approval prompts or persist raw rendered secrets in checked-in files.putio/approved API helpers when available. Browser-based put.io/link completion is a fallback only after the autonomous CLI path is missing or broken, and that limitation must be reported explicitly..env.local or .env files may name a profile or config path, but must not contain raw put.io tokens in checked-in examples.