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.
A skill your agent uses when adding, wrapping, or calling an @ecency/sdk mutation hook in the mobile app (Hive broadcasts like transfer, follow, vote, delegate, community, engine token, or points)
$ npx skills add ecency/vision-mobile --skill add-mutation -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install ecency/vision-mobile add-mutation --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/ecency/vision-mobile.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/add-mutation .claude/skills/add-mutation && 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 "add-mutation" agent skill from https://github.com/ecency/vision-mobile/tree/development/.claude/skills/add-mutation into .claude/skills/add-mutation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-mutation", 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/ecency/vision-mobile/tree/development/.claude/skills/add-mutationType 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 ecency/vision-mobile --skill add-mutation -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install ecency/vision-mobile add-mutation --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ecency/vision-mobile.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/add-mutation .agents/skills/add-mutation && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "add-mutation" agent skill from https://github.com/ecency/vision-mobile/tree/development/.claude/skills/add-mutation into .agents/skills/add-mutation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-mutation", 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 ecency/vision-mobile --skill add-mutation -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install ecency/vision-mobile add-mutation --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ecency/vision-mobile.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/add-mutation .cursor/skills/add-mutation && 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 "add-mutation" agent skill from https://github.com/ecency/vision-mobile/tree/development/.claude/skills/add-mutation into .cursor/skills/add-mutation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-mutation", 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/ecency/vision-mobile.git --path .claude/skills/add-mutation--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 ecency/vision-mobile --skill add-mutation -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install ecency/vision-mobile add-mutation --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ecency/vision-mobile.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/add-mutation .gemini/skills/add-mutation && 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 "add-mutation" agent skill from https://github.com/ecency/vision-mobile/tree/development/.claude/skills/add-mutation into .gemini/skills/add-mutation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-mutation", 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 ecency/vision-mobile add-mutationInstalls 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 ecency/vision-mobile --skill add-mutation -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/ecency/vision-mobile.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/add-mutation .github/skills/add-mutation && 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 "add-mutation" agent skill from https://github.com/ecency/vision-mobile/tree/development/.claude/skills/add-mutation into .github/skills/add-mutation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-mutation", 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 ecency/vision-mobile --skill add-mutation -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install ecency/vision-mobile add-mutation --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ecency/vision-mobile.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/add-mutation .opencode/skills/add-mutation && 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 "add-mutation" agent skill from https://github.com/ecency/vision-mobile/tree/development/.claude/skills/add-mutation into .opencode/skills/add-mutation/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-mutation", 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.
add-mutationA skill your agent uses when adding, wrapping, or calling an @ecency/sdk mutation hook in the mobile app (Hive broadcasts like transfer, follow, vote, delegate, community, engine token, or points)
Add Mutation is an agent skill from ecency/vision-mobile. Use when adding, wrapping, or calling an @ecency/sdk mutation hook in the mobile app (Hive broadcasts like transfer, follow, vote, delegate, community, engine token, or points)
Its SKILL.md is about 1.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Mobile. The repository describes itself as: Ecency Mobile - reimagined social blogging, contribute and get rewarded (for Android and iOS). The licence is MIT.
3 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit feef7d1. 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:
yarnFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use yarn, which can reach the network depending on how they are called.
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.
Add Mutation loads about 1.9k tokens when it runs. Until then it costs about 47 tokens; SKILL.md has 754 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 ecency/vision-mobile at commit feef7d1, republished under its MIT licence (© ecency). 754 words, ~1,943 tokens.
.claude/skills/add-mutation/SKILL.md (or your agent's skills folder).Wrap an @ecency/sdk mutation hook in src/providers/sdk/mutations/. CLAUDE.md
("SDK Migration") covers the adapter; this file is the procedure plus the Hive authority
rules a wrapper must respect.
src/providers/sdk/mutations/use<Operation>Mutation.ts. Most wrappers there are exactly
this shape, so copy it verbatim:
import { useTransfer } from '@ecency/sdk';
import { useMutationAuth } from './common';
export function useTransferMutation() {
const { username, authContext } = useMutationAuth();
return useTransfer(username, authContext, 'async');
}'async' is the broadcast mode, passed as the last positional arg after authContext.
Its index varies by hook, so read the signature rather than assuming a position. Pass it
unless the hook has no such parameter. useBroadcastMutation takes it as
{ broadcastMode: 'async' } inside the options object instead.useMutationAuth() from ./common.ts (most wrappers import it) returns
{ username, authContext }: currentAccount?.name off selectCurrentAccount, plus
useAuthContext() (src/providers/sdk/useAuthContext.ts) building
{ adapter: createMobilePlatformAdapter({...}), enableFallback: true }. There is no
mobilePlatformAdapter object to import, use the factory.useSetCommunityRoleMutation(community) plus
useUpdateCommunityMutation(community) take the community because the SDK bakes it into
the mutation key. useAccountRelationsUpdateMutation(target, onSuccess, onError) takes
the target plus both callbacks because the SDK bakes them into the mutation options.useMutationAuth, despite
CLAUDE.md still saying all mutation wrappers use it.
useGenerateImageMutation plus the digest hooks in
useNewsletterDigestMutations.ts (useSubscribeDigestMutation,
useLeaveDigestMutation, useUnsubscribeAllDigestsMutation) bind the HiveSigner code
from useAuth() (src/hooks/useAuth.ts): useGenerateImage(username, code).
useClaimPointsMutation instead derives the access token itself, decrypting
currentAccount.local.accessToken with getDigitPinCode(pin) plus decryptKey.One line in src/providers/sdk/mutations/index.ts, under the matching domain comment:
export { useTransferMutation } from './useTransferMutation';import { useFollowMutation } from '../providers/sdk/mutations';
const followMutation = useFollowMutation();
await followMutation.mutateAsync({ following: data.following });There is no packages/sdk here. @ecency/sdk is an npm dependency, so there
is no local build step. Use the generic useBroadcastMutation, as
useIgnoreUserMutation.ts does. The positional args:
return useBroadcastMutation(
['hive', 'ignore-user'], // 1 mutation key
username, // 2 username
({ following }: { following: string }) => [ // 3 ops builder
buildIgnoreOp(username!, following),
],
undefined, // 4 onSuccess or undefined
authContext, // 5 auth context
'posting', // 6 authority
{ broadcastMode: 'async' }, // 7 options
);Pass authority as a plain lowercase string. The parameter is typed AuthorityLevel from
@ecency/sdk ('posting' | 'active' | 'owner' | 'memo'); mobile wrappers use
'posting' or 'active'. Do not import the same-named type from
src/screens/dappBrowser/bridges/bridgeTypes.ts, an unrelated dapp browser union.
'posting': vote, comment, reblog, follow, ignore, community roles'active': transfer, delegate, power up/down, savings, limit orders, proposal vote,
witness proxyThe SDK's exported OPERATION_AUTHORITY_MAP is the reference list. It maps both
account_update plus account_update2 to 'active' flatly, which is right for the common
cases but wrong at both ends, so do not copy it for either one.
Both account update operations have payload-dependent authority (custom_json is the third
payload-dependent case, below):
| Operation | Payload sets | Authority Hive requires |
|---|---|---|
| both | owner | 'owner' |
account_update2 | only posting_json_metadata (profile edit, pinned post) | 'posting' |
| both | anything else | 'active' |
The owner row covers BOTH versions.
src/utils/hiveOperationAuthority.ts implements the posting row plus the active row for
account_update2 only. It does NOT implement the owner row for either version: the function is
typed (operation: Operation) => 'posting' | 'active', so its owner branch returns
'active', account_update has no branch at all, plus hiveOperationAuthority.test.ts has
no owner case. Its doc comment calling v1 "correctly resolves to active" is wrong whenever the
payload sets owner. That resolver
serves the hive-uri path (src/providers/hive/hive.ts and
src/hooks/useLinkProcessor.tsx), where the operations arrive from an external link.
Treat an owner change as unsupported and reject it rather than routing
it to 'active'.
custom_json is the third payload-dependent case. required_auths alone means active,
required_posting_auths alone means posting.
A payload populating BOTH is the case this app does not handle. resolveTxRequiredAuthority
collapses a whole transaction to a single 'posting' | 'active', which
src/providers/hive/hive.ts then turns into one decrypted key, posting or active. So treat a
mixed payload as unsupported by this client and say so, rather than calling it malformed or
picking one authority for it.
Neither implementation detects the case today. hiveOperationAuthority.ts never reads
required_posting_auths at all. The SDK's getCustomJsonAuthority returns 'active' as soon
as required_auths is non-empty, without checking the other list. Both therefore sign with one
key.
useBroadcastMutation takes authority as its
sixth positional parameter, fixed when the hook is created, while operations is
(payload: T) => Operation[] and only runs at mutate time. The mutation reads the closed-over
value, so a wrapper cannot choose an authority from its payload. If both shapes are possible,
write two hooks with fixed authorities and pick at the call site:
// posting: profile edit, pinned post, anything touching only posting_json_metadata
export const useUpdateProfileMetadataMutation = () => { /* ..., 'posting' */ };
// active: json_metadata or a key or authority change other than owner (an owner
// change is unsupported, reject it)
export const useUpdateAccountKeysMutation = () => { /* ..., 'active' */ };useBroadcastMutation's authority parameter defaults to 'posting', so pass the right
value explicitly.
Prefer an SDK build<Operation>Op helper (buildTransferOp, buildVoteOp) over a hand
written op tuple.
hive-uri
WebView signing, HiveAuth signing, plus the active key upgrade sheet.@ecency/sdk first, then run yarn lint plus
yarn typecheck; the baseline is empty, so any error fails CI.© ecency, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/add-mutation of ecency/vision-mobile.
Open the folder on GitHubat commit feef7d1
Add Mutation 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 |
|---|---|---|---|---|---|---|
| Add Mutation this skillecency/vision-mobile | 262 | — | ~1.9k | Automated safety check: Pass | MIT | |
| React Native Best Practicesvercel-labs/openreview | 1.7k | 17 repos | ~1.1k | Automated safety check: Pass | MIT | |
| Swiftui Protwostraws/SwiftUI-Agent-Skill | 5k | 2 repos | ~1k | Automated safety check: Pass | MIT | |
| Ip As LogoKartikLabhshetwar/better-shot | 2.4k | 1 repos | ~4.3k | Automated safety check: Pass | MIT | |
| Compose Multiplatform Patternsmonta-app/ocpp-emulator | 179 | 5 repos | ~2k | Automated safety check: Pass | Apache-2.0 | |
| Aso Appstore Screenshotsadamlyttleapps/claude-skill-aso-appstore-screenshots | 1.8k | 1 repos | ~9.6k | Automated safety check: Pass | MIT |
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.
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.
AFK-surf/OpenBridge
Best practices and example-driven guidance for building SwiftUI views and components.
ecency/vision-mobile
A skill your agent uses when adding a new screen, route, or user-facing feature to the Ecency mobile React Native app, covering navigator registration, route params, i18n strings and styling.
ecency/vision-mobile
A skill your agent uses when reading server data in the mobile app - wiring an @ecency/sdk query option into a screen, adding or editing a hook under src/providers/queries/, paginating a feed or…
ecency/vision-mobile
A skill your agent uses when adding, registering, or debugging a bottom sheet (action sheet) in the mobile app, including when a sheet's cancel or dismissal reaches the caller as the wrong result.
ecency/vision-mobile
Review a vision-mobile React Native change (diff, branch, PR or file) against this repo's own traps and conventions: action sheet return values, setNativeProps caret, safe-area edges, editor…
ecency/vision-mobile
Diagnose a bug in the Ecency mobile app when a broadcast or login fails, a wallet or transfer amount is wrong, a screen or deep link does not open, a bottom sheet misbehaves, dark mode colors are…
Categories
A skill your agent uses when adding, wrapping, or calling an @ecency/sdk mutation hook in the mobile app (Hive broadcasts like transfer, follow, vote, delegate, community, engine token, or points). Add Mutation is an agent skill from ecency/vision-mobile.
Add Mutation fits situations like: calling an @ecency/sdk mutation hook in the mobile app (Hive broadcasts like transfer.
Run `npx skills add ecency/vision-mobile --skill add-mutation -a claude-code`. Or copy the skill folder (.claude/skills/add-mutation in ecency/vision-mobile) into .claude/skills/add-mutation in your project. Claude Code loads it when a task matches its description.
Run `npx skills add ecency/vision-mobile --skill add-mutation -a codex`. Or copy the skill folder (.claude/skills/add-mutation in ecency/vision-mobile) into .agents/skills/add-mutation 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 ecency/vision-mobile --skill add-mutation -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/add-mutation, .gemini/skills/add-mutation, .github/skills/add-mutation and .opencode/skills/add-mutation in your project.
Going by SKILL.md and its folder, Add Mutation needs the command-line tools its instructions call (yarn).
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 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.
Add Mutation 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.9k tokens (SKILL.md is roughly 7.8k 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 Add Mutation: React Native Best Practices (vercel-labs/openreview, 1.7k stars), Swiftui Pro (twostraws/SwiftUI-Agent-Skill, 5k stars), Ip As Logo (KartikLabhshetwar/better-shot, 2.4k stars) and Compose Multiplatform Patterns (monta-app/ocpp-emulator, 179 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
ecency (a GitHub organization) maintains it in ecency/vision-mobile, which has 262 GitHub stars. The repository holds 6 skills in this directory. The repository was last updated on October 5, 2026.
Source: ecency/vision-mobile on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.