Skip to content
Back to skills

Cli Tools 1

ASecurity

WHAT: Yarn scripts for React Native monorepo development. WHEN: running dev builds, testing, linting, code generation. KEYWORDS: yarn, dev:ios, dev:android, test, lint, typecheck, generate, turbo, build, clean.

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 27, 2026
developmentjavascripttypescriptgojavaswiftshellbashreacttestingdebugging

Works with

  • terminal
  • cli

Security analysis

A92/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro scans all 2 files and shows the line behind each finding

Scanned September 27, 2026

npx -y skills add David-Li0406/meta-skill-evloving --skill cli-tools-1 --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Cli Tools 1?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Cli Tools 1
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/david-li0406-cli-tools-1/badge)](https://www.skillsdirectory.com/skills/david-li0406-cli-tools-1)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: cli-tools
description: "WHAT: Yarn scripts for React Native monorepo development. WHEN: running dev builds, testing, linting, code generation. KEYWORDS: yarn, dev:ios, dev:android, test, lint, typecheck, generate, turbo, build, clean."
---

# CLI Tools

## Core Principles

**Always use yarn scripts, never run tools directly.** Run `yarn dev:ios` not `npx react-native run-ios`. Yarn scripts include necessary environment variables, flags, and configurations. Direct tool invocation skips project-specific setup.

**Always use yarn, never npm.** The project uses Yarn 4.5.0 with workspace configuration. Running `npm install` or `npm run` breaks workspace resolution and dependency management.

**Always check package.json or this document for exact script names.** Don't assume conventions. The project uses `yarn dev:ios` not `yarn ios`. Custom naming prevents conflicts with React Native CLI.

**Always use code generation scripts for scaffolding.** Run `yarn generate:module` for modules, `yarn graphql:generate` for GraphQL types. Plop templates follow project conventions for file structure and naming.

**Why**: Consistent CLI usage ensures reproducible builds, prevents environment-specific issues, automates complex setup sequences, and maintains code quality through pre-commit hooks.

## When to Use This Skill

Use these commands when:

- Running the app locally on iOS or Android
- Building the library for distribution
- Running tests with Jest
- Linting code with ESLint
- Type checking with TypeScript
- Generating new modules or components
- Scaffolding GraphQL types from schema
- Cleaning build artifacts
- Setting up development environment
- Running accessibility checks
- Opening Xcode or Android Studio
- Managing git hooks with Husky
- Orchestrating monorepo builds with Turbo

## Development Commands

### Running the App

Start Metro bundler and run app on iOS or Android.

```bash
# Start Metro bundler (terminal 1)
yarn start

# Run iOS app (terminal 2)
yarn dev:ios

# Run Android app (terminal 2)
yarn dev:android
```

**What dev:ios and dev:android do:**
1. Prompt for local path to YourCompany iOS/Android repositories (cached in `.env.local_dev_paths`)
2. **iOS**: Build debug XCFramework if needed, symlink to local iOS repo, run metro bundler
3. **Android**: Configure AAR symlink to local Android repo, run metro bundler
4. Enable live development with local changes reflected in consumer apps

**Why**: These commands handle environment configuration, native builds, and symlink setup automatically. Live development without publishing to npm or Maven.

### Shell App

Test modules in isolation using the shell app.

```bash
# Run shell app on iOS
yarn app ios

# Run shell app on Android
yarn app android

# Generic command syntax
yarn app <command>
```

**Why**: The shell app (`app/*` workspace) allows developing modules without full YourCompany consumer apps. Faster iteration for module development.

### Building

Compile library for distribution with TypeScript definitions.

```bash
# Build library (CommonJS, ES modules, TypeScript definitions)
yarn build

# Type checking without emitting files
yarn typecheck
```

**Why**: `yarn build` uses react-native-builder-bob with correct configuration for multiple module formats. `yarn typecheck` runs TypeScript compiler with project-specific tsconfig.

## Code Quality

### Linting

Run ESLint with accessibility checks.

```bash
# Run ESLint on all source files
yarn lint

# Accessibility baseline checks (runs on staged files)
yarn a11y:check

# Accessibility check with verbose output
yarn a11y:check:verbose

# Check all files for accessibility issues
yarn a11y:check:all

# Generate new accessibility baseline
yarn a11y:baseline:gen

# Update existing accessibility baseline
yarn a11y:baseline:update

# Generate accessibility report
yarn a11y:report
```

**Why**: `yarn lint` includes custom ESLint rules and React Native plugins. Accessibility commands track baseline and flag regressions. Pre-commit hooks run these automatically.

### Testing

Run Jest tests with React Native preset.

```bash
# Run all tests
yarn test

# Run specific test file
yarn jest <path-to-test>

# Run tests in watch mode
yarn jest --watch

# Run tests with coverage
yarn jest --coverage

# Update snapshots
yarn jest -u
```

**Why**: `yarn test` runs with project-specific Jest configuration, React Native transformers, and module resolution. Direct `jest` usage provides more control for debugging.

### Maestro E2E Tests

Run end-to-end tests on iOS simulator or Android emulator.

```bash
# Run Maestro tests on iOS simulator
./scripts/maestro-test.sh ios

# Run Maestro tests on Android emulator
./scripts/maestro-test.sh android

# Run specific test directory
./scripts/maestro-test.sh ios ./MaestroTests/onboarding/
```

**Why**: Maestro tests validate complete user journeys on actual devices/simulators. Script automatically detects running emulators and executes YAML test flows.

## Code Generation

### Module Scaffolding

Generate modules and components with Plop templates.

```bash
# Generate new module (follows project conventions)
yarn generate:module

# Extend existing module
yarn extend:module

# Generate brand assets
yarn generate:brand-assets
```

**Why**: Plop templates follow project conventions for file structure, naming, and boilerplate. Consistent module organization across features.

### Data Layer

Generate types and code from schemas.

```bash
# Generate GraphQL types and operations
yarn graphql:generate

# Generate native data access layer
yarn generate:data-access:native

# Generate Swift types from TypeScript
yarn generate:swift-types
```

**Why**: Code generation ensures type safety between TypeScript, GraphQL schemas, and native Swift code. Prevents runtime type errors.

## Platform-Specific Commands

### iOS

Manage iOS dependencies and build artifacts.

```bash
# Install iOS dependencies (CocoaPods)
yarn install:ios

# Clean iOS build artifacts
yarn clean:ios

# Open Xcode workspace
yarn open:xcode
```

**Why**: These scripts handle CocoaPods installation and Xcode workspace management. `clean:ios` removes derived data and build caches.

### Android

Manage Android build artifacts and tools.

```bash
# Clean Android build artifacts and Gradle caches
yarn clean:android

# Open Android Studio
yarn open:androidstudio
```

**Why**: `clean:android` runs Gradle tasks that properly clear all build caches. Opens Android Studio with correct project structure.

## Building Native Artifacts

### iOS XCFramework

Build React Shared Modules as XCFramework for iOS.

```bash
# Build for both device and simulator (for distribution)
./scripts/build_spm_frameworks.sh --target both

# Build for device only
./scripts/build_spm_frameworks.sh --target device

# Build for simulator only (for local testing)
./scripts/build_spm_frameworks.sh --target simulator
```

**Why**: XCFramework consumed by YourCompany iOS app via Swift Package Manager. Simulator-only builds are faster for local iteration.

### Android AAR

Build Android Archive for YourCompany Android app.

```bash
# Build AAR locally
cd app/android && ./gradlew :modules:bundleReleaseAar

# Publish to local Maven repository
cd app/android && ./gradlew :modules:publishToMavenLocal
```

**Why**: AAR contains compiled code, resources, and JavaScript bundle. Publishing to local Maven allows testing AAR changes before release.

## Environment Setup

Configure development environment and git hooks.

```bash
# Set up development environment
yarn setup:env

# Install git hooks (runs automatically after install)
yarn prepare
```

**Why**: `setup:env` configures environment variables and dependencies. `prepare` installs Husky git hooks for pre-commit checks (lint-staged, a11y).

## Localization

Manage translation files and synchronization.

```bash
# Run localization helper utilities
yarn localization:helpers
```

**Why**: Manages translation file validation and synchronization with Lokalise translation management system.

## Developer Tools

Open toolbox UI for common development tasks.

```bash
# Open toolbox UI (new version)
yarn toolbox

# Open toolbox UI (deprecated version)
yarn toolbox:deprecated
```

**Why**: Toolbox provides UI for feature flag management, environment switching, and other development utilities.

## Workspace Commands

Run commands in specific workspaces within monorepo.

```bash
# Run command in app workspace
yarn app <command>

# Run command in specific workspace
yarn workspace @repo/toolbox <command>
```

**Why**: Yarn workspaces enable monorepo management. Workspace commands ensure dependencies and scripts run in correct package context.

## Pre-Commit Hooks

### lint-staged

Runs automatically on `git commit` via Husky. Manually run:

```bash
# Run lint-staged on staged files
yarn lint-staged
```

**Checks on staged files:**
- **TypeScript/TSX files** (`.ts`, `.tsx`):
  - ESLint with auto-fix (`--fix`)
  - Prettier formatting
  - Accessibility baseline check (non-test files in `src/`)

- **JavaScript files** (`.js`):
  - ESLint with auto-fix
  - Prettier formatting

- **JSON, Markdown, YAML files**:
  - Prettier formatting

- **Team governance files** (`.teams/*.json`, `**/.claim.json`):
  - JSON schema validation with ajv
  - Claims validation check

**Why**: Lint-staged ensures only valid, formatted code is committed. Faster than running checks on all files (only processes staged changes).

### Prettier

Format code with Prettier.

```bash
# Format specific files
yarn prettier --write <file>

# Check formatting without fixing
yarn prettier --check <file>

# Format all files (use with caution)
yarn prettier --write .
```

**Why**: Direct prettier invocation for formatting files outside git workflows. Prefer lint-staged for pre-commit formatting.

### ESLint

Lint code with ESLint.

```bash
# Lint specific files with auto-fix
yarn eslint <file> --fix

# Lint without a11y checks (matches lint-staged behavior)
ESLINT_DISABLE_A11Y=1 yarn eslint <file> --fix
```

**Why**: Direct ESLint usage for debugging linting issues. Use `yarn lint` for full project lint run.

## Monorepo Orchestration

### Turbo

Run scripts across workspaces with caching.

```bash
# Run turbo commands across workspaces
yarn turbo run <script-name>

# Examples
yarn turbo run build
yarn turbo run lint
yarn turbo run check-types
```

**Why**: Turbo 2.5.6 orchestrates script execution across monorepo. Creates dependency graph, runs scripts in parallel, caches results to avoid redundant work.

**Note**: Turbo expects consistent script names across packages (`build`, `lint`, `check-types`, `dev`).

### Husky

Manage git hooks.

```bash
# Manually reinstall git hooks
yarn husky install

# Test pre-commit hook manually
yarn husky run pre-commit
```

**Why**: Husky 9.1.7 manages git hooks. Hooks install automatically via `yarn prepare` but can be manually reinstalled if needed.

## TypeScript Compiler

Type check and build type definitions.

```bash
# Type check without emitting files (use yarn typecheck instead)
yarn tsc --noEmit

# Build type definitions
yarn tsc --project tsconfig.build.json
```

**Why**: Direct `tsc` usage rarely needed since `yarn typecheck` and `yarn build` handle this. Useful for debugging type errors with specific compiler flags.

## Common Mistakes to Avoid

❌ **Don't run underlying tools directly**:

```bash
# ❌ Wrong - missing environment config
npx react-native run-ios
./gradlew clean
eslint src
jest
```

**Why**: Direct tool invocation skips project-specific environment variables, flags, and configurations. May work differently on different machines.

✅ **Do use yarn scripts**:

```bash
# ✅ Correct - includes all necessary config
yarn dev:ios
yarn clean:android
yarn lint
yarn test
```

**Why**: Yarn scripts abstract complex command sequences, handle environment setup, and ensure consistent behavior across team.

❌ **Don't use npm commands**:

```bash
# ❌ Wrong - breaks workspace resolution
npm run test
npm install
npm run dev:ios
```

**Why**: Project uses Yarn 4.5.0 with workspace configuration and custom resolutions. npm breaks workspace dependency management.

✅ **Do use yarn commands**:

```bash
# ✅ Correct - uses Yarn workspace resolution
yarn test
yarn install
yarn dev:ios
```

**Why**: Yarn 4.5.0 manages monorepo with workspace dependencies. Consistent package manager across team.

❌ **Don't assume standard script names**:

```bash
# ❌ Wrong - these scripts don't exist
yarn ios
yarn android
yarn run
```

**Why**: Project uses custom naming conventions. Script names may differ from common React Native conventions.

✅ **Do check package.json for exact names**:

```bash
# ✅ Correct - use actual script names
yarn dev:ios
yarn dev:android
yarn start
```

**Why**: Custom naming prevents conflicts with React Native CLI. Check `package.json` or this document for exact script names.

❌ **Don't manually create modules**:

```bash
# ❌ Wrong - manual file creation
mkdir src/modules/new-feature
touch src/modules/new-feature/index.ts
```

**Why**: Manual creation skips project conventions for file structure, naming, and boilerplate.

✅ **Do use code generation scripts**:

```bash
# ✅ Correct - uses Plop templates
yarn generate:module

# Follow prompts for module name, type, etc.
```

**Why**: Plop templates follow project conventions automatically. Consistent module organization, imports, exports, and tests.

## Quick Reference

**Development:**
- `yarn start` - Start Metro bundler
- `yarn dev:ios` - Run iOS app with local symlinks
- `yarn dev:android` - Run Android app with local symlinks
- `yarn app <command>` - Run shell app commands

**Building:**
- `yarn build` - Compile library for distribution
- `yarn typecheck` - Type check without emitting

**Code Quality:**
- `yarn lint` - Run ESLint
- `yarn a11y:check` - Accessibility baseline check
- `yarn test` - Run Jest tests

**Code Generation:**
- `yarn generate:module` - Scaffold new module
- `yarn graphql:generate` - Generate GraphQL types
- `yarn generate:swift-types` - Generate Swift types

**Platform:**
- `yarn install:ios` - Install CocoaPods
- `yarn clean:ios` - Clean iOS artifacts
- `yarn clean:android` - Clean Android artifacts
- `yarn open:xcode` - Open Xcode workspace
- `yarn open:androidstudio` - Open Android Studio

**Native Builds:**
- `./scripts/build_spm_frameworks.sh --target simulator` - Build iOS XCFramework
- `cd app/android && ./gradlew :modules:bundleReleaseAar` - Build Android AAR

**Setup:**
- `yarn setup:env` - Configure environment
- `yarn prepare` - Install git hooks

**Utilities:**
- `yarn localization:helpers` - Translation utilities
- `yarn toolbox` - Developer toolbox UI

**Monorepo:**
- `yarn turbo run <script>` - Run across workspaces
- `yarn workspace <name> <command>` - Run in specific workspace

**Pre-Commit:**
- `yarn lint-staged` - Run pre-commit checks
- `yarn prettier --write <file>` - Format code
- `yarn eslint <file> --fix` - Lint and fix

**Testing:**
- `yarn jest <path>` - Run specific test
- `yarn jest --watch` - Watch mode
- `yarn jest --coverage` - Coverage report
- `./scripts/maestro-test.sh ios` - E2E tests

**Never use:**
- ❌ `npm install` - Use `yarn install`
- ❌ `npm run <script>` - Use `yarn <script>`
- ❌ `npx react-native run-ios` - Use `yarn dev:ios`
- ❌ `./gradlew clean` - Use `yarn clean:android`

**Full CLI reference**: `previous-standards/global/cli-tools.md`

Files in this skill

  • SKILL.md15.1 KB
  • references/examples.md432 B

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…