React Native Best Practices
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.
Start a VivaDicta log capture. An agent skill from n0an/VivaDicta.
$ npx skills add n0an/VivaDicta --skill logs-start -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install n0an/VivaDicta logs-start --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/logs-start .claude/skills/logs-start && 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 "logs-start" agent skill from https://github.com/n0an/VivaDicta/tree/main/.agents/skills/logs-start into .claude/skills/logs-start/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "logs-start", 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/logs-startType 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 logs-start -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install n0an/VivaDicta logs-start --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/logs-start .agents/skills/logs-start && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "logs-start" agent skill from https://github.com/n0an/VivaDicta/tree/main/.agents/skills/logs-start into .agents/skills/logs-start/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "logs-start", 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 logs-start -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install n0an/VivaDicta logs-start --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/logs-start .cursor/skills/logs-start && 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 "logs-start" agent skill from https://github.com/n0an/VivaDicta/tree/main/.agents/skills/logs-start into .cursor/skills/logs-start/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "logs-start", 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/logs-start--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 logs-start -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install n0an/VivaDicta logs-start --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/logs-start .gemini/skills/logs-start && 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 "logs-start" agent skill from https://github.com/n0an/VivaDicta/tree/main/.agents/skills/logs-start into .gemini/skills/logs-start/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "logs-start", 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 logs-startInstalls 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 logs-start -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/logs-start .github/skills/logs-start && 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 "logs-start" agent skill from https://github.com/n0an/VivaDicta/tree/main/.agents/skills/logs-start into .github/skills/logs-start/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "logs-start", 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 logs-start -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 logs-start --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/logs-start .opencode/skills/logs-start && 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 "logs-start" agent skill from https://github.com/n0an/VivaDicta/tree/main/.agents/skills/logs-start into .opencode/skills/logs-start/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "logs-start", 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.
logs-startStart a VivaDicta log capture. An agent skill from n0an/VivaDicta.
Logs Start is an agent skill from n0an/VivaDicta. Start a VivaDicta log capture. Defaults to the simulator; takes sim, device, or structured to pick a tier.
Its SKILL.md is about 1.5k 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. 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.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit b141304. 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:
xcrunFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From 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.
Logs Start loads about 1.5k tokens when it runs. Until then it costs about 29 tokens; SKILL.md has 667 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 noted patterns worth knowing about, such as sudo or a known installer.
Why this tier reaches extensions: `sudo log collect --device-udid` pulls theAutomated 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 b141304, republished under its MIT licence (© n0an). 667 words, ~1,491 tokens.
.claude/skills/logs-start/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Start a log capture. Stop it with logs-stop, which
resolves the active tier on its own - you never have to name it again.
$ARGUMENTS selects the tier. Empty means sim.
| Argument | Tier | Reaches extensions? | Cost |
|---|---|---|---|
(empty) or sim | Simulator, live unified log | yes (all sim processes) | none |
device | Device, live stdout | no, main app only | none |
structured | Device, unified log archive | yes | interactive sudo, large archive |
Anything else: say what was passed, list the three, and stop. Do not guess.
When invoked with no argument, start the simulator capture as usual, then close your report with this reminder so the other tiers stay discoverable:
Started the simulator capture (default). Other tiers:
/logs-start devicefor live device stdout (main app only),/logs-start structuredfor the device unified log (the only tier that sees the keyboard and other extensions).
Do not ask which tier to use instead of starting - the default is the default. Only mention the alternatives after the capture is already running.
sim is the default because it is free and the richest: real unified-log
metadata, timestamps, levels, categories, threads.device is for hardware-only bugs. Live and cheap, but see the limitation
below - it cannot see the keyboard or any other extension.structured is the only tier that sees extensions on hardware. Reach for
it when the keyboard, share, action, or widget target is involved, or for a
post-mortem .logarchive you want to reopen in Console.app.mkdir -p logs./scripts/launch_simulator.sh in a background/long-lived shell so
log stream keeps running. It also writes logs/.sim-capture.pid naming the
streaming process, which is what logs-stop reads to end this capture and
nothing else.logs/sim-YYYYMMDD-HHMMSS.log path the script prints.Attaches to the already-booted Simulator; it does not relaunch the app, and it
fails if none is booted. Captures Logger output filtered to
subsystem == "com.antonnovoselov.VivaDicta"; raw print() is not included.
./scripts/launch_device.sh --check first - it resolves device and bundle id
without launching. Fix whatever it reports before continuing.mkdir -p logs./scripts/launch_device.sh in a background/long-lived shell. It
writes logs/.device-capture.pid naming the devicectl process, which is
what logs-stop reads.logs/device-YYYYMMDD-HHMMSS.log path.Uses xcrun devicectl device process launch --console with
ENABLE_PRINT_LOGS=1. --terminate-existing restarts the app, so in-progress
state is lost.
--console pipes the stdout of the single process devicectl launched. Every
extension runs in its own system-spawned process, so devicectl never sees it.
Their output is absent entirely and nothing says so - you get a
complete-looking stream that is silently missing a target.
Measured: a capture during keyboard use carried 213 lines from VivaDicta/ and
0 from VivaDictaKeyboard/, though the keyboard logs from
KeyboardViewController, KeyboardTextProcessor and VivaModeManager. Use
structured for extensions.
Lines carry time, level and call site, because LoggerExtension's print mirror
stamps them itself:
19:09:40.709 [INFO] VivaDicta/AIService.swift:666 Loaded 1 Viva ModesThat is app-side, so it only appears in builds you install. Bare, unstamped lines mean the installed binary predates the print mirror - rebuild to the device rather than changing the capture. Category and thread are still absent; stdout has no room for unified-log metadata.
Starts nothing - it only records where to collect from. logs-stop does the
work.
xcrun xctrace list devices | grep iPhone | grep -v Simulator | head -1mkdir -p llmtempdate '+%Y-%m-%d %H:%M:%S' > llmtemp/.device-log-start-time
echo "<UDID>" > llmtemp/.device-log-udidlogs-stop will need
interactive sudo and will write a large archive.Why this tier reaches extensions: sudo log collect --device-udid pulls the
device's whole unified log, and extension lines survive the subsystem filter
because LoggerExtension.swift hardcodes one subsystem across all targets:
private nonisolated let kLoggingSubsystem = "com.antonnovoselov.VivaDicta"That constant is load-bearing. If a target is ever changed to log under its own bundle id, it disappears from these captures silently.
sim and device can run at once; logs-stop handles all active tiers, reading
one marker file per tier. Do not start a second capture of the same tier - the
marker is overwritten, so the first stream is orphaned and its file stops
receiving the lines you expect.
The markers are why logs-stop never has to guess. It ends the tier that was
actually started, instead of matching simctl spawn.*log stream against the
machine and catching an unrelated log stream someone else is running.
ls -lt logs/sim-*.log | head -5
grep -i "error\|fault" logs/sim-*.log
grep "\[AppState\]" logs/sim-*.log
log show logs/vivadicta_device_*.logarchive \
--predicate 'subsystem == "com.antonnovoselov.VivaDicta"'logs-stopxcodebuild-testingaxe-simulator-control - drive the simulator before capturing© 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/logs-start of n0an/VivaDicta.
Open the folder on GitHubat commit b141304
Logs Start 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 |
|---|---|---|---|---|---|---|
| Logs Start this skilln0an/VivaDicta | 131 | — | ~1.5k | Automated safety check: Notes | MIT | |
| React Native Best Practicesvercel-labs/openreview | 1.7k | 17 repos | ~1.1k | Automated safety check: Pass | MIT | |
| Swiftui Protwostraws/SwiftUI-Agent-Skill | 5.1k | 2 repos | ~1.5k | Automated safety check: Pass | MIT | |
| Kortix Brandkortix-ai/suna | 20k | — | ~4k | Automated safety check: Pass | Custom licence | |
| Ip As LogoKartikLabhshetwar/better-shot | 2.4k | 1 repos | ~4.3k | Automated safety check: Pass | MIT | |
| Compose Multiplatform Patternsmonta-app/ocpp-emulator | 180 | 5 repos | ~2k | Automated safety check: Pass | Apache-2.0 |
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.
twostraws/SwiftUI-Agent-Skill
Comprehensively reviews SwiftUI code for best practices on modern APIs, maintainability, and performance.
kortix-ai/suna
Load FIRST for anything that carries the Kortix look or voice: product or mobile UI, copy of any kind, decks, social, images, email, CLI output, anything with the logo, and reviews of these.
KartikLabhshetwar/better-shot
Generate extremely simple, cute, personified square character images with rounded heavy forms, two purposeful character colors, one solid background color, and a dominant lower-corner composition.
monta-app/ocpp-emulator
Compose Multiplatform and Jetpack Compose patterns for KMP projects — state management, navigation, theming, performance, and platform-specific UI.
adamlyttleapps/claude-skill-aso-appstore-screenshots
Generate high-converting App Store screenshots by analyzing your app's codebase, discovering core benefits, and creating ASO-optimized screenshot images using Nano Banana Pro.
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.
Categories
Start a VivaDicta log capture. An agent skill from n0an/VivaDicta. Logs Start is an agent skill from n0an/VivaDicta. Start a VivaDicta log capture.
Logs Start fits situations like: mobile work in your project.
Run `npx skills add n0an/VivaDicta --skill logs-start -a claude-code`. Or copy the skill folder (.agents/skills/logs-start in n0an/VivaDicta) into .claude/skills/logs-start in your project. Claude Code loads it when a task matches its description.
Run `npx skills add n0an/VivaDicta --skill logs-start -a codex`. Or copy the skill folder (.agents/skills/logs-start in n0an/VivaDicta) into .agents/skills/logs-start 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 logs-start -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/logs-start, .gemini/skills/logs-start, .github/skills/logs-start and .opencode/skills/logs-start in your project.
Going by SKILL.md and its folder, Logs Start needs the command-line tools its instructions call (xcrun).
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (runs commands with sudo), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Logs Start is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.5k tokens (SKILL.md is roughly 6k 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 Logs Start: React Native Best Practices (vercel-labs/openreview, 1.7k stars), Swiftui Pro (twostraws/SwiftUI-Agent-Skill, 5.1k stars), Kortix Brand (kortix-ai/suna, 20k stars) and Ip As Logo (KartikLabhshetwar/better-shot, 2.4k 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 131 GitHub stars. The repository holds 20 skills in this directory. The repository was last updated on October 5, 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.