React General
LedgerHQ/ledger-live
General React and React Native engineering rules for Ledger Live.
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.
$ npx skills add ecency/vision-mobile --skill add-feature -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install ecency/vision-mobile add-feature --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-feature .claude/skills/add-feature && 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-feature" agent skill from https://github.com/ecency/vision-mobile/tree/development/.claude/skills/add-feature into .claude/skills/add-feature/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-feature", 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-featureType 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-feature -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install ecency/vision-mobile add-feature --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-feature .agents/skills/add-feature && 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-feature" agent skill from https://github.com/ecency/vision-mobile/tree/development/.claude/skills/add-feature into .agents/skills/add-feature/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-feature", 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-feature -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install ecency/vision-mobile add-feature --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-feature .cursor/skills/add-feature && 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-feature" agent skill from https://github.com/ecency/vision-mobile/tree/development/.claude/skills/add-feature into .cursor/skills/add-feature/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-feature", 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-feature--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-feature -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install ecency/vision-mobile add-feature --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-feature .gemini/skills/add-feature && 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-feature" agent skill from https://github.com/ecency/vision-mobile/tree/development/.claude/skills/add-feature into .gemini/skills/add-feature/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-feature", 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-featureInstalls 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-feature -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-feature .github/skills/add-feature && 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-feature" agent skill from https://github.com/ecency/vision-mobile/tree/development/.claude/skills/add-feature into .github/skills/add-feature/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-feature", 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-feature -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-feature --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-feature .opencode/skills/add-feature && 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-feature" agent skill from https://github.com/ecency/vision-mobile/tree/development/.claude/skills/add-feature into .opencode/skills/add-feature/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-feature", 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-featureA 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.
Add Feature is an agent skill from ecency/vision-mobile. Use 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.
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, covering Cross-platform mobile apps and Internationalization. It works with React Native and React. The repository describes itself as: Ecency Mobile - reimagined social blogging, contribute and get rewarded (for Android and iOS). The licence is MIT.
8 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 Feature loads about 1.9k tokens when it runs. Until then it costs about 46 tokens; SKILL.md has 714 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). 714 words, ~1,874 tokens.
.claude/skills/add-feature/SKILL.md (or your agent's skills folder).Ordered procedure for adding a screen. CLAUDE.md covers Redux, TanStack Query, @ecency/sdk,
sheets and lint rules in more depth. Easiest to miss: the safe-area root (Step 1) and the params
contract (Step 4). Each one breaks something.
New screens are functional. A few older screens under src/screens/ are still classes, plus
application/children/errorBoundary.tsx, which React requires to be a class. An overlay with no
route of its own, shown with SheetManager.show, is a bottom sheet instead:
src/navigation/sheets.tsx, see CLAUDE.md.
src/screens/<feature>/
index.ts # local barrel, re-exported from src/screens/index.ts
screen/<feature>Screen.tsx
screen/<feature>Styles.ts # or <feature>.styles.ts
children/ hooks/ # optionalUse SafeAreaView from react-native-safe-area-context as the root; that is where screens
generally import it from. src/screens/dappBrowser/screen/dappBrowser.tsx still takes it from
react-native, which is the pattern this rule exists to replace. Do not pass edges: it
replaces the defaults rather than extending them, so edges={['bottom']} drops the top inset
and the header runs under the status bar. That shipped on the Email digests screen; the fix was
removing edges={['bottom']}.
Skeleton for screen/<feature>Screen.tsx (a template, not a quote of any one file):
import React from 'react';
import { useIntl } from 'react-intl';
import { SafeAreaView } from 'react-native-safe-area-context';
import { BasicHeader } from '../../../components';
import { useAppSelector } from '../../../hooks';
import { selectCurrentAccount } from '../../../redux/selectors';
import styles from './myFeatureStyles';
const MyFeatureScreen = () => {
const intl = useIntl();
const currentAccount = useAppSelector(selectCurrentAccount);
return (
<SafeAreaView style={styles.container}>
<BasicHeader title={intl.formatMessage({ id: 'myfeature.title' })} />
{/* content */}
</SafeAreaView>
);
};
export default MyFeatureScreen;useAppSelector(selectCurrentAccount) reads the account; useAuth() from src/hooks when you
only need { username, code }. Reusable UI is exported from the src/components/index.tsx barrel
(BasicHeader, MainButton, TextInput, UserAvatar, Icon).
The styles file default-exports
EStyleSheet.create({ container: { flex: 1, backgroundColor: '$primaryBackgroundColor' } }).
Variables are defined in src/themes/lightTheme.ts and darkTheme.ts: $primaryBlack text,
$primaryDarkGray secondary text, $primaryBlue accent, $primaryLightBackground cards,
$iconColor, $primaryRed destructive. Hex literals do not follow the theme.
src/screens/<feature>/index.ts does import MyFeature from './screen/myFeatureScreen'; then
export { MyFeature }; export default MyFeature;. Add the import plus the name to the export block
in src/screens/index.ts. stackNavigator.tsx imports its screens from that barrel.
src/screens/waves shows the cost of skipping this: it never reached the barrel, so
botomTabNavigator.tsx reaches it by path.
In src/constants/routeNames.ts. Entries are template literals over the shared suffix consts. The
object ends as const, which is what makes the route names a literal union:
MY_FEATURE: `MyFeature${SCREEN_SUFFIX}`,src/navigation/types.ts derives RouteName from ROUTES, then asserts every route has an entry:
export type _MissingRouteContracts = AssertNever<Exclude<RouteName, keyof AppParamList>>;A ROUTES entry with no AppParamList entry breaks that assertion: the route name does not satisfy
the constraint never. yarn typecheck runs against an empty baseline, so this fails CI. Add:
[ROUTES.SCREENS.MY_FEATURE]: { username?: string } | undefined;Append | undefined only if the screen renders with no params. Leaving it off makes params required
at the call sites, which is what you want for a screen that cannot render empty (WEB_BROWSER,
VOTERS, ASSET_DETAILS, CHAT_THREAD, PROFILE_EDIT).
src/navigation/stackNavigator.tsx defines MainStackNavigator and the root StackNavigator.
MainStackNavigator registers the drawer as its first screen (ROUTES.DRAWER.MAIN), so an
ordinary screen added to it is a sibling of the drawer that pushes over it. The root
StackNavigator holds MainStackNavigator itself plus pre-auth and full-screen routes (Login,
Register, Welcome, PinCode, WebBrowser). Most new screens go in the main one:
<MainStack.Screen name={ROUTES.SCREENS.MY_FEATURE} component={MyFeature} />Put it in the <MainStack.Group screenOptions={{ animation: 'slide_from_bottom' }}> block to slide
up, add options={{ presentation: 'modal' }} for a true modal. The as any casts on existing rows
are legacy prop debt; a new screen needs none.
types.ts declares ReactNavigation.RootParamList extends AppParamList, so the untyped hook is
already checked against Step 4. Omitting params for a route that requires them is a compile error,
not a blank screen.
const navigation = useNavigation();
navigation.navigate(ROUTES.SCREENS.MY_FEATURE, { username });Reading the params back is not settled house style. Most screens destructure a route prop, usually
typed any; useRoute is rare. Prefer keying off Step 4 instead:
import { RouteProp, useRoute } from '@react-navigation/native';
import { AppParamList } from '../../../navigation/types';
const route = useRoute<RouteProp<AppParamList, typeof ROUTES.SCREENS.MY_FEATURE>>();Outside a component (deep links, redux actions) use the equally typed object form,
RootNavigation.navigate({ name, params }) from src/navigation/rootNavigation.tsx.
src/config/locales/en-US.json is the catalog you edit; Crowdin owns the translations. It is
nested: top-level keys are objects, not dotted ids. src/utils/flattenMessages.ts joins the
levels with dots at load, so a nested block is read with a dotted id.
{ "myfeature": { "title": "My Feature", "empty": "Nothing here yet" } }intl.formatMessage({ id: 'myfeature.title' });Server data uses @ecency/sdk query options with TanStack Query; mutations use a wrapper in
src/providers/sdk/mutations/. See the SDK Migration section of CLAUDE.md. Keep Redux for auth,
settings, UI state and the optimistic cache reducer. Older reducers (postsReducer,
walletReducer) still hold server data; do not extend them for a new screen.
SafeAreaView from react-native-safe-area-context, no edges overridesrc/screens/<feature>/index.ts re-exported from src/screens/index.tsrouteNames.ts and a params entry in AppParamList (src/navigation/types.ts)src/navigation/stackNavigator.tsxen-US.json onlyyarn lint and yarn typecheck clean© 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-feature of ecency/vision-mobile.
Open the folder on GitHubat commit feef7d1
Add Feature 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 Feature this skillecency/vision-mobile | 262 | — | ~1.9k | Automated safety check: Pass | MIT | |
| React GeneralLedgerHQ/ledger-live | 621 | — | ~738 | Automated safety check: Pass | MIT | |
| ThemingCode-with-Beto/skills | 141 | — | ~2.5k | Automated safety check: Pass | None | |
| Frontend Optimistic Mutationssickn33/agentic-awesome-skills | 47k | 1 repos | ~3.6k | Automated safety check: Pass | MIT | |
| Frontend Architecturesickn33/agentic-awesome-skills | 47k | 1 repos | ~5.6k | Automated safety check: Pass | MIT | |
| Cometchat I18ncometchat/cometchat-skills | 129 | — | ~1.9k | Automated safety check: Pass | MIT |
LedgerHQ/ledger-live
General React and React Native engineering rules for Ledger Live.
Code-with-Beto/skills
Scaffold a unified, cross-platform color theme system into an Expo Router app.
sickn33/agentic-awesome-skills
A portable, framework-agnostic discipline for the write path of any React or React Native app using a query/cache layer.
sickn33/agentic-awesome-skills
A portable, framework-agnostic architecture style for any React or React Native frontend.
cometchat/cometchat-skills
Localize a CometChat integration — set the UI Kit language, register custom/overridden translations, handle RTL, and never leak a raw localization key into the UI.
olorehq/olore
Local TanStack Form documentation reference (latest, v1.33.5).
ecency/vision-mobile
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)
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…
Works with
Categories
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. Add Feature is an agent skill from ecency/vision-mobile. Use 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.
Add Feature fits situations like: adding a new screen; user-facing feature to the Ecency mobile React Native app; covering navigator registration; I18n strings and styling.
Run `npx skills add ecency/vision-mobile --skill add-feature -a claude-code`. Or copy the skill folder (.claude/skills/add-feature in ecency/vision-mobile) into .claude/skills/add-feature in your project. Claude Code loads it when a task matches its description.
Run `npx skills add ecency/vision-mobile --skill add-feature -a codex`. Or copy the skill folder (.claude/skills/add-feature in ecency/vision-mobile) into .agents/skills/add-feature 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-feature -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-feature, .gemini/skills/add-feature, .github/skills/add-feature and .opencode/skills/add-feature in your project.
Going by SKILL.md and its folder, Add Feature 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 Feature 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.5k 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 Feature: React General (LedgerHQ/ledger-live, 621 stars), Theming (Code-with-Beto/skills, 141 stars), Frontend Optimistic Mutations (sickn33/agentic-awesome-skills, 47k stars) and Frontend Architecture (sickn33/agentic-awesome-skills, 47k 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.