Deep links
Diagnose why Linkrunner deep links (iOS Universal Links / Android App Links) open the browser instead of the app, or do not open the app at all. Runs the full verification gauntlet - hosted apple-app-site-association and assetlinks.json, Apple CDN freshness, Android fingerprint + verification state, associated-domains entitlement, manifest intent filters - and reports exactly what is broken and how to fix it. Use when someone says a Linkrunner link opens Safari/Chrome, App Links will not verify, or a universal link is ignored.From its SKILL.md
npx -y skills add linkrunner-labs/skills --skill deep-linksAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
3.8 KB, 785 tokens by cl100k_base, as published. Nobody here has run it
Linkrunner - deep link troubleshooter
The symptom is almost always: an HTTPS link opens the browser instead of the app. That means domain verification is failing somewhere between the hosted file, Apple/Google's cache, the app's native config, and the device. Diagnose in order - do not guess.
0. Gather the facts first
Ask for / detect these before running anything:
- The domain the links use (e.g.
app.example.com). - Android package name (from
applicationIdinandroid/app/build.gradleor the manifest). - iOS appID =
TEAM_ID.BUNDLE_ID(Team ID from Apple Developer → Membership; bundle id from Xcode). - Which build is on the device (debug vs release - they are signed with different keystores and have different fingerprints).
- Whether the user is testing by typing the URL into Safari - that never opens the app on iOS; it must be tapped from another app (e.g. Notes). Rule this out first.
1. Run the diagnostic
From the app project root:
bash scripts/diagnose-deep-links.sh <domain> <android_package> <ios_team_id.bundle_id>
It checks the hosted files, Apple's CDN, the Google Digital Asset Links API, the
local native wiring, and - if a device is connected over adb - the live
Android verification state. Read its output, then use the references below to fix
whatever it flags.
2. Interpret and fix
| What you see | Go to |
|---|---|
assetlinks 404, fingerprint mismatch, 1024/legacy_failure, works on debug not release | references/android.md |
| AASA 404/stale, CDN serving old file, link opens Safari | references/ios.md |
| Both platforms | do both |
3. The usual root causes (in frequency order)
- Android fingerprint mismatch - the SHA-256 in
assetlinks.jsonis not the keystore that signed the build on the device. Debug and release differ; Play App Signing uses the Play Console fingerprint, not your local keystore. - Cached verification - the hosted file is now correct but the device/OS still holds the old result. Android needs an explicit re-verify; iOS needs the Apple CDN to refresh (up to a day) or developer mode.
- File not hosted - not saved in dashboard → Project Settings → Domain
Verification, so the
.well-known/URL 404s. - Native config missing - no
android:autoVerify="true"intent filter for the host, or the Associated Domains capability /applinks:entry absent. - Testing wrong - typing a universal link into Safari (never works).
4. Confirm the fix
Re-run the diagnostic, then test for real:
# Android
adb shell am start -a android.intent.action.VIEW -d "https://<domain>/path" <android_package>
# iOS simulator
xcrun simctl openurl booted "https://<domain>/path"
On iOS, tap a link from Notes (not Safari). Report which checks pass and which dashboard/native step the user still needs to complete.
References
references/android.md- App Links verification: fingerprints,adb pmstates, re-verify, force-approvereferences/ios.md- Universal Links verification: AASA, Apple CDN, developer mode, swcd logs
What ships with it: 3 files
12.1 KB alongside SKILL.md, 1 of them executable
references/
- android.md3.3 KB
- ios.md2.4 KB
scripts/
- diagnose-deep-links.shruns6.3 KB