{"owner":"teambit","repo":"bit","hasSkills":true,"totalSkillsCount":11,"totalTokensCount":7196,"categories":["anthropic-skill","claude-rule"],"hasMcp":false,"mcpConfig":null,"found":["contrib/claude-skill-bit-cli/SKILL.md","components/legacy/e2e-helper/excluded-fixtures/extensions/multiple-compilers-env/babel.config.json","components/legacy/e2e-helper/excluded-fixtures/extensions/multi-jest-testers-env/config/tsconfig.json","components/legacy/e2e-helper/excluded-fixtures/extensions/babel-env/babel.config.json","components/legacy/e2e-helper/excluded-fixtures/extensions/multiple-compilers-env/ts/tsconfig.json","CLAUDE.md",".claude/skills/generate-release-notes/SKILL.md","components/legacy/e2e-helper/excluded-fixtures/extensions/mocha-only-test-env/config/tsconfig.json","components/legacy/e2e-helper/excluded-fixtures/extensions/invalid-jest-config-env/config/tsconfig.json","components/legacy/e2e-helper/excluded-fixtures/extensions/custom-react-env/typescript/tsconfig.json","components/legacy/e2e-helper/excluded-fixtures/extensions/custom-jest-resolve-env/config/tsconfig.json"],"skills":{"contrib/claude-skill-bit-cli/SKILL.md":"---\nname: bit-cli\ndescription: 'MUST consult before running ANY bit command. Do NOT guess bit commands from memory. This skill tells you the right command, correct syntax, subcommands, and flags.'\n---\n\n# Bit CLI Quick Reference\n\n<!-- This content is auto-generated by: bit cli generate --skill commands -->\n\nusage: bit [--version] [--help] <command> [<args>]\n\nbit documentation: https://bit.dev/\n\nSystem & Utility\nhelp - display available commands and usage information\nversion - display the installed Bit version\nconfig - manage Bit configuration settings\nSubcommands: set, del, get, list\nglobals - display global directories and paths used by Bit\nsystem <sub-command> - access system-level operations and debugging tools\nSubcommands: log, tail-log\ndoctor [diagnosis-name] - diagnose and troubleshoot workspace issues\nclear-cache - remove cached data to resolve stale data issues\ngc - remove objects from the local scope that are no longer needed\n\nWorkspace commands\ndetails - show expanded details from the last command that provided them (e.g. tag, snap)\n\nInformation & Analysis\nshow <component-name> - display component metadata, dependencies, and configuration\ncat <component-id> - print source files or config of a component at a specific version\ngraph [id] - visualize component dependencies as a graph image\npattern <pattern> - test and validate component patterns\nlist [remote-scope] - display components in workspace or remote scope\nsearch <query...> - search for components by keyword in the local workspace and remote bit cloud\nschema <pattern> - display component API schema and type definitions\nSubcommands: diff\ndiff [component-pattern] [version] [to-version] - compare component changes between versions or against the current workspace\nstatus - show workspace component status and issues\n\nComponent Configuration\nenvs - show components and their assigned environments\nSubcommands: list, get, set, unset, replace, update\nscope <sub-command> - manage component scope names and assignments\nSubcommands: set, trust, rename, rename-owner, fork\neject-conf <pattern> - create component.json configuration files for components\nlocal-only <sub-command> - manage components that exist only in the workspace\nSubcommands: set, unset, list\naspect <sub-command> - manage component aspects and their configurations\nSubcommands: list, list-core, get, set, unset, update\n\nCollaboration & Remote\nremote - manage remote scopes for self-hosted environments\nSubcommands: add, del, list\nripple <sub-command> - manage Ripple CI jobs on bit.cloud\nSubcommands: list, log, errors, retry, stop, simulate\nimport [component-patterns...] - bring components from remote scopes into your workspace\ndelete <component-pattern> - soft-delete components from remote scopes\nrecover <component-pattern> - restore soft-deleted components\nexport [component-patterns...] - upload components to remote scopes\nlane [sub-command] - manage lanes for parallel development\nSubcommands: list, show, create, remove, change-scope, alias, rename, remove-readme, import, remove-comp, fetch, eject, current, history, history-diff, checkout, revert, updates, merge-move\nci <sub-command> - continuous integration commands for automated workflows\nSubcommands: verify, pr, merge, sync\ndeprecate <component-pattern> - mark components as deprecated to discourage their use\nundeprecate <component-pattern> - remove the deprecation status from components\nfork <pattern> [target-component-name] - create a new component by copying from an existing one\ninternalize [component-pattern] - mark components as internal to hide them by default in the UI\n\nRun & Serve\nstart [component-pattern] - launch the Bit development server\nrun [app-name] - start an application component locally\napp [sub-command] - manage application components\nSubcommands: list, run\n\nAdvanced/Debug\ncapsule - manage isolated component environments\nSubcommands: list, create, delete, prune\nmcp-server [sub-command] - start Model Context Protocol server for AI assistants\nSubcommands: start, setup, rules\n\nDevelop components\nscript [script-name] - run a script defined by the environment\n\nAuthentication & Cloud\nlogin - authenticate with Bit Cloud for component publishing and collaboration\nlogout - sign out of Bit Cloud and clear authentication tokens\nwhoami - display the currently authenticated Bit Cloud user\nnpmrc [sub-command] - configure .npmrc file with Bit Cloud registry and authentication settings\nSubcommands: generate\n\nWorkspace Tools\nws-config <sub-command> - generate IDE configuration files\nSubcommands: write, clean, list\ngit <sub-command> - Git utilities for Bit repositories\nSubcommands: set-merge-driver\nrefactor <sub-command> - automatically refactor component source code\nSubcommands: dependency-name\n\nComponent Development\nadd [path...] - track existing directory contents as new components in the workspace\ncreate <template-name> <component-names...> - scaffold new component(s) from a template (sources, config, and env)\ntemplates - list available templates for creating components and workspaces\nwatch - watch and compile components on file changes\nbuild [component-pattern] - run build pipeline tasks in isolated environments\ncompile [component-names...] - transpile component source files\nmove <current-component-dir> <new-component-dir> - relocate a component to a different directory\nremove <component-pattern> - untrack components from the workspace\nrename <current-name> <new-name> - change a component name\n\nTesting & Quality\nartifacts <component-pattern> - view and download build artifacts\ncheck-types [component-pattern] - validate TypeScript type correctness\ntest [pattern-or-test-file...] - run component tests\nlint [component-pattern] - analyze component code for issues and style violations\nvalidate [component-pattern] - run type-checking, linting, and testing in sequence\nformat [component-pattern] - auto-format component source code\n\nDependencies & Packages\ninstall [packages...] - install workspace dependencies\nuninstall [packages...] - remove dependencies from workspace\nupdate [package-patterns...] - update workspace dependencies to newer versions\nlink [component-names...] - create links between components and node_modules\neject <component-pattern> - remove component from workspace and install it as npm package\ndeps <sub-command> - manage component dependencies\nSubcommands: get, remove, unset, debug, set, reset, eject, blame, usage, diagnose, circular, write\nwhy <dependency-name> - find components that use the specified dependency\nset-peer <component-id> <range> - configure component to always be installed as peer dependency\nunset-peer <component-id> - remove always-peer configuration from component\ndependents <component-name> - show components that depend on the specified component\n\nVersion Control\ncheckout <to> [component-pattern] - switch between component versions or remove local changes\nrevert <component-pattern> <to> - replace component files with specified version while preserving current version\ntag [component-patterns...] - create immutable component snapshots with semantic version tags\nsnap [component-pattern] - create immutable component snapshots for development versions\nreset [component-pattern] - revert local tags and snaps to previous versions\nmerge [component-pattern] - merge diverged component history when local and remote have different versions\nstash <sub-command> - temporarily save and restore component changes\nSubcommands: save, load, list\nlog <id> - display component version history\nlog-file <filepath> - EXPERIMENTAL. display history of changes to a specific file\nblame <filepath> - EXPERIMENTAL. show line-by-line authorship and modification history\n\nWorkspace & Project Setup\ninit [path] - initialize a Bit workspace in an existing project\nnew <template-name> <workspace-name> - create a new Bit workspace from a template\nclone <component-id> [dir] - create a workspace from its workspace-root component, with every component it lists\n\nIMPORTANT: When you need flags, arguments, or subcommand details, READ the file CLI_REFERENCE.md in this same directory using the Read tool. Only fall back to 'bit <command> --help' if the reference file doesn't cover what you need.\n","components/legacy/e2e-helper/excluded-fixtures/extensions/multiple-compilers-env/babel.config.json":"{\n  \"presets\": [\"@babel/preset-env\", \"@babel/typescript\"],\n  \"plugins\": [\n    \"@babel/plugin-transform-class-properties\"\n  ],\n  \"sourceMaps\": true\n}\n","components/legacy/e2e-helper/excluded-fixtures/extensions/multi-jest-testers-env/config/tsconfig.json":"{\n  \"extends\": \"@teambit/react.react-env/config/tsconfig.json\",\n  \"compilerOptions\": {\n    // the base config sets moduleResolution \"node\" (node10), which TS6 reports as TS5107.\n    \"ignoreDeprecations\": \"6.0\",\n    // TS6 no longer picks up node_modules/@types automatically, so the jest globals\n    // (describe/it/expect) have to be requested by name.\n    \"types\": [\"jest\"]\n  },\n  \"exclude\": [\n    \"artifacts\",\n    \"public\",\n    \"dist\",\n    \"node_modules\",\n    \"package.json\",\n    \"**/*.cjs\"\n  ],\n  \"include\": [\"**/*\", \"**/*.json\"]\n}\n","components/legacy/e2e-helper/excluded-fixtures/extensions/babel-env/babel.config.json":"{\n  \"presets\": [\"@babel/preset-env\"],\n  \"sourceMaps\": true\n}","components/legacy/e2e-helper/excluded-fixtures/extensions/multiple-compilers-env/ts/tsconfig.json":"{\n  \"compilerOptions\": {\n    \"lib\": [\n      \"es2019\", \"DOM\", \"ES6\" ,\"DOM.Iterable\", \"ScriptHost\"\n    ],\n    \"target\": \"es2015\",\n    \"module\": \"commonjs\",\n    \"jsx\": \"react\",\n    \"composite\": true,\n    \"emitDeclarationOnly\": true,\n    \"declaration\": true,\n    \"sourceMap\": true,\n    \"skipLibCheck\": true,\n    \"outDir\": \"dist\",\n    \"esModuleInterop\": true,\n    \"experimentalDecorators\": true,\n    \"emitDecoratorMetadata\": true,\n    \"strictPropertyInitialization\": false,\n    \"strict\": true,\n    \"moduleResolution\": \"node\",\n    \"noImplicitAny\": false,\n    \"rootDir\": \".\",\n    \"removeComments\": true,\n    \"preserveConstEnums\": true,\n    \"resolveJsonModule\": true\n  },\n  \"exclude\": [\n    \"dist\"\n  ]\n}\n","CLAUDE.md":"# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## Additional Bit Workflow Instructions\n\nFor comprehensive Bit MCP workflow instructions and core principles, see: `.github/instructions/bit.instructions.md`\n\n## Public Repo Hygiene\n\nThis repo is open source. Commits, branch names, PR titles/descriptions, and PR comments are public.\n\n- **No private data**: Never use real component-ids, package names, scope/org names, or people's names (these often come from the prompt or from a bug report) in commits, PRs, or PR comments — they may be private. Use made-up placeholders instead (e.g. `my-org.my-scope/button`).\n- **No private commands**: Some internal `bit` commands are defined outside this repo and must not be mentioned publicly. Before naming a `bit` command in a commit, branch, or PR, verify it's defined here (`grep -rn \"name = '<command>\" scopes components`). If it isn't, describe the behavior instead (e.g. \"a lane merge from a bare scope\", \"snapping from a scope\"). Internal API names that live in this repo (e.g. `snapFromScope`, `mergeSnaps`) are fine to mention.\n\n## CLI Output Style Guide\n\nWhen modifying CLI command output, follow the style guide: `scopes/harmony/cli/cli-output-style-guide.md`\n\nUse the shared formatting toolkit from `@teambit/cli` (`scopes/harmony/cli/output-formatter.ts`) — never hardcode chalk styles for section titles or Unicode symbols.\n\n## Development Commands\n\n**IMPORTANT**: This repository practices \"dogfooding\" - Bit is built using Bit itself. Always use `bit` commands rather than direct npm/pnpm commands where possible.\n\n### Setup and Installation\n\n- `npm run full-setup` - Complete setup for the repository (installs dependencies, sets up husky, compiles)\n- `npm run setup` - Basic setup (bit install and compile)\n- `bit install` - Install dependencies (uses PNPM under the hood, never run `pnpm install` directly)\n- `npm run dev-link [alias]` - Creates a global symlink for the bit binary (default: bit-dev)\n\n### Build and Compilation\n\n- `bit compile` - Compile all components\n- `bit watch` - Watch for changes and compile automatically\n\n### Testing\n\n**IMPORTANT — prefer unit tests (`.spec.ts`) over e2e tests.** E2e tests are extremely expensive: they dominate CI time and are responsible for ~80% of our CircleCI credit spend. When adding test coverage:\n\n- Default to unit tests: `.spec.ts` files alongside the source, run with `bit test`.\n- Only write an e2e test when the scenario genuinely cannot be covered by a unit test — e.g. it requires a real workspace + remote scope and a flow spanning multiple bit commands (tag/export/import/lane flows).\n- Before creating a new e2e **file**, check if an existing e2e file already covers the area and add a `describe`/`it` there instead — each new file adds fixed setup overhead on CI.\n- Keep any e2e test minimal: fewest components, fewest commands, no redundant variations of the same flow.\n\n- `bit test` - Run unit tests for components/aspects\n- `bit test --debug` - Run unit tests in debug mode (prints workspace location, keeps workspaces)\n- `npm run e2e-test` - Run end-to-end tests (can take hours, usually run on CI)\n- `npm run e2e-test:debug` - Run e2e tests in debug mode (keeps workspaces, prints output)\n- `npm run mocha-circleci` - Run mocha tests with CircleCI configuration\n\n**Running specific e2e tests:**\n⚠️ **CRITICAL: ALWAYS add `.only` to the test before running e2e tests!** ⚠️\n\n- Add `.only` to the `describe` or `it` block (e.g., `describe.only(...)` or `it.only(...)`)\n- Then run `npm run e2e-test` or `npm run e2e-test:debug`\n- The `--grep` flag does NOT work reliably - you MUST use `.only`\n- Running without `.only` will execute the ENTIRE test suite which takes hours\n- Example: Change `describe('my test', ...)` to `describe.only('my test', ...)`\n\n**Bug reproduction testing:** When asked to reproduce a bug, first try to reproduce it with a unit test (`.spec.ts`) at the level of the component that owns the logic. Only fall back to an e2e test when the bug spans multiple bit commands or requires a real workspace/remote-scope flow. Never create test directories in the current workspace — you cannot create nested Bit workspaces; the e2e test helpers provide workspace creation methods that use temporary directories and automatically clean up after tests.\n\n### Linting and Formatting\n\n- `npm run lint` - Run Oxlint and TypeScript type checking (`tsc --noEmit`)\n- `npm run lint:fix` - Run Oxlint with auto-fix\n- `npm run format` - Format code with Prettier\n- `npm run prettier:check` - Check if code is formatted correctly\n\nLint rules live in `.oxlintrc.json`. ESLint has been fully removed from this repo's linting; the `eslint` packages remaining in `workspace.jsonc` are for `@teambit/defender.eslint-linter` which is shipped to Bit users' envs.\n\n**IMPORTANT**: After making code changes, always run `npm run lint` to verify. Do NOT run `npx tsc --noEmit` or `npx oxlint` directly — `npm run lint` is the canonical command and covers both type checking and linting for this repo.\n\n### Bit-specific Commands\n\n- `bit start` - Start the Bit UI for component development\n- `bit status` - Show workspace status\n- `bit compile` - Compile components\n- `bit test` - Run tests\n- `bit tag` - Tag components for release\n- `bit export` - Export components to remote scopes\n\n## Architecture Overview\n\n### Component System\n\nBit is built using a component-based architecture where the entire codebase is composed of reusable components. The system follows a modular approach with:\n\n- **Aspects**: Core building blocks that provide functionality across the system\n- **Scopes**: Organizational units that group related components\n- **Environments**: Define how components are built, tested, and bundled\n- **Capsules**: Isolated environments for component operations\n\n### Key Directories\n\n**Core Architecture:**\n\n- `scopes/` - Contains all aspects organized by domain (harmony, component, dependencies, etc.)\n- `components/` - Standalone components and utilities\n- `e2e/` - End-to-end tests organized by functionality\n\n**Important Scopes:**\n\n- `scopes/harmony/` - Core runtime and infrastructure aspects\n- `scopes/component/` - Component-related functionality\n- `scopes/compilation/` - Build and compilation aspects\n- `scopes/dependencies/` - Dependency management\n- `scopes/workspace/` - Workspace management\n- `scopes/scope/` - Remote scope operations\n\n### Aspect System\n\nEach aspect follows a standard structure:\n\n- `.aspect.ts` - Aspect definition and metadata\n- `.main.runtime.ts` - Main runtime implementation\n- `.ui.runtime.ts` - UI runtime implementation (if applicable)\n- `.docs.mdx` - Documentation\n- `.composition.tsx` - Component compositions for testing\n\n**New aspects must use the core-aspect env** (`teambit.harmony/envs/core-aspect-env`), like every other aspect here. No variant sets it, so a new component otherwise falls back to `teambit.harmony/node`. Pass it when creating the aspect: `bit create bit-aspect <name> --scope <scope> --env teambit.harmony/envs/core-aspect-env`. If the component was added with `bit add` (which has no env flag), run `bit envs set <component-id> teambit.harmony/envs/core-aspect-env` right after. Verify with `bit envs get <component-id>`. The same fallback hits any new component: give a non-aspect component the env of its siblings (e.g. `teambit.node/envs/node-babel-mocha` for `scopes/*/modules/*`, `teambit.node/envs/node-typescript-mocha` for `scopes/toolbox/*`).\n\n### Configuration\n\n- `workspace.jsonc` - Main workspace configuration\n- `package.json` - Node.js dependencies and scripts\n- `tsconfig.json` - TypeScript configuration\n- `.bitmap` - Component tracking (auto-generated)\n\n### Development Patterns\n\n**Dependency Management:**\n\n- Uses `bit install` which runs PNPM programmatically under the hood\n- Never run `pnpm install` directly - always use `bit install`\n- `bit install` performs multiple operations beyond just package installation\n- Strict peer dependency rules configured\n- Component dependencies managed through Bit's dependency resolver\n\n**Testing Strategy:**\n\n- Unit tests: `.spec.ts` files alongside source\n- E2E tests: Comprehensive scenarios in `e2e/` directory\n- Component compositions: Interactive examples in `.composition.tsx`\n\n**Build Process:**\n\n- TypeScript compilation with strict mode\n- Babel for transpilation\n- Webpack for bundling\n- Oxlint for linting with custom rules (configured in `.oxlintrc.json`)\n\n### Key Concepts\n\n**Bootstrap Flow:**\n\n1. User runs a Bit command\n2. Bit builds a graph of core aspects + workspace aspects\n3. All aspects are loaded and instantiated\n4. Aspects register CLI commands\n5. Command is parsed and executed\n\n**Component Lifecycle:**\n\n- Add/Create: Components added to workspace (.bitmap updated)\n- Tag/Snap: Components versioned and stored in scope\n- Export: Components published to remote scopes\n- Import: Components brought into workspace from remote scopes\n\n**Workspace vs Scope:**\n\n- Workspace: Development environment with source code\n- Scope: Storage for versioned components (local: `.bit/`, remote: Bit Cloud)\n\n## Development Notes\n\n### Environments\n\n- Components use environments for build, test, and bundle operations\n- Default environments: Node.js, React, Angular, Vue\n- Custom environments can be created by extending base environments\n\n### Debugging\n\n- Debug logs: `~/Library/Caches/Bit/logs/debug.log` (macOS)\n- Verbose logging: `BIT_LOG=*` prefix\n- Stack traces written to debug.log\n- Use `bit globals` to locate debug.log\n\n### Performance\n\n- Use `bit watch` for faster development cycles\n- E2E tests run in parallel on CI\n- Component compilation can be parallelized\n\n### Aspect Configuration\n\n- Aspects accept config as 2nd parameter in `provider` method: `provider(deps, config)`\n- Define TypeScript interface for config and inject into main class constructor\n- Configure in `workspace.jsonc` under aspect ID key\n",".claude/skills/generate-release-notes/SKILL.md":"---\nname: generate-release-notes\ndescription: Generate comprehensive release notes for Bit from git commits and pull requests. Use when creating release notes, building changelogs, documenting version releases, or preparing a new Bit release.\n---\n\n# Generate Release Notes for Bit\n\nThis skill helps generate release notes for Bit following the established patterns and guidelines.\n\n## Important: Intermediate Files\n\nAll intermediate steps must be saved to `releases-docs/temp-files/` for review. This folder is gitignored.\n\n**Required intermediate files:**\n\n1. `raw-commits.md` - Raw commit data from GitHub API\n2. `filtered-commits.md` - Two sections: filtered out commits and kept commits\n\n## Workflow\n\nFollow these steps to generate release notes:\n\n### Step 1: Setup Temp Directory\n\nFirst, ensure the temp directory exists:\n\n```bash\nmkdir -p releases-docs/temp-files\n```\n\n### Step 2: Determine the Commit Range\n\n1. **Get the latest release tag and commit:**\n\n   ```bash\n   # Get latest release tag\n   gh release view --repo teambit/bit --json tagName -q '.tagName'\n\n   # Get the commit SHA for the tag (handles annotated tags)\n   TAG=\"v1.12.158\"  # Replace with actual tag\n   TAG_REF=$(gh api \"repos/teambit/bit/git/refs/tags/$TAG\" -q '.object.sha')\n   TAG_TYPE=$(gh api \"repos/teambit/bit/git/refs/tags/$TAG\" -q '.object.type')\n\n   if [ \"$TAG_TYPE\" = \"tag\" ]; then\n       # Annotated tag - get the commit it points to\n       RELEASE_COMMIT=$(gh api \"repos/teambit/bit/git/tags/$TAG_REF\" -q '.object.sha')\n   else\n       # Lightweight tag - already have the commit\n       RELEASE_COMMIT=$TAG_REF\n   fi\n   ```\n\n2. **Determine the starting point:**\n   - If user provides a specific commit hash, use that as `FROM_COMMIT`\n   - If not provided, use `HEAD` (latest commit on master)\n\n### Step 3: Fetch Commits and Save to raw-commits.md\n\nUse the GitHub API to get commits between the release and the starting point:\n\n```bash\n# Compare commits between release and HEAD (or specific commit)\ngh api \"repos/teambit/bit/compare/${RELEASE_COMMIT}...${FROM_COMMIT}\" \\\n    --jq '.commits[] | \"\\(.sha[0:7]) | \\(.commit.message | split(\"\\n\")[0]) | \\(.commit.author.name)\"'\n```\n\n**Save the output to `releases-docs/temp-files/raw-commits.md`** with the following format:\n\n```markdown\n# Raw Commits\n\nGenerated: {DATE}\nFrom: {FROM_COMMIT or HEAD}\nTo: {RELEASE_TAG} ({RELEASE_COMMIT})\nTotal commits: {COUNT}\n\n## Commits\n\n| Hash    | Message                      | Author      |\n| ------- | ---------------------------- | ----------- |\n| abc1234 | feat: add new feature (#123) | Author Name |\n| def5678 | fix: resolve bug (#456)      | Author Name |\n\n...\n```\n\n### Step 4: Filter Commits and Save to filtered-commits.md\n\nAnalyze each commit and categorize into two groups:\n\n**FILTER OUT (do not include in release notes):**\n\n- Version bump commits: `bump teambit version to X.X.X [skip ci]`\n- CI-only changes: commits that only modify CircleCI config\n- Skip CI markers: commits with `[skip ci]` in the message\n- Auto-merge commits: `Merge branch 'X' into master`\n\n**KEEP (include in release notes):**\n\n- All feature commits (`feat:`)\n- All fix commits (`fix:`)\n- All performance commits (`perf:`)\n- Dependency updates (go in Internal section)\n- Refactoring commits (go in Internal section)\n\n**Save to `releases-docs/temp-files/filtered-commits.md`** with the following format:\n\n```markdown\n# Filtered Commits\n\nGenerated: {DATE}\n\n## Filtered Out ({COUNT} commits)\n\nThese commits are excluded from the release notes:\n\n| Hash    | Message                                   | Reason       |\n| ------- | ----------------------------------------- | ------------ |\n| abc1234 | bump teambit version to 1.13.5 [skip ci]  | Version bump |\n| def5678 | ci, temporarily set tag to increment by 2 | CI change    |\n\n...\n\n## Kept for Release Notes ({COUNT} commits)\n\nThese commits will be included in the release notes:\n\n| Hash    | Message                         | Category     |\n| ------- | ------------------------------- | ------------ |\n| ghi9012 | feat: add new command (#123)    | New Features |\n| jkl3456 | fix: resolve issue (#456)       | Bug Fixes    |\n| mno7890 | chore(deps): bump lodash (#789) | Internal     |\n\n...\n```\n\n### Step 5: Enrich Commit Information\n\nFor commits that are merge commits or have unclear messages, fetch PR details:\n\n```bash\n# Get PR details by number\ngh pr view 12345 --repo teambit/bit --json title,body,labels\n\n# Search for PR by commit\ngh pr list --repo teambit/bit --search \"SHA_HERE\" --state merged --json number,title,body\n```\n\nLook for:\n\n- PR title and description\n- Labels (feat, fix, perf, etc.)\n- Related issues\n\n### Step 6: Categorize Changes\n\nGroup the KEPT commits into these categories based on content:\n\n| Category         | Indicators                                                                        |\n| ---------------- | --------------------------------------------------------------------------------- |\n| **New Features** | New commands, new major functionality, \"Introduce\", \"feat:\" prefix                |\n| **Improvements** | Enhancements, \"Support\", \"Allow\", \"Add option\", improvements to existing features |\n| **Performance**  | \"Optimize\", \"perf:\", \"Reduce memory\", \"Speed up\", \"Improve performance\"           |\n| **Bug Fixes**    | \"Fix\", \"fix:\", bug corrections, issue resolutions                                 |\n| **Internal**     | Dependency updates, refactoring, CI changes, code cleanup, test improvements      |\n\n### Step 7: Write Release Notes\n\nFollow the guidelines in `releases-docs/guideline.md`:\n\n1. **Section Order:** New Features → Improvements → Performance → Bug Fixes → Internal\n2. **Only include sections that have content**\n3. **Format each item:**\n   - Start with a verb (Fix, Add, Support, Improve, Introduce)\n   - Include PR numbers at the end: `(#1234)` or `(#1234, #1235)`\n   - Use backticks for: commands, flags, file names, config properties\n   - Use **bold** for major feature names\n\n### Step 8: Save the Release Notes\n\nSave to `releases-docs/releases/` folder:\n\n- If version provided: `releases-docs/releases/v{VERSION}.md`\n- If no version: `releases-docs/releases/new-release.md`\n\n**Important:** Do NOT include the header metadata (title, tag, draft, etc.) - only the release content starting from the sections.\n\n## Example Output Format\n\n```markdown\n### New Features\n\n- New `bit validate` command to run a complete `test`, `lint`, `compile` and `typecheck` for a project (#10022)\n- **Bit Scripts** for simple shell commands or function execution for components (#10028)\n\n### Improvements\n\n- `bit recover` command now supports component and glob patterns (#10033)\n- Improve error messages in CLI (#10027, #9983)\n\n### Performance\n\n- Don't read and parse the lockfile multiple times for calculating deps graph (#10019)\n\n### Bug Fixes\n\n- Fix an issue where test duration had incorrect format (#9940)\n- Fix an issue where `bit new` wasn't resolving a remote env (#9981)\n\n### Internal\n\n- Update dependencies (#10018, #10015, #10006)\n- Modernize some legacy code (#10024, #10014)\n```\n\n## Output Files Summary\n\n| File                                | Location                    | Purpose                          |\n| ----------------------------------- | --------------------------- | -------------------------------- |\n| `raw-commits.md`                    | `releases-docs/temp-files/` | Raw commit data for review       |\n| `filtered-commits.md`               | `releases-docs/temp-files/` | Filtered/kept commits for review |\n| `v{VERSION}.md` or `new-release.md` | `releases-docs/releases/`   | Final release notes              |\n\n## Reference Files\n\n- **Guidelines:** `releases-docs/guideline.md` - Detailed formatting and style guidelines\n- **Examples:** `releases-docs/releases/` - Previous release notes for reference patterns\n\n## Helper Scripts (Optional)\n\nThe `releases-docs/scripts/` directory contains shell scripts for manual use:\n\n- `get-release-commits.sh [FROM_COMMIT] [TO_TAG]` - Fetches commits between releases\n- `filter-commits.sh` - Filters out uninteresting commits (pipe input to it)\n\nThese scripts are provided for manual/CLI use. When using this skill, Claude uses the `gh` API commands directly as they work from any directory without needing the local git repository.\n\n## Tips\n\n1. **Group related PRs** - Multiple PRs for the same feature should be one line item\n2. **Be concise** - Users scan release notes; keep items short and clear\n3. **Focus on user impact** - Describe what changed for the user, not implementation details\n4. **Check for typos** - Common in commit messages; fix them in release notes\n5. **Verify PR numbers** - Ensure all referenced PRs exist and are correct\n","components/legacy/e2e-helper/excluded-fixtures/extensions/mocha-only-test-env/config/tsconfig.json":"{\n  \"compilerOptions\": {\n    \"lib\": [\n      \"es2019\", \"DOM\", \"ES6\" ,\"DOM.Iterable\"\n    ],\n    \"target\": \"es2015\",\n    \"module\": \"es2020\",\n    \"jsx\": \"react\",\n    \"declaration\": true,\n    \"sourceMap\": true,\n    \"experimentalDecorators\": true,\n    \"skipLibCheck\": true,\n    \"moduleResolution\": \"node\",\n    // \"node\" is node10, which TS6 reports as the TS5107 deprecation error.\n    \"ignoreDeprecations\": \"6.0\",\n    // TS6 no longer picks up node_modules/@types automatically, so the mocha globals\n    // (describe/it/before) have to be requested by name.\n    \"types\": [\"mocha\"],\n    \"esModuleInterop\": true,\n    \"resolveJsonModule\": true,\n    \"allowJs\": true,\n    \"outDir\": \"./dist\"\n  },\n  \"exclude\": [\n    \"artifacts\",\n    \"public\",\n    \"dist\",\n    \"node_modules\",\n    \"package.json\",\n    \"**/*.cjs\"\n  ],\n  \"include\": [\n    \"**/*\",\n    \"**/*.json\"\n  ]\n}\n","components/legacy/e2e-helper/excluded-fixtures/extensions/invalid-jest-config-env/config/tsconfig.json":"{\n  \"extends\": \"@teambit/react.react-env/config/tsconfig.json\",\n  \"compilerOptions\": {\n    // the base config sets moduleResolution \"node\" (node10), which TS6 reports as TS5107.\n    \"ignoreDeprecations\": \"6.0\",\n    // TS6 no longer picks up node_modules/@types automatically, so the jest globals\n    // (describe/it/expect) have to be requested by name.\n    \"types\": [\"jest\"]\n  },\n  \"exclude\": [\n    \"artifacts\",\n    \"public\",\n    \"dist\",\n    \"node_modules\",\n    \"package.json\",\n    \"**/*.cjs\"\n  ],\n  \"include\": [\"**/*\", \"**/*.json\"]\n}\n","components/legacy/e2e-helper/excluded-fixtures/extensions/custom-react-env/typescript/tsconfig.json":"{\n  // add your compiler options here\n\n  \"compilerOptions\": {\n    // \"target\": \"es2017\",\n    // \"module\": \"es2015\",\n    // \"moduleResolution\": \"node\",\n    // \"lib\": [\"es2017\", \"dom\"],\n    // \"experimentalDecorators\": true,\n    // \"esModuleInterop\": true,\n    // \"outDir\": \"dist\",\n    // \"sourceMap\": true,\n    // \"emitDecoratorMetadata\": true,\n    // \"allowJs\": true,\n    // \"baseUrl\": \".\",\n    // \"jsx\": \"react\"\n  }\n}\n","components/legacy/e2e-helper/excluded-fixtures/extensions/custom-jest-resolve-env/config/tsconfig.json":"{\n  \"extends\": \"@teambit/react.react-env/config/tsconfig.json\",\n  \"compilerOptions\": {\n    // the base config sets moduleResolution \"node\" (node10), which TS6 reports as TS5107.\n    \"ignoreDeprecations\": \"6.0\",\n    // TS6 no longer picks up node_modules/@types automatically, so the jest globals\n    // (describe/it/expect) have to be requested by name.\n    \"types\": [\"jest\"]\n  },\n  \"exclude\": [\n    \"artifacts\",\n    \"public\",\n    \"dist\",\n    \"node_modules\",\n    \"package.json\",\n    \"**/*.cjs\"\n  ],\n  \"include\": [\"**/*\", \"**/*.json\"]\n}\n"},"files":{"contrib/claude-skill-bit-cli/SKILL.md":"---\nname: bit-cli\ndescription: 'MUST consult before running ANY bit command. Do NOT guess bit commands from memory. This skill tells you the right command, correct syntax, subcommands, and flags.'\n---\n\n# Bit CLI Quick Reference\n\n<!-- This content is auto-generated by: bit cli generate --skill commands -->\n\nusage: bit [--version] [--help] <command> [<args>]\n\nbit documentation: https://bit.dev/\n\nSystem & Utility\nhelp - display available commands and usage information\nversion - display the installed Bit version\nconfig - manage Bit configuration settings\nSubcommands: set, del, get, list\nglobals - display global directories and paths used by Bit\nsystem <sub-command> - access system-level operations and debugging tools\nSubcommands: log, tail-log\ndoctor [diagnosis-name] - diagnose and troubleshoot workspace issues\nclear-cache - remove cached data to resolve stale data issues\ngc - remove objects from the local scope that are no longer needed\n\nWorkspace commands\ndetails - show expanded details from the last command that provided them (e.g. tag, snap)\n\nInformation & Analysis\nshow <component-name> - display component metadata, dependencies, and configuration\ncat <component-id> - print source files or config of a component at a specific version\ngraph [id] - visualize component dependencies as a graph image\npattern <pattern> - test and validate component patterns\nlist [remote-scope] - display components in workspace or remote scope\nsearch <query...> - search for components by keyword in the local workspace and remote bit cloud\nschema <pattern> - display component API schema and type definitions\nSubcommands: diff\ndiff [component-pattern] [version] [to-version] - compare component changes between versions or against the current workspace\nstatus - show workspace component status and issues\n\nComponent Configuration\nenvs - show components and their assigned environments\nSubcommands: list, get, set, unset, replace, update\nscope <sub-command> - manage component scope names and assignments\nSubcommands: set, trust, rename, rename-owner, fork\neject-conf <pattern> - create component.json configuration files for components\nlocal-only <sub-command> - manage components that exist only in the workspace\nSubcommands: set, unset, list\naspect <sub-command> - manage component aspects and their configurations\nSubcommands: list, list-core, get, set, unset, update\n\nCollaboration & Remote\nremote - manage remote scopes for self-hosted environments\nSubcommands: add, del, list\nripple <sub-command> - manage Ripple CI jobs on bit.cloud\nSubcommands: list, log, errors, retry, stop, simulate\nimport [component-patterns...] - bring components from remote scopes into your workspace\ndelete <component-pattern> - soft-delete components from remote scopes\nrecover <component-pattern> - restore soft-deleted components\nexport [component-patterns...] - upload components to remote scopes\nlane [sub-command] - manage lanes for parallel development\nSubcommands: list, show, create, remove, change-scope, alias, rename, remove-readme, import, remove-comp, fetch, eject, current, history, history-diff, checkout, revert, updates, merge-move\nci <sub-command> - continuous integration commands for automated workflows\nSubcommands: verify, pr, merge, sync\ndeprecate <component-pattern> - mark components as deprecated to discourage their use\nundeprecate <component-pattern> - remove the deprecation status from components\nfork <pattern> [target-component-name] - create a new component by copying from an existing one\ninternalize [component-pattern] - mark components as internal to hide them by default in the UI\n\nRun & Serve\nstart [component-pattern] - launch the Bit development server\nrun [app-name] - start an application component locally\napp [sub-command] - manage application components\nSubcommands: list, run\n\nAdvanced/Debug\ncapsule - manage isolated component environments\nSubcommands: list, create, delete, prune\nmcp-server [sub-command] - start Model Context Protocol server for AI assistants\nSubcommands: start, setup, rules\n\nDevelop components\nscript [script-name] - run a script defined by the environment\n\nAuthentication & Cloud\nlogin - authenticate with Bit Cloud for component publishing and collaboration\nlogout - sign out of Bit Cloud and clear authentication tokens\nwhoami - display the currently authenticated Bit Cloud user\nnpmrc [sub-command] - configure .npmrc file with Bit Cloud registry and authentication settings\nSubcommands: generate\n\nWorkspace Tools\nws-config <sub-command> - generate IDE configuration files\nSubcommands: write, clean, list\ngit <sub-command> - Git utilities for Bit repositories\nSubcommands: set-merge-driver\nrefactor <sub-command> - automatically refactor component source code\nSubcommands: dependency-name\n\nComponent Development\nadd [path...] - track existing directory contents as new components in the workspace\ncreate <template-name> <component-names...> - scaffold new component(s) from a template (sources, config, and env)\ntemplates - list available templates for creating components and workspaces\nwatch - watch and compile components on file changes\nbuild [component-pattern] - run build pipeline tasks in isolated environments\ncompile [component-names...] - transpile component source files\nmove <current-component-dir> <new-component-dir> - relocate a component to a different directory\nremove <component-pattern> - untrack components from the workspace\nrename <current-name> <new-name> - change a component name\n\nTesting & Quality\nartifacts <component-pattern> - view and download build artifacts\ncheck-types [component-pattern] - validate TypeScript type correctness\ntest [pattern-or-test-file...] - run component tests\nlint [component-pattern] - analyze component code for issues and style violations\nvalidate [component-pattern] - run type-checking, linting, and testing in sequence\nformat [component-pattern] - auto-format component source code\n\nDependencies & Packages\ninstall [packages...] - install workspace dependencies\nuninstall [packages...] - remove dependencies from workspace\nupdate [package-patterns...] - update workspace dependencies to newer versions\nlink [component-names...] - create links between components and node_modules\neject <component-pattern> - remove component from workspace and install it as npm package\ndeps <sub-command> - manage component dependencies\nSubcommands: get, remove, unset, debug, set, reset, eject, blame, usage, diagnose, circular, write\nwhy <dependency-name> - find components that use the specified dependency\nset-peer <component-id> <range> - configure component to always be installed as peer dependency\nunset-peer <component-id> - remove always-peer configuration from component\ndependents <component-name> - show components that depend on the specified component\n\nVersion Control\ncheckout <to> [component-pattern] - switch between component versions or remove local changes\nrevert <component-pattern> <to> - replace component files with specified version while preserving current version\ntag [component-patterns...] - create immutable component snapshots with semantic version tags\nsnap [component-pattern] - create immutable component snapshots for development versions\nreset [component-pattern] - revert local tags and snaps to previous versions\nmerge [component-pattern] - merge diverged component history when local and remote have different versions\nstash <sub-command> - temporarily save and restore component changes\nSubcommands: save, load, list\nlog <id> - display component version history\nlog-file <filepath> - EXPERIMENTAL. display history of changes to a specific file\nblame <filepath> - EXPERIMENTAL. show line-by-line authorship and modification history\n\nWorkspace & Project Setup\ninit [path] - initialize a Bit workspace in an existing project\nnew <template-name> <workspace-name> - create a new Bit workspace from a template\nclone <component-id> [dir] - create a workspace from its workspace-root component, with every component it lists\n\nIMPORTANT: When you need flags, arguments, or subcommand details, READ the file CLI_REFERENCE.md in this same directory using the Read tool. Only fall back to 'bit <command> --help' if the reference file doesn't cover what you need.\n","components/legacy/e2e-helper/excluded-fixtures/extensions/multiple-compilers-env/babel.config.json":"{\n  \"presets\": [\"@babel/preset-env\", \"@babel/typescript\"],\n  \"plugins\": [\n    \"@babel/plugin-transform-class-properties\"\n  ],\n  \"sourceMaps\": true\n}\n","components/legacy/e2e-helper/excluded-fixtures/extensions/multi-jest-testers-env/config/tsconfig.json":"{\n  \"extends\": \"@teambit/react.react-env/config/tsconfig.json\",\n  \"compilerOptions\": {\n    // the base config sets moduleResolution \"node\" (node10), which TS6 reports as TS5107.\n    \"ignoreDeprecations\": \"6.0\",\n    // TS6 no longer picks up node_modules/@types automatically, so the jest globals\n    // (describe/it/expect) have to be requested by name.\n    \"types\": [\"jest\"]\n  },\n  \"exclude\": [\n    \"artifacts\",\n    \"public\",\n    \"dist\",\n    \"node_modules\",\n    \"package.json\",\n    \"**/*.cjs\"\n  ],\n  \"include\": [\"**/*\", \"**/*.json\"]\n}\n","components/legacy/e2e-helper/excluded-fixtures/extensions/babel-env/babel.config.json":"{\n  \"presets\": [\"@babel/preset-env\"],\n  \"sourceMaps\": true\n}","components/legacy/e2e-helper/excluded-fixtures/extensions/multiple-compilers-env/ts/tsconfig.json":"{\n  \"compilerOptions\": {\n    \"lib\": [\n      \"es2019\", \"DOM\", \"ES6\" ,\"DOM.Iterable\", \"ScriptHost\"\n    ],\n    \"target\": \"es2015\",\n    \"module\": \"commonjs\",\n    \"jsx\": \"react\",\n    \"composite\": true,\n    \"emitDeclarationOnly\": true,\n    \"declaration\": true,\n    \"sourceMap\": true,\n    \"skipLibCheck\": true,\n    \"outDir\": \"dist\",\n    \"esModuleInterop\": true,\n    \"experimentalDecorators\": true,\n    \"emitDecoratorMetadata\": true,\n    \"strictPropertyInitialization\": false,\n    \"strict\": true,\n    \"moduleResolution\": \"node\",\n    \"noImplicitAny\": false,\n    \"rootDir\": \".\",\n    \"removeComments\": true,\n    \"preserveConstEnums\": true,\n    \"resolveJsonModule\": true\n  },\n  \"exclude\": [\n    \"dist\"\n  ]\n}\n","CLAUDE.md":"# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## Additional Bit Workflow Instructions\n\nFor comprehensive Bit MCP workflow instructions and core principles, see: `.github/instructions/bit.instructions.md`\n\n## Public Repo Hygiene\n\nThis repo is open source. Commits, branch names, PR titles/descriptions, and PR comments are public.\n\n- **No private data**: Never use real component-ids, package names, scope/org names, or people's names (these often come from the prompt or from a bug report) in commits, PRs, or PR comments — they may be private. Use made-up placeholders instead (e.g. `my-org.my-scope/button`).\n- **No private commands**: Some internal `bit` commands are defined outside this repo and must not be mentioned publicly. Before naming a `bit` command in a commit, branch, or PR, verify it's defined here (`grep -rn \"name = '<command>\" scopes components`). If it isn't, describe the behavior instead (e.g. \"a lane merge from a bare scope\", \"snapping from a scope\"). Internal API names that live in this repo (e.g. `snapFromScope`, `mergeSnaps`) are fine to mention.\n\n## CLI Output Style Guide\n\nWhen modifying CLI command output, follow the style guide: `scopes/harmony/cli/cli-output-style-guide.md`\n\nUse the shared formatting toolkit from `@teambit/cli` (`scopes/harmony/cli/output-formatter.ts`) — never hardcode chalk styles for section titles or Unicode symbols.\n\n## Development Commands\n\n**IMPORTANT**: This repository practices \"dogfooding\" - Bit is built using Bit itself. Always use `bit` commands rather than direct npm/pnpm commands where possible.\n\n### Setup and Installation\n\n- `npm run full-setup` - Complete setup for the repository (installs dependencies, sets up husky, compiles)\n- `npm run setup` - Basic setup (bit install and compile)\n- `bit install` - Install dependencies (uses PNPM under the hood, never run `pnpm install` directly)\n- `npm run dev-link [alias]` - Creates a global symlink for the bit binary (default: bit-dev)\n\n### Build and Compilation\n\n- `bit compile` - Compile all components\n- `bit watch` - Watch for changes and compile automatically\n\n### Testing\n\n**IMPORTANT — prefer unit tests (`.spec.ts`) over e2e tests.** E2e tests are extremely expensive: they dominate CI time and are responsible for ~80% of our CircleCI credit spend. When adding test coverage:\n\n- Default to unit tests: `.spec.ts` files alongside the source, run with `bit test`.\n- Only write an e2e test when the scenario genuinely cannot be covered by a unit test — e.g. it requires a real workspace + remote scope and a flow spanning multiple bit commands (tag/export/import/lane flows).\n- Before creating a new e2e **file**, check if an existing e2e file already covers the area and add a `describe`/`it` there instead — each new file adds fixed setup overhead on CI.\n- Keep any e2e test minimal: fewest components, fewest commands, no redundant variations of the same flow.\n\n- `bit test` - Run unit tests for components/aspects\n- `bit test --debug` - Run unit tests in debug mode (prints workspace location, keeps workspaces)\n- `npm run e2e-test` - Run end-to-end tests (can take hours, usually run on CI)\n- `npm run e2e-test:debug` - Run e2e tests in debug mode (keeps workspaces, prints output)\n- `npm run mocha-circleci` - Run mocha tests with CircleCI configuration\n\n**Running specific e2e tests:**\n⚠️ **CRITICAL: ALWAYS add `.only` to the test before running e2e tests!** ⚠️\n\n- Add `.only` to the `describe` or `it` block (e.g., `describe.only(...)` or `it.only(...)`)\n- Then run `npm run e2e-test` or `npm run e2e-test:debug`\n- The `--grep` flag does NOT work reliably - you MUST use `.only`\n- Running without `.only` will execute the ENTIRE test suite which takes hours\n- Example: Change `describe('my test', ...)` to `describe.only('my test', ...)`\n\n**Bug reproduction testing:** When asked to reproduce a bug, first try to reproduce it with a unit test (`.spec.ts`) at the level of the component that owns the logic. Only fall back to an e2e test when the bug spans multiple bit commands or requires a real workspace/remote-scope flow. Never create test directories in the current workspace — you cannot create nested Bit workspaces; the e2e test helpers provide workspace creation methods that use temporary directories and automatically clean up after tests.\n\n### Linting and Formatting\n\n- `npm run lint` - Run Oxlint and TypeScript type checking (`tsc --noEmit`)\n- `npm run lint:fix` - Run Oxlint with auto-fix\n- `npm run format` - Format code with Prettier\n- `npm run prettier:check` - Check if code is formatted correctly\n\nLint rules live in `.oxlintrc.json`. ESLint has been fully removed from this repo's linting; the `eslint` packages remaining in `workspace.jsonc` are for `@teambit/defender.eslint-linter` which is shipped to Bit users' envs.\n\n**IMPORTANT**: After making code changes, always run `npm run lint` to verify. Do NOT run `npx tsc --noEmit` or `npx oxlint` directly — `npm run lint` is the canonical command and covers both type checking and linting for this repo.\n\n### Bit-specific Commands\n\n- `bit start` - Start the Bit UI for component development\n- `bit status` - Show workspace status\n- `bit compile` - Compile components\n- `bit test` - Run tests\n- `bit tag` - Tag components for release\n- `bit export` - Export components to remote scopes\n\n## Architecture Overview\n\n### Component System\n\nBit is built using a component-based architecture where the entire codebase is composed of reusable components. The system follows a modular approach with:\n\n- **Aspects**: Core building blocks that provide functionality across the system\n- **Scopes**: Organizational units that group related components\n- **Environments**: Define how components are built, tested, and bundled\n- **Capsules**: Isolated environments for component operations\n\n### Key Directories\n\n**Core Architecture:**\n\n- `scopes/` - Contains all aspects organized by domain (harmony, component, dependencies, etc.)\n- `components/` - Standalone components and utilities\n- `e2e/` - End-to-end tests organized by functionality\n\n**Important Scopes:**\n\n- `scopes/harmony/` - Core runtime and infrastructure aspects\n- `scopes/component/` - Component-related functionality\n- `scopes/compilation/` - Build and compilation aspects\n- `scopes/dependencies/` - Dependency management\n- `scopes/workspace/` - Workspace management\n- `scopes/scope/` - Remote scope operations\n\n### Aspect System\n\nEach aspect follows a standard structure:\n\n- `.aspect.ts` - Aspect definition and metadata\n- `.main.runtime.ts` - Main runtime implementation\n- `.ui.runtime.ts` - UI runtime implementation (if applicable)\n- `.docs.mdx` - Documentation\n- `.composition.tsx` - Component compositions for testing\n\n**New aspects must use the core-aspect env** (`teambit.harmony/envs/core-aspect-env`), like every other aspect here. No variant sets it, so a new component otherwise falls back to `teambit.harmony/node`. Pass it when creating the aspect: `bit create bit-aspect <name> --scope <scope> --env teambit.harmony/envs/core-aspect-env`. If the component was added with `bit add` (which has no env flag), run `bit envs set <component-id> teambit.harmony/envs/core-aspect-env` right after. Verify with `bit envs get <component-id>`. The same fallback hits any new component: give a non-aspect component the env of its siblings (e.g. `teambit.node/envs/node-babel-mocha` for `scopes/*/modules/*`, `teambit.node/envs/node-typescript-mocha` for `scopes/toolbox/*`).\n\n### Configuration\n\n- `workspace.jsonc` - Main workspace configuration\n- `package.json` - Node.js dependencies and scripts\n- `tsconfig.json` - TypeScript configuration\n- `.bitmap` - Component tracking (auto-generated)\n\n### Development Patterns\n\n**Dependency Management:**\n\n- Uses `bit install` which runs PNPM programmatically under the hood\n- Never run `pnpm install` directly - always use `bit install`\n- `bit install` performs multiple operations beyond just package installation\n- Strict peer dependency rules configured\n- Component dependencies managed through Bit's dependency resolver\n\n**Testing Strategy:**\n\n- Unit tests: `.spec.ts` files alongside source\n- E2E tests: Comprehensive scenarios in `e2e/` directory\n- Component compositions: Interactive examples in `.composition.tsx`\n\n**Build Process:**\n\n- TypeScript compilation with strict mode\n- Babel for transpilation\n- Webpack for bundling\n- Oxlint for linting with custom rules (configured in `.oxlintrc.json`)\n\n### Key Concepts\n\n**Bootstrap Flow:**\n\n1. User runs a Bit command\n2. Bit builds a graph of core aspects + workspace aspects\n3. All aspects are loaded and instantiated\n4. Aspects register CLI commands\n5. Command is parsed and executed\n\n**Component Lifecycle:**\n\n- Add/Create: Components added to workspace (.bitmap updated)\n- Tag/Snap: Components versioned and stored in scope\n- Export: Components published to remote scopes\n- Import: Components brought into workspace from remote scopes\n\n**Workspace vs Scope:**\n\n- Workspace: Development environment with source code\n- Scope: Storage for versioned components (local: `.bit/`, remote: Bit Cloud)\n\n## Development Notes\n\n### Environments\n\n- Components use environments for build, test, and bundle operations\n- Default environments: Node.js, React, Angular, Vue\n- Custom environments can be created by extending base environments\n\n### Debugging\n\n- Debug logs: `~/Library/Caches/Bit/logs/debug.log` (macOS)\n- Verbose logging: `BIT_LOG=*` prefix\n- Stack traces written to debug.log\n- Use `bit globals` to locate debug.log\n\n### Performance\n\n- Use `bit watch` for faster development cycles\n- E2E tests run in parallel on CI\n- Component compilation can be parallelized\n\n### Aspect Configuration\n\n- Aspects accept config as 2nd parameter in `provider` method: `provider(deps, config)`\n- Define TypeScript interface for config and inject into main class constructor\n- Configure in `workspace.jsonc` under aspect ID key\n",".claude/skills/generate-release-notes/SKILL.md":"---\nname: generate-release-notes\ndescription: Generate comprehensive release notes for Bit from git commits and pull requests. Use when creating release notes, building changelogs, documenting version releases, or preparing a new Bit release.\n---\n\n# Generate Release Notes for Bit\n\nThis skill helps generate release notes for Bit following the established patterns and guidelines.\n\n## Important: Intermediate Files\n\nAll intermediate steps must be saved to `releases-docs/temp-files/` for review. This folder is gitignored.\n\n**Required intermediate files:**\n\n1. `raw-commits.md` - Raw commit data from GitHub API\n2. `filtered-commits.md` - Two sections: filtered out commits and kept commits\n\n## Workflow\n\nFollow these steps to generate release notes:\n\n### Step 1: Setup Temp Directory\n\nFirst, ensure the temp directory exists:\n\n```bash\nmkdir -p releases-docs/temp-files\n```\n\n### Step 2: Determine the Commit Range\n\n1. **Get the latest release tag and commit:**\n\n   ```bash\n   # Get latest release tag\n   gh release view --repo teambit/bit --json tagName -q '.tagName'\n\n   # Get the commit SHA for the tag (handles annotated tags)\n   TAG=\"v1.12.158\"  # Replace with actual tag\n   TAG_REF=$(gh api \"repos/teambit/bit/git/refs/tags/$TAG\" -q '.object.sha')\n   TAG_TYPE=$(gh api \"repos/teambit/bit/git/refs/tags/$TAG\" -q '.object.type')\n\n   if [ \"$TAG_TYPE\" = \"tag\" ]; then\n       # Annotated tag - get the commit it points to\n       RELEASE_COMMIT=$(gh api \"repos/teambit/bit/git/tags/$TAG_REF\" -q '.object.sha')\n   else\n       # Lightweight tag - already have the commit\n       RELEASE_COMMIT=$TAG_REF\n   fi\n   ```\n\n2. **Determine the starting point:**\n   - If user provides a specific commit hash, use that as `FROM_COMMIT`\n   - If not provided, use `HEAD` (latest commit on master)\n\n### Step 3: Fetch Commits and Save to raw-commits.md\n\nUse the GitHub API to get commits between the release and the starting point:\n\n```bash\n# Compare commits between release and HEAD (or specific commit)\ngh api \"repos/teambit/bit/compare/${RELEASE_COMMIT}...${FROM_COMMIT}\" \\\n    --jq '.commits[] | \"\\(.sha[0:7]) | \\(.commit.message | split(\"\\n\")[0]) | \\(.commit.author.name)\"'\n```\n\n**Save the output to `releases-docs/temp-files/raw-commits.md`** with the following format:\n\n```markdown\n# Raw Commits\n\nGenerated: {DATE}\nFrom: {FROM_COMMIT or HEAD}\nTo: {RELEASE_TAG} ({RELEASE_COMMIT})\nTotal commits: {COUNT}\n\n## Commits\n\n| Hash    | Message                      | Author      |\n| ------- | ---------------------------- | ----------- |\n| abc1234 | feat: add new feature (#123) | Author Name |\n| def5678 | fix: resolve bug (#456)      | Author Name |\n\n...\n```\n\n### Step 4: Filter Commits and Save to filtered-commits.md\n\nAnalyze each commit and categorize into two groups:\n\n**FILTER OUT (do not include in release notes):**\n\n- Version bump commits: `bump teambit version to X.X.X [skip ci]`\n- CI-only changes: commits that only modify CircleCI config\n- Skip CI markers: commits with `[skip ci]` in the message\n- Auto-merge commits: `Merge branch 'X' into master`\n\n**KEEP (include in release notes):**\n\n- All feature commits (`feat:`)\n- All fix commits (`fix:`)\n- All performance commits (`perf:`)\n- Dependency updates (go in Internal section)\n- Refactoring commits (go in Internal section)\n\n**Save to `releases-docs/temp-files/filtered-commits.md`** with the following format:\n\n```markdown\n# Filtered Commits\n\nGenerated: {DATE}\n\n## Filtered Out ({COUNT} commits)\n\nThese commits are excluded from the release notes:\n\n| Hash    | Message                                   | Reason       |\n| ------- | ----------------------------------------- | ------------ |\n| abc1234 | bump teambit version to 1.13.5 [skip ci]  | Version bump |\n| def5678 | ci, temporarily set tag to increment by 2 | CI change    |\n\n...\n\n## Kept for Release Notes ({COUNT} commits)\n\nThese commits will be included in the release notes:\n\n| Hash    | Message                         | Category     |\n| ------- | ------------------------------- | ------------ |\n| ghi9012 | feat: add new command (#123)    | New Features |\n| jkl3456 | fix: resolve issue (#456)       | Bug Fixes    |\n| mno7890 | chore(deps): bump lodash (#789) | Internal     |\n\n...\n```\n\n### Step 5: Enrich Commit Information\n\nFor commits that are merge commits or have unclear messages, fetch PR details:\n\n```bash\n# Get PR details by number\ngh pr view 12345 --repo teambit/bit --json title,body,labels\n\n# Search for PR by commit\ngh pr list --repo teambit/bit --search \"SHA_HERE\" --state merged --json number,title,body\n```\n\nLook for:\n\n- PR title and description\n- Labels (feat, fix, perf, etc.)\n- Related issues\n\n### Step 6: Categorize Changes\n\nGroup the KEPT commits into these categories based on content:\n\n| Category         | Indicators                                                                        |\n| ---------------- | --------------------------------------------------------------------------------- |\n| **New Features** | New commands, new major functionality, \"Introduce\", \"feat:\" prefix                |\n| **Improvements** | Enhancements, \"Support\", \"Allow\", \"Add option\", improvements to existing features |\n| **Performance**  | \"Optimize\", \"perf:\", \"Reduce memory\", \"Speed up\", \"Improve performance\"           |\n| **Bug Fixes**    | \"Fix\", \"fix:\", bug corrections, issue resolutions                                 |\n| **Internal**     | Dependency updates, refactoring, CI changes, code cleanup, test improvements      |\n\n### Step 7: Write Release Notes\n\nFollow the guidelines in `releases-docs/guideline.md`:\n\n1. **Section Order:** New Features → Improvements → Performance → Bug Fixes → Internal\n2. **Only include sections that have content**\n3. **Format each item:**\n   - Start with a verb (Fix, Add, Support, Improve, Introduce)\n   - Include PR numbers at the end: `(#1234)` or `(#1234, #1235)`\n   - Use backticks for: commands, flags, file names, config properties\n   - Use **bold** for major feature names\n\n### Step 8: Save the Release Notes\n\nSave to `releases-docs/releases/` folder:\n\n- If version provided: `releases-docs/releases/v{VERSION}.md`\n- If no version: `releases-docs/releases/new-release.md`\n\n**Important:** Do NOT include the header metadata (title, tag, draft, etc.) - only the release content starting from the sections.\n\n## Example Output Format\n\n```markdown\n### New Features\n\n- New `bit validate` command to run a complete `test`, `lint`, `compile` and `typecheck` for a project (#10022)\n- **Bit Scripts** for simple shell commands or function execution for components (#10028)\n\n### Improvements\n\n- `bit recover` command now supports component and glob patterns (#10033)\n- Improve error messages in CLI (#10027, #9983)\n\n### Performance\n\n- Don't read and parse the lockfile multiple times for calculating deps graph (#10019)\n\n### Bug Fixes\n\n- Fix an issue where test duration had incorrect format (#9940)\n- Fix an issue where `bit new` wasn't resolving a remote env (#9981)\n\n### Internal\n\n- Update dependencies (#10018, #10015, #10006)\n- Modernize some legacy code (#10024, #10014)\n```\n\n## Output Files Summary\n\n| File                                | Location                    | Purpose                          |\n| ----------------------------------- | --------------------------- | -------------------------------- |\n| `raw-commits.md`                    | `releases-docs/temp-files/` | Raw commit data for review       |\n| `filtered-commits.md`               | `releases-docs/temp-files/` | Filtered/kept commits for review |\n| `v{VERSION}.md` or `new-release.md` | `releases-docs/releases/`   | Final release notes              |\n\n## Reference Files\n\n- **Guidelines:** `releases-docs/guideline.md` - Detailed formatting and style guidelines\n- **Examples:** `releases-docs/releases/` - Previous release notes for reference patterns\n\n## Helper Scripts (Optional)\n\nThe `releases-docs/scripts/` directory contains shell scripts for manual use:\n\n- `get-release-commits.sh [FROM_COMMIT] [TO_TAG]` - Fetches commits between releases\n- `filter-commits.sh` - Filters out uninteresting commits (pipe input to it)\n\nThese scripts are provided for manual/CLI use. When using this skill, Claude uses the `gh` API commands directly as they work from any directory without needing the local git repository.\n\n## Tips\n\n1. **Group related PRs** - Multiple PRs for the same feature should be one line item\n2. **Be concise** - Users scan release notes; keep items short and clear\n3. **Focus on user impact** - Describe what changed for the user, not implementation details\n4. **Check for typos** - Common in commit messages; fix them in release notes\n5. **Verify PR numbers** - Ensure all referenced PRs exist and are correct\n","components/legacy/e2e-helper/excluded-fixtures/extensions/mocha-only-test-env/config/tsconfig.json":"{\n  \"compilerOptions\": {\n    \"lib\": [\n      \"es2019\", \"DOM\", \"ES6\" ,\"DOM.Iterable\"\n    ],\n    \"target\": \"es2015\",\n    \"module\": \"es2020\",\n    \"jsx\": \"react\",\n    \"declaration\": true,\n    \"sourceMap\": true,\n    \"experimentalDecorators\": true,\n    \"skipLibCheck\": true,\n    \"moduleResolution\": \"node\",\n    // \"node\" is node10, which TS6 reports as the TS5107 deprecation error.\n    \"ignoreDeprecations\": \"6.0\",\n    // TS6 no longer picks up node_modules/@types automatically, so the mocha globals\n    // (describe/it/before) have to be requested by name.\n    \"types\": [\"mocha\"],\n    \"esModuleInterop\": true,\n    \"resolveJsonModule\": true,\n    \"allowJs\": true,\n    \"outDir\": \"./dist\"\n  },\n  \"exclude\": [\n    \"artifacts\",\n    \"public\",\n    \"dist\",\n    \"node_modules\",\n    \"package.json\",\n    \"**/*.cjs\"\n  ],\n  \"include\": [\n    \"**/*\",\n    \"**/*.json\"\n  ]\n}\n","components/legacy/e2e-helper/excluded-fixtures/extensions/invalid-jest-config-env/config/tsconfig.json":"{\n  \"extends\": \"@teambit/react.react-env/config/tsconfig.json\",\n  \"compilerOptions\": {\n    // the base config sets moduleResolution \"node\" (node10), which TS6 reports as TS5107.\n    \"ignoreDeprecations\": \"6.0\",\n    // TS6 no longer picks up node_modules/@types automatically, so the jest globals\n    // (describe/it/expect) have to be requested by name.\n    \"types\": [\"jest\"]\n  },\n  \"exclude\": [\n    \"artifacts\",\n    \"public\",\n    \"dist\",\n    \"node_modules\",\n    \"package.json\",\n    \"**/*.cjs\"\n  ],\n  \"include\": [\"**/*\", \"**/*.json\"]\n}\n","components/legacy/e2e-helper/excluded-fixtures/extensions/custom-react-env/typescript/tsconfig.json":"{\n  // add your compiler options here\n\n  \"compilerOptions\": {\n    // \"target\": \"es2017\",\n    // \"module\": \"es2015\",\n    // \"moduleResolution\": \"node\",\n    // \"lib\": [\"es2017\", \"dom\"],\n    // \"experimentalDecorators\": true,\n    // \"esModuleInterop\": true,\n    // \"outDir\": \"dist\",\n    // \"sourceMap\": true,\n    // \"emitDecoratorMetadata\": true,\n    // \"allowJs\": true,\n    // \"baseUrl\": \".\",\n    // \"jsx\": \"react\"\n  }\n}\n","components/legacy/e2e-helper/excluded-fixtures/extensions/custom-jest-resolve-env/config/tsconfig.json":"{\n  \"extends\": \"@teambit/react.react-env/config/tsconfig.json\",\n  \"compilerOptions\": {\n    // the base config sets moduleResolution \"node\" (node10), which TS6 reports as TS5107.\n    \"ignoreDeprecations\": \"6.0\",\n    // TS6 no longer picks up node_modules/@types automatically, so the jest globals\n    // (describe/it/expect) have to be requested by name.\n    \"types\": [\"jest\"]\n  },\n  \"exclude\": [\n    \"artifacts\",\n    \"public\",\n    \"dist\",\n    \"node_modules\",\n    \"package.json\",\n    \"**/*.cjs\"\n  ],\n  \"include\": [\"**/*\", \"**/*.json\"]\n}\n"},"items":[{"name":"SKILL.md","path":".claude/skills/generate-release-notes/SKILL.md","rawUrl":"https://raw.githubusercontent.com/teambit/bit/HEAD/.claude/skills/generate-release-notes/SKILL.md","title":"generate-release-notes","category":"anthropic-skill","format":"markdown","content":"---\nname: generate-release-notes\ndescription: Generate comprehensive release notes for Bit from git commits and pull requests. Use when creating release notes, building changelogs, documenting version releases, or preparing a new Bit release.\n---\n\n# Generate Release Notes for Bit\n\nThis skill helps generate release notes for Bit following the established patterns and guidelines.\n\n## Important: Intermediate Files\n\nAll intermediate steps must be saved to `releases-docs/temp-files/` for review. This folder is gitignored.\n\n**Required intermediate files:**\n\n1. `raw-commits.md` - Raw commit data from GitHub API\n2. `filtered-commits.md` - Two sections: filtered out commits and kept commits\n\n## Workflow\n\nFollow these steps to generate release notes:\n\n### Step 1: Setup Temp Directory\n\nFirst, ensure the temp directory exists:\n\n```bash\nmkdir -p releases-docs/temp-files\n```\n\n### Step 2: Determine the Commit Range\n\n1. **Get the latest release tag and commit:**\n\n   ```bash\n   # Get latest release tag\n   gh release view --repo teambit/bit --json tagName -q '.tagName'\n\n   # Get the commit SHA for the tag (handles annotated tags)\n   TAG=\"v1.12.158\"  # Replace with actual tag\n   TAG_REF=$(gh api \"repos/teambit/bit/git/refs/tags/$TAG\" -q '.object.sha')\n   TAG_TYPE=$(gh api \"repos/teambit/bit/git/refs/tags/$TAG\" -q '.object.type')\n\n   if [ \"$TAG_TYPE\" = \"tag\" ]; then\n       # Annotated tag - get the commit it points to\n       RELEASE_COMMIT=$(gh api \"repos/teambit/bit/git/tags/$TAG_REF\" -q '.object.sha')\n   else\n       # Lightweight tag - already have the commit\n       RELEASE_COMMIT=$TAG_REF\n   fi\n   ```\n\n2. **Determine the starting point:**\n   - If user provides a specific commit hash, use that as `FROM_COMMIT`\n   - If not provided, use `HEAD` (latest commit on master)\n\n### Step 3: Fetch Commits and Save to raw-commits.md\n\nUse the GitHub API to get commits between the release and the starting point:\n\n```bash\n# Compare commits between release and HEAD (or specific commit)\ngh api \"repos/teambit/bit/compare/${RELEASE_COMMIT}...${FROM_COMMIT}\" \\\n    --jq '.commits[] | \"\\(.sha[0:7]) | \\(.commit.message | split(\"\\n\")[0]) | \\(.commit.author.name)\"'\n```\n\n**Save the output to `releases-docs/temp-files/raw-commits.md`** with the following format:\n\n```markdown\n# Raw Commits\n\nGenerated: {DATE}\nFrom: {FROM_COMMIT or HEAD}\nTo: {RELEASE_TAG} ({RELEASE_COMMIT})\nTotal commits: {COUNT}\n\n## Commits\n\n| Hash    | Message                      | Author      |\n| ------- | ---------------------------- | ----------- |\n| abc1234 | feat: add new feature (#123) | Author Name |\n| def5678 | fix: resolve bug (#456)      | Author Name |\n\n...\n```\n\n### Step 4: Filter Commits and Save to filtered-commits.md\n\nAnalyze each commit and categorize into two groups:\n\n**FILTER OUT (do not include in release notes):**\n\n- Version bump commits: `bump teambit version to X.X.X [skip ci]`\n- CI-only changes: commits that only modify CircleCI config\n- Skip CI markers: commits with `[skip ci]` in the message\n- Auto-merge commits: `Merge branch 'X' into master`\n\n**KEEP (include in release notes):**\n\n- All feature commits (`feat:`)\n- All fix commits (`fix:`)\n- All performance commits (`perf:`)\n- Dependency updates (go in Internal section)\n- Refactoring commits (go in Internal section)\n\n**Save to `releases-docs/temp-files/filtered-commits.md`** with the following format:\n\n```markdown\n# Filtered Commits\n\nGenerated: {DATE}\n\n## Filtered Out ({COUNT} commits)\n\nThese commits are excluded from the release notes:\n\n| Hash    | Message                                   | Reason       |\n| ------- | ----------------------------------------- | ------------ |\n| abc1234 | bump teambit version to 1.13.5 [skip ci]  | Version bump |\n| def5678 | ci, temporarily set tag to increment by 2 | CI change    |\n\n...\n\n## Kept for Release Notes ({COUNT} commits)\n\nThese commits will be included in the release notes:\n\n| Hash    | Message                         | Category     |\n| ------- | ------------------------------- | ------------ |\n| ghi9012 | feat: add new command (#123)    | New Features |\n| jkl3456 | fix: resolve issue (#456)       | Bug Fixes    |\n| mno7890 | chore(deps): bump lodash (#789) | Internal     |\n\n...\n```\n\n### Step 5: Enrich Commit Information\n\nFor commits that are merge commits or have unclear messages, fetch PR details:\n\n```bash\n# Get PR details by number\ngh pr view 12345 --repo teambit/bit --json title,body,labels\n\n# Search for PR by commit\ngh pr list --repo teambit/bit --search \"SHA_HERE\" --state merged --json number,title,body\n```\n\nLook for:\n\n- PR title and description\n- Labels (feat, fix, perf, etc.)\n- Related issues\n\n### Step 6: Categorize Changes\n\nGroup the KEPT commits into these categories based on content:\n\n| Category         | Indicators                                                                        |\n| ---------------- | --------------------------------------------------------------------------------- |\n| **New Features** | New commands, new major functionality, \"Introduce\", \"feat:\" prefix                |\n| **Improvements** | Enhancements, \"Support\", \"Allow\", \"Add option\", improvements to existing features |\n| **Performance**  | \"Optimize\", \"perf:\", \"Reduce memory\", \"Speed up\", \"Improve performance\"           |\n| **Bug Fixes**    | \"Fix\", \"fix:\", bug corrections, issue resolutions                                 |\n| **Internal**     | Dependency updates, refactoring, CI changes, code cleanup, test improvements      |\n\n### Step 7: Write Release Notes\n\nFollow the guidelines in `releases-docs/guideline.md`:\n\n1. **Section Order:** New Features → Improvements → Performance → Bug Fixes → Internal\n2. **Only include sections that have content**\n3. **Format each item:**\n   - Start with a verb (Fix, Add, Support, Improve, Introduce)\n   - Include PR numbers at the end: `(#1234)` or `(#1234, #1235)`\n   - Use backticks for: commands, flags, file names, config properties\n   - Use **bold** for major feature names\n\n### Step 8: Save the Release Notes\n\nSave to `releases-docs/releases/` folder:\n\n- If version provided: `releases-docs/releases/v{VERSION}.md`\n- If no version: `releases-docs/releases/new-release.md`\n\n**Important:** Do NOT include the header metadata (title, tag, draft, etc.) - only the release content starting from the sections.\n\n## Example Output Format\n\n```markdown\n### New Features\n\n- New `bit validate` command to run a complete `test`, `lint`, `compile` and `typecheck` for a project (#10022)\n- **Bit Scripts** for simple shell commands or function execution for components (#10028)\n\n### Improvements\n\n- `bit recover` command now supports component and glob patterns (#10033)\n- Improve error messages in CLI (#10027, #9983)\n\n### Performance\n\n- Don't read and parse the lockfile multiple times for calculating deps graph (#10019)\n\n### Bug Fixes\n\n- Fix an issue where test duration had incorrect format (#9940)\n- Fix an issue where `bit new` wasn't resolving a remote env (#9981)\n\n### Internal\n\n- Update dependencies (#10018, #10015, #10006)\n- Modernize some legacy code (#10024, #10014)\n```\n\n## Output Files Summary\n\n| File                                | Location                    | Purpose                          |\n| ----------------------------------- | --------------------------- | -------------------------------- |\n| `raw-commits.md`                    | `releases-docs/temp-files/` | Raw commit data for review       |\n| `filtered-commits.md`               | `releases-docs/temp-files/` | Filtered/kept commits for review |\n| `v{VERSION}.md` or `new-release.md` | `releases-docs/releases/`   | Final release notes              |\n\n## Reference Files\n\n- **Guidelines:** `releases-docs/guideline.md` - Detailed formatting and style guidelines\n- **Examples:** `releases-docs/releases/` - Previous release notes for reference patterns\n\n## Helper Scripts (Optional)\n\nThe `releases-docs/scripts/` directory contains shell scripts for manual use:\n\n- `get-release-commits.sh [FROM_COMMIT] [TO_TAG]` - Fetches commits between releases\n- `filter-commits.sh` - Filters out uninteresting commits (pipe input to it)\n\nThese scripts are provided for manual/CLI use. When using this skill, Claude uses the `gh` API commands directly as they work from any directory without needing the local git repository.\n\n## Tips\n\n1. **Group related PRs** - Multiple PRs for the same feature should be one line item\n2. **Be concise** - Users scan release notes; keep items short and clear\n3. **Focus on user impact** - Describe what changed for the user, not implementation details\n4. **Check for typos** - Common in commit messages; fix them in release notes\n5. **Verify PR numbers** - Ensure all referenced PRs exist and are correct\n","frontmatter":{"name":"generate-release-notes","description":"Generate comprehensive release notes for Bit from git commits and pull requests. Use when creating release notes, building changelogs, documenting version releases, or preparing a new Bit release."},"isInternal":false,"tokens":2051,"sizeBytes":8681},{"name":"babel.config.json","path":"components/legacy/e2e-helper/excluded-fixtures/extensions/babel-env/babel.config.json","rawUrl":"https://raw.githubusercontent.com/teambit/bit/HEAD/components/legacy/e2e-helper/excluded-fixtures/extensions/babel-env/babel.config.json","title":"Babel-env Skill","category":"anthropic-skill","format":"json","content":"{\n  \"presets\": [\"@babel/preset-env\"],\n  \"sourceMaps\": true\n}","frontmatter":{"presets":["@babel/preset-env"],"sourceMaps":true},"isInternal":false,"tokens":21,"sizeBytes":60},{"name":"tsconfig.json","path":"components/legacy/e2e-helper/excluded-fixtures/extensions/custom-jest-resolve-env/config/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/teambit/bit/HEAD/components/legacy/e2e-helper/excluded-fixtures/extensions/custom-jest-resolve-env/config/tsconfig.json","title":"Config Skill","category":"anthropic-skill","format":"json","content":"{\n  \"extends\": \"@teambit/react.react-env/config/tsconfig.json\",\n  \"compilerOptions\": {\n    // the base config sets moduleResolution \"node\" (node10), which TS6 reports as TS5107.\n    \"ignoreDeprecations\": \"6.0\",\n    // TS6 no longer picks up node_modules/@types automatically, so the jest globals\n    // (describe/it/expect) have to be requested by name.\n    \"types\": [\"jest\"]\n  },\n  \"exclude\": [\n    \"artifacts\",\n    \"public\",\n    \"dist\",\n    \"node_modules\",\n    \"package.json\",\n    \"**/*.cjs\"\n  ],\n  \"include\": [\"**/*\", \"**/*.json\"]\n}\n","isInternal":false,"tokens":152,"sizeBytes":536},{"name":"tsconfig.json","path":"components/legacy/e2e-helper/excluded-fixtures/extensions/custom-react-env/typescript/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/teambit/bit/HEAD/components/legacy/e2e-helper/excluded-fixtures/extensions/custom-react-env/typescript/tsconfig.json","title":"Typescript Skill","category":"anthropic-skill","format":"json","content":"{\n  // add your compiler options here\n\n  \"compilerOptions\": {\n    // \"target\": \"es2017\",\n    // \"module\": \"es2015\",\n    // \"moduleResolution\": \"node\",\n    // \"lib\": [\"es2017\", \"dom\"],\n    // \"experimentalDecorators\": true,\n    // \"esModuleInterop\": true,\n    // \"outDir\": \"dist\",\n    // \"sourceMap\": true,\n    // \"emitDecoratorMetadata\": true,\n    // \"allowJs\": true,\n    // \"baseUrl\": \".\",\n    // \"jsx\": \"react\"\n  }\n}\n","isInternal":false,"tokens":126,"sizeBytes":419},{"name":"tsconfig.json","path":"components/legacy/e2e-helper/excluded-fixtures/extensions/invalid-jest-config-env/config/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/teambit/bit/HEAD/components/legacy/e2e-helper/excluded-fixtures/extensions/invalid-jest-config-env/config/tsconfig.json","title":"Config Skill","category":"anthropic-skill","format":"json","content":"{\n  \"extends\": \"@teambit/react.react-env/config/tsconfig.json\",\n  \"compilerOptions\": {\n    // the base config sets moduleResolution \"node\" (node10), which TS6 reports as TS5107.\n    \"ignoreDeprecations\": \"6.0\",\n    // TS6 no longer picks up node_modules/@types automatically, so the jest globals\n    // (describe/it/expect) have to be requested by name.\n    \"types\": [\"jest\"]\n  },\n  \"exclude\": [\n    \"artifacts\",\n    \"public\",\n    \"dist\",\n    \"node_modules\",\n    \"package.json\",\n    \"**/*.cjs\"\n  ],\n  \"include\": [\"**/*\", \"**/*.json\"]\n}\n","isInternal":false,"tokens":152,"sizeBytes":536},{"name":"tsconfig.json","path":"components/legacy/e2e-helper/excluded-fixtures/extensions/mocha-only-test-env/config/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/teambit/bit/HEAD/components/legacy/e2e-helper/excluded-fixtures/extensions/mocha-only-test-env/config/tsconfig.json","title":"Config Skill","category":"anthropic-skill","format":"json","content":"{\n  \"compilerOptions\": {\n    \"lib\": [\n      \"es2019\", \"DOM\", \"ES6\" ,\"DOM.Iterable\"\n    ],\n    \"target\": \"es2015\",\n    \"module\": \"es2020\",\n    \"jsx\": \"react\",\n    \"declaration\": true,\n    \"sourceMap\": true,\n    \"experimentalDecorators\": true,\n    \"skipLibCheck\": true,\n    \"moduleResolution\": \"node\",\n    // \"node\" is node10, which TS6 reports as the TS5107 deprecation error.\n    \"ignoreDeprecations\": \"6.0\",\n    // TS6 no longer picks up node_modules/@types automatically, so the mocha globals\n    // (describe/it/before) have to be requested by name.\n    \"types\": [\"mocha\"],\n    \"esModuleInterop\": true,\n    \"resolveJsonModule\": true,\n    \"allowJs\": true,\n    \"outDir\": \"./dist\"\n  },\n  \"exclude\": [\n    \"artifacts\",\n    \"public\",\n    \"dist\",\n    \"node_modules\",\n    \"package.json\",\n    \"**/*.cjs\"\n  ],\n  \"include\": [\n    \"**/*\",\n    \"**/*.json\"\n  ]\n}\n","isInternal":false,"tokens":257,"sizeBytes":853},{"name":"tsconfig.json","path":"components/legacy/e2e-helper/excluded-fixtures/extensions/multi-jest-testers-env/config/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/teambit/bit/HEAD/components/legacy/e2e-helper/excluded-fixtures/extensions/multi-jest-testers-env/config/tsconfig.json","title":"Config Skill","category":"anthropic-skill","format":"json","content":"{\n  \"extends\": \"@teambit/react.react-env/config/tsconfig.json\",\n  \"compilerOptions\": {\n    // the base config sets moduleResolution \"node\" (node10), which TS6 reports as TS5107.\n    \"ignoreDeprecations\": \"6.0\",\n    // TS6 no longer picks up node_modules/@types automatically, so the jest globals\n    // (describe/it/expect) have to be requested by name.\n    \"types\": [\"jest\"]\n  },\n  \"exclude\": [\n    \"artifacts\",\n    \"public\",\n    \"dist\",\n    \"node_modules\",\n    \"package.json\",\n    \"**/*.cjs\"\n  ],\n  \"include\": [\"**/*\", \"**/*.json\"]\n}\n","isInternal":false,"tokens":152,"sizeBytes":536},{"name":"babel.config.json","path":"components/legacy/e2e-helper/excluded-fixtures/extensions/multiple-compilers-env/babel.config.json","rawUrl":"https://raw.githubusercontent.com/teambit/bit/HEAD/components/legacy/e2e-helper/excluded-fixtures/extensions/multiple-compilers-env/babel.config.json","title":"Multiple-compilers-env Skill","category":"anthropic-skill","format":"json","content":"{\n  \"presets\": [\"@babel/preset-env\", \"@babel/typescript\"],\n  \"plugins\": [\n    \"@babel/plugin-transform-class-properties\"\n  ],\n  \"sourceMaps\": true\n}\n","frontmatter":{"presets":["@babel/preset-env","@babel/typescript"],"plugins":["@babel/plugin-transform-class-properties"],"sourceMaps":true},"isInternal":false,"tokens":41,"sizeBytes":149},{"name":"tsconfig.json","path":"components/legacy/e2e-helper/excluded-fixtures/extensions/multiple-compilers-env/ts/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/teambit/bit/HEAD/components/legacy/e2e-helper/excluded-fixtures/extensions/multiple-compilers-env/ts/tsconfig.json","title":"Ts Skill","category":"anthropic-skill","format":"json","content":"{\n  \"compilerOptions\": {\n    \"lib\": [\n      \"es2019\", \"DOM\", \"ES6\" ,\"DOM.Iterable\", \"ScriptHost\"\n    ],\n    \"target\": \"es2015\",\n    \"module\": \"commonjs\",\n    \"jsx\": \"react\",\n    \"composite\": true,\n    \"emitDeclarationOnly\": true,\n    \"declaration\": true,\n    \"sourceMap\": true,\n    \"skipLibCheck\": true,\n    \"outDir\": \"dist\",\n    \"esModuleInterop\": true,\n    \"experimentalDecorators\": true,\n    \"emitDecoratorMetadata\": true,\n    \"strictPropertyInitialization\": false,\n    \"strict\": true,\n    \"moduleResolution\": \"node\",\n    \"noImplicitAny\": false,\n    \"rootDir\": \".\",\n    \"removeComments\": true,\n    \"preserveConstEnums\": true,\n    \"resolveJsonModule\": true\n  },\n  \"exclude\": [\n    \"dist\"\n  ]\n}\n","frontmatter":{"compilerOptions":{"lib":["es2019","DOM","ES6","DOM.Iterable","ScriptHost"],"target":"es2015","module":"commonjs","jsx":"react","composite":true,"emitDeclarationOnly":true,"declaration":true,"sourceMap":true,"skipLibCheck":true,"outDir":"dist","esModuleInterop":true,"experimentalDecorators":true,"emitDecoratorMetadata":true,"strictPropertyInitialization":false,"strict":true,"moduleResolution":"node","noImplicitAny":false,"rootDir":".","removeComments":true,"preserveConstEnums":true,"resolveJsonModule":true},"exclude":["dist"]},"isInternal":false,"tokens":200,"sizeBytes":696},{"name":"SKILL.md","path":"contrib/claude-skill-bit-cli/SKILL.md","rawUrl":"https://raw.githubusercontent.com/teambit/bit/HEAD/contrib/claude-skill-bit-cli/SKILL.md","title":"bit-cli","category":"anthropic-skill","format":"markdown","content":"---\nname: bit-cli\ndescription: 'MUST consult before running ANY bit command. Do NOT guess bit commands from memory. This skill tells you the right command, correct syntax, subcommands, and flags.'\n---\n\n# Bit CLI Quick Reference\n\n<!-- This content is auto-generated by: bit cli generate --skill commands -->\n\nusage: bit [--version] [--help] <command> [<args>]\n\nbit documentation: https://bit.dev/\n\nSystem & Utility\nhelp - display available commands and usage information\nversion - display the installed Bit version\nconfig - manage Bit configuration settings\nSubcommands: set, del, get, list\nglobals - display global directories and paths used by Bit\nsystem <sub-command> - access system-level operations and debugging tools\nSubcommands: log, tail-log\ndoctor [diagnosis-name] - diagnose and troubleshoot workspace issues\nclear-cache - remove cached data to resolve stale data issues\ngc - remove objects from the local scope that are no longer needed\n\nWorkspace commands\ndetails - show expanded details from the last command that provided them (e.g. tag, snap)\n\nInformation & Analysis\nshow <component-name> - display component metadata, dependencies, and configuration\ncat <component-id> - print source files or config of a component at a specific version\ngraph [id] - visualize component dependencies as a graph image\npattern <pattern> - test and validate component patterns\nlist [remote-scope] - display components in workspace or remote scope\nsearch <query...> - search for components by keyword in the local workspace and remote bit cloud\nschema <pattern> - display component API schema and type definitions\nSubcommands: diff\ndiff [component-pattern] [version] [to-version] - compare component changes between versions or against the current workspace\nstatus - show workspace component status and issues\n\nComponent Configuration\nenvs - show components and their assigned environments\nSubcommands: list, get, set, unset, replace, update\nscope <sub-command> - manage component scope names and assignments\nSubcommands: set, trust, rename, rename-owner, fork\neject-conf <pattern> - create component.json configuration files for components\nlocal-only <sub-command> - manage components that exist only in the workspace\nSubcommands: set, unset, list\naspect <sub-command> - manage component aspects and their configurations\nSubcommands: list, list-core, get, set, unset, update\n\nCollaboration & Remote\nremote - manage remote scopes for self-hosted environments\nSubcommands: add, del, list\nripple <sub-command> - manage Ripple CI jobs on bit.cloud\nSubcommands: list, log, errors, retry, stop, simulate\nimport [component-patterns...] - bring components from remote scopes into your workspace\ndelete <component-pattern> - soft-delete components from remote scopes\nrecover <component-pattern> - restore soft-deleted components\nexport [component-patterns...] - upload components to remote scopes\nlane [sub-command] - manage lanes for parallel development\nSubcommands: list, show, create, remove, change-scope, alias, rename, remove-readme, import, remove-comp, fetch, eject, current, history, history-diff, checkout, revert, updates, merge-move\nci <sub-command> - continuous integration commands for automated workflows\nSubcommands: verify, pr, merge, sync\ndeprecate <component-pattern> - mark components as deprecated to discourage their use\nundeprecate <component-pattern> - remove the deprecation status from components\nfork <pattern> [target-component-name] - create a new component by copying from an existing one\ninternalize [component-pattern] - mark components as internal to hide them by default in the UI\n\nRun & Serve\nstart [component-pattern] - launch the Bit development server\nrun [app-name] - start an application component locally\napp [sub-command] - manage application components\nSubcommands: list, run\n\nAdvanced/Debug\ncapsule - manage isolated component environments\nSubcommands: list, create, delete, prune\nmcp-server [sub-command] - start Model Context Protocol server for AI assistants\nSubcommands: start, setup, rules\n\nDevelop components\nscript [script-name] - run a script defined by the environment\n\nAuthentication & Cloud\nlogin - authenticate with Bit Cloud for component publishing and collaboration\nlogout - sign out of Bit Cloud and clear authentication tokens\nwhoami - display the currently authenticated Bit Cloud user\nnpmrc [sub-command] - configure .npmrc file with Bit Cloud registry and authentication settings\nSubcommands: generate\n\nWorkspace Tools\nws-config <sub-command> - generate IDE configuration files\nSubcommands: write, clean, list\ngit <sub-command> - Git utilities for Bit repositories\nSubcommands: set-merge-driver\nrefactor <sub-command> - automatically refactor component source code\nSubcommands: dependency-name\n\nComponent Development\nadd [path...] - track existing directory contents as new components in the workspace\ncreate <template-name> <component-names...> - scaffold new component(s) from a template (sources, config, and env)\ntemplates - list available templates for creating components and workspaces\nwatch - watch and compile components on file changes\nbuild [component-pattern] - run build pipeline tasks in isolated environments\ncompile [component-names...] - transpile component source files\nmove <current-component-dir> <new-component-dir> - relocate a component to a different directory\nremove <component-pattern> - untrack components from the workspace\nrename <current-name> <new-name> - change a component name\n\nTesting & Quality\nartifacts <component-pattern> - view and download build artifacts\ncheck-types [component-pattern] - validate TypeScript type correctness\ntest [pattern-or-test-file...] - run component tests\nlint [component-pattern] - analyze component code for issues and style violations\nvalidate [component-pattern] - run type-checking, linting, and testing in sequence\nformat [component-pattern] - auto-format component source code\n\nDependencies & Packages\ninstall [packages...] - install workspace dependencies\nuninstall [packages...] - remove dependencies from workspace\nupdate [package-patterns...] - update workspace dependencies to newer versions\nlink [component-names...] - create links between components and node_modules\neject <component-pattern> - remove component from workspace and install it as npm package\ndeps <sub-command> - manage component dependencies\nSubcommands: get, remove, unset, debug, set, reset, eject, blame, usage, diagnose, circular, write\nwhy <dependency-name> - find components that use the specified dependency\nset-peer <component-id> <range> - configure component to always be installed as peer dependency\nunset-peer <component-id> - remove always-peer configuration from component\ndependents <component-name> - show components that depend on the specified component\n\nVersion Control\ncheckout <to> [component-pattern] - switch between component versions or remove local changes\nrevert <component-pattern> <to> - replace component files with specified version while preserving current version\ntag [component-patterns...] - create immutable component snapshots with semantic version tags\nsnap [component-pattern] - create immutable component snapshots for development versions\nreset [component-pattern] - revert local tags and snaps to previous versions\nmerge [component-pattern] - merge diverged component history when local and remote have different versions\nstash <sub-command> - temporarily save and restore component changes\nSubcommands: save, load, list\nlog <id> - display component version history\nlog-file <filepath> - EXPERIMENTAL. display history of changes to a specific file\nblame <filepath> - EXPERIMENTAL. show line-by-line authorship and modification history\n\nWorkspace & Project Setup\ninit [path] - initialize a Bit workspace in an existing project\nnew <template-name> <workspace-name> - create a new Bit workspace from a template\nclone <component-id> [dir] - create a workspace from its workspace-root component, with every component it lists\n\nIMPORTANT: When you need flags, arguments, or subcommand details, READ the file CLI_REFERENCE.md in this same directory using the Read tool. Only fall back to 'bit <command> --help' if the reference file doesn't cover what you need.\n","frontmatter":{"name":"bit-cli","description":"MUST consult before running ANY bit command. Do NOT guess bit commands from memory. This skill tells you the right command, correct syntax, subcommands, and flags."},"isInternal":false,"tokens":1694,"sizeBytes":8193},{"name":"CLAUDE.md","path":"CLAUDE.md","rawUrl":"https://raw.githubusercontent.com/teambit/bit/HEAD/CLAUDE.md","title":"Claude Agent Guidelines & System Prompt","category":"claude-rule","format":"markdown","content":"# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## Additional Bit Workflow Instructions\n\nFor comprehensive Bit MCP workflow instructions and core principles, see: `.github/instructions/bit.instructions.md`\n\n## Public Repo Hygiene\n\nThis repo is open source. Commits, branch names, PR titles/descriptions, and PR comments are public.\n\n- **No private data**: Never use real component-ids, package names, scope/org names, or people's names (these often come from the prompt or from a bug report) in commits, PRs, or PR comments — they may be private. Use made-up placeholders instead (e.g. `my-org.my-scope/button`).\n- **No private commands**: Some internal `bit` commands are defined outside this repo and must not be mentioned publicly. Before naming a `bit` command in a commit, branch, or PR, verify it's defined here (`grep -rn \"name = '<command>\" scopes components`). If it isn't, describe the behavior instead (e.g. \"a lane merge from a bare scope\", \"snapping from a scope\"). Internal API names that live in this repo (e.g. `snapFromScope`, `mergeSnaps`) are fine to mention.\n\n## CLI Output Style Guide\n\nWhen modifying CLI command output, follow the style guide: `scopes/harmony/cli/cli-output-style-guide.md`\n\nUse the shared formatting toolkit from `@teambit/cli` (`scopes/harmony/cli/output-formatter.ts`) — never hardcode chalk styles for section titles or Unicode symbols.\n\n## Development Commands\n\n**IMPORTANT**: This repository practices \"dogfooding\" - Bit is built using Bit itself. Always use `bit` commands rather than direct npm/pnpm commands where possible.\n\n### Setup and Installation\n\n- `npm run full-setup` - Complete setup for the repository (installs dependencies, sets up husky, compiles)\n- `npm run setup` - Basic setup (bit install and compile)\n- `bit install` - Install dependencies (uses PNPM under the hood, never run `pnpm install` directly)\n- `npm run dev-link [alias]` - Creates a global symlink for the bit binary (default: bit-dev)\n\n### Build and Compilation\n\n- `bit compile` - Compile all components\n- `bit watch` - Watch for changes and compile automatically\n\n### Testing\n\n**IMPORTANT — prefer unit tests (`.spec.ts`) over e2e tests.** E2e tests are extremely expensive: they dominate CI time and are responsible for ~80% of our CircleCI credit spend. When adding test coverage:\n\n- Default to unit tests: `.spec.ts` files alongside the source, run with `bit test`.\n- Only write an e2e test when the scenario genuinely cannot be covered by a unit test — e.g. it requires a real workspace + remote scope and a flow spanning multiple bit commands (tag/export/import/lane flows).\n- Before creating a new e2e **file**, check if an existing e2e file already covers the area and add a `describe`/`it` there instead — each new file adds fixed setup overhead on CI.\n- Keep any e2e test minimal: fewest components, fewest commands, no redundant variations of the same flow.\n\n- `bit test` - Run unit tests for components/aspects\n- `bit test --debug` - Run unit tests in debug mode (prints workspace location, keeps workspaces)\n- `npm run e2e-test` - Run end-to-end tests (can take hours, usually run on CI)\n- `npm run e2e-test:debug` - Run e2e tests in debug mode (keeps workspaces, prints output)\n- `npm run mocha-circleci` - Run mocha tests with CircleCI configuration\n\n**Running specific e2e tests:**\n⚠️ **CRITICAL: ALWAYS add `.only` to the test before running e2e tests!** ⚠️\n\n- Add `.only` to the `describe` or `it` block (e.g., `describe.only(...)` or `it.only(...)`)\n- Then run `npm run e2e-test` or `npm run e2e-test:debug`\n- The `--grep` flag does NOT work reliably - you MUST use `.only`\n- Running without `.only` will execute the ENTIRE test suite which takes hours\n- Example: Change `describe('my test', ...)` to `describe.only('my test', ...)`\n\n**Bug reproduction testing:** When asked to reproduce a bug, first try to reproduce it with a unit test (`.spec.ts`) at the level of the component that owns the logic. Only fall back to an e2e test when the bug spans multiple bit commands or requires a real workspace/remote-scope flow. Never create test directories in the current workspace — you cannot create nested Bit workspaces; the e2e test helpers provide workspace creation methods that use temporary directories and automatically clean up after tests.\n\n### Linting and Formatting\n\n- `npm run lint` - Run Oxlint and TypeScript type checking (`tsc --noEmit`)\n- `npm run lint:fix` - Run Oxlint with auto-fix\n- `npm run format` - Format code with Prettier\n- `npm run prettier:check` - Check if code is formatted correctly\n\nLint rules live in `.oxlintrc.json`. ESLint has been fully removed from this repo's linting; the `eslint` packages remaining in `workspace.jsonc` are for `@teambit/defender.eslint-linter` which is shipped to Bit users' envs.\n\n**IMPORTANT**: After making code changes, always run `npm run lint` to verify. Do NOT run `npx tsc --noEmit` or `npx oxlint` directly — `npm run lint` is the canonical command and covers both type checking and linting for this repo.\n\n### Bit-specific Commands\n\n- `bit start` - Start the Bit UI for component development\n- `bit status` - Show workspace status\n- `bit compile` - Compile components\n- `bit test` - Run tests\n- `bit tag` - Tag components for release\n- `bit export` - Export components to remote scopes\n\n## Architecture Overview\n\n### Component System\n\nBit is built using a component-based architecture where the entire codebase is composed of reusable components. The system follows a modular approach with:\n\n- **Aspects**: Core building blocks that provide functionality across the system\n- **Scopes**: Organizational units that group related components\n- **Environments**: Define how components are built, tested, and bundled\n- **Capsules**: Isolated environments for component operations\n\n### Key Directories\n\n**Core Architecture:**\n\n- `scopes/` - Contains all aspects organized by domain (harmony, component, dependencies, etc.)\n- `components/` - Standalone components and utilities\n- `e2e/` - End-to-end tests organized by functionality\n\n**Important Scopes:**\n\n- `scopes/harmony/` - Core runtime and infrastructure aspects\n- `scopes/component/` - Component-related functionality\n- `scopes/compilation/` - Build and compilation aspects\n- `scopes/dependencies/` - Dependency management\n- `scopes/workspace/` - Workspace management\n- `scopes/scope/` - Remote scope operations\n\n### Aspect System\n\nEach aspect follows a standard structure:\n\n- `.aspect.ts` - Aspect definition and metadata\n- `.main.runtime.ts` - Main runtime implementation\n- `.ui.runtime.ts` - UI runtime implementation (if applicable)\n- `.docs.mdx` - Documentation\n- `.composition.tsx` - Component compositions for testing\n\n**New aspects must use the core-aspect env** (`teambit.harmony/envs/core-aspect-env`), like every other aspect here. No variant sets it, so a new component otherwise falls back to `teambit.harmony/node`. Pass it when creating the aspect: `bit create bit-aspect <name> --scope <scope> --env teambit.harmony/envs/core-aspect-env`. If the component was added with `bit add` (which has no env flag), run `bit envs set <component-id> teambit.harmony/envs/core-aspect-env` right after. Verify with `bit envs get <component-id>`. The same fallback hits any new component: give a non-aspect component the env of its siblings (e.g. `teambit.node/envs/node-babel-mocha` for `scopes/*/modules/*`, `teambit.node/envs/node-typescript-mocha` for `scopes/toolbox/*`).\n\n### Configuration\n\n- `workspace.jsonc` - Main workspace configuration\n- `package.json` - Node.js dependencies and scripts\n- `tsconfig.json` - TypeScript configuration\n- `.bitmap` - Component tracking (auto-generated)\n\n### Development Patterns\n\n**Dependency Management:**\n\n- Uses `bit install` which runs PNPM programmatically under the hood\n- Never run `pnpm install` directly - always use `bit install`\n- `bit install` performs multiple operations beyond just package installation\n- Strict peer dependency rules configured\n- Component dependencies managed through Bit's dependency resolver\n\n**Testing Strategy:**\n\n- Unit tests: `.spec.ts` files alongside source\n- E2E tests: Comprehensive scenarios in `e2e/` directory\n- Component compositions: Interactive examples in `.composition.tsx`\n\n**Build Process:**\n\n- TypeScript compilation with strict mode\n- Babel for transpilation\n- Webpack for bundling\n- Oxlint for linting with custom rules (configured in `.oxlintrc.json`)\n\n### Key Concepts\n\n**Bootstrap Flow:**\n\n1. User runs a Bit command\n2. Bit builds a graph of core aspects + workspace aspects\n3. All aspects are loaded and instantiated\n4. Aspects register CLI commands\n5. Command is parsed and executed\n\n**Component Lifecycle:**\n\n- Add/Create: Components added to workspace (.bitmap updated)\n- Tag/Snap: Components versioned and stored in scope\n- Export: Components published to remote scopes\n- Import: Components brought into workspace from remote scopes\n\n**Workspace vs Scope:**\n\n- Workspace: Development environment with source code\n- Scope: Storage for versioned components (local: `.bit/`, remote: Bit Cloud)\n\n## Development Notes\n\n### Environments\n\n- Components use environments for build, test, and bundle operations\n- Default environments: Node.js, React, Angular, Vue\n- Custom environments can be created by extending base environments\n\n### Debugging\n\n- Debug logs: `~/Library/Caches/Bit/logs/debug.log` (macOS)\n- Verbose logging: `BIT_LOG=*` prefix\n- Stack traces written to debug.log\n- Use `bit globals` to locate debug.log\n\n### Performance\n\n- Use `bit watch` for faster development cycles\n- E2E tests run in parallel on CI\n- Component compilation can be parallelized\n\n### Aspect Configuration\n\n- Aspects accept config as 2nd parameter in `provider` method: `provider(deps, config)`\n- Define TypeScript interface for config and inject into main class constructor\n- Configure in `workspace.jsonc` under aspect ID key\n","isInternal":false,"tokens":2350,"sizeBytes":9965}],"systemPromptSnippet":"<yakaai_skills repo=\"teambit/bit\">\n<!-- File: .claude/skills/generate-release-notes/SKILL.md (Tokens: ~2051 | Category: anthropic-skill) -->\n---\nname: generate-release-notes\ndescription: Generate comprehensive release notes for Bit from git commits and pull requests. Use when creating release notes, building changelogs, documenting version releases, or preparing a new Bit release.\n---\n\n# Generate Release Notes for Bit\n\nThis skill helps generate release notes for Bit following the established patterns and guidelines.\n\n## Important: Intermediate Files\n\nAll intermediate steps must be saved to `releases-docs/temp-files/` for review. This folder is gitignored.\n\n**Required intermediate files:**\n\n1. `raw-commits.md` - Raw commit data from GitHub API\n2. `filtered-commits.md` - Two sections: filtered out commits and kept commits\n\n## Workflow\n\nFollow these steps to generate release notes:\n\n### Step 1: Setup Temp Directory\n\nFirst, ensure the temp directory exists:\n\n```bash\nmkdir -p releases-docs/temp-files\n```\n\n### Step 2: Determine the Commit Range\n\n1. **Get the latest release tag and commit:**\n\n   ```bash\n   # Get latest release tag\n   gh release view --repo teambit/bit --json tagName -q '.tagName'\n\n   # Get the commit SHA for the tag (handles annotated tags)\n   TAG=\"v1.12.158\"  # Replace with actual tag\n   TAG_REF=$(gh api \"repos/teambit/bit/git/refs/tags/$TAG\" -q '.object.sha')\n   TAG_TYPE=$(gh api \"repos/teambit/bit/git/refs/tags/$TAG\" -q '.object.type')\n\n   if [ \"$TAG_TYPE\" = \"tag\" ]; then\n       # Annotated tag - get the commit it points to\n       RELEASE_COMMIT=$(gh api \"repos/teambit/bit/git/tags/$TAG_REF\" -q '.object.sha')\n   else\n       # Lightweight tag - already have the commit\n       RELEASE_COMMIT=$TAG_REF\n   fi\n   ```\n\n2. **Determine the starting point:**\n   - If user provides a specific commit hash, use that as `FROM_COMMIT`\n   - If not provided, use `HEAD` (latest commit on master)\n\n### Step 3: Fetch Commits and Save to raw-commits.md\n\nUse the GitHub API to get commits between the release and the starting point:\n\n```bash\n# Compare commits between release and HEAD (or specific commit)\ngh api \"repos/teambit/bit/compare/${RELEASE_COMMIT}...${FROM_COMMIT}\" \\\n    --jq '.commits[] | \"\\(.sha[0:7]) | \\(.commit.message | split(\"\\n\")[0]) | \\(.commit.author.name)\"'\n```\n\n**Save the output to `releases-docs/temp-files/raw-commits.md`** with the following format:\n\n```markdown\n# Raw Commits\n\nGenerated: {DATE}\nFrom: {FROM_COMMIT or HEAD}\nTo: {RELEASE_TAG} ({RELEASE_COMMIT})\nTotal commits: {COUNT}\n\n## Commits\n\n| Hash    | Message                      | Author      |\n| ------- | ---------------------------- | ----------- |\n| abc1234 | feat: add new feature (#123) | Author Name |\n| def5678 | fix: resolve bug (#456)      | Author Name |\n\n...\n```\n\n### Step 4: Filter Commits and Save to filtered-commits.md\n\nAnalyze each commit and categorize into two groups:\n\n**FILTER OUT (do not include in release notes):**\n\n- Version bump commits: `bump teambit version to X.X.X [skip ci]`\n- CI-only changes: commits that only modify CircleCI config\n- Skip CI markers: commits with `[skip ci]` in the message\n- Auto-merge commits: `Merge branch 'X' into master`\n\n**KEEP (include in release notes):**\n\n- All feature commits (`feat:`)\n- All fix commits (`fix:`)\n- All performance commits (`perf:`)\n- Dependency updates (go in Internal section)\n- Refactoring commits (go in Internal section)\n\n**Save to `releases-docs/temp-files/filtered-commits.md`** with the following format:\n\n```markdown\n# Filtered Commits\n\nGenerated: {DATE}\n\n## Filtered Out ({COUNT} commits)\n\nThese commits are excluded from the release notes:\n\n| Hash    | Message                                   | Reason       |\n| ------- | ----------------------------------------- | ------------ |\n| abc1234 | bump teambit version to 1.13.5 [skip ci]  | Version bump |\n| def5678 | ci, temporarily set tag to increment by 2 | CI change    |\n\n...\n\n## Kept for Release Notes ({COUNT} commits)\n\nThese commits will be included in the release notes:\n\n| Hash    | Message                         | Category     |\n| ------- | ------------------------------- | ------------ |\n| ghi9012 | feat: add new command (#123)    | New Features |\n| jkl3456 | fix: resolve issue (#456)       | Bug Fixes    |\n| mno7890 | chore(deps): bump lodash (#789) | Internal     |\n\n...\n```\n\n### Step 5: Enrich Commit Information\n\nFor commits that are merge commits or have unclear messages, fetch PR details:\n\n```bash\n# Get PR details by number\ngh pr view 12345 --repo teambit/bit --json title,body,labels\n\n# Search for PR by commit\ngh pr list --repo teambit/bit --search \"SHA_HERE\" --state merged --json number,title,body\n```\n\nLook for:\n\n- PR title and description\n- Labels (feat, fix, perf, etc.)\n- Related issues\n\n### Step 6: Categorize Changes\n\nGroup the KEPT commits into these categories based on content:\n\n| Category         | Indicators                                                                        |\n| ---------------- | --------------------------------------------------------------------------------- |\n| **New Features** | New commands, new major functionality, \"Introduce\", \"feat:\" prefix                |\n| **Improvements** | Enhancements, \"Support\", \"Allow\", \"Add option\", improvements to existing features |\n| **Performance**  | \"Optimize\", \"perf:\", \"Reduce memory\", \"Speed up\", \"Improve performance\"           |\n| **Bug Fixes**    | \"Fix\", \"fix:\", bug corrections, issue resolutions                                 |\n| **Internal**     | Dependency updates, refactoring, CI changes, code cleanup, test improvements      |\n\n### Step 7: Write Release Notes\n\nFollow the guidelines in `releases-docs/guideline.md`:\n\n1. **Section Order:** New Features → Improvements → Performance → Bug Fixes → Internal\n2. **Only include sections that have content**\n3. **Format each item:**\n   - Start with a verb (Fix, Add, Support, Improve, Introduce)\n   - Include PR numbers at the end: `(#1234)` or `(#1234, #1235)`\n   - Use backticks for: commands, flags, file names, config properties\n   - Use **bold** for major feature names\n\n### Step 8: Save the Release Notes\n\nSave to `releases-docs/releases/` folder:\n\n- If version provided: `releases-docs/releases/v{VERSION}.md`\n- If no version: `releases-docs/releases/new-release.md`\n\n**Important:** Do NOT include the header metadata (title, tag, draft, etc.) - only the release content starting from the sections.\n\n## Example Output Format\n\n```markdown\n### New Features\n\n- New `bit validate` command to run a complete `test`, `lint`, `compile` and `typecheck` for a project (#10022)\n- **Bit Scripts** for simple shell commands or function execution for components (#10028)\n\n### Improvements\n\n- `bit recover` command now supports component and glob patterns (#10033)\n- Improve error messages in CLI (#10027, #9983)\n\n### Performance\n\n- Don't read and parse the lockfile multiple times for calculating deps graph (#10019)\n\n### Bug Fixes\n\n- Fix an issue where test duration had incorrect format (#9940)\n- Fix an issue where `bit new` wasn't resolving a remote env (#9981)\n\n### Internal\n\n- Update dependencies (#10018, #10015, #10006)\n- Modernize some legacy code (#10024, #10014)\n```\n\n## Output Files Summary\n\n| File                                | Location                    | Purpose                          |\n| ----------------------------------- | --------------------------- | -------------------------------- |\n| `raw-commits.md`                    | `releases-docs/temp-files/` | Raw commit data for review       |\n| `filtered-commits.md`               | `releases-docs/temp-files/` | Filtered/kept commits for review |\n| `v{VERSION}.md` or `new-release.md` | `releases-docs/releases/`   | Final release notes              |\n\n## Reference Files\n\n- **Guidelines:** `releases-docs/guideline.md` - Detailed formatting and style guidelines\n- **Examples:** `releases-docs/releases/` - Previous release notes for reference patterns\n\n## Helper Scripts (Optional)\n\nThe `releases-docs/scripts/` directory contains shell scripts for manual use:\n\n- `get-release-commits.sh [FROM_COMMIT] [TO_TAG]` - Fetches commits between releases\n- `filter-commits.sh` - Filters out uninteresting commits (pipe input to it)\n\nThese scripts are provided for manual/CLI use. When using this skill, Claude uses the `gh` API commands directly as they work from any directory without needing the local git repository.\n\n## Tips\n\n1. **Group related PRs** - Multiple PRs for the same feature should be one line item\n2. **Be concise** - Users scan release notes; keep items short and clear\n3. **Focus on user impact** - Describe what changed for the user, not implementation details\n4. **Check for typos** - Common in commit messages; fix them in release notes\n5. **Verify PR numbers** - Ensure all referenced PRs exist and are correct\n\n<!-- File: components/legacy/e2e-helper/excluded-fixtures/extensions/babel-env/babel.config.json (Tokens: ~21 | Category: anthropic-skill) -->\n{\n  \"presets\": [\"@babel/preset-env\"],\n  \"sourceMaps\": true\n}\n\n<!-- File: components/legacy/e2e-helper/excluded-fixtures/extensions/custom-jest-resolve-env/config/tsconfig.json (Tokens: ~152 | Category: anthropic-skill) -->\n{\n  \"extends\": \"@teambit/react.react-env/config/tsconfig.json\",\n  \"compilerOptions\": {\n    // the base config sets moduleResolution \"node\" (node10), which TS6 reports as TS5107.\n    \"ignoreDeprecations\": \"6.0\",\n    // TS6 no longer picks up node_modules/@types automatically, so the jest globals\n    // (describe/it/expect) have to be requested by name.\n    \"types\": [\"jest\"]\n  },\n  \"exclude\": [\n    \"artifacts\",\n    \"public\",\n    \"dist\",\n    \"node_modules\",\n    \"package.json\",\n    \"**/*.cjs\"\n  ],\n  \"include\": [\"**/*\", \"**/*.json\"]\n}\n\n<!-- File: components/legacy/e2e-helper/excluded-fixtures/extensions/custom-react-env/typescript/tsconfig.json (Tokens: ~126 | Category: anthropic-skill) -->\n{\n  // add your compiler options here\n\n  \"compilerOptions\": {\n    // \"target\": \"es2017\",\n    // \"module\": \"es2015\",\n    // \"moduleResolution\": \"node\",\n    // \"lib\": [\"es2017\", \"dom\"],\n    // \"experimentalDecorators\": true,\n    // \"esModuleInterop\": true,\n    // \"outDir\": \"dist\",\n    // \"sourceMap\": true,\n    // \"emitDecoratorMetadata\": true,\n    // \"allowJs\": true,\n    // \"baseUrl\": \".\",\n    // \"jsx\": \"react\"\n  }\n}\n\n<!-- File: components/legacy/e2e-helper/excluded-fixtures/extensions/invalid-jest-config-env/config/tsconfig.json (Tokens: ~152 | Category: anthropic-skill) -->\n{\n  \"extends\": \"@teambit/react.react-env/config/tsconfig.json\",\n  \"compilerOptions\": {\n    // the base config sets moduleResolution \"node\" (node10), which TS6 reports as TS5107.\n    \"ignoreDeprecations\": \"6.0\",\n    // TS6 no longer picks up node_modules/@types automatically, so the jest globals\n    // (describe/it/expect) have to be requested by name.\n    \"types\": [\"jest\"]\n  },\n  \"exclude\": [\n    \"artifacts\",\n    \"public\",\n    \"dist\",\n    \"node_modules\",\n    \"package.json\",\n    \"**/*.cjs\"\n  ],\n  \"include\": [\"**/*\", \"**/*.json\"]\n}\n\n<!-- File: components/legacy/e2e-helper/excluded-fixtures/extensions/mocha-only-test-env/config/tsconfig.json (Tokens: ~257 | Category: anthropic-skill) -->\n{\n  \"compilerOptions\": {\n    \"lib\": [\n      \"es2019\", \"DOM\", \"ES6\" ,\"DOM.Iterable\"\n    ],\n    \"target\": \"es2015\",\n    \"module\": \"es2020\",\n    \"jsx\": \"react\",\n    \"declaration\": true,\n    \"sourceMap\": true,\n    \"experimentalDecorators\": true,\n    \"skipLibCheck\": true,\n    \"moduleResolution\": \"node\",\n    // \"node\" is node10, which TS6 reports as the TS5107 deprecation error.\n    \"ignoreDeprecations\": \"6.0\",\n    // TS6 no longer picks up node_modules/@types automatically, so the mocha globals\n    // (describe/it/before) have to be requested by name.\n    \"types\": [\"mocha\"],\n    \"esModuleInterop\": true,\n    \"resolveJsonModule\": true,\n    \"allowJs\": true,\n    \"outDir\": \"./dist\"\n  },\n  \"exclude\": [\n    \"artifacts\",\n    \"public\",\n    \"dist\",\n    \"node_modules\",\n    \"package.json\",\n    \"**/*.cjs\"\n  ],\n  \"include\": [\n    \"**/*\",\n    \"**/*.json\"\n  ]\n}\n\n<!-- File: components/legacy/e2e-helper/excluded-fixtures/extensions/multi-jest-testers-env/config/tsconfig.json (Tokens: ~152 | Category: anthropic-skill) -->\n{\n  \"extends\": \"@teambit/react.react-env/config/tsconfig.json\",\n  \"compilerOptions\": {\n    // the base config sets moduleResolution \"node\" (node10), which TS6 reports as TS5107.\n    \"ignoreDeprecations\": \"6.0\",\n    // TS6 no longer picks up node_modules/@types automatically, so the jest globals\n    // (describe/it/expect) have to be requested by name.\n    \"types\": [\"jest\"]\n  },\n  \"exclude\": [\n    \"artifacts\",\n    \"public\",\n    \"dist\",\n    \"node_modules\",\n    \"package.json\",\n    \"**/*.cjs\"\n  ],\n  \"include\": [\"**/*\", \"**/*.json\"]\n}\n\n<!-- File: components/legacy/e2e-helper/excluded-fixtures/extensions/multiple-compilers-env/babel.config.json (Tokens: ~41 | Category: anthropic-skill) -->\n{\n  \"presets\": [\"@babel/preset-env\", \"@babel/typescript\"],\n  \"plugins\": [\n    \"@babel/plugin-transform-class-properties\"\n  ],\n  \"sourceMaps\": true\n}\n\n<!-- File: components/legacy/e2e-helper/excluded-fixtures/extensions/multiple-compilers-env/ts/tsconfig.json (Tokens: ~200 | Category: anthropic-skill) -->\n{\n  \"compilerOptions\": {\n    \"lib\": [\n      \"es2019\", \"DOM\", \"ES6\" ,\"DOM.Iterable\", \"ScriptHost\"\n    ],\n    \"target\": \"es2015\",\n    \"module\": \"commonjs\",\n    \"jsx\": \"react\",\n    \"composite\": true,\n    \"emitDeclarationOnly\": true,\n    \"declaration\": true,\n    \"sourceMap\": true,\n    \"skipLibCheck\": true,\n    \"outDir\": \"dist\",\n    \"esModuleInterop\": true,\n    \"experimentalDecorators\": true,\n    \"emitDecoratorMetadata\": true,\n    \"strictPropertyInitialization\": false,\n    \"strict\": true,\n    \"moduleResolution\": \"node\",\n    \"noImplicitAny\": false,\n    \"rootDir\": \".\",\n    \"removeComments\": true,\n    \"preserveConstEnums\": true,\n    \"resolveJsonModule\": true\n  },\n  \"exclude\": [\n    \"dist\"\n  ]\n}\n\n<!-- File: contrib/claude-skill-bit-cli/SKILL.md (Tokens: ~1694 | Category: anthropic-skill) -->\n---\nname: bit-cli\ndescription: 'MUST consult before running ANY bit command. Do NOT guess bit commands from memory. This skill tells you the right command, correct syntax, subcommands, and flags.'\n---\n\n# Bit CLI Quick Reference\n\n<!-- This content is auto-generated by: bit cli generate --skill commands -->\n\nusage: bit [--version] [--help] <command> [<args>]\n\nbit documentation: https://bit.dev/\n\nSystem & Utility\nhelp - display available commands and usage information\nversion - display the installed Bit version\nconfig - manage Bit configuration settings\nSubcommands: set, del, get, list\nglobals - display global directories and paths used by Bit\nsystem <sub-command> - access system-level operations and debugging tools\nSubcommands: log, tail-log\ndoctor [diagnosis-name] - diagnose and troubleshoot workspace issues\nclear-cache - remove cached data to resolve stale data issues\ngc - remove objects from the local scope that are no longer needed\n\nWorkspace commands\ndetails - show expanded details from the last command that provided them (e.g. tag, snap)\n\nInformation & Analysis\nshow <component-name> - display component metadata, dependencies, and configuration\ncat <component-id> - print source files or config of a component at a specific version\ngraph [id] - visualize component dependencies as a graph image\npattern <pattern> - test and validate component patterns\nlist [remote-scope] - display components in workspace or remote scope\nsearch <query...> - search for components by keyword in the local workspace and remote bit cloud\nschema <pattern> - display component API schema and type definitions\nSubcommands: diff\ndiff [component-pattern] [version] [to-version] - compare component changes between versions or against the current workspace\nstatus - show workspace component status and issues\n\nComponent Configuration\nenvs - show components and their assigned environments\nSubcommands: list, get, set, unset, replace, update\nscope <sub-command> - manage component scope names and assignments\nSubcommands: set, trust, rename, rename-owner, fork\neject-conf <pattern> - create component.json configuration files for components\nlocal-only <sub-command> - manage components that exist only in the workspace\nSubcommands: set, unset, list\naspect <sub-command> - manage component aspects and their configurations\nSubcommands: list, list-core, get, set, unset, update\n\nCollaboration & Remote\nremote - manage remote scopes for self-hosted environments\nSubcommands: add, del, list\nripple <sub-command> - manage Ripple CI jobs on bit.cloud\nSubcommands: list, log, errors, retry, stop, simulate\nimport [component-patterns...] - bring components from remote scopes into your workspace\ndelete <component-pattern> - soft-delete components from remote scopes\nrecover <component-pattern> - restore soft-deleted components\nexport [component-patterns...] - upload components to remote scopes\nlane [sub-command] - manage lanes for parallel development\nSubcommands: list, show, create, remove, change-scope, alias, rename, remove-readme, import, remove-comp, fetch, eject, current, history, history-diff, checkout, revert, updates, merge-move\nci <sub-command> - continuous integration commands for automated workflows\nSubcommands: verify, pr, merge, sync\ndeprecate <component-pattern> - mark components as deprecated to discourage their use\nundeprecate <component-pattern> - remove the deprecation status from components\nfork <pattern> [target-component-name] - create a new component by copying from an existing one\ninternalize [component-pattern] - mark components as internal to hide them by default in the UI\n\nRun & Serve\nstart [component-pattern] - launch the Bit development server\nrun [app-name] - start an application component locally\napp [sub-command] - manage application components\nSubcommands: list, run\n\nAdvanced/Debug\ncapsule - manage isolated component environments\nSubcommands: list, create, delete, prune\nmcp-server [sub-command] - start Model Context Protocol server for AI assistants\nSubcommands: start, setup, rules\n\nDevelop components\nscript [script-name] - run a script defined by the environment\n\nAuthentication & Cloud\nlogin - authenticate with Bit Cloud for component publishing and collaboration\nlogout - sign out of Bit Cloud and clear authentication tokens\nwhoami - display the currently authenticated Bit Cloud user\nnpmrc [sub-command] - configure .npmrc file with Bit Cloud registry and authentication settings\nSubcommands: generate\n\nWorkspace Tools\nws-config <sub-command> - generate IDE configuration files\nSubcommands: write, clean, list\ngit <sub-command> - Git utilities for Bit repositories\nSubcommands: set-merge-driver\nrefactor <sub-command> - automatically refactor component source code\nSubcommands: dependency-name\n\nComponent Development\nadd [path...] - track existing directory contents as new components in the workspace\ncreate <template-name> <component-names...> - scaffold new component(s) from a template (sources, config, and env)\ntemplates - list available templates for creating components and workspaces\nwatch - watch and compile components on file changes\nbuild [component-pattern] - run build pipeline tasks in isolated environments\ncompile [component-names...] - transpile component source files\nmove <current-component-dir> <new-component-dir> - relocate a component to a different directory\nremove <component-pattern> - untrack components from the workspace\nrename <current-name> <new-name> - change a component name\n\nTesting & Quality\nartifacts <component-pattern> - view and download build artifacts\ncheck-types [component-pattern] - validate TypeScript type correctness\ntest [pattern-or-test-file...] - run component tests\nlint [component-pattern] - analyze component code for issues and style violations\nvalidate [component-pattern] - run type-checking, linting, and testing in sequence\nformat [component-pattern] - auto-format component source code\n\nDependencies & Packages\ninstall [packages...] - install workspace dependencies\nuninstall [packages...] - remove dependencies from workspace\nupdate [package-patterns...] - update workspace dependencies to newer versions\nlink [component-names...] - create links between components and node_modules\neject <component-pattern> - remove component from workspace and install it as npm package\ndeps <sub-command> - manage component dependencies\nSubcommands: get, remove, unset, debug, set, reset, eject, blame, usage, diagnose, circular, write\nwhy <dependency-name> - find components that use the specified dependency\nset-peer <component-id> <range> - configure component to always be installed as peer dependency\nunset-peer <component-id> - remove always-peer configuration from component\ndependents <component-name> - show components that depend on the specified component\n\nVersion Control\ncheckout <to> [component-pattern] - switch between component versions or remove local changes\nrevert <component-pattern> <to> - replace component files with specified version while preserving current version\ntag [component-patterns...] - create immutable component snapshots with semantic version tags\nsnap [component-pattern] - create immutable component snapshots for development versions\nreset [component-pattern] - revert local tags and snaps to previous versions\nmerge [component-pattern] - merge diverged component history when local and remote have different versions\nstash <sub-command> - temporarily save and restore component changes\nSubcommands: save, load, list\nlog <id> - display component version history\nlog-file <filepath> - EXPERIMENTAL. display history of changes to a specific file\nblame <filepath> - EXPERIMENTAL. show line-by-line authorship and modification history\n\nWorkspace & Project Setup\ninit [path] - initialize a Bit workspace in an existing project\nnew <template-name> <workspace-name> - create a new Bit workspace from a template\nclone <component-id> [dir] - create a workspace from its workspace-root component, with every component it lists\n\nIMPORTANT: When you need flags, arguments, or subcommand details, READ the file CLI_REFERENCE.md in this same directory using the Read tool. Only fall back to 'bit <command> --help' if the reference file doesn't cover what you need.\n\n<!-- File: CLAUDE.md (Tokens: ~2350 | Category: claude-rule) -->\n# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## Additional Bit Workflow Instructions\n\nFor comprehensive Bit MCP workflow instructions and core principles, see: `.github/instructions/bit.instructions.md`\n\n## Public Repo Hygiene\n\nThis repo is open source. Commits, branch names, PR titles/descriptions, and PR comments are public.\n\n- **No private data**: Never use real component-ids, package names, scope/org names, or people's names (these often come from the prompt or from a bug report) in commits, PRs, or PR comments — they may be private. Use made-up placeholders instead (e.g. `my-org.my-scope/button`).\n- **No private commands**: Some internal `bit` commands are defined outside this repo and must not be mentioned publicly. Before naming a `bit` command in a commit, branch, or PR, verify it's defined here (`grep -rn \"name = '<command>\" scopes components`). If it isn't, describe the behavior instead (e.g. \"a lane merge from a bare scope\", \"snapping from a scope\"). Internal API names that live in this repo (e.g. `snapFromScope`, `mergeSnaps`) are fine to mention.\n\n## CLI Output Style Guide\n\nWhen modifying CLI command output, follow the style guide: `scopes/harmony/cli/cli-output-style-guide.md`\n\nUse the shared formatting toolkit from `@teambit/cli` (`scopes/harmony/cli/output-formatter.ts`) — never hardcode chalk styles for section titles or Unicode symbols.\n\n## Development Commands\n\n**IMPORTANT**: This repository practices \"dogfooding\" - Bit is built using Bit itself. Always use `bit` commands rather than direct npm/pnpm commands where possible.\n\n### Setup and Installation\n\n- `npm run full-setup` - Complete setup for the repository (installs dependencies, sets up husky, compiles)\n- `npm run setup` - Basic setup (bit install and compile)\n- `bit install` - Install dependencies (uses PNPM under the hood, never run `pnpm install` directly)\n- `npm run dev-link [alias]` - Creates a global symlink for the bit binary (default: bit-dev)\n\n### Build and Compilation\n\n- `bit compile` - Compile all components\n- `bit watch` - Watch for changes and compile automatically\n\n### Testing\n\n**IMPORTANT — prefer unit tests (`.spec.ts`) over e2e tests.** E2e tests are extremely expensive: they dominate CI time and are responsible for ~80% of our CircleCI credit spend. When adding test coverage:\n\n- Default to unit tests: `.spec.ts` files alongside the source, run with `bit test`.\n- Only write an e2e test when the scenario genuinely cannot be covered by a unit test — e.g. it requires a real workspace + remote scope and a flow spanning multiple bit commands (tag/export/import/lane flows).\n- Before creating a new e2e **file**, check if an existing e2e file already covers the area and add a `describe`/`it` there instead — each new file adds fixed setup overhead on CI.\n- Keep any e2e test minimal: fewest components, fewest commands, no redundant variations of the same flow.\n\n- `bit test` - Run unit tests for components/aspects\n- `bit test --debug` - Run unit tests in debug mode (prints workspace location, keeps workspaces)\n- `npm run e2e-test` - Run end-to-end tests (can take hours, usually run on CI)\n- `npm run e2e-test:debug` - Run e2e tests in debug mode (keeps workspaces, prints output)\n- `npm run mocha-circleci` - Run mocha tests with CircleCI configuration\n\n**Running specific e2e tests:**\n⚠️ **CRITICAL: ALWAYS add `.only` to the test before running e2e tests!** ⚠️\n\n- Add `.only` to the `describe` or `it` block (e.g., `describe.only(...)` or `it.only(...)`)\n- Then run `npm run e2e-test` or `npm run e2e-test:debug`\n- The `--grep` flag does NOT work reliably - you MUST use `.only`\n- Running without `.only` will execute the ENTIRE test suite which takes hours\n- Example: Change `describe('my test', ...)` to `describe.only('my test', ...)`\n\n**Bug reproduction testing:** When asked to reproduce a bug, first try to reproduce it with a unit test (`.spec.ts`) at the level of the component that owns the logic. Only fall back to an e2e test when the bug spans multiple bit commands or requires a real workspace/remote-scope flow. Never create test directories in the current workspace — you cannot create nested Bit workspaces; the e2e test helpers provide workspace creation methods that use temporary directories and automatically clean up after tests.\n\n### Linting and Formatting\n\n- `npm run lint` - Run Oxlint and TypeScript type checking (`tsc --noEmit`)\n- `npm run lint:fix` - Run Oxlint with auto-fix\n- `npm run format` - Format code with Prettier\n- `npm run prettier:check` - Check if code is formatted correctly\n\nLint rules live in `.oxlintrc.json`. ESLint has been fully removed from this repo's linting; the `eslint` packages remaining in `workspace.jsonc` are for `@teambit/defender.eslint-linter` which is shipped to Bit users' envs.\n\n**IMPORTANT**: After making code changes, always run `npm run lint` to verify. Do NOT run `npx tsc --noEmit` or `npx oxlint` directly — `npm run lint` is the canonical command and covers both type checking and linting for this repo.\n\n### Bit-specific Commands\n\n- `bit start` - Start the Bit UI for component development\n- `bit status` - Show workspace status\n- `bit compile` - Compile components\n- `bit test` - Run tests\n- `bit tag` - Tag components for release\n- `bit export` - Export components to remote scopes\n\n## Architecture Overview\n\n### Component System\n\nBit is built using a component-based architecture where the entire codebase is composed of reusable components. The system follows a modular approach with:\n\n- **Aspects**: Core building blocks that provide functionality across the system\n- **Scopes**: Organizational units that group related components\n- **Environments**: Define how components are built, tested, and bundled\n- **Capsules**: Isolated environments for component operations\n\n### Key Directories\n\n**Core Architecture:**\n\n- `scopes/` - Contains all aspects organized by domain (harmony, component, dependencies, etc.)\n- `components/` - Standalone components and utilities\n- `e2e/` - End-to-end tests organized by functionality\n\n**Important Scopes:**\n\n- `scopes/harmony/` - Core runtime and infrastructure aspects\n- `scopes/component/` - Component-related functionality\n- `scopes/compilation/` - Build and compilation aspects\n- `scopes/dependencies/` - Dependency management\n- `scopes/workspace/` - Workspace management\n- `scopes/scope/` - Remote scope operations\n\n### Aspect System\n\nEach aspect follows a standard structure:\n\n- `.aspect.ts` - Aspect definition and metadata\n- `.main.runtime.ts` - Main runtime implementation\n- `.ui.runtime.ts` - UI runtime implementation (if applicable)\n- `.docs.mdx` - Documentation\n- `.composition.tsx` - Component compositions for testing\n\n**New aspects must use the core-aspect env** (`teambit.harmony/envs/core-aspect-env`), like every other aspect here. No variant sets it, so a new component otherwise falls back to `teambit.harmony/node`. Pass it when creating the aspect: `bit create bit-aspect <name> --scope <scope> --env teambit.harmony/envs/core-aspect-env`. If the component was added with `bit add` (which has no env flag), run `bit envs set <component-id> teambit.harmony/envs/core-aspect-env` right after. Verify with `bit envs get <component-id>`. The same fallback hits any new component: give a non-aspect component the env of its siblings (e.g. `teambit.node/envs/node-babel-mocha` for `scopes/*/modules/*`, `teambit.node/envs/node-typescript-mocha` for `scopes/toolbox/*`).\n\n### Configuration\n\n- `workspace.jsonc` - Main workspace configuration\n- `package.json` - Node.js dependencies and scripts\n- `tsconfig.json` - TypeScript configuration\n- `.bitmap` - Component tracking (auto-generated)\n\n### Development Patterns\n\n**Dependency Management:**\n\n- Uses `bit install` which runs PNPM programmatically under the hood\n- Never run `pnpm install` directly - always use `bit install`\n- `bit install` performs multiple operations beyond just package installation\n- Strict peer dependency rules configured\n- Component dependencies managed through Bit's dependency resolver\n\n**Testing Strategy:**\n\n- Unit tests: `.spec.ts` files alongside source\n- E2E tests: Comprehensive scenarios in `e2e/` directory\n- Component compositions: Interactive examples in `.composition.tsx`\n\n**Build Process:**\n\n- TypeScript compilation with strict mode\n- Babel for transpilation\n- Webpack for bundling\n- Oxlint for linting with custom rules (configured in `.oxlintrc.json`)\n\n### Key Concepts\n\n**Bootstrap Flow:**\n\n1. User runs a Bit command\n2. Bit builds a graph of core aspects + workspace aspects\n3. All aspects are loaded and instantiated\n4. Aspects register CLI commands\n5. Command is parsed and executed\n\n**Component Lifecycle:**\n\n- Add/Create: Components added to workspace (.bitmap updated)\n- Tag/Snap: Components versioned and stored in scope\n- Export: Components published to remote scopes\n- Import: Components brought into workspace from remote scopes\n\n**Workspace vs Scope:**\n\n- Workspace: Development environment with source code\n- Scope: Storage for versioned components (local: `.bit/`, remote: Bit Cloud)\n\n## Development Notes\n\n### Environments\n\n- Components use environments for build, test, and bundle operations\n- Default environments: Node.js, React, Angular, Vue\n- Custom environments can be created by extending base environments\n\n### Debugging\n\n- Debug logs: `~/Library/Caches/Bit/logs/debug.log` (macOS)\n- Verbose logging: `BIT_LOG=*` prefix\n- Stack traces written to debug.log\n- Use `bit globals` to locate debug.log\n\n### Performance\n\n- Use `bit watch` for faster development cycles\n- E2E tests run in parallel on CI\n- Component compilation can be parallelized\n\n### Aspect Configuration\n\n- Aspects accept config as 2nd parameter in `provider` method: `provider(deps, config)`\n- Define TypeScript interface for config and inject into main class constructor\n- Configure in `workspace.jsonc` under aspect ID key\n</yakaai_skills>"}