UNPKG

@fragments-sdk/skills

Version:

Agent skills for Fragments — the design governance platform and UI component library

218 lines (163 loc) 7.64 kB
--- name: fragments/cloud-setup description: Set up Fragments Cloud design governance in your project. Installs @fragments-sdk/govern, guides API key configuration, creates a governance config, runs your first check, and optionally adds CI/CD. Use when the user wants to add design governance, connect to Fragments Cloud, run design checks, or set up Fragments governance in their project. type: core library: "@fragments-sdk/govern" library_version: ">=0.1.0" sources: - "fragments-sdk/skills:skills/cloud-setup/SKILL.md" disable-model-invocation: true --- # Fragments Cloud Setup Set up design governance with Fragments Cloud -- from zero to running checks with optional CI. ## 1. Detect project environment - Confirm the project has a `package.json`. If not, ask if the user wants to initialize one. - Detect the package manager from lock files: - `bun.lockb` or `bun.lock` -> bun - `pnpm-lock.yaml` -> pnpm - `yarn.lock` -> yarn - Otherwise -> npm - Detect the framework (React, Next.js, Vue, Nuxt, Svelte, SvelteKit, Astro) from dependencies. - Check if `@fragments-sdk/ui` is already installed -- if so, note it and configure governance to work alongside it. ## 2. Install the governance SDK and CLI First check if these are already available: - In a **monorepo** with workspace dependencies (look for `"workspace:*"` or `"workspace:^"` in `package.json`), the packages may already be linked. Check if `@fragments-sdk/govern` and `@fragments-sdk/cli` appear in `dependencies` or `devDependencies`. If they're workspace deps, **skip the install step**. - Also check if a `pnpm-workspace.yaml` or `workspaces` field exists in a parent directory -- if so, you're in a monorepo. If not already installed: ```bash <package-manager> add @fragments-sdk/govern @fragments-sdk/cli ``` The `govern` package provides the governance engine. The `cli` package provides the `fragments` binary used to run checks. ## 3. Configure the API key **IMPORTANT: Never ask the user to paste their API key into the chat or accept it as an argument. Never write secrets directly.** Instead, guide the user to set it themselves: 1. Tell the user to add their API key to `.env` (or `.env.local`) manually: ``` FRAGMENTS_API_KEY=fc_your_key_here ``` Say: "Add your Fragments Cloud API key to `.env`. You can find it in the onboarding dashboard or Settings > API Keys." 2. Ensure `.env` and `.env.local` are in `.gitignore`. Create `.gitignore` if needed. 3. Add `.agents/` to `.gitignore` if not already present (this is where installed skills live). 4. After the user confirms the key is set, verify it exists by checking that `.env` contains a `FRAGMENTS_API_KEY` line (do NOT read or output the actual value). ## 4. Create governance config Create `fragments.config.ts` in the project root. Adapt the `input` glob to the detected framework: ```ts import { defineConfig } from '@fragments-sdk/govern'; export default defineConfig({ cloud: true, checks: ['accessibility', 'consistency', 'responsive'], input: './src/**/*.{tsx,jsx}', }); ``` Framework-specific `input` patterns: - Next.js App Router: `['./app/**/*.{tsx,jsx}', './components/**/*.{tsx,jsx}']` - Next.js Pages: `['./pages/**/*.{tsx,jsx}', './components/**/*.{tsx,jsx}']` - Vue / Nuxt: `['./**/*.vue']` - Svelte / SvelteKit: `['./src/**/*.svelte']` - Astro: `['./src/**/*.{astro,tsx,jsx}']` Exclude test and story files to avoid inflating violation counts. Add an `exclude` glob if the project has them: ```ts export default defineConfig({ cloud: true, checks: ['accessibility', 'consistency', 'responsive'], input: './src/**/*.{tsx,jsx}', exclude: ['**/*.test.*', '**/*.spec.*', '**/*.stories.*'], }); ``` ## 5. Run the first check ```bash npx fragments govern check --cloud ``` Show the output. If there are violations, briefly explain what they mean and how to fix them. ## 6. Offer CI/CD setup Ask: "Want to add Fragments checks to your CI pipeline? (GitHub Actions / GitLab CI / skip)" ### GitHub Actions Create `.github/workflows/fragments-check.yml`. Adapt the install command to the detected package manager: ```yaml name: Fragments Design Check on: pull_request: branches: [main, master] permissions: contents: read pull-requests: write jobs: design-check: name: Design Governance runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 20 - run: <package-manager-install-command> - name: Run Fragments checks run: npx fragments govern check --cloud --format github env: FRAGMENTS_API_KEY: ${{ secrets.FRAGMENTS_API_KEY }} ``` Replace `<package-manager-install-command>` based on detection: - npm: `npm ci` - pnpm: `pnpm install --frozen-lockfile` - yarn: `yarn install --frozen-lockfile` - bun: `bun install --frozen-lockfile` The `--format github` flag outputs violations as GitHub PR annotations, so they appear inline on the diff. ### GitLab CI Add a `fragments-check` job to `.gitlab-ci.yml`: ```yaml fragments-check: stage: test image: node:20 script: - <package-manager-install-command> - npx fragments govern check --cloud variables: FRAGMENTS_API_KEY: $FRAGMENTS_API_KEY rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" ``` After creating the CI config, remind the user to add `FRAGMENTS_API_KEY` as a secret in their CI provider settings. ## 7. Confirm completion Summarize what was done: - `@fragments-sdk/govern` and `@fragments-sdk/cli` installed - API key configured in `.env` (remind them not to commit it) - Governance config created at `fragments.config.ts` - First check ran -- results visible in Fragments Cloud dashboard - CI workflow created (if chosen) Mention related skills: - `/fragments-govern` to run checks, review staged changes, and fix violations - `/fragments-policy` to create custom design rules - If `@fragments-sdk/ui` is not installed, mention `/fragments-ui-setup` to add the component library ## Common mistakes ### CRITICAL: API key committed to version control Committing `.env` with `FRAGMENTS_API_KEY` to git exposes the key. This must be prevented during setup, not fixed later. The setup steps above ensure `.env` and `.env.local` are in `.gitignore` before the key is added. If `.gitignore` is missing or doesn't cover these files, create or update it immediately. ### HIGH: Wrong package manager in CI Using `npm ci` in CI when the project uses pnpm/yarn/bun causes missing dependencies and failed governance checks. Wrong -- hardcoded npm in a pnpm project: ```yaml - run: npm ci ``` Correct -- match the project's package manager: ```yaml - run: pnpm install --frozen-lockfile ``` Always detect the package manager in step 1 and carry that choice through to the CI workflow. ### HIGH: Missing API key in CI environment Setting `cloud: true` in `fragments.config.ts` but not adding `FRAGMENTS_API_KEY` as a CI secret causes cryptic authentication errors in the pipeline. After creating the CI workflow, always remind the user: "Add `FRAGMENTS_API_KEY` as a secret in your CI provider (GitHub: Settings > Secrets, GitLab: Settings > CI/CD > Variables)." ### MEDIUM: Input glob includes test and story files A broad glob like `./src/**/*.{tsx,jsx}` captures test files and Storybook stories, inflating violation counts with irrelevant findings. Wrong: ```ts export default defineConfig({ input: './src/**/*.{tsx,jsx}', }); ``` Correct: ```ts export default defineConfig({ input: './src/**/*.{tsx,jsx}', exclude: ['**/*.test.*', '**/*.spec.*', '**/*.stories.*'], }); ```