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.
Stop whichever VivaDicta log capture is active, then summarize it.
$ npx skills add n0an/VivaDicta --skill logs-stop -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install n0an/VivaDicta logs-stop --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-stop .claude/skills/logs-stop && 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-stop" agent skill from https://github.com/n0an/VivaDicta/tree/main/.agents/skills/logs-stop into .claude/skills/logs-stop/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "logs-stop", 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-stopType 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-stop -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install n0an/VivaDicta logs-stop --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-stop .agents/skills/logs-stop && 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-stop" agent skill from https://github.com/n0an/VivaDicta/tree/main/.agents/skills/logs-stop into .agents/skills/logs-stop/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "logs-stop", 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-stop -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install n0an/VivaDicta logs-stop --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-stop .cursor/skills/logs-stop && 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-stop" agent skill from https://github.com/n0an/VivaDicta/tree/main/.agents/skills/logs-stop into .cursor/skills/logs-stop/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "logs-stop", 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-stop--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-stop -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install n0an/VivaDicta logs-stop --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-stop .gemini/skills/logs-stop && 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-stop" agent skill from https://github.com/n0an/VivaDicta/tree/main/.agents/skills/logs-stop into .gemini/skills/logs-stop/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "logs-stop", 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-stopInstalls 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-stop -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-stop .github/skills/logs-stop && 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-stop" agent skill from https://github.com/n0an/VivaDicta/tree/main/.agents/skills/logs-stop into .github/skills/logs-stop/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "logs-stop", 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-stop -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-stop --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-stop .opencode/skills/logs-stop && 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-stop" agent skill from https://github.com/n0an/VivaDicta/tree/main/.agents/skills/logs-stop into .opencode/skills/logs-stop/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "logs-stop", 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-stopStop whichever VivaDicta log capture is active, then summarize it.
Logs Stop is an agent skill from n0an/VivaDicta. Stop whichever VivaDicta log capture is active, then summarize it. Detects the tier itself; takes an optional filter.
Its SKILL.md is about 1.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. 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 step headings 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.
No scripts in the folder and no shell commands in SKILL.md (its code samples are bash).
From 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 Stop loads about 1.6k tokens when it runs. Until then it costs about 32 tokens; SKILL.md has 764 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.
sudo is needed - that reads as "go and do this in a terminal somewhere", and 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). 764 words, ~1,604 tokens.
.claude/skills/logs-stop/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Stop the active capture(s) started by logs-start and
summarize the result. Never ask the user which tier is running - detect it.
logs-start writes a marker per live tier naming the process that streams:
logs/.sim-capture.pid and logs/.device-capture.pid. Read those - do not go
looking for processes.
for tier in sim device; do
PIDFILE="logs/.${tier}-capture.pid"
[ -f "$PIDFILE" ] || continue
PID=$(cat "$PIDFILE" 2>/dev/null)
if [ -n "$PID" ] && kill -0 "$PID" 2>/dev/null; then
echo "$tier ACTIVE (pid $PID)"
else
echo "$tier marker stale (pid ${PID:-none} gone), removing"
rm -f "$PIDFILE"
fi
done
[ -f llmtemp/.device-log-start-time ] && echo "structured PENDING: $(cat llmtemp/.device-log-start-time)"structured has no process - a marker file is the only evidence. If nothing is
found, say so plainly and stop; do not summarize a stale file as if it were
fresh.
The obvious-looking check is wrong and it is destructive:
pgrep -f "simctl spawn.*log stream" # matches ANY simulator log stream on the machineThat pattern is not specific to this repo, this app, or this capture. It matches
an unrelated log stream any other session has running, reports sim ACTIVE
when no VivaDicta capture exists, and the matching pkill then kills that
session's stream. A capture the user never started must never be stopped, so the
marker is the only handle.
Two related traps, if you ever debug this by hand:
pgrep -a is not a macOS flag. pgrep here accepts only [-Lfilnoqvx],
yet -a exits 0 and prints a bogus pid rather than erroring. Use plain -f.grep for a pattern matches your own pipeline. ps -A | grep "log stream"
counts the greps themselves, because both carry the string in their own argv.
Add | grep -v grep, or check the marker instead.Kill the streaming process the marker names. Do not kill the wrapper script:
launch_*.sh is the parent of the stream, and killing the parent reparents the
stream to PID 1, where it keeps appending to the log file with nothing left to
stop it. Killing the stream is enough - the script's tee then reaches EOF and
the script exits, clearing its own marker.
PID=$(cat logs/.sim-capture.pid)
ps -p "$PID" -o command= | grep -q "log stream" || echo "refusing: pid $PID is not a log stream"
kill "$PID"
LOGFILE=$(ls -t logs/sim-*.log 2>/dev/null | head -1)PID=$(cat logs/.device-capture.pid)
ps -p "$PID" -o command= | grep -q "devicectl device process launch" || echo "refusing: pid $PID is not a device capture"
kill "$PID"
LOGFILE=$(ls -t logs/device-*.log 2>/dev/null | head -1)The ps check is there because a pid can be reused. If the command line does not
match, say so and stop rather than killing an unrelated process.
The capture ends with App terminated due to signal 15 - that is this skill's
kill, not a crash. Say so rather than reporting it as a failure.
Check staleness first. If llmtemp/.device-log-start-time is more than a few
hours old, show its timestamp and ask before collecting - the marker may be
left over from an abandoned session, and collecting is expensive.
The script needs interactive sudo, so the user must run it themselves. Root
is a hard requirement inside /usr/bin/log, not a choice this script makes -
verified 2026-09-05, running it unprivileged fails outright and writes nothing:
$ /usr/bin/log collect --device-udid <udid> --start <time> --output out.logarchive
log: Must be root to collect logs from attached deviceThere is no flag or output-path that avoids it, so do not try to drop the sudo.
(Local-only log collect, with no --device-udid, is the case that can run
unprivileged - the device path talks to attached hardware.)
Note also that log is a shell builtin in Anton's zsh, so a bare log show ...
typed interactively fails with too many arguments. Use /usr/bin/log. The
script is unaffected: it runs under #!/bin/bash.
Hand them a line they can paste, not a description of one. In Claude Code, a
prompt starting with ! runs in the session and its output lands back in the
conversation, so the whole handoff is one copy-paste. Print exactly this, on its
own line, as the last thing before you stop:
! ./scripts/collect_device_logs.shDo not write it as a bare ./scripts/collect_device_logs.sh and explain that
sudo is needed - that reads as "go and do this in a terminal somewhere", and the
result then has to be pasted back by hand. The ! prefix is the part that makes
it work in place, and it is not obvious unless it is shown.
Then wait for confirmation and read the newest export:
LOGFILE=$(ls -t logs/device_*.txt 2>/dev/null | head -1)It also writes logs/vivadicta_device_*.logarchive, reopenable in Console.app.
Do not claim the logs exist before the user confirms the script finished. Remove
the marker files once collection succeeds so the next logs-stop does not
re-trigger it.
Per file: path, size, modified time, line count, and level counts.
wc -l "$LOGFILE"
grep -oE '\[(INFO|DEBUG|ERROR|WARNING|NOTICE)\]' "$LOGFILE" | sort | uniq -c | sort -rnThen apply $ARGUMENTS:
$ARGUMENTS | Show |
|---|---|
| (empty) | Last 20 lines, plus any error/fault lines |
errors | Error and fault lines |
warnings | Warning lines |
all | The whole file |
| anything else | Treat as a search term; show matching lines |
Several call sites log success messages at [ERROR] - for example
AudioPrewarmManager.swift:490 ("Input tap installed") and the
AppGroupCoordinator state-update lines, where all 30 "errors" in one capture
were routine status changes. Report what a line says, not what its level
claims. A raw error count is misleading on its own.
logs/ is gitignored.© 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-stop of n0an/VivaDicta.
Open the folder on GitHubat commit b141304
Logs Stop 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 Stop this skilln0an/VivaDicta | 131 | — | ~1.6k | 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
Stop whichever VivaDicta log capture is active, then summarize it. Logs Stop is an agent skill from n0an/VivaDicta. Stop whichever VivaDicta log capture is active, then summarize it.
Logs Stop fits situations like: mobile work in your project.
Run `npx skills add n0an/VivaDicta --skill logs-stop -a claude-code`. Or copy the skill folder (.agents/skills/logs-stop in n0an/VivaDicta) into .claude/skills/logs-stop in your project. Claude Code loads it when a task matches its description.
Run `npx skills add n0an/VivaDicta --skill logs-stop -a codex`. Or copy the skill folder (.agents/skills/logs-stop in n0an/VivaDicta) into .agents/skills/logs-stop 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-stop -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-stop, .gemini/skills/logs-stop, .github/skills/logs-stop and .opencode/skills/logs-stop in your project.
SKILL.md names no scripts, command-line tools or credentials: Logs Stop is instructions for the agent only.
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 Stop 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.6k tokens (SKILL.md is roughly 6.4k 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 Stop: 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.