SEO Google
AgriciDaniel/codex-seo
Google SEO APIs: Search Console (Search Analytics, URL Inspection, Sitemaps), PageSpeed Insights v5, CrUX field data with 25-week history, Indexing API v3, and GA4 organic traffic.
Pull unrecognized host app bundle IDs from Google Analytics via gog, diff them against the mapping tables and add URL scheme mappings
$ npx skills add n0an/VivaDicta --skill analyze-unrecognized-apps -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install n0an/VivaDicta analyze-unrecognized-apps --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/n0an/VivaDicta.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/analyze-unrecognized-apps .claude/skills/analyze-unrecognized-apps && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "analyze-unrecognized-apps" agent skill from https://github.com/n0an/VivaDicta/tree/main/.agents/skills/analyze-unrecognized-apps into .claude/skills/analyze-unrecognized-apps/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "analyze-unrecognized-apps", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/n0an/VivaDicta/tree/main/.agents/skills/analyze-unrecognized-appsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add n0an/VivaDicta --skill analyze-unrecognized-apps -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install n0an/VivaDicta analyze-unrecognized-apps --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/n0an/VivaDicta.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/analyze-unrecognized-apps .agents/skills/analyze-unrecognized-apps && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "analyze-unrecognized-apps" agent skill from https://github.com/n0an/VivaDicta/tree/main/.agents/skills/analyze-unrecognized-apps into .agents/skills/analyze-unrecognized-apps/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "analyze-unrecognized-apps", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add n0an/VivaDicta --skill analyze-unrecognized-apps -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install n0an/VivaDicta analyze-unrecognized-apps --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/n0an/VivaDicta.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/analyze-unrecognized-apps .cursor/skills/analyze-unrecognized-apps && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "analyze-unrecognized-apps" agent skill from https://github.com/n0an/VivaDicta/tree/main/.agents/skills/analyze-unrecognized-apps into .cursor/skills/analyze-unrecognized-apps/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "analyze-unrecognized-apps", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/n0an/VivaDicta.git --path .agents/skills/analyze-unrecognized-apps--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add n0an/VivaDicta --skill analyze-unrecognized-apps -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install n0an/VivaDicta analyze-unrecognized-apps --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/n0an/VivaDicta.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/analyze-unrecognized-apps .gemini/skills/analyze-unrecognized-apps && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "analyze-unrecognized-apps" agent skill from https://github.com/n0an/VivaDicta/tree/main/.agents/skills/analyze-unrecognized-apps into .gemini/skills/analyze-unrecognized-apps/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "analyze-unrecognized-apps", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install n0an/VivaDicta analyze-unrecognized-appsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add n0an/VivaDicta --skill analyze-unrecognized-apps -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/n0an/VivaDicta.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/analyze-unrecognized-apps .github/skills/analyze-unrecognized-apps && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "analyze-unrecognized-apps" agent skill from https://github.com/n0an/VivaDicta/tree/main/.agents/skills/analyze-unrecognized-apps into .github/skills/analyze-unrecognized-apps/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "analyze-unrecognized-apps", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add n0an/VivaDicta --skill analyze-unrecognized-apps -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install n0an/VivaDicta analyze-unrecognized-apps --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/n0an/VivaDicta.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/analyze-unrecognized-apps .opencode/skills/analyze-unrecognized-apps && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "analyze-unrecognized-apps" agent skill from https://github.com/n0an/VivaDicta/tree/main/.agents/skills/analyze-unrecognized-apps into .opencode/skills/analyze-unrecognized-apps/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "analyze-unrecognized-apps", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
analyze-unrecognized-appsPull unrecognized host app bundle IDs from Google Analytics via gog, diff them against the mapping tables and add URL scheme mappings
Analyze Unrecognized Apps is an agent skill from n0an/VivaDicta. Pull unrecognized host app bundle IDs from Google Analytics via gog, diff them against the mapping tables and add URL scheme mappings
Its SKILL.md is about 3.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files (for example `agents/openai.yaml`).
It sits in Mobile. It works with Google Analytics. The repository describes itself as: iOS & watchOS speech-to-text app with AI voice keyboard, on-device RAG, and chat with your notes - powered by Apple Foundation Models, WhisperKit, NVIDIA Parakeet, and 20+ AI…. The licence is MIT.
7 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit db0b602. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
ghbrewFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
m365.cloud.microsoftgetsupport.apple.commuse.aidrive.google.comvk.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Analyze Unrecognized Apps loads about 3.6k tokens when it runs. Until then it costs about 40 tokens; SKILL.md has 1,825 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from n0an/VivaDicta at commit db0b602, republished under its MIT licence (© n0an). 1,825 words, ~3,611 tokens.
.claude/skills/analyze-unrecognized-apps/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Last run: 2026-10-03 (weekly GA batch, automated) - 15 new bundle IDs in the 28-day window (33 events). Added 8 return-URL mappings and 7 knownNoSchemeHosts entries; the script reports "nothing new" afterwards. Scheme from the app's own source: Standard Notes registers $(PRODUCT_BUNDLE_IDENTIFIER) as its only URL scheme, so com.standardnotes.standardnotes://. AASA at the root or a catch-all: com.microsoft.officemobile (now Microsoft 365 Copilot, https://m365.cloud.microsoft/), Skout, Carousell (www.carousell.sg; www.carousell.com answers with a Cloudflare challenge), Apple Support (https://getsupport.apple.com/, catch-all /*). Weaker block: Muse from Meta (com.facebook.hatch, https://muse.ai/open_hatch, AASA has no root path), Taskrabbit (/dashboard), Photos (photos-redirect://, community lists only, not read from a simulator runtime). noScheme: Satisfyer Connect, Yandex Telemost (AASA covers meeting links only), Bitrix24 (per-portal deep paths only), Grindr (blog paths only), FlickNote, Presence, and com.museai.asst.mobile (not on the App Store).
Previous run 2026-09-28 (weekly GA batch, automated) - one new bundle ID in the 28-day window (com.omachala.happy, 2 events): a personal fork of Happy whose app.config.js registers the same happy:// scheme as the already-mapped com.ex3ndr.happy, so it went into knownNoSchemeHosts (shared scheme, never map). No return-URL mappings added. The script reports "nothing new" at the default settings. Follow-up the same day, after Anton reported that Orca never returned: a gh search code sweep over every knownNoSchemeHosts entry moved four open-source apps to knownURLs with schemes read from their own repos (com.stably.orca.mobile orca://, com.t3tools.t3code t3code://, h3p.Neon-Vision-Editor neonvisioneditor://, xyz.block.buzz.mobile buzz://), and mapped the newly seen com.google.Drive to https://drive.google.com/drive/my-drive (AASA path */drive/*my-drive). com.t3tools.t3code.swiftui stays noScheme: it is a third-party fork build with no verifiable mapping.
Previous run 2026-09-27 (second pass) - cleared the 35 single-event bundle IDs left over from the first pass, plus Bear, which arrived since. Added 24 return-URL mappings (9 schemes read from the app's own source or the simulator runtime, 5 AASA-confirmed universal links, 10 under the weaker block) and 12 knownNoSchemeHosts entries. The script now reports "nothing new" at the default settings. Also rewrote the Prerequisites: the documented gog auth add --services analytics command both narrows the token and is refused by Google because of stale YouTube grants on gog's OAuth client, so the remote flow with include_granted_scopes stripped is the working recipe. Findings worth keeping: ru.yandex.mobile.search is Yandex Browser, not the Yandex app (ru.yandex.mobile); X Chat and QuickPaste have no way back at all; Brave and Firefox also claim http/https, so map only brave:// / firefox://; Apple's Translate and Image Playground are only localization stubs in the iOS 27 simulator runtime, so their schemes cannot be read there.
Previous run 2026-09-27 (first pass) - first run on the gog pipeline (scripts/unrecognized_host_apps.py, 28-day window, 132 bundle IDs / 528 events, 29 rows with two or more events). Added 17 return-URL mappings and 12 knownNoSchemeHosts entries; after the edit the script reports "nothing new" at --min-events 2. Twelve mappings are AASA-confirmed at the root or a catch-all path, five went in under a weaker block (AASA matches only a specific page, or the scheme comes from vendor docs). Identity checks via itunes.apple.com/lookup?bundleId= paid off: co.anysphere.sand is Grok Bot by X, not Cursor (its x.ai AASA matches only concrete share ids, so noScheme); com.jiangjia.gif is Kuaishou; com.supersethealth.superset is now Bevel; ru.yandex.uber now belongs to Fasten. VK's main client went in as https://vk.com/feed, not vk://, because several VK apps share the team. com.apple.Preferences went to noScheme: its only route is the private App-prefs://. The 34 single-event bundle IDs were left for a later batch. Previous run 2026-09-12 (19 mappings, 16 noScheme) established: the AASA is often the fastest primary source even for apps that do have a scheme; an app's build manifest beats its Info.plist when the scheme is a build variable; Telegram forks must never be mapped to tg://; share extensions go to noScheme, editor extensions whose content lives in the parent app are aliased to it.
You are given the following context: $ARGUMENTS
Pull the unrecognized_host_app bundle IDs from Google Analytics, work out which ones need a return URL, and add the mappings to the app.
The data comes from the GA4 Analytics Data API through the gog CLI (brew install gog if missing). The stored gog token for anton.novoselov@gmail.com must carry the analytics.readonly scope; the default services do not include it. Check with gog auth list -p: the services column must include analytics. The Mac token has had it since 2026-09-27, so this is only needed after a token reset.
Do not run a bare gog auth add ... --services analytics --force-consent. It fails in two ways:
--services replaces the token's service set, so passing only analytics would leave a token with nothing else. Always pass the full current list from gog auth list -p, plus analytics.include_granted_scopes=true to every consent URL. Google merges those old grants into the request and refuses it: "Access blocked: Authorization Error ... scopes that cannot be requested together (youtube.force-ssl, drive.file, youtube, ...)", Error 400 invalid_request.What works is the remote flow, with that flag stripped from the URL:
SERVICES=appscript,calendar,chat,classroom,contacts,docs,drive,forms,gmail,people,sheets,slides,tasks,analytics # current list + analytics
# 1. print the consent URL, drop the scope-merge flag, open it
gog auth add anton.novoselov@gmail.com --services $SERVICES --force-consent --remote --step 1 \
| awk -F'\t' '/^auth_url/{print $2}' | sed 's/&include_granted_scopes=true//' | xargs open
# 2. approve; the browser lands on an unreachable http://127.0.0.1:<port>/oauth2/callback?... page. That is expected.
# Copy that full URL, then exchange it (within ~5 minutes of step 1):
gog auth add anton.novoselov@gmail.com --services $SERVICES --force-consent --remote --step 2 --auth-url '<callback URL>'An agent can run both steps itself: step 1, hand the user the link, then run step 2 with the callback URL they paste back.
Verify:
gog ga report "$(cat internal/ga_property_id)" --dimensions eventName --metrics eventCount --from 7daysAgo --max 2 -pA 403 insufficientPermissions means the scope is still missing; the script points back to this section. The GA4 property ID (the property behind the Firebase project vivadicta) is private: it lives in the gitignored internal/ga_property_id, which the script reads ($GA_PROPERTY_ID overrides it). The account ID, the Explore report URL and the OAuth client details are in internal/firebase-analytics-events.md. On a fresh clone, create internal/ga_property_id first. The event is unrecognized_host_app, the bundle ID lives in the custom event dimension bundle_id (registered 2026-02-24; older hits show as (not set)).
Read the current mappings from VivaDicta/VivaDictaApp.swift — find the knownURLs dictionary inside returnURL(forHostId:). The knownNoSchemeHosts set lives just above it, in attemptReturnToHost(hostId:).
Pull and diff the analytics data with the repo script, which runs gog ga report, filters the event client-side (the CLI has no filter flag) and compares every bundle ID against both tables in the local Swift file:
scripts/unrecognized_host_apps.py # last 28 days, actionable rows only
scripts/unrecognized_host_apps.py --days 90 --all # longer window, include mapped/noScheme rows
scripts/unrecognized_host_apps.py --json /tmp/unrecognized.json # machine-readable copyThe default window is 28 days, which is what the weekly run wants: old app versions keep reporting apps that are already mapped, and the script hides those. Exit code 3 means nothing actionable - stop and say so. Use --min-events 2 to skip singletons when the list is long; singletons still deserve a look when they are obviously popular apps.
Fallback only if the API is unavailable: the user can paste a screenshot or list from the GA Explore exploration "Unrecognized Host Apps" (URL in internal/firebase-analytics-events.md; also reachable from Firebase Console → Analytics → "View more in Google Analytics"). Then do the cross-reference from step 3 by hand.
Review the script's categories — it prints one of these per bundle ID; check the automatic verdicts rather than re-deriving them:
mapped — already in knownURLs (hidden unless --all; it shows up from app versions that predate the mapping)
noscheme — already in knownNoSchemeHosts (hidden unless --all)
variant:<id> — same app as a mapped <id> under a different bundle ID: a team-ID prefix (4GU63N96WE.com.p5sys.jumpdesktop), a regional build (com.amazon.AmazonDE), or an app extension (net.whatsapp.WhatsApp.ShareExtension). Aliasing a prefixed or regional build to the same URL is safe. An extension is a judgement call — returning to the parent app is not the surface the user was in. The script only detects prefix/suffix variants; spot regional builds (AmazonUK vs Amazon) yourself.
apple-new — com.apple.* not in either table. Usually a system service that cannot be returned to (com.apple.SafariViewService, com.apple.springboard, com.apple.siri) and belongs in knownNoSchemeHosts; some Apple apps do have schemes (shortcuts://, mobilenotes://, maps://), check the simulator runtime binary before deciding.
new — real third-party app not yet in either table. These are the research queue.
not-actionable — (not set), pre-custom-dimension data. Ignore.
Research a way back for each new app. Search for:
Two sources beat any blog list, and are worth the extra step for high-volume apps:
Info.plist or build file (CFBundleURLSchemes), or, for Apple apps, the binary in a simulator runtime under /Library/Developer/CoreSimulator/.../RuntimeRoot/Applications/.https://<domain>/.well-known/apple-app-site-association. If it lists the bundle ID, the matching https:// URL is a valid fallback for an app that registers no custom scheme. This works only on this code path, because the lookup runs solely for the app the keyboard was just typing into, so it is installed by definition.Before filing an app as noScheme, run gh search code '"<bundle id>"' across GitHub. "No AASA" says nothing about a custom scheme: Orca, T3 Code, Neon Vision Editor and Buzz all sat in knownNoSchemeHosts while their own repos registered orca, t3code, neonvisioneditor and buzz. Expo apps declare it as "scheme" in app.json / app.config.{js,ts}; Flutter apps keep the bundle ID in ios/Flutter/*.xcconfig and the scheme in ios/Runner/Info.plist. Ignore hits in getdictus/dictus-ios KnownAppSchemes.swift: it is a port of this table, not independent evidence.
Watch for schemes shared between apps. Swiftgram registers tg:// and telegram:// alongside official Telegram; iOS picks between claimants unpredictably, so map only a scheme the app owns outright (sg://).
Output a summary table with:
After user confirms which entries to add, update VivaDicta/VivaDictaApp.swift:
knownURLs dictionary in returnURL(forHostId:)knownNoSchemeHosts set, so they stop being reported as unrecognizedRe-run scripts/unrecognized_host_apps.py afterwards: every row you handled must now come back as mapped or noscheme (visible with --all), which also proves the Swift edit parses.
There is no plist step, and adding one is a regression. LSApplicationQueriesSchemes was deleted on 2026-08-29 along with the canOpenURL gate it existed to permit. Apple caps that array at 50 entries, and past the cap canOpenURL returns false whether or not the app is installed — which silently killed the newest mappings. UIApplication.open needs no declaration and reports failure through its own result, so the table can now grow without limit. Do not reintroduce either.
Update the "Last run" line at the top of this file with the date and what changed.
<IMPORTANT>
- Do NOT add URL schemes you are not confident about without user confirmation
- Low-confidence schemes should be flagged — the most reliable verification is the app's own `CFBundleURLSchemes`, from its source, its shipped binary, or an installed copy
- Some bundle IDs (Apple system services, embedded browser views) are not actionable and should be called out as such
- Treat the event counts as a floor, not a census. `.unrecognizedHostApp` only fires when the keyboard resolves a host bundle ID, so any period where resolution was broken under-reports every app at once
- The script reads the tables from the working tree, so run it on the branch you are about to edit; a parse failure ("could not parse knownURLs / knownNoSchemeHosts") means the Swift declarations moved or were renamed - fix the regexes in `scripts/unrecognized_host_apps.py`, do not fall back to screenshots
</IMPORTANT>
© n0an, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file in .agents/skills/analyze-unrecognized-apps of n0an/VivaDicta.
Open the folder on GitHubat commit db0b602
Analyze Unrecognized Apps next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Analyze Unrecognized Apps this skilln0an/VivaDicta | 130 | — | ~3.6k | Automated safety check: Pass | MIT | |
| SEO GoogleAgriciDaniel/codex-seo | 799 | 2 repos | ~3.4k | Automated safety check: Pass | MIT | |
| Google Analyticsrefly-ai/refly-skills | 204 | — | ~504 | Automated safety check: Pass | None | |
| Google Analytics Data API Basicsgoogle/skills | 21k | — | ~2.4k | Automated safety check: Pass | Apache-2.0 | |
| Implementing Real User Monitoringjeremylongshore/tons-of-skills-marketplace | 2.8k | — | ~977 | Automated safety check: Pass | MIT | |
| Add AnalyticsLeoYeAI/openclaw-master-skills | 2.2k | — | ~4.6k | Automated safety check: Notes | MIT |
AgriciDaniel/codex-seo
Google SEO APIs: Search Console (Search Analytics, URL Inspection, Sitemaps), PageSpeed Insights v5, CrUX field data with 25-week history, Indexing API v3, and GA4 organic traffic.
refly-ai/refly-skills
Integrate with Google Analytics for web metrics. An agent skill from refly-ai/refly-skills.
google/skills
Manages Google Analytics reporting data, enables the Analytics Data API via the Cloud CLI, and creates reports using the Google Analytics Data API (v1beta).
jeremylongshore/tons-of-skills-marketplace
Implement Real User Monitoring (RUM) to capture actual user performance data including Core Web Vitals and page load times.
LeoYeAI/openclaw-master-skills
Add Google Analytics 4 tracking to any project. An agent skill from LeoYeAI/openclaw-master-skills.
vercel-labs/openreview
A prioritized rule set for React Native and Expo apps covering list performance, animation, navigation, UI patterns, state, rendering, monorepos and configuration.
n0an/VivaDicta
Writes, reviews, and improves SwiftData code using modern APIs and best practices.
n0an/VivaDicta
21 production-ready scripts for iOS app testing, building, and automation.
n0an/VivaDicta
Sync and validate App Store metadata and localizations with asc, including legacy metadata format migration.
n0an/VivaDicta
Pull current keyword rankings from Astro MCP, compare against the previous rankings check, and save a new rankings file to the vault.
n0an/VivaDicta
Measure VivaDicta test code coverage from the terminal. An agent skill from n0an/VivaDicta.
n0an/VivaDicta
Count Swift lines of code across the VivaDicta codebase and refresh the production-vs-test history chart.
Works with
Categories
Pull unrecognized host app bundle IDs from Google Analytics via gog, diff them against the mapping tables and add URL scheme mappings. Analyze Unrecognized Apps is an agent skill from n0an/VivaDicta.
Analyze Unrecognized Apps fits situations like: mobile work in your project.
Run `npx skills add n0an/VivaDicta --skill analyze-unrecognized-apps -a claude-code`. Or copy the skill folder (.agents/skills/analyze-unrecognized-apps in n0an/VivaDicta) into .claude/skills/analyze-unrecognized-apps in your project. Claude Code loads it when a task matches its description.
Run `npx skills add n0an/VivaDicta --skill analyze-unrecognized-apps -a codex`. Or copy the skill folder (.agents/skills/analyze-unrecognized-apps in n0an/VivaDicta) into .agents/skills/analyze-unrecognized-apps in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add n0an/VivaDicta --skill analyze-unrecognized-apps -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/analyze-unrecognized-apps, .gemini/skills/analyze-unrecognized-apps, .github/skills/analyze-unrecognized-apps and .opencode/skills/analyze-unrecognized-apps in your project.
Going by SKILL.md and its folder, Analyze Unrecognized Apps needs the command-line tools its instructions call (gh and brew).
SKILL.md names 5 domains. In commands or code: m365.cloud.microsoft, getsupport.apple.com, muse.ai, drive.google.com and vk.com; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Analyze Unrecognized Apps is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.6k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Analyze Unrecognized Apps: SEO Google (AgriciDaniel/codex-seo, 799 stars), Google Analytics (refly-ai/refly-skills, 204 stars), Google Analytics Data API Basics (google/skills, 21k stars) and Implementing Real User Monitoring (jeremylongshore/tons-of-skills-marketplace, 2.8k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
n0an (a GitHub user) maintains it in n0an/VivaDicta, which has 130 GitHub stars. The repository holds 20 skills in this directory. The repository was last updated on October 9, 2026.
Source: n0an/VivaDicta on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.