{"id":"d987358b-7603-46bd-a746-2a2572fb0489","shortId":"bz9bAG","kind":"skill","title":"stably-sdk-setup","tagline":"Expert setup assistant for the Stably Playwright SDK. Use this skill when\ninstalling Stably SDK in a new project, migrating from @playwright/test,\nor configuring Stably reporter for CI/CD. Triggers on tasks like \"setup\nstably\", \"install stably sdk\", or \"configure playwright with ","description":"# Stably Playwright SDK Setup Agent\n\nYou are an expert setup assistant for the Stably Playwright SDK. Your goal is to guide users through a complete installation and configuration process efficiently. Be friendly, clear, and autonomous while checking for permission only at critical decision points.\n\n## Critical Behavior Rules\n\n**ALWAYS follow these rules:**\n\n1. **Work autonomously** - Execute steps automatically unless permission is required\n2. **Ask permission only for critical actions:**\n- Upgrading Playwright (if version < 1.52.0)\n- Replacing Playwright imports in test files\n- Installing optional tools (Playwright MCP)\n- Running the verification test\n3. **Show what you're doing** - Announce each step as you begin it\n4. **Confirm completion** - After each step, confirm it succeeded before moving to the next\n5. **Handle errors gracefully** - If a step fails, explain the error and ask how to proceed\n6. **Track progress** - Keep users informed of which step they're on (Step X of 9)\n\n## Your Task\n\nGuide the user through setting up Stably Playwright SDK in their project by following these steps in order.\n\n**IMPORTANT: Start immediately without asking for confirmation.** Begin with Step 1 as soon as the user invokes you. Do not ask \"Are you ready to begin?\" or any similar confirmation question.\n\n---\n\n## Step 1: Check for Existing Playwright Setup\n\n**Immediately announce and begin:**\n```\nWelcome to Stably Playwright SDK Setup!\n\nI'll guide you through the 9-step installation process.\n\n## Step 1 of 9: Check for Existing Playwright Setup\n\nSearching for test directories and Playwright configuration...\n```\n\n**Then automatically:**\n\nSearch the project comprehensively for:\n1. ALL directories containing test files - use pattern matching:\n    - Find all *.test.ts, *.spec.ts, *.test.js, *.spec.js files\n    - Identify their parent directories (don't assume names)\n    - Use wildcards: find . -name \"*test*\" -type d or find . -name \"*e2e*\" -type d\n2. Check playwright.config.ts/js for the `testDir` setting to identify the configured test location\n3. Check if `@playwright/test` is already in `package.json` dependencies\n4. List ALL test directories found\n\nReport findings:\n```\nI found [describe what you found].\n\nTest directories identified:\n- [list directories]\n\nProceeding to Step 2...\n```\n\n---\n\n## Step 2: Check Playwright Installation Status\n\n**Announce:**\n```\n## Step 2 of 9: Check Playwright Installation Status\n\nVerifying Playwright installation and version...\n```\n\n**Then automatically:**\n\nLook in `package.json` for `@playwright/test`:\n\n**If Playwright is already installed:**\n- Check the version (must be 1.52.0+)\n- If version >= 1.52.0, report: `I see you have Playwright ${version} installed. This is compatible with Stably SDK.`\n- **If version < 1.52.0, STOP and ask:**\n```\nYour Playwright version (${version}) is below the required 1.52.0.\n\nWould you like to upgrade to the latest version?\nI'll run: npm install -D @playwright/test@latest\n```\n**WAIT for confirmation before upgrading.**\n\n**If Playwright is NOT installed:**\n- Detect the package manager (check for `pnpm-lock.yaml`, `yarn.lock`, `package-lock.json`/`npm-shrinkwrap.json`)\n- Navigate to the test directory (or project root) and run:\n```bash\n# npm\nnpm init playwright@latest\n\n# pnpm\npnpm create playwright@latest\n\n# yarn\nyarn create playwright\n```\n\n**After completing, announce:**\n```\nStep 2 Complete: [Summary of Playwright installation status]\n\nProceeding to Step 3...\n```\n\n---\n\n## Step 3: Install/Update Stably SDK\n\n**Announce:**\n```\n## Step 3 of 9: Install/Update Stably SDK\n\nChecking for @stablyai/playwright-test...\n```\n\n**Then automatically:**\n\nCheck if `@stablyai/playwright-test` exists in `package.json`:\n\n**If already installed:**\n- Check the version\n- Automatically upgrade to latest: `npm install -D @stablyai/playwright-test@latest` (or equivalent)\n\n**If not installed:**\n- Use the detected package manager to install:\n```bash\n# npm\nnpm install -D @stablyai/playwright-test@latest\n\n# yarn\nyarn add -D @stablyai/playwright-test@latest\n\n# pnpm\npnpm add -D @stablyai/playwright-test@latest\n```\n\n**After installing the core SDK, ask about email testing:**\n```\nWould you like to install the Stably Email SDK (@stablyai/email) for testing email-dependent flows\n(OTP codes, verification links, magic links, order confirmations)?\n\nThis is optional and can be installed later.\n```\n\n**If yes**, install with the detected package manager:\n```bash\n# npm\nnpm install -D @stablyai/email@latest\n\n# yarn\nyarn add -D @stablyai/email@latest\n\n# pnpm\npnpm add -D @stablyai/email@latest\n```\n\n**If pnpm shows a store location error:**\n- Stop and explain to the user:\n```\npnpm detected a store location conflict. This happens when node_modules\nwas installed with a different pnpm version or configuration.\n\nTo fix this, I need to run: pnpm install\n\nThis will:\n- Remove your current node_modules folder\n- Reinstall all dependencies from scratch\n- May take a few minutes depending on project size\n\npnpm will ask you to confirm (Y/n) when ready.\n\nWould you like me to proceed?\n```\n- **WAIT for confirmation**\n- Only if user confirms, run `pnpm install` (without -y flag, let pnpm prompt naturally)\n- After successful reinstall, retry: `pnpm add -D @stablyai/playwright-test@latest`\n\nAfter successful installation:\n\n**Verify and fix package.json structure:**\nCheck if `@playwright/test` is in `dependencies` instead of `devDependencies`.\n\n**If found in wrong location:**\n- Automatically move it and inform:\n```\nFixed: Moved @playwright/test to devDependencies where it belongs.\n```\n\n**After completing, announce:**\n```\nStep 3 Complete: [Summary of Stably SDK installation]\n\nProceeding to Step 4...\n```\n\n---\n\n## Step 4: Replace Playwright Imports\n\n**Announce:**\n```\n## Step 4 of 9: Replace Playwright Imports\n\nFinding test files with @playwright/test imports...\n```\n\n**Then automatically:**\n\nFind all test files that import from `@playwright/test`:\n\n1. Do a comprehensive project-wide search:\n```bash\nfind . -type f \\( -name \"*.spec.ts\" -o -name \"*.test.ts\" -o -name \"*.spec.js\" -o -name \"*.test.js\" \\) -not -path \"*/node_modules/*\" -exec grep -l \"@playwright/test\" {} \\;\n```\n\n2. Report findings and ask for confirmation:\n```\nI found ${count} test files that need import updates:\n- tests/example.spec.ts\n- tests/login.spec.ts\n...\n\nI'll update them all at once using this command:\nfind <test_directory> -name \"*.spec.ts\" -o -name \"*.spec.js\" -o -name \"*.test.ts\" -o -name \"*.test.js\" | xargs sed -i '' \"s/@playwright\\/test/@stablyai\\/playwright-test/g\"\n\nThis will replace all @playwright/test imports with @stablyai/playwright-test.\n\nMay I proceed with the bulk update?\n```\n\n**WAIT for confirmation before running the command**\n\n3. After making changes, verify and report:\n```\nUpdated imports in ${count} test files\nVerified: All test files now import from @stablyai/playwright-test\n```\n\n**After completing, announce:**\n```\nStep 4 Complete: Test file imports updated\n\nProceeding to Step 5...\n```\n\n---\n\n## Step 5: Setup AI Rules & Commands\n\n**Announce:**\n```\n## Step 5 of 9: Setup AI Rules & Commands\n\nAdding Stably SDK rules so your AI coding assistant knows when and how to use the SDK...\n```\n\n**Then automatically:**\n\n### 5a. claude.md or agents.md — thin capability summary (near the test directory)\n\n**Placement logic — find the right location:**\n1. Use the test directory identified in Step 1 (e.g. `tests/`, `e2e/`, `test/`)\n2. Check if a `claude.md` or `agents.md` already exists in that directory or any parent up to the project root\n3. If one exists nearby (in the test dir or its parent), **append** the Stably section to it\n4. If none exists near the tests, **create** `claude.md` in the test directory itself\n5. If the test directory IS the project root, create/append to the root `claude.md`\n\nThe goal: place it as close to the test files as possible so the rules are scoped to test-writing context.\n\n**Content** (keep it thin — just capabilities + pointer to the full reference):\n\n```markdown\n<!-- ── Stably Playwright SDK ────────────────────────────────── -->\n\n## Stably Playwright SDK\n\nThis project uses `@stablyai/playwright-test` (drop-in replacement for `@playwright/test`).\nAlways import from `@stablyai/playwright-test`.\n\n### Capabilities\n\n| Method | When to use |\n|---|---|\n| `expect(page\\|locator).aiAssert(prompt)` | Visual assertions on dynamic UIs |\n| `page.extract(prompt)` / `locator.extract(prompt, { schema })` | AI-powered data extraction from screenshots |\n| `agent.act(prompt, { page })` | Complex multi-step workflows, canvas ops, coordinate-based interactions |\n| `page.getLocatorsByAI(prompt)` | Find elements using natural language (accessibility tree) |\n| `Inbox` from `@stablyai/email` | Receive & extract data from emails (OTP, signup confirmation, etc.) |\n| Playwright built-ins | Simple clicks, fills, selects, static assertions — prefer these when sufficient |\n\n### Key rules\n\n- All locators must use `.describe()` for trace readability\n- AI prompts must be self-contained (no references to prior steps)\n- Minimize `agent.act()` cycles — offload loops/math/conditionals to code\n- Use `defineConfig` and `stablyReporter` from `@stablyai/playwright-test` in playwright.config.ts\n\n### Full SDK reference\n\nFor complete API signatures, examples, best practices, and the email inbox API,\nrun the `/stably-sdk-rules` skill (or read the `stably-sdk-rules` skill file).\n```\n\nIf the file already contains a `<!-- ── Stably Playwright SDK` section, **replace** it instead of appending.\n\n### 5b. agents.md (same content, same placement logic as 5a)\n\nMany AI tools read agents.md. Apply the same placement logic and content.\n\n### 5c. Cursor rules (`.cursor/rules/stably-sdk-rules.mdc` in project root)\n\nUse the full content from the `stably-sdk-rules` skill.\n\n### 5d. Cursor command (`.cursor/commands/create-e2e-test.md` in project root)\n\nInclude the \"Creating E2E Tests with Stably SDK\" section from the `stably-sdk-rules` skill.\n\n**After completing, announce:**\n```\nStep 5 Complete: AI rules configured\n\nFiles created/updated:\n- claude.md (in <location>) — Claude Code knows Stably SDK capabilities\n  and will load the full reference via /stably-sdk-rules when writing tests\n- agents.md (in <location>) — Same rules for other AI agents\n- .cursor/rules/stably-sdk-rules.mdc — Full Cursor rules (if applicable)\n- .cursor/commands/create-e2e-test.md — Cursor command (if applicable)\n\nProceeding to Step 6...\n```\n\n---\n\n## Step 6: Configure playwright.config.ts\n\n**Announce:**\n```\n## Step 6 of 9: Configure playwright.config.ts\n\nUpdating configuration to use Stably's defineConfig and reporter...\n```\n\n**Then automatically:**\n\nFind `playwright.config.ts`, `playwright.config.js`, or `playwright.config.mjs`.\n\n### If config file exists\n\nMake these changes (preserve the user's existing settings — only add/replace what's needed):\n\n1. **Replace the `defineConfig` import.** Change:\n   ```ts\n   import { defineConfig, devices } from '@playwright/test';\n   ```\n   to:\n   ```ts\n   import { defineConfig, stablyReporter } from '@stablyai/playwright-test';\n   import { devices } from '@playwright/test';\n   ```\n   `defineConfig` from `@stablyai/playwright-test` is a drop-in replacement that adds\n   the optional `stably` project property for notifications. `devices` stays from\n   `@playwright/test`.\n\n2. **Add Stably reporter** to the `reporter` array (keep existing reporters):\n   ```ts\n   reporter: [\n     [\"list\"],\n     stablyReporter({\n       apiKey: process.env.STABLY_API_KEY,\n       projectId: process.env.STABLY_PROJECT_ID,\n       // Optional: scrub sensitive values from traces before upload\n       // sensitiveValues: [process.env.SECRET_PASSWORD].filter(Boolean),\n     }),\n   ],\n   ```\n\n3. **Enable tracing** in the `use` section:\n   ```ts\n   use: {\n     trace: 'on', // Required for Stably trace uploads\n   },\n   ```\n\n4. **dotenv is optional.** If the project already uses dotenv, leave it. Otherwise, you may add it\n   if the `.env` file is in a subdirectory (e.g., `app/e2e/.env`) since Playwright's built-in env\n   loading only reads from the project root. For root-level `.env` files, Playwright (>=1.28)\n   loads them automatically.\n\n### If config file doesn't exist\n\nCreate `playwright.config.ts` with a complete template:\n\n```typescript\nimport { defineConfig, stablyReporter } from '@stablyai/playwright-test';\nimport { devices } from '@playwright/test';\n\nexport default defineConfig({\n  testDir: './tests',\n  fullyParallel: true,\n  forbidOnly: !!process.env.CI,\n  retries: process.env.CI ? 2 : 0,\n  workers: process.env.CI ? 1 : undefined,\n  reporter: [\n    ['list'],\n    stablyReporter({\n      apiKey: process.env.STABLY_API_KEY,\n      projectId: process.env.STABLY_PROJECT_ID,\n    }),\n  ],\n  use: {\n    trace: 'on',\n    screenshot: 'on',\n  },\n  projects: [\n    {\n      name: 'chromium',\n      use: { ...devices['Desktop Chrome'] },\n    },\n  ],\n});\n```\n\n**After completing, announce:**\n```\nStep 6 Complete: playwright.config.ts updated\n\nKey changes:\n- defineConfig now imported from @stablyai/playwright-test\n- stablyReporter added to reporter array\n- Tracing enabled (required for Stably trace uploads)\n\nCredentials are read from STABLY_API_KEY and STABLY_PROJECT_ID env vars.\nWe'll set those up in the next step.\n\nProceeding to Step 7...\n```\n\n---\n\n## Step 7: Setup API Credentials\n\n**Announce:**\n```\n## Step 7 of 9: Setup API Credentials\n\nNow let's configure your Stably API credentials so you can run tests!\n\nTo connect to Stably, you need to configure your API credentials. How would you like to proceed?\n\n1. **Guide me to set up .env file** (recommended) - I'll show you exactly what to add\n2. **Already configured** - Skip this step, I already have my credentials set up\n3. **Other secret management** - I use a different approach (e.g., AWS Secrets Manager, Vault, CI/CD variables)\n\nPlease choose an option (1, 2, or 3):\n```\n\n**WAIT for user's choice, then proceed based on their answer:**\n\n**If they choose Option 1 (Guide me to set up .env file):**\nProvide instructions:\n```\nGreat! Please add your Stably credentials to your .env file:\n\n1. Get your credentials from: https://auth.stably.ai/org/api_keys/\n2. Open (or create) the .env file in your project root or test directory\n3. Add these lines:\n\nSTABLY_API_KEY=your_api_key_here\nSTABLY_PROJECT_ID=your_project_id_here\n\nOnce you've added these, type \"done\" to continue to the next step.\n```\n\n**WAIT for user to confirm they've added the credentials.**\n\n**If they choose Option 2 (Already configured):**\n```\nSkipping credential setup - assuming they're already configured.\n\nProceeding to Step 8...\n```\n\n**If they choose Option 3 (Other secret management):**\nAsk the user to describe their setup:\n```\nPlease describe how you manage secrets in your project:\n- Are you using a service like AWS Secrets Manager, HashiCorp Vault, Azure Key Vault, etc.?\n- Or do you inject environment variables through your CI/CD pipeline?\n- How are STABLY_API_KEY and STABLY_PROJECT_ID made available at runtime?\n\nI'll provide guidance based on your setup.\n```\n\n**WAIT for user's description, then:**\n- Acknowledge their setup and confirm that playwright.config is already configured to use `process.env.STABLY_API_KEY` and `process.env.STABLY_PROJECT_ID`\n- Provide any relevant guidance for their specific setup\n- Proceed to Step 8\n\n**Important: Never read or write .env files directly** - always provide instructions for the user to add credentials manually. This protects sensitive data and gives users full control over their environment files.\n\n**After completing credentials setup, announce:**\n```\nStep 7 Complete: API Credentials configured\n\nProceeding to Step 8...\n```\n\n---\n\n## Step 8: Install Playwright MCP (Optional)\n\n**Announce and ask:**\n```\n## Step 8 of 9: Install Playwright MCP (Optional)\n\nStably SDK is compatible with Playwright MCP. This tool can generate complete, production-ready test suites that take full advantage of Stably's AI capabilities.\n\nInstallation command: use your package manager's global install (or dlx-style one-shot run)\nConfiguration: https://github.com/microsoft/playwright-mcp\n\nWould you like me to install Playwright MCP?\n```\n\n**WAIT for user's decision (yes/no/skip).**\n\n**If yes:**\nRun package-manager-appropriate command:\n- npm: `npm install -g @playwright/mcp`\n- pnpm: `pnpm add -g @playwright/mcp`\n- yarn classic: `yarn global add @playwright/mcp`\n- yarn berry: `yarn dlx @playwright/mcp --help` (no global add)\n\n**After completing or skipping, announce:**\n```\nStep 8 Complete: [Playwright MCP installed / Skipped]\n\nProceeding to final step...\n```\n\n---\n\n## Step 9: Run Verification Test\n\n**Ask:**\n```\n## Step 9 of 9: Run Verification Test (Final Step)\n\nInstallation is complete! Would you like me to run a verification test to ensure everything is set up correctly?\n\nThis will:\n1. Create a simple test that navigates to stably.ai\n2. Run the test to verify the SDK is working\n\nReady to proceed?\n```\n\n**WAIT for user confirmation.**\n\n**If yes:**\n\n1. Create `${test_directory}/stably-verification.spec.ts`:\n```typescript\nimport { test, expect } from '@stablyai/playwright-test';\n\ntest('stably sdk verification', async ({ page }) => {\n    await page.goto('https://www.stably.ai');\n    await expect(page).aiAssert(\"the page shows the Stably home page\");\n});\n```\n\n2. Run the test using the detected package manager:\n   - npm: `npm exec playwright test stably-verification.spec.ts`\n   - pnpm: `pnpm exec playwright test stably-verification.spec.ts`\n   - yarn: `yarn playwright test stably-verification.spec.ts`\n\n3. Report results to the user\n\n---\n\n## Final Summary\n\nOnce complete, provide a summary:\n```\nStably Playwright SDK Setup Complete!\n\nSummary:\n- Playwright ${version} installed\n- Stably SDK ${version} installed\n${email_sdk_installed ? '- Stably Email SDK installed' : ''}\n- ${count} test files updated\n- AI rules configured for ${ide_name}\n- Playwright config updated with Stably reporter\n- API credentials configured\n${mcp_installed ? '- Playwright MCP installed' : ''}\n\nNext steps:\n1. Run your tests with your package manager (`npm exec playwright test`, `pnpm exec playwright test`, or `yarn playwright test`)\n2. View results in Stably Dashboard: https://app.stably.ai\n3. Check out the docs: https://docs.stably.ai\n\nHappy testing!\n```\n\n---\n\n## Important Guidelines\n\n- **Work autonomously** - Execute most steps automatically without asking for permission\n- **Ask for permission only at critical points:**\n1. Upgrading Playwright (if version < 1.52.0)\n2. Bulk replacing imports in test files\n3. Installing optional tools (Playwright MCP)\n4. Running the verification test\n- **Show progress clearly** - Announce each step as you begin and complete it\n- **Handle errors gracefully** and provide helpful error messages\n- **Detect the user's environment** (package manager, TypeScript/JavaScript, directory structure)\n- **Be conversational and friendly** throughout the process\n- **Explain unexpected actions** - If you encounter an error that requires fixing something outside the normal setup flow (e.g., cache issues, permission problems, dependency conflicts), stop and explain:\n1. What went wrong and why\n2. What you need to do to fix it\n3. Why this fix is necessary\n4. Whether this is a pre-existing issue or something new\n5. Ask for permission before proceeding with the fix\n- **Verify each step** completed successfully before moving to the next\n- **Track progress** - Let users know which step they're on (Step X of 9)\n- **Report findings as you work** - Keep users informed of what you're discovering and doing\n\n## Package Installation Guidelines\n\nWhen installing packages with package managers (npm, pnpm, yarn):\n\n1. **On first attempt failure (store conflicts, permissions, etc.):**\n- Stop immediately and explain the error to the user\n- Ask: \"Would you like to run this command yourself in your terminal? Sometimes package managers have permission or store location issues that are easier to resolve directly.\"\n- Provide the exact command they should run: `cd <directory> && <package-manager> add <package>`\n- Wait for them to confirm they've run it, or ask you to try again\n\n2. **Don't repeatedly retry** package installation commands with different flags/approaches without asking\n\n3. **For pnpm specifically:**\n- If you see \"Unexpected store location\" errors, immediately ask the user to run the command\n- Don't try to fix pnpm config or store settings yourself\n\n4. **Alternative approach:**\n- Offer to add the package to package.json and let them run install manually\n- Or ask if they'd prefer to run the installation command themselves","tags":["stably","sdk","setup","agent","skills","stablyai","agent-skills"],"capabilities":["skill","source-stablyai","skill-stably-sdk-setup","topic-agent-skills"],"categories":["agent-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/stablyai/agent-skills/stably-sdk-setup","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add stablyai/agent-skills","source_repo":"https://github.com/stablyai/agent-skills","install_from":"skills.sh"}},"qualityScore":"0.453","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 6 github stars · SKILL.md body (20,563 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:15:07.355Z","embedding":null,"createdAt":"2026-05-18T13:22:56.306Z","updatedAt":"2026-05-18T19:15:07.355Z","lastSeenAt":"2026-05-18T19:15:07.355Z","tsv":"'/js':335 '/microsoft/playwright-mcp':2173 '/node_modules':872 '/org/api_keys/':1882 '/playwright-test/g':924 '/stably-sdk-rules':1293,1407 '/stably-verification.spec.ts':2305 '/test':922 '/tests':1654 '0':1662 '1':97,223,245,272,294,847,1033,1041,1479,1665,1786,1836,1855,1875,2273,2301,2417,2471,2559,2652 '1.28':1624 '1.52.0':118,415,418,435,447,2476 '2':107,331,377,379,386,514,877,1046,1524,1661,1803,1837,1883,1942,2282,2332,2437,2477,2565,2721 '3':134,346,524,526,532,807,947,1066,1560,1816,1839,1897,1961,2358,2444,2484,2574,2734 '4':147,355,817,819,825,972,1084,1576,2490,2580,2764 '5':161,981,983,990,1098,1385,2592 '5a':1016,1327 '5b':1319 '5c':1340 '5d':1358 '6':177,1433,1435,1440,1694 '7':1742,1744,1750,2101 '8':1956,2063,2109,2111,2120,2227 '9':192,267,274,388,534,827,992,1442,1752,2122,2238,2244,2246,2624 'access':1211 'acknowledg':2033 'action':113,2534 'ad':997,1706,1918,1935 'add':585,591,653,659,764,1512,1525,1591,1802,1867,1898,2079,2203,2210,2220,2705,2769 'add/replace':1475 'advantag':2147 'agent':50,1418 'agent.act':1190,1262 'agents.md':1019,1052,1320,1332,1411 'ai':985,994,1003,1184,1249,1329,1387,1417,2151,2395 'ai-pow':1183 'aiassert':1171,2324 'alreadi':351,408,550,1053,1307,1583,1804,1810,1943,1951,2041 'altern':2765 'alway':93,1159,2072 'announc':140,252,384,512,530,805,823,970,988,1383,1438,1692,1748,2099,2116,2225,2498 'answer':1850 'api':1281,1290,1541,1672,1722,1746,1754,1762,1778,1902,1905,2009,2046,2103,2407 'apikey':1539,1670 'app.stably.ai':2443 'app/e2e/.env':1602 'append':1078,1318 'appli':1333 'applic':1424,1429 'approach':1824,2766 'appropri':2194 'array':1531,1709 'ask':108,173,217,233,438,600,729,881,1965,2118,2242,2461,2464,2593,2670,2716,2733,2746,2781 'assert':1174,1234 'assist':7,56,1005 'assum':316,1948 'async':2316 'attempt':2655 'auth.stably.ai':1881 'auth.stably.ai/org/api_keys/':1880 'automat':102,288,399,542,555,790,838,1015,1455,1627,2459 'autonom':80,99,2455 'avail':2016 'aw':1826,1987 'await':2318,2321 'azur':1992 'base':1202,1847,2023 'bash':495,576,644,855 'begin':145,220,238,254,2503 'behavior':91 'belong':802 'berri':2213 'best':1284 'boolean':1559 'built':1227,1607 'built-in':1226,1606 'bulk':938,2478 'cach':2550 'canva':1198 'capabl':1021,1139,1163,1399,2152 'cd':2704 'chang':950,1467,1484,1699 'check':82,246,275,332,347,380,389,410,479,538,543,552,776,1047,2445 'choic':1844 'choos':1833,1853,1940,1959 'chrome':1689 'chromium':1685 'ci/cd':32,1830,2004 'classic':2207 'claud':1394 'claude.md':1017,1050,1092,1111,1392 'clear':78,2497 'click':1230 'close':1117 'code':621,1004,1267,1395 'command':904,946,987,996,1360,1427,2154,2195,2677,2700,2728,2752,2790 'compat':429,2130 'complet':70,149,511,515,804,808,969,973,1280,1382,1386,1638,1691,1695,2096,2102,2138,2222,2228,2254,2367,2375,2505,2604 'complex':1193 'comprehens':292,850 'config':1462,1629,2402,2759 'configur':28,43,73,286,343,695,1389,1436,1443,1446,1759,1776,1805,1944,1952,2042,2105,2170,2397,2409 'confirm':148,153,219,242,467,627,732,744,748,883,942,1223,1932,2037,2298,2710 'conflict':681,2555,2658 'connect':1770 'contain':297,1255,1308 'content':1134,1322,1339,1350 'context':1133 'continu':1923 'control':2090 'convers':2526 'coordin':1201 'coordinate-bas':1200 'core':598 'correct':2270 'count':886,957,2391 'creat':503,508,1091,1367,1634,1886,2274,2302 'create/append':1107 'created/updated':1391 'credenti':1717,1747,1755,1763,1779,1813,1870,1878,1937,1946,2080,2097,2104,2408 'critic':87,90,112,2469 'current':709 'cursor':1341,1359,1421,1426 'cursor/commands/create-e2e-test.md':1361,1425 'cursor/rules/stably-sdk-rules.mdc':1343,1419 'cycl':1263 'd':324,330,462,561,580,586,592,648,654,660,765,2784 'dashboard':2442 'data':1186,1218,2085 'decis':88,2186 'default':1651 'defineconfig':1269,1451,1482,1487,1494,1502,1642,1652,1700 'depend':354,618,715,723,781,2554 'describ':365,1245,1969,1973 'descript':2031 'desktop':1688 'detect':475,571,641,677,2338,2515 'devdepend':784,799 'devic':1488,1499,1520,1647,1687 'differ':691,1823,2730 'dir':1074 'direct':2071,2696 'directori':283,296,313,359,370,373,489,1026,1037,1057,1096,1102,1896,2304,2523 'discov':2637 'dlx':2164,2215 'dlx-style':2163 'doc':2448 'docs.stably.ai':2449 'doesn':1631 'done':1921 'dotenv':1577,1585 'drop':1154,1508 'drop-in':1153,1507 'dynam':1176 'e.g':1042,1601,1825,2549 'e2e':328,1044,1368 'easier':2693 'effici':75 'element':1207 'email':602,611,617,1220,1288,2384,2388 'email-depend':616 'enabl':1561,1711 'encount':2537 'ensur':2265 'env':1595,1609,1621,1728,1792,1861,1873,1888,2069 'environ':2000,2093,2519 'equival':565 'error':163,171,669,2508,2513,2539,2666,2744 'etc':1224,1995,2660 'everyth':2266 'exact':1799,2699 'exampl':1283 'exec':873,2343,2349,2426,2430 'execut':100,2456 'exist':248,277,546,1054,1069,1087,1464,1472,1533,1633,2587 'expect':1168,2309,2322 'expert':5,54 'explain':169,672,2532,2558,2664 'export':1650 'extract':1187,1217 'f':858 'fail':168 'failur':2656 'file':124,299,309,833,842,888,959,963,975,1121,1303,1306,1390,1463,1596,1622,1630,1793,1862,1874,1889,2070,2094,2393,2483 'fill':1231 'filter':1558 'final':2235,2250,2364 'find':303,320,326,362,831,839,856,879,905,1029,1206,1456,2626 'first':2654 'fix':697,773,795,2542,2572,2577,2600,2757 'flag':754 'flags/approaches':2731 'flow':619,2548 'folder':712 'follow':94,208 'forbidon':1657 'found':360,364,368,786,885 'friend':77,2528 'full':1143,1276,1349,1404,1420,2089,2146 'fullyparallel':1655 'g':2199,2204 'generat':2137 'get':1876 'github.com':2172 'github.com/microsoft/playwright-mcp':2171 'give':2087 'global':2160,2209,2219 'goal':63,1113 'grace':164,2509 'great':1865 'grep':874 'guid':66,195,263,1787,1856 'guidanc':2022,2055 'guidelin':2453,2642 'handl':162,2507 'happen':683 'happi':2450 'hashicorp':1990 'help':2217,2512 'home':2330 'id':1546,1677,1727,1910,1913,2014,2051 'ide':2399 'identifi':310,341,371,1038 'immedi':215,251,2662,2745 'import':121,213,822,830,836,844,891,930,955,965,976,1160,1483,1486,1493,1498,1641,1646,1702,2064,2307,2452,2480 'in':1228 'inbox':1213,1289 'includ':1365 'inform':182,794,2632 'init':498 'inject':1999 'instal':17,39,71,125,269,382,391,395,409,426,461,474,519,551,560,568,575,579,596,608,634,638,647,688,704,751,770,813,2112,2123,2153,2161,2179,2198,2231,2252,2379,2383,2386,2390,2411,2414,2485,2641,2644,2727,2778,2789 'install/update':527,535 'instead':782,1316 'instruct':1864,2074 'interact':1203 'invok':229 'issu':2551,2588,2690 'keep':180,1135,1532,2630 'key':1239,1542,1673,1698,1723,1903,1906,1993,2010,2047 'know':1006,1396,2615 'l':875 'languag':1210 'later':635 'latest':455,464,500,505,558,563,582,588,594,650,656,662,767 'leav':1586 'let':755,1757,2613,2775 'level':1620 'like':36,450,606,738,1783,1986,2176,2257,2673 'line':1900 'link':623,625 'list':356,372,1537,1668 'll':262,458,896,1731,1796,2020 'load':1402,1610,1625 'locat':345,668,680,789,1032,1170,1242,2689,2743 'locator.extract':1180 'logic':1028,1325,1337 'look':400 'loops/math/conditionals':1265 'made':2015 'magic':624 'make':949,1465 'manag':478,573,643,1819,1828,1964,1976,1989,2158,2193,2340,2424,2521,2648,2684 'mani':1328 'manual':2081,2779 'markdown':1145 'match':302 'may':718,933,1590 'mcp':129,2114,2125,2133,2181,2230,2410,2413,2489 'messag':2514 'method':1164 'migrat':24 'minim':1261 'minut':722 'modul':686,711 'move':157,791,796,2607 'multi':1195 'multi-step':1194 'must':413,1243,1251 'name':317,321,327,859,862,865,868,906,909,912,915,1684,2400 'natur':758,1209 'navig':485,2279 'near':1023,1088 'nearbi':1070 'necessari':2579 'need':700,890,1478,1774,2568 'never':2065 'new':22,2591 'next':160,1737,1926,2415,2610 'node':685,710 'none':1086 'normal':2546 'notif':1519 'npm':460,496,497,559,577,578,645,646,2196,2197,2341,2342,2425,2649 'npm-shrinkwrap.json':484 'o':861,864,867,908,911,914 'offer':2767 'offload':1264 'one':1068,2167 'one-shot':2166 'op':1199 'open':1884 'option':126,630,1514,1547,1579,1835,1854,1941,1960,2115,2126,2486 'order':212,626 'otherwis':1588 'otp':620,1221 'outsid':2544 'packag':477,572,642,2157,2192,2339,2423,2520,2640,2645,2647,2683,2726,2771 'package-lock.json':483 'package-manager-appropri':2191 'package.json':353,402,548,774,2773 'page':1169,1192,2317,2323,2326,2331 'page.extract':1178 'page.getlocatorsbyai':1204 'page.goto':2319 'parent':312,1060,1077 'password':1557 'path':871 'pattern':301 'permiss':84,104,109,2463,2466,2552,2595,2659,2686 'pipelin':2005 'place':1114 'placement':1027,1324,1336 'playwright':11,44,47,60,115,120,128,202,249,258,278,285,381,390,394,406,424,440,471,499,504,509,518,821,829,921,1147,1225,1311,1604,1623,2113,2124,2132,2180,2229,2344,2350,2355,2372,2377,2401,2412,2427,2431,2435,2473,2488 'playwright.config':2039 'playwright.config.js':1458 'playwright.config.mjs':1460 'playwright.config.ts':334,1275,1437,1444,1457,1635,1696 'playwright.config.ts/js':333 'playwright/mcp':2200,2205,2211,2216 'playwright/test':26,349,404,463,778,797,835,846,876,929,1158,1490,1501,1523,1649 'pleas':1832,1866,1972 'pnpm':501,502,589,590,657,658,664,676,692,703,727,750,756,763,2201,2202,2347,2348,2429,2650,2736,2758 'pnpm-lock.yaml':481 'point':89,2470 'pointer':1140 'possibl':1123 'power':1185 'practic':1285 'pre':2586 'pre-exist':2585 'prefer':1235,2785 'preserv':1468 'prior':1259 'problem':2553 'proceed':176,374,521,741,814,935,978,1430,1739,1785,1846,1953,2060,2106,2233,2294,2597 'process':74,270,2531 'process.env.ci':1658,1660,1664 'process.env.secret':1556 'process.env.stably':1540,1544,1671,1675,2045,2049 'product':2140 'production-readi':2139 'progress':179,2496,2612 'project':23,206,291,491,725,852,1064,1105,1150,1345,1363,1516,1545,1582,1615,1676,1683,1726,1892,1909,1912,1980,2013,2050 'project-wid':851 'projectid':1543,1674 'prompt':757,1172,1179,1181,1191,1205,1250 'properti':1517 'protect':2083 'provid':1863,2021,2052,2073,2368,2511,2697 'question':243 're':138,187,1950,2619,2636 'read':1296,1331,1612,1719,2066 'readabl':1248 'readi':236,735,2141,2292 'receiv':1216 'recommend':1794 'refer':1144,1257,1278,1405 'reinstal':713,761 'relev':2054 'remov':707 'repeat':2724 'replac':119,820,828,927,1156,1314,1480,1510,2479 'report':30,361,419,878,953,1453,1527,1530,1534,1536,1667,1708,2359,2406,2625 'requir':106,446,1571,1712,2541 'resolv':2695 'result':2360,2439 'retri':762,1659,2725 'right':1031 'root':492,1065,1106,1110,1346,1364,1616,1619,1893 'root-level':1618 'rule':92,96,986,995,1000,1126,1240,1301,1342,1356,1379,1388,1414,1422,2396 'run':130,459,494,702,749,944,1291,1767,2169,2190,2239,2247,2260,2283,2333,2418,2491,2675,2703,2713,2750,2777,2787 'runtim':2018 'schema':1182 'scope':1128 'scratch':717 'screenshot':1189,1681 'scrub':1548 'sdk':3,12,19,41,48,61,203,259,432,529,537,599,612,812,999,1013,1148,1277,1300,1312,1355,1372,1378,1398,2128,2289,2314,2373,2381,2385,2389 'search':280,289,854 'secret':1818,1827,1963,1977,1988 'section':1081,1313,1373,1566 'sed':918 'see':421,2740 'select':1232 'self':1254 'self-contain':1253 'sensit':1549,2084 'sensitivevalu':1555 'servic':1985 'set':199,339,1473,1732,1790,1814,1859,2268,2762 'setup':4,6,37,49,55,250,260,279,984,993,1745,1753,1947,1971,2026,2035,2059,2098,2374,2547 'shot':2168 'show':135,665,1797,2327,2495 'signatur':1282 'signup':1222 'similar':241 'simpl':1229,2276 'sinc':1603 'size':726 'skill':15,1294,1302,1357,1380 'skill-stably-sdk-setup' 'skip':1806,1945,2224,2232 'someth':2543,2590 'sometim':2682 'soon':225 'source-stablyai' 'spec.js':308,866,910 'spec.ts':306,860,907 'specif':2058,2737 'stabli':2,10,18,29,38,40,46,59,201,257,431,528,536,610,811,998,1080,1146,1299,1310,1354,1371,1377,1397,1449,1515,1526,1573,1714,1721,1725,1761,1772,1869,1901,1908,2008,2012,2127,2149,2313,2329,2371,2380,2387,2405,2441 'stably-sdk-rul':1298,1353,1376 'stably-sdk-setup':1 'stably-verification.spec.ts':2346,2352,2357 'stably.ai':2281 'stablyai':923 'stablyai/email':613,649,655,661,1215 'stablyai/playwright-test':540,545,562,581,587,593,766,932,967,1152,1162,1273,1497,1504,1645,1704,2311 'stablyreport':1271,1495,1538,1643,1669,1705 'start':214 'static':1233 'status':383,392,520 'stay':1521 'step':101,142,152,167,185,189,210,222,244,268,271,376,378,385,513,523,525,531,806,816,818,824,971,980,982,989,1040,1196,1260,1384,1432,1434,1439,1693,1738,1741,1743,1749,1808,1927,1955,2062,2100,2108,2110,2119,2226,2236,2237,2243,2251,2416,2458,2500,2603,2617,2621 'stop':436,670,2556,2661 'store':667,679,2657,2688,2742,2761 'structur':775,2524 'style':2165 'subdirectori':1600 'succeed':155 'success':760,769,2605 'suffici':1238 'suit':2143 'summari':516,809,1022,2365,2370,2376 'take':719,2145 'task':35,194 'templat':1639 'termin':2681 'test':123,133,282,298,322,344,358,369,488,603,615,832,841,887,958,962,974,1025,1036,1043,1045,1073,1090,1095,1101,1120,1131,1369,1410,1768,1895,2142,2241,2249,2263,2277,2285,2303,2308,2312,2335,2345,2351,2356,2392,2420,2428,2432,2436,2451,2482,2494 'test-writ':1130 'test.js':307,869,916 'test.ts':305,863,913 'testdir':338,1653 'tests/example.spec.ts':893 'tests/login.spec.ts':894 'thin':1020,1137 'throughout':2529 'tool':127,1330,2135,2487 'topic-agent-skills' 'trace':1247,1552,1562,1569,1574,1679,1710,1715 'track':178,2611 'tree':1212 'tri':2719,2755 'trigger':33 'true':1656 'ts':1485,1492,1535,1567 'type':323,329,857,1920 'typescript':1640,2306 'typescript/javascript':2522 'ui':1177 'undefin':1666 'unexpect':2533,2741 'unless':103 'updat':892,897,939,954,977,1445,1697,2394,2403 'upgrad':114,452,469,556,2472 'upload':1554,1575,1716 'use':13,300,318,569,902,1011,1034,1151,1167,1208,1244,1268,1347,1448,1565,1568,1584,1678,1686,1821,1983,2044,2155,2336 'user':67,181,197,228,675,747,1470,1842,1930,1967,2029,2077,2088,2184,2297,2363,2517,2614,2631,2669,2748 'valu':1550 'var':1729 'variabl':1831,2001 'vault':1829,1991,1994 've':1917,1934,2712 'verif':132,622,2240,2248,2262,2315,2493 'verifi':393,771,951,960,2287,2601 'version':117,397,412,417,425,434,441,442,456,554,693,2378,2382,2475 'via':1406 'view':2438 'visual':1173 'wait':465,742,940,1840,1928,2027,2182,2295,2706 'welcom':255 'went':2561 'whether':2581 'wide':853 'wildcard':319 'without':216,752,2460,2732 'work':98,2291,2454,2629 'worker':1663 'workflow':1197 'would':448,604,736,1781,2174,2255,2671 'write':1132,1409,2068 'wrong':788,2562 'www.stably.ai':2320 'x':190,2622 'xarg':917 'y':753 'y/n':733 'yarn':506,507,583,584,651,652,2206,2208,2212,2214,2353,2354,2434,2651 'yarn.lock':482 'yes':637,2189,2300 'yes/no/skip':2187","prices":[{"id":"fb9007d8-0156-4298-8fc3-855ba39c386f","listingId":"d987358b-7603-46bd-a746-2a2572fb0489","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"stablyai","category":"agent-skills","install_from":"skills.sh"},"createdAt":"2026-05-18T13:22:56.306Z"}],"sources":[{"listingId":"d987358b-7603-46bd-a746-2a2572fb0489","source":"github","sourceId":"stablyai/agent-skills/stably-sdk-setup","sourceUrl":"https://github.com/stablyai/agent-skills/tree/main/skills/stably-sdk-setup","isPrimary":false,"firstSeenAt":"2026-05-18T13:22:56.306Z","lastSeenAt":"2026-05-18T19:15:07.355Z"}],"details":{"listingId":"d987358b-7603-46bd-a746-2a2572fb0489","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"stablyai","slug":"stably-sdk-setup","github":{"repo":"stablyai/agent-skills","stars":6,"topics":["agent-skills"],"license":null,"html_url":"https://github.com/stablyai/agent-skills","pushed_at":"2026-04-15T08:16:48Z","description":"AI agent skills for the Stably Playwright SDK.","skill_md_sha":"6e940c1d1fca404f3be2d80d8b4d85e7ab13373c","skill_md_path":"skills/stably-sdk-setup/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/stablyai/agent-skills/tree/main/skills/stably-sdk-setup"},"layout":"multi","source":"github","category":"agent-skills","frontmatter":{"name":"stably-sdk-setup","license":"MIT","description":"Expert setup assistant for the Stably Playwright SDK. Use this skill when\ninstalling Stably SDK in a new project, migrating from @playwright/test,\nor configuring Stably reporter for CI/CD. Triggers on tasks like \"setup\nstably\", \"install stably sdk\", or \"configure playwright with stably\"."},"skills_sh_url":"https://skills.sh/stablyai/agent-skills/stably-sdk-setup"},"updatedAt":"2026-05-18T19:15:07.355Z"}}