"Detect web vs iOS automatically and delegate to /verify-web (Playwright) or /verify-ios (XcodeBuildMCP). Pass any arguments through unchanged."
Install
npx skillscat add jthorare/agentic-workflow/verify-app Install via the SkillsCat registry.
Before anything else: read $HOME/.agentic-workflow/toolkit/skills/_preamble.md and follow it (skill index, provider capability map, bootstrap check, session context). Run its Session Close section when this skill finishes.
Verify App — Platform Dispatcher
Detects whether this is a web or iOS project and delegates to the appropriate verification skill. Contains no verification logic — all execution lives in the sub-skills.
Tip: If you already know the platform, invoke directly:
/verify-webor/verify-ios
Platform Detection & Dispatch
Follow _shared/platform-detection.md — canonical detection globs (with vendored-path excludes), the resolution table, and the dispatch contract. Resolve it from the stable toolkit path:
SHARED_DIR="$HOME/.agentic-workflow/toolkit/skills/_shared"
ls "$SHARED_DIR/platform-detection.md"If resolution or ls fails, stop and report — do not guess the platform. Otherwise read the file and apply it: iOS → verify-ios, web → verify-web, both/neither → Ask the user. Echo dispatch: <sub-skill> args=<args> before dispatching, then dispatch literally: Invoke skill <sub-skill> with args "<original args verbatim>".
Argument Spec (pass-through)
All arguments are forwarded to the sub-skill unchanged — never drop or rewrite one:
| Argument | Meaning |
|---|---|
--journey <path> |
Path to a verification-plan.md (template: _shared/verification-plan-template.md) — the sub-skill executes its journeys |
--lenses <csv> |
Narrow the lens set (catalog: _shared/verification-lenses.md) |
--baseline |
Require visual diffing against screens.json baselines — the visual lens fails if none exist |
--yes |
Non-interactive: the sub-skill auto-approves its plan |
--base-url <url> |
Override app-URL detection (web only; still forwarded verbatim) |
--visual |
Include the visual lens |
auto / criteria |
Diff-inference mode / explicit verification criteria |
If --journey is given but the path does not exist, stop and report — do not dispatch with a blank or dead required arg.
Sub-skill Return Contract
The sub-skill must produce an evidence pack (_shared/evidence-pack.md) and report back {verdict, evidence_path}:
verdict∈PASS | WARN | FAILevidence_path= absolute path to theverification/<run-id>/dir containingpack.json
After the sub-skill returns, confirm the pack exists:
SHARED_DIR="$HOME/.agentic-workflow/toolkit/skills/_shared"
source "$SHARED_DIR/repo-slug.sh"
ls -1dt "$AW_DIR/verification/"*/ | head -1
ls "$(ls -1dt "$AW_DIR/verification/"*/ | head -1)pack.json"If the sub-skill returned no {verdict, evidence_path}, or the newest run dir has no pack.json, fail loudly:
"verify sub-skill returned no evidence pack — verification is not proven. Treat this run as FAIL."
Relay the sub-skill's verdict and evidence_path verbatim in your final report. A FAIL verdict blocks PR-open / mark-ready (gate rule in _shared/evidence-pack.md).
Auto-chain: design-verify
After a completed run, check whether screens.json baselines cover the screens the sub-skill verified:
SHARED_DIR="$HOME/.agentic-workflow/toolkit/skills/_shared"
source "$SHARED_DIR/repo-slug.sh"
ls "$AW_DIR/design/screens.json" 2>/dev/null || echo "no screens.json — skip design-verify chain"If screens.json exists and has baselines entries for one or more of the verified screens, invoke Invoke skill design-verify with args "<verified screens>" automatically and report its diff verdict alongside the verification verdict. If no baselines cover the verified screens, skip the chain silently.
Next steps
/design-verify— re-run design diffing on demand (auto-chained above when baselines cover verified screens)/bugReport— if functional gaps surfaced, capture them as a bug report