| name | monorepo-ops |
| description | Use for monorepo-level work — running pnpm and turbo scripts, adding dependencies, changing shared packages, or cross-app changes. Covers workspace layout, filters, and build and validation order. |
Monorepo Operations — Yosemite Crew
Description
Use this skill for any task involving monorepo-level operations: running scripts, adding dependencies, managing shared packages, understanding workspace relationships, or cross-app work.
TRIGGER: tasks spanning multiple apps, dependency changes, turbo commands, pnpm workspace operations, or shared package changes.
Workspace Layout
apps/
frontend/ @yosemite-crew/frontend
backend/ @yosemite-crew/backend
mobileAppYC/ mobileAppYC
dev-docs/ @yosemite-crew/dev-docs
packages/
types/ @yosemite-crew/types
fhirtypes/ @yosemite-crew/fhirtypes
fhir/ @yosemite-crew/fhir
Tooling: pnpm workspaces + Turbo. Package manager: pnpm@8.15.6.
Project Architecture Reference
For architecture decisions, technical narratives, or product-engineering context, read .agents/skills/monorepo-ops/project-baseline.md.
Running Commands
Always use --filter to scope to the relevant workspace. Never run commands at root without --filter unless intentionally affecting all packages.
When the touched workspace is apps/frontend, apply Sonar rules from .agents/skills/frontend-sonar/SKILL.md and run the mandatory frontend check order (tsc -> lint -> targeted tests).
pnpm --filter frontend dev
pnpm --filter backend dev
pnpm --filter frontend build
pnpm turbo build --filter=frontend...
pnpm --filter frontend run lint
pnpm --filter backend run lint
pnpm --filter frontend run type-check
npx tsc --noemit
pnpm --filter frontend run test -- --testPathPattern="ComponentName"
pnpm --filter mobileAppYC run test -- --testPathPattern="ScreenName"
Adding Dependencies
pnpm --filter frontend add <package>
pnpm --filter backend add <package>
pnpm --filter mobileAppYC add <package>
pnpm --filter frontend add -D <package>
pnpm --filter @yosemite-crew/types add <package>
pnpm add -D -w <package>
Shared Packages
When changing packages/types or packages/fhirtypes:
- Update the type definitions.
- Build the package you changed:
pnpm --filter @yosemite-crew/types build or pnpm --filter @yosemite-crew/fhirtypes build (both have a build script).
- All consumers (frontend, backend, mobile) pick up changes automatically via workspace links.
- Run type-check in each affected app.
Build Pipeline (Turbo)
turbo.json defines the task graph. Tasks run in dependency order automatically.
pnpm turbo build
pnpm turbo build --filter=frontend...
Pre-commit Hooks
Husky + commitlint are configured. Pre-commit runs lint + type-check. Commit messages must follow conventional commits:
<type>(<scope>): <subject>
Types: feat | fix | chore | refactor | test | docs | style | perf | ci
Scope allowlist is defined centrally in root AGENTS.md and enforced by commitlint.config.cjs.
Never skip hooks with --no-verify.
Secrets Check
secretlint runs on commit. Never commit .env files, API keys, tokens, or private keys.
pnpm run check:secrets
Gotchas
pnpm install at the root installs all workspaces. Never run npm install or yarn — pnpm only.
- Hoisting: some packages are hoisted to root
node_modules, others are not. If you see resolution errors, check pnpm-workspace.yaml.
- Lock file: always commit
pnpm-lock.yaml changes. Never ignore it.
- If turbo cache causes stale output:
pnpm turbo build --force to bypass cache.